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

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

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

Пример приложения, которое должно было получиться

В данной лекции будет проведен полный обзор распределенного приложения. Загрузим приложение в частную сеть. Но перед этим развернем саму частную сеть, как делали в предыдущих лекциях, и воспользуемся командой truffle migrate для размещения приложения в блокчейне, а затем применим команду truffle serve для работы с приложением в частной сети.

Открываем две консоли на своем компьютере под управлением Windows. Слева открыта командная строка Windows, а справа - Git Bash. Специально проводим демонстрацию на системе Windows, поскольку настройка частной сети в этой среде несколько более проблематична, чем в Linux или OS X. Если вы работаете в OS X, потребуется только открыть консоль, установить менеджер программных пакетов для узлов сети Ethereum и среду Truffle. В командной строке перейдем в каталог, где расположен Geth.


Предварительно загрузили изначальный файл JSON для генерации блокчейна. Этот файл можно найти на веб-сайте http://github.com/ethereum/go-ethereum/wiki/Command-Line-Options, он расположен в самом низу страницы, откуда его легко скопировать.


Теперь используем команду для инициализации изначального узла. Создадим первый блок. Теперь запустим Geth с поддержкой HTTP и RPC. Обратите внимание, что в качестве одного из параметров указан datadir, показывающий Geth, в каком каталоге создавать узел сети. Создали узлы IPC и HTTP. Теперь перейдем во вторую консоль. Мы находимся в том же каталоге, но по некоторым причинам, связанным с работой моего компьютера под управлением Windows, я вынужден использовать командную строку для работы с Geth. Подключим Geth к нашему узлу.


Первое, что необходимо сделать после подключения к частной сети - это создать несколько счетов. Зададим пароль, скажем, test123, и после этого основной счет для хранения эфира автоматически подключается к этому счету. Теперь можно начать майнинг. Запустим процесс командой miner.start().


Теперь контракты в этой сети будут обсчитываться, и можно размещать в ней нужный нам код. Откроем третью консоль. Перейдем в ней в каталог, в котором ведется работа с Truffle, в нашем случае это /c/ethereum/truffle2. Теперь попробуем выполнить миграцию проекта Truffle. Она должна завершится неудачей, поскольку предварительно нужно разблокировать счет. Тем не менее, стоит продемонстрировать, что происходит в этом случае. Truffle попробовала смигрировать контракты, но попытка оказалась неуспешной, получили сообщение об ошибке, связанной с блокировкой счета - "Error: account is locked".


Поэтому необходимо разблокировать счет. Воспользуемся командой personal.unlockAccount(eth.coinbase), то есть выберем для разблокировки основной счет. Введем пароль, и после того, как консоль ответит "true" (что ожидается, если пароль был указан верно), станет возможным размещение контракта в блокчейне.


Если было получено еще одно сообщение об ошибке вида quot;Exceeds block gas limit quot;, обратите внимание на верхний предел объема газа для контрактов. Это можно узнать с помощью команды eth.getBlock('latest') - видно, что в данном случае верхний предел газа составляет около трех миллионов шестисот тысяч единиц газа.


Если вы получите такое сообщение об ошибке (что маловероятно при размещении контракта в реальном блокчейне), отредактируйте верхний предел объема газа в файле truffle.js.


Попробуем снова. В этот раз размещение контракта в блокчейне прошло успешно.


Теперь отдадим команду truffle serve. Truffle попытается произвести сборку проекта, а затем создаст HTTP-сервер с открытым портом 8080 для взаимодействия с ним. Узел Geth работает в фоновом режиме и может подключиться к серверу, после чего возможно действовать так же, как и при работе с реальным блокчейном, но в тестовой сети. Компиляция прошла без ошибок, и можно отправиться на веб-страницу http://localhost:8080.


Перед нами веб-кошелек. Сейчас на балансе нет эфира. Отображается адрес кошелька, массив ABI (на случай, если потребуется добавить дополнительный контракт в кошелек), и единственный счет, авторизованный на распоряжение эфиром, он же - владелец кошелька.


Создадим второй счет с помощью команды personal.newAccount(). Теперь два счета, и второй из них не уполномочен распоряжаться эфиром из кошелька.


Давайте добавим в кошелек средств, внесем сорок единиц эфира с первого счета. Это действие создало событие, рассказывающее о зачислении средств, и на счету теперь сорок единиц эфира.



Отправим средства на второй адрес, например, четыре единицы эфира. Вероятно, для этого придется разблокировать основной счет (он автоматически блокируется чаще, чем хотелось бы).


Теперь посмотрим на список событий. Видно, что была отправка четырех единиц эфира на второй счет, это же отражено и в журнале событий.


Итак, мы продемонстрировали снятие и зачисление средств. Теперь наделим счет правами распоряжаться эфиром (потребуется немного времени на обсчет соответствующего блока). Теперь оба счета могут распоряжаться средствами в кошельке. Разумеется, можно отозвать ранее предоставленные права.


Вот так работает веб-кошелек. Можно отправлять средства контракту, который может хранить их у себя, а с помощью нехитрой логики можно определять, кто наделен полномочиями распоряжаться средствами на счете, выводить их или отправлять другим пользователям сети.

Следующие шаги после окончания курса

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

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

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