Здравствуйте, сколько стоит курс Работа с Ethereum? |
Использование возможностей библиотеки Web3 и среды разработки Truffle
Обнаружение событий и реагирование на них
В этой лекции разберем схемы работы с событиями. Откроем среду разработки. Преимущественно будем работать с файлом events.html и контроллером ShoweventsController. Для начала необходимо определить, с каким контрактом будем работать. Укажем SimpleWallet.deployed().
Теперь прервемся и посмотрим, где можно ознакомиться с документацией по работе с событиями в среде Web3. Есть два важных способа работы с событиями, которые будут реализованы в этом приложении. Одной из важнейших функций является allEvents.
Ее можно вызывать прямо из контракта. Затем можно следить за событиями с помощью команды events.watch, а после получения необходимой информации отслеживание можно остановить с помощью команды stopWatching(). Это первый метод, который используем. Находясь в контракте, можно получить список всех событий с помощью команды _myContract.allEvents(). После этого можно запустить отображение событий, events.watch, что позволит создать описание ошибки error или результат result, а затем отобразить результат в консоли.
Теперь в кошельке на странице с журналом событий в консоли отображается одно событие списания средств.
Разумеется, необходимо отображать здесь полный список событий, начиная с самого первого блока. Для этого нужно еще немного отредактировать код. Необходимые параметры для отображения всех событий можно найти в документации.
Посмотрим, что происходит в кошельке. Видим, что произошло два события по зачислению средств, и одно - по списанию.
Информация по списанию средств также отображается и на главной странице. Теперь займемся отображением этих событий. Необходимо будет добавить информацию о них в отображаемый контент. Однако следует помнить, что планировали отслеживать все события, и когда покинем контроллер, то события все равно продолжат отслеживаться в фоновом режиме. Разумеется, стоит прекратить отслеживание событий, как только покинем контроллер. При покидании контроллера Angular создает событие под названием destroy. Данное событие можно отследить, и как только оно создастся, останавливаем отслеживание остальных событий.
Перейдем к файлу events.html. Укажем, откуда брать контент для отображения (ourEvents) , как отображать название события (Name: {{event.event}}) и объем эфира (Amount: {{event.args.amount}}).
Посмотрим, что произойдет при перезагрузке страницы.
Мы видим два события по зачислению средств и одно - по списанию.
Если открыть ту же страницу в новой вкладке и отправить средства в кошелек, например, две единицы эфира, видно, что это событие мгновенно отображается в списке событий.
Если есть потребность отслеживать одно конкретное событие, это также можно реализовать. С документацией на эту тему можно ознакомиться wiki-пространстве.
Потребуется имя контракта и имя события. Можно встроить фильтр значений для более точного поиска. Затем включен тот же метод отслеживания событий, а после получения и обработки нужной информации можно остановить отслеживание. При работе в сети testrpc стоит проявлять осторожность. Порой события не описаны надлежащим образом, и это может приводить к некорректному отображению. Однако в реальном блокчейне никаких проблем с обработкой событий не наблюдается.
Выполним сходные процедуры для событий по начислению средств.
Но на этот раз вместо использования объекта событий events и наблюдения за его созданием применим мгновенный вызов функции обратного вызова. Рассмотрим функцию depositEvents. Для этой функции нет каких-либо фильтров, она работает с первого блока (fromBlock: 0) до текущего (toBlock: 'latest') и обращается к функции обратного вызова. Теперь отобразим полученное значение на странице ($scope.ourDepositEvents.push(result) и $scope.$apply()). При выходе из контроллера, как и в прошлом случае, остановим отслеживание событий.
Посмотрим, как это все работает в приложении. Как видно, в списке All Events перечислены все события.
К сожалению, в сети testrpc события по списанию средств отображаются как события по зачислению средств. Позднее проверим, не повторяется ли это поведение при работе с реальным блокчейном.
Задание №4: Использование возможностей библиотеки Web3 и среды разработки Truffle
Создайте контракт в среде Truffle и реализуйте его функционал на основе разрешений. Контракт должен быть способен вызывать функции allowAddressToSendMoney и disallowAddressToSendMoney