Опубликован: 28.01.2018 | Доступ: свободный | Студентов: 924 / 143 | Длительность: 06:54:00
Лекция 5:

Использование возможностей библиотеки Web3 и среды разработки Truffle

< Лекция 4 || Лекция 5: 123456

Обнаружение событий и реагирование на них

В этой лекции разберем схемы работы с событиями. Откроем среду разработки. Преимущественно будем работать с файлом 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

< Лекция 4 || Лекция 5: 123456
Алексей Миронов
Алексей Миронов

Здравствуйте, сколько стоит курс Работа с Ethereum?