Инструкция по развертыванию частной сети Ethereum

 

Всем привет! Данная статья содержит описание процесса установки и настройки приватной сети Ethereum на ОС Ubuntu 16.0.4. Надеюсь кому-нибудь пригодится!   

Установка компонентов из PPA   

Для установки софта необходимо выполнить следующие команды:   

sudo apt-get install software-properties-common

sudo add-apt-repository -y ppa:ethereum/ethereum 

sudo apt-get update 

sudo apt-get install ethereum   

В пакете ethereum также содержится консольный интерфейс Geth, необходимый для работы с сетью.  

Создание Генезиса   

После установки всех необходимых пакетов, необходимо перейти к формированию Генезиса. Генезис – Самый первый блок в цепочке блокчейн, всегда заполняется вручную, даже в реальной сети.   

Создадим файл genesis.json выполнив следующую команду:   

sudo nano genesis.json   

Запишем в файл следующие параметры:   

{ "nonce": "0x0000000000000042", 

"timestamp": "0x0",   

"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x0", 

"gasLimit": "0x8000000", 

"difficulty": "0x400", 

"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x3333333333333333333333333333333333333333", 

"alloc": { } }     

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

mixhash, nonce – Параметры, используемые в технологии the Proof-of-Work (PoW). Они подтверждают проведение требуемого количества вычислений для блока 

Coinbase – бенефициарий. Требуется для корректной работы системы расчета вознаграждения при генерации новых блоков.   (Для реального проекта параметры необходимо изменить, т.к. приведенные  настройки подвергают сеть взлому.)  

Запуск node и инициализация genesis     

Перед запуском нескольких узлов эфира необхоимо  убедиться, что:   

  • каждый экземпляр имеет отдельный каталог данных (--datadir)   
  • каждый экземпляр работает на разных портах (both eth and rpc) (--port and —rpcport)   
  • в случае кластера экземпляры должны знать друг о друге ipc endpoint должны быть уникальными или ipc интерфейс должен быть выключен (--ipcpath or —ipcdisable)     

Подробности и информацию по флагам можно посмотреть на ГитХабе.        

Инициализация блока genesis для первой ноды (node1):     

geth --identity "Billing1" --rpc --rpcport "8082" --rpccorsdomain "*" --datadir "/home/maxim/project/network/node2" -- ipcdisable --port "30302" --rpcapi "db,eth,net,web3" --networkid 1999 init /home/maxim/project/network/genesis.json     

В итоге выполнения команд получаем следующий результат:       

I1212 14:31:04.487121 cmd/geth/chaincmd.go:131] successfully wrote genesis block and/or chain rule set:   6650a0ac6c5e805475e7ca48eae5df0e32a2147a154bb2222731c770ddb5c158     

Инициализация блока genesis для второй ноды (node1node2 (необходимо выполнят на другом терминале Ctrl+Alt+t):       

geth --identity "Billing2" --rpc --rpcport "8083" --rpccorsdomain "*" --datadir "/home/maxim/project/network/node3" -- ipcdisable --port "30303" --rpcapi "db,eth,net,web3" --networkid 1999 init /home/maxim/project/network/genesis.json     Результат:   I1212 14:31:04.487121 cmd/geth/chaincmd.go:131] successfully wrote genesis block and/or chain rule set: 6650a0ac6c5e805475e7ca48eae5df0e32a2147a154bb2222731c770ddb5c158

Запуск нод и клиента       

Запускаем первую ноду:

geth --identity "Billing1" --rpc --rpcport "8082" --rpccorsdomain "*" --datadir "/home/maxim/project/network/node2" -   -ipcdisable --port "30302" --rpcapi "db,eth,net,web3"   --networkid 1999 console 2>> /home/maxim/project/network/node2/filelog1.log     

Cоздаем аккаунт с паролем qwe:       

personal.newAccount("qwe")     

Адрес аккаунта отображается в консоле следующим образом:     

"0x04d4eddae29f46b0578e23cc9b01ccdb1a8ba86c"       

Присваиваем аккаунту статус майнера:     

miner.setEtherbase(eth.accounts[0])     

Запускаем генерацию блоков:     

miner.start()       

После формирования DAG в консоли будут отображены записи, сообщающие о корректности формирования блоков:   

I1212 14:31:04.822979 eth/backend.go:484] checking DAG (ethash dir: /home/maxim/.ethash)   I1212 14:31:05.955535 vendor/github.com/ethereum/ethash/ethash.go:276] Done generating DAG for epoch 0, it took   1.135322105s   I1212 214:31:07.589805 miner/unconfirmed.go:83] 

mined potential block #1 [050f878e…], waiting for 5 blocks to   confirm   I1212 14:31:08.590261 miner/worker.go:514] commit new work on block 2 with 0 txs & 0 uncles. Took 248.713µs  
  I1212 14:31:08.596575 miner/unconfirmed.go:83] 

mined potential block #1 [e88f1c28…], waiting for 5 blocks to   confirm   I1212 14:31:08.959788 miner/unconfirmed.go:83] 

mined potential block #2 [8ace02fc…], waiting for 5 blocks to   confirm       

Останавливаем майнинг:       

miner.stop()     

Собираем данные о ноде:     

admin.nodeInfo.enode       

Получаем следующие сообщение:    

 enode://2e21fe4357c72368a61737d90ff7f645df121f99601942c879acbfb3fb53a6b90f66ebe7bc87086c0b9584056b357 dc1f7424b93c5348af7429c839cc9bf151b@[::]:30302   

Запускаем ноду 2:     

geth --identity "Billing2" --rpc --rpcport "8083" --rpccorsdomain "*" --datadir "/home/maxim/project/network/node3" -- ipcdisable --port "30303" --rpcapi "db,eth,net,web3" --networkid 1999 console 2>> /home/maxim/project/network/node3/filelog2.log     

Теперь необходимо связать узлы. 

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

admin.nodeInfo.enode  

Передаевм полученный идентификатор в функцию  

admin.addPeer("идентификатор узла")

Выводим в консоль данные второй ноды:     

admin.nodeInfo.enode     

Получаем сообзение:     

enode://23409a6196304d1f49d0e9ea832b2fa005c4ee424c44dae5c4fd9633187fa15411201eb6737dfc2de001ff1b4aeb6   53d06e558ffae9b87254eb047cc77aa7025@[::]:30303

Вводим в консоле первой ноды:     

admin.addPeer("enode://23409a6196304d1f49d0e9ea832b2fa005c4ee424c44dae5c4fd9633187fa15411201eb6737dfc2 de001ff1b4aeb653d06e558ffae9b87254eb047cc77aa7025@[127.0.0.1]:30303")       

В консоли второй ноды можно увидеть, что блоки сгенерированные в первой ноде импортировались во вторую ноду.     

ИТОГ:

  • Поднята сеть Etherium; 
  • Запущены две ноды; 
  • Создан аккаунт майнер;
  • Блоки успешно сгенерированы;  


С уважением, @dmitrijv

Ссылка на пакет данных.

Ссылка на источник изображения. 

 

открытый-кодpskблокчейннауказнания
25%
228
109
1076.714 GOLOS
0
В избранное
Dimitri_jv
Блокчейн, бигдата и инвестиции, а также путешествия, история и кулинария. It's free to follow me:)
109
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (14)
Сортировать по:
Сначала старые