Создание смарт-контрактов Solidity для блокчейна Ethereum. Практическое руководство
Шрифт:
Поле chainId содержит идентификатор блокчейна. Он используется для защиты от репликации, т.е. от неавторизованных действий пользователей, пытающихся действовать от имени настоящего отправителя данных.
Если речь идет о главной сети Ethereum, то ее идентификатор равен 1. Идентификатор тестовой сети Rinkeby равен 4. При создании нашей приватной сети мы можем указать любое значение, отличное от известных. Мы выбрали значение 1999.
Значение 0 в поле homesteadBlock указывает на то, что мы будем использовать релиз сети Ethereum под названием Homestead. Homestead
Немного о параметрах с префиксом EIP. При реализации Homestead был обновлен протокол, причем без обратной совместимости с предыдущим релизом Ethereum. Соответствующие изменения отражены в документах «Предложения по улучшению Ethereum» (Ethereum Improvement Proposals, EIPs), опубликованных на сайте https://eips.ethereum.org/.
Реализация изменений может потребовать выполнения так называемой процедуры хардфорка (hard-forking), или обновления ПО узлов. В результате этой процедуры может меняться структура блока, появляется возможность использовать ранее недоступные блоки и вносить различные изменения в протокол.
Так как мы не будем делать хардфорк, то установим значения соответствующих параметров eip155Block и eip158Block равными нулю.
Параметр difficulty важен для нас в практическом смысле. Этот параметр имеет прямое влияние на время генерации новых блоков блокчейна. Для нашего «учебного» блокчейна мы установим очень маленькое значение этого параметра, равное 10, чтобы скорость добавления новых блоков была приемлемой даже на виртуальных серверах небольшой производительности.
С помощью параметра gasLimit мы задаем в рамках блокчейна предел расхода так называемого газа (Gas). Газ Ethereum представляет собой расходный ресурс, который тратится на выполнение таких операций, как отправка транзакций, публикация и выполнение контрактов и т.п. Далее мы расскажем об этом подробнее. В нашей приватной тестовой сети мы устанавливаем достаточно большое значение, чтобы не возникали ограничения при запуске тестовых программ.
Параметр alloc позволяет при инициализации блокчейна создать кошельки и заранее наполнить их тестовым эфиром. В первых примерах мы не будем использовать эту возможность.
Создаем каталог для работы
Создайте в домашнем каталоге подкаталог node1:
В этом каталоге будут располагаться данные блокчейна.
Создаем аккаунт
Теперь перейдем к созданию нашего приватного блокчейна. Прежде всего войдите в домашний каталог пользователя book и создайте новый аккаунт:
При создании аккаунта будет запрошен пароль, который нужно сохранить в безопасном месте:
Команда account new выведет на консоль в фигурных скобках так называемый адрес узла. В нашем случае это адрес 4f744742ac711fd111c7a983176db1d48d29f413. Мы будем указывать его в различных командах.
Параметр datadir команды geth указывает путь к рабочему каталогу. Мы используем каталог /home/book/node1.
Запускаем инициализацию узла
После создания аккаунта нам нужно выполнить инициализацию узла, выполняем ее из домашнего каталога пользователя book:
Здесь мы с помощью параметра datadir должны указать путь к рабочему каталогу, а в параметре init – путь к файлу первичного блока genesis.json.
Команда выполнит инициализацию и выведет на консоль результаты своей работы:
Для работы с узлом вам нужно будет открыть две консоли, подключившись в каждой консоли пользователем book.
Чтобы запустить узел, выполните в первой консоли следующую команду: