Взаимодействие со смарт-контрактом из Java-приложения (We3j)

У меня много вопросов по рабочему процессу (последовательности) взаимодействия со смарт-контрактом из Java-приложения, поэтому я сначала объясню, что я сделал, а затем задам свои вопросы, и если что-то не так в моем понимании, пожалуйста, дайте мне знать.

1- Я написал смарт-контракт 2- Используйте трюфель, чтобы получить java-оболочку смарт-контракта (contract.java) 3- Используйте testrpc для тестирования контракта

У меня есть 2 класса, использующие учетные записи testrpc (учетные данные) для взаимодействия со смарт-контрактом и вызова его функций.

Каждый класс (node1.java, node2.java) вызывает функцию в смарт-контракте, называемую (send), для отправки своих данных в цепочку.

Я добавил событие, которое срабатывает, если 2 узла отправили туда данные.

Чего я не понимаю, так это того, как я могу позволить java-коду (скажем, MainProgram.class) всегда проверять это событие. Поскольку мне нужно проверить, отправляют ли оба узла свои данные, я вызову другую функцию для анализа этих данных.

Как я могу управлять, контролировать и проверять, какие транзакции были выполнены или нет, я имею в виду, как я могу использовать события в коде Java и позволить коду работать вечно и проверять, произойдет ли это событие, выполните действие.

Надеюсь, я могу ясно объяснить, что мне нужно

Заранее спасибо.

Просто добавьте еще одну вещь, если я правильно понимаю, и мне нужен класс MainProgram для управления и проверки событий, тогда мне нужно использовать одну из учетных записей testrpc для запуска этого кода. Это означает, что эта программа считается узлом в цепочке и играет роль менеджера сети, поэтому смарт-контракт не является элементом управления !!
Я не разработчик Java, но посмотрите, даст ли вам этот ответ здесь ethereum.stackexchange.com/a/41534/20357 какое-то представление.

Ответы (1)

В вашей Java-оболочке для каждого типа события в вашем SmartContract будет функция, которая выглядит так:

public Observable<ApprovalEventResponse> approvalEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {

            ...                

            return typedResponse;
        }
    });
}

Вы можете подписаться на этот наблюдаемый из своего кода Java следующим образом:

contract.approvalEventObservable(DefaultBlockParameter.valueOf("Earliest"),DefaultBlockParameter.valueOf("Latest")).asObservable().subscribe( event ->{
    System.out.prtinln(event._approver);
});

Это будет воспроизводить все произошедшие события и печатать атрибуты предыдущих событий, а также печатать новые события, когда они происходят.