Ethereum: Как запустить ноду с приватной сеткой

Для разработки тестирования под Ethereum вместо публичной удобнее использовать не публичную сеть, пускай даже и тестову, а свою — приватную (Private Network). Для этого достаточно установить на свою рабочую станцию пакет с бинарником ноды (geth) и создать один конфигурационный файл (genesis file) с описанием новой сети.

Далее на примере описывается процесс инсталяции и первоначальной конфигурации приватной Ethereum сети из одной ноды для Ubuntu 16.04. Актуально как мининум для geth 1.6.7-stable-ab5646c5

Итак..

Устанавливаем geth

Genesis-файл и первоначальная загрузка

(По мотивам Private Network — ethereum/go-ethereum)

Блокчейн — цепочка блоков, у неё есть начало — первый блок, с которого всё и начинается. Собственно, genesis-файл содержит описание, как его создавать.

Создаём genesis-файл со следующим содержимым:

(описания полей в файле могут быть найдены в Beginners guide to Ethereum (3) — explain the genesis file and use it to customize your blockchain)

Hint: gasLimit лучше задрать повыше (100500000000 стопицот миллионов?), иначе при деплое очередного умного контракта требуемое количество gas может привысить этот лимит и с деплоем ничего не получится.

Тут необходимо определиться с тем, где у нас будет директория с данными блокчейна. Пусть это будет ./private-chain-data/.

Следующая команда в указанной директории создаёт все необходимые файлы для работы Ethereum ноды:

Запуск ноды

но настроек по умолчанию не всегда бывает достаточно, поскольку с нодой может захотеться взаимодействовать через WebSocket или через RPC, сделав при этом доступным тот или иной API:

тут мы запустили ноду с RPC на порту 8080 отличном от значения по умолчанию (8545) и WebSocket’ами на порту по умолчанию (8546), и открыли доступ к некоторым интерфейсам.

Описание этих и других параметров geth можно посмотреть тут.

Запуск javascript-консоли

Консоль — это то место, где посредством Ethereum JavaScript API можно напрямую взаимодействовать с нодой. Ниже будет пару примеров.

И так, можно при запуске ноды указать, что нужна консоль:

Но это не всегда удобно.

Следующей командой можно прицепится к уже запущенной ноде по HTTP:

Либо по IPC-протоколу:

Тестовый аккаунт с предопределённым балансом

Иногда при тестировании удобно сразу иметь адрес с ненулевым балансом. Далее описывается, как этого достичь.

В javascript-консоли:

Получившуюся строку вставить в genesis.json, указав необходимое значение для баланса:

Поскольку было изменено описание первоначального блока, просто так подсунуть этот файл в  geth init повидимому не удастся.

Поэтому:

  1. Остановить запущенный geth-процесс
  2. Удалить из ./private-chain-data/  всё кроме папки keystore/там лежит в том числе и закодированный приватный ключ только что созданного адреса
  3. Запустить geth init, как это проделывалось ранее
  4. Запустить geth

Через javascript-консоль теперь можно проверить наличие аккаунта и непустого у него баланса:

 

Но, в принципе, можно не усложнять, а просто намайнить тестовой криптовалюты самостоятельно. См. ниже.

Miner

Чтобы тестовый блокчейн наконец заработал, необходимо чтобы кто-то валидировал транзакции и ковал блоки — майнер.

Майнера можно запустить из javascript-консоли:

Цифра в скобках обозначает количество доступных для майнера тредов.

Так, если кроме валидации транзакций, необходимо, чтобы где-нибудь накапливалась валюта, в консоли укажите соответствующий адрес:

Остановить (например, чтобы комп не гудел вентиляторами охлаждения процессора) майнера можно так:

Второй вариант: запустить geth в роли майнера:

В коммандной строке можно так же указать во сколько тредов запускать майнера, и на какой адрес зачислять намайненное.

***

Для начала этого бесхитростного введения вполне достаточно.

 

Источники: