Я не думаю, что он нуждается в представлении о текущей ажиотаже, которая происходит с Blockchain , биткойнами , Ethereum и другими инициативами. Чтобы лучше понять, что это такое и как это работает, я решил попробовать Ethereum, поскольку он обещает стать разрушительным решением для множества различных вариантов использования . Не вдаваясь в теоретические основы Blockchain или Ethereum (об этом уже написано много документов), этот пост будет посвящен тому, как я настраивал частную сеть Ethereum на своем MacBook. Я буду использовать Docker-контейнеры в качестве узлов Ethereum и использовать браузер Mist на моем Mac для «подключения» к частной сети.
Обратите внимание, что это просто возможная настройка, которая работает для меня. Могут быть лучшие / более легкие альтернативы для других вариантов использования.
Я выполняю следующие шаги для создания частной сети Ethereum:
-
- Настроить инфраструктуру
- создайте каталог для хранения ваших источников Dockerfile и данных Ethereum
- Настроить инфраструктуру
Я создал каталог под названием «Myether». В этом каталоге я создал две подкаталоги: «datadir1» и «datadir2».
-
-
- создать файл «mygenesis.json»
-
Для настройки новой сети Ethereum я использую файл «mygenesis.json», чтобы инициировать новую цепочку блоков. Этот файл будет использоваться для ввода первого блока в цепочке. Чтобы узнать больше об этом см. Здесь .
Вот содержимое моего файла, который я создал в моем новом каталоге, созданном на предыдущем шаге:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
{ "alloc" : {}, "coinbase" : "0x0000000000000000000000000000000000000000" , "difficulty" : "0x20000" , "extraData" : "" , "gasLimit" : "0x2fefd8" , "nonce" : "0x0000000000000042" , "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000" , "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000" , "timestamp" : "0x00" , "config" :{ "chainId" : 13 } } |
-
-
- создать Dockerfile
-
Также в новом каталоге я создал ‘Dockerfile’, который запустит образ Ubuntu и начнет установку Ethereum и необходимых зависимостей от него.
Файл содержит следующий контент:
1
2
3
4
5
6
7
8
|
FROM ubuntu:16.04 RUN apt-get update && apt-get install -y software-properties-common net-tools RUN add-apt-repository -y ppa:ethereum /ethereum && apt-get update RUN apt-get -y install ethereum ADD . /mygenesis .json /root/mygenesis .json EXPOSE 8545 8546 30303 30303 /udp RUN mkdir -p /root/datadir ENTRYPOINT "bash" |
Полная структура папок на моем MacBook теперь выглядит следующим образом:
-
-
- создать образ Docker
-
Имея Dockerfile и файл genesis, я могу создать образ Docker, выполнив:
docker build -t pascalalma/my-ether-node .
Вывод выглядит так:
-
-
- начать первый узел
-
С созданным изображением я могу начать свой первый узел. Мне нужно открыть некоторые порты и использовать собственный каталог данных для моего узла (чтобы хранить данные между запусками контейнера Docker). Команда для запуска первого узла:
docker run -it -p 8545:8545 -p 30303:30303 -v /Users/pascalalma/develop/myether/datadir1:/root/datadir pascalalma/my-ether-node /bin/bash
-
-
- начать второй узел
-
В другом терминале я запускаю следующую команду:
docker run -it -p 8546:8545 -p 30304:30303 -v /Users/pascalalma/develop/myether/datadir2:/root/datadir pascalalma/my-ether-node /bin/bash
-
-
- запишите IP-адрес первого узла
-
Я записал IP-адрес контейнера Docker узла 1, чтобы позже использовать его для соединения узла 2 с узлом 1. Я запустил команду ‘ifconfig eth0’ следующим образом:
Таким образом, в этом примере IP-адрес должен быть «172.17.0.2».
-
- инициировать частную сеть
Теперь у меня есть два узла Linux, работающие на моем MacBook. Затем я запускаю новый блокчейн с помощью geth . На обоих узлах я запускаю следующую команду:
geth --datadir=/root/datadir/ init /root/mygenesis.json
Вывод выглядит так:
Начальный блок создан (цепочка блоков настроена), и я готов к следующему шагу.
-
- начать частную сеть
Создав начальный блок, я могу запустить цепочку блоков, запустив geth на обоих узлах и указав узел 2 на адрес узла 1.
-
-
- запустить geth на node1
-
Я запускаю следующую команду, чтобы запустить geth на node1:
geth --datadir /root/datadir/ --networkid 1234 --port 30303 --rpcport 8545 --rpc --rpcapi eth,web3,personal,net --rpcaddr 0.0.0.0 console
-
-
- запустить geth на node2
-
Я запускаю ту же команду для запуска geth на node2:
geth --datadir /root/datadir/ --networkid 1234 --port 30303 --rpcport 8545 -rpc --rpcapi eth,web3,personal,net --rpcaddr 0.0.0.0 console
-
-
- подключить узел 2 к частной сети узла 1
-
Чтобы получить адрес узла 1, выполните следующую команду на узле 1 в консоли geth:
'admin.nodeInfo.enode'
как это:
1
2
|
> admin.nodeInfo.enode "enode://8fd1e8b6941cd96030580082cabd0758cf274ac7a74493c942120191b4447e49489e3961eb55ce666db172e2fe177ef9bf03f1685d4d81afb364ab9b5ed4aec9@[::]:30303" |
Выходом является адрес узла 1 в формате enode-url .
Теперь я запускаю следующую команду на узле 2:
1
|
admin.addPeer( "enode://8fd1e8b6941cd96030580082cabd0758cf274ac7a74493c942120191b4f77e49489e3961eb55ce666db172e2fe177ef9bf03f1685d4d81afb364ab9b5ed4aec9@172.17.0.2:30303" ) |
Где строка ‘enode’ — это строка, возвращенная в предыдущей команде, а IP-адрес — это IP-адрес, отмеченный ранее для узла 1.
Результат команды должен быть ‘true’.
Чтобы проверить соединение между узлом 1 и узлом 2, я запускаю:
net.peerCount
который должен возвращать ‘1’
или я могу запустить admin.peers
который должен вернуть что-то вроде:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
>> admin.peers [{ caps: [ "eth/63" ], id : "8fd1e8b6941cd96030580082cabd0758cf274ac7a74493c942120191b4447e49489e3961eb55ce666db172e2fe177ef9bf03f1685d4d81afb364ab9b5ed4aec9" , name: "Geth/v1.7.2-stable-1db4ecdc/linux-amd64/go1.9" , network: { localAddress: "172.17.0.3:37666" , remoteAddress: "172.17.0.2:30303" }, protocols: { eth: { difficulty: 131072, head : "0x5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0" , version: 63 } } }] |
Резюме
Так что теперь у меня есть частная сеть Ethereum, состоящая из двух узлов. В следующем посте я покажу вам, как использовать консоль ‘geth’ на одном из узлов для создания учетных записей и выполнять некоторые операции по майнингу для создания эфира для учетной записи. Я также покажу, как подключить ваш браузер Mist к этой частной сети. Будьте на связи!
Опубликовано на Java Code Geeks с разрешения Паскаля Альмы, партнера нашей программы JCG . Смотреть оригинальную статью здесь: Настройка приватного блокчейна с Ethereum (часть 1)
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |