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

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

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

Создание рабочей среды для приложения

Прежде чем углубиться в программирование, необходимо понять финальную цель разрабатываемого проекта: создание простого веб-кошелька для использования в сети Ethereum. Уже написан контракт, который необходимо тестировать, для обзора проведенных транзакций будем использовать веб-сайт. Созданный контракт может получать эфир от любого пользователя сети, как банковский счет. Но лишь некоторые пользователи могут отправлять эфир. Один из пользователей всегда может распоряжаться эфиром - это владелец счета. Другие пользователи могут подключаться к счету и тоже отправлять эфир. Владелец счета может наделять других пользователей правами по распоряжению эфиром или лишать их таких прав.

Веб-сайт отображает баланс и пользователей, способных распоряжаться эфиром. На второй странице будет отображаться список всех событий, запрограммированных в Angular 1. Для программирования основного кода используем среду Truffle, установленную локально. Пользуясь материалами предыдущей лекции, необходимо настроить Truffle для работы с Angular. Затем напишем контракт, а после этого проведем ряд тестов с помощью инструментов Ethereumjs-Testrpc и Ether-Pudding в среде Mocha, включенную в Truffle. Далее напишем HTML-код для веб-страницы и протестируем код JavaScript. Научимся отслеживать возникающие события и отображать баланс счета и другую информацию на нашем веб-сайте. В конечном итоге разместим контракт в реальном блокчейне.

Разработка ведется локально. Добавляем новый каталог Truffle с названием truffle2. В настоящий момент он пуст. Инициализируем стандартный проект Truffle, чтобы начать разработку с нуля. Стандартный проект Truffle инициализировался в этом каталоге.


Откроем его в среде разработки. Обратим внимание на четыре каталога: app, contracts, migrations и test.


Первым делом стоит добавить поддержку Angular, для чего необходимо инициализировать bower. Справа открыта командная строка Git Bash, а слева - обычная командная строка Windows. Использование командной строки обусловлено тем, что инструменту bower необходима интерактивная оболочка.


Bower запустился.


Вносим некоторые коррективы для установки зависимых объектов в подходящие каталоги. Это можно сделать путем редактирования файла bowerrc.


В нем можно добавлять каталоги и определять каталоги для установки компонентов Bower. Выберем подкаталог в каталоге app, bower_components.



Теперь можно устанавливать Angular.


Включим Angular в файл truffle.js.


Остальной код JavaScript можно оставить без изменений. Теперь перейдем в контракт и начнем его создание. Для начала удалим MetaCoin, а также ConvertLib.


Создадим SimpleWallet


Зададим адрес в сети Ethereum, который будет считаться владельцем счета. Для определения, какие пользователи могут распоряжаться эфиром на счете, будем использовать специальную ассоциацию. А владелец будет назначен, как только кошелек будет создан. Нужно будет получить доступ к глобальной переменной msg, а объект-отправитель sender получит по умолчанию значение того пользователя, который создал кошелек.

Кроме того, запланировано наличие нескольких событий. Одно событие, Deposit, будет ассоциировано с зачислением эфира на счет, а другое, Withdrawl, со списанием эфира.


Закончив разработку контракта, перейдем к описанию реализации различных функций. Рассмотрим наш конструктор.


Как только кошелек будет создан, владелец счета будет определен по значению переменной msg.sender, так что становится известно, кто создал этот контракт. Анонимная функция вызывается каждый раз, когда контракт получает эфир или вызывается без передачи эфира или выполнения какой-либо функции. В этом случае производится проверка, является ли отправитель сообщения, msg.sender, владельцем (owner), или находится в списке пользователей, способных распоряжаться эфиром, и затем выдается разрешение на перечисление эфира. Кроме того, создается событие Deposit, которому сообщаются значения переменных msg.sender и value. Функция sendFunds используется, когда пользователь, наделенный правами распоряжаться эфиром, отправляет средства. Для ее работы необходимо задать количество и получателя эфира. Напомним, что отправкой эфира могут распоряжаться только пользователи с соответствующими правами, что проверяется совпадением отправителя сообщения с владельцем счета или наличием отметки "true" напротив его адреса в соответствующей ассоциации. Затем производится проверка достаточности баланса, и в случае успеха средства отсылаются получателю. Если что-то пошло не так, создается исключение, и все действия возвращаются до изначального состояния, затем создается событие, а веб-сайт отображает новую величину баланса. Наконец, есть еще несколько функций поменьше. С помощью первой, allowAddressToSendMoney, предоставляем новому адресу права распоряжаться эфиром на счете, и изменяем отметку напротив этого адреса в соответствующей ассоциации на "true". Вторая, disallowAddressToSendMoney, является функцией проверки, возвращающей булево значение. Третья функция называется killWallet. Она проверит, что пользователь, вызывающий эту функцию, является владельцем кошелька, уничтожит контракт и вернет все оставшиеся средства владельцу.

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

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