Статьи

Настройка приватного блокчейна с Ethereum (часть 2)

В моем предыдущем посте я настроил сеть из двух узлов, использующих частную цепочку блоков . В этом посте я использую его для создания учетных записей, создания некоторого эфира и просмотра блокчейна с помощью браузера Mist на моем Mac.
Сначала я проверяю работоспособность узлов. Затем я перехожу к консоли ‘ geth ‘, которая работает на node1.


Когда я ввожу команду web3.eth.accounts в консоли, чтобы показать все доступные учетные записи на этом узле, результатом будет пустой массив: [] .
Для создания учетной записи я запускаю в консоли:
personal.newAccount("Write here a good, randomly generated, passphrase!")

Возвращенная строка является адресом вновь созданной учетной записи. Когда я сейчас запускаю web3.eth.accounts я вижу адрес моей созданной учетной записи. Я делаю то же самое на другом узле, поэтому у меня есть две учетные записи, по одной на каждом узле.
Следующий шаг — создать эфир, выполнив некоторое майнинг. В «основной» сети ethereum потребуется несколько дней, чтобы получить некоторые (в зависимости от объема вычислительной мощности, доступной для работы), но в этом случае потребуется несколько минут, чтобы получить некоторые (конечно, это не может быть использовано в «реальном» блокчейне ethereum.
На узле 1 я запускаю следующую команду в консоли geth
miner.setEtherbase(address)
установить адрес, на который будет отправлено вознаграждение за майнинг. Затем я начинаю процесс майнера с
miner.start() .
Это создает вывод, как показано ниже:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
> web3.eth.accounts
["0x30aa499b853d422b7e38bdb885fd9dfa2d964715"]
> miner.setEtherbase("0x30aa499b853d422b7e38bdb885fd9dfa2d964715")
true
> miner.start(2)
INFO [10-28|13:38:16] Updated mining threads                   threads=2
INFO [10-28|13:38:16] Transaction pool price threshold updated price=18000000000
null
> INFO [10-28|13:38:16] Starting mining operation
INFO [10-28|13:38:16] Commit new mining work                   number=103 txs=0 uncles=0 elapsed=559.051µs
INFO [10-28|13:38:20] Generating DAG in progress               epoch=0 percentage=0 elapsed=3.828s
INFO [10-28|13:38:24] Generating DAG in progress               epoch=0 percentage=1 elapsed=7.784s
INFO [10-28|13:38:28] Generating DAG in progress               epoch=0 percentage=2 elapsed=11.732s
....
INFO [10-28|13:42:58] Generating DAG in progress               epoch=0 percentage=98 elapsed=4m41.664s
INFO [10-28|13:43:01] Generating DAG in progress               epoch=0 percentage=99 elapsed=4m44.566s
INFO [10-28|13:43:01] Generated ethash verification cache      epoch=0 elapsed=4m44.572s
INFO [10-28|13:43:11] Generating DAG in progress               epoch=1 percentage=0  elapsed=7.485s
INFO [10-28|13:43:16] Successfully sealed new block            number=103 hash=75997d…82ee18
INFO [10-28|13:43:16] �� mined potential block                  number=103 hash=75997d…82ee18
INFO [10-28|13:43:16] Commit new mining work                   number=104 txs=0 uncles=0 elapsed=1.215ms
INFO [10-28|13:43:20] Generating DAG in progress               epoch=1 percentage=1  elapsed=16.233s
INFO [10-28|13:43:28] Generating DAG in progress               epoch=1 percentage=2  elapsed=24.327s
INFO [10-28|13:43:30] Successfully sealed new block            number=104 hash=7401b3…44addf
INFO [10-28|13:43:30] �� mined potential block                  number=104 hash=7401b3…44addf
INFO [10-28|13:43:30] Commit new mining work                   number=105 txs=0 uncles=0 elapsed=399.337µs
INFO [10-28|13:43:31] Successfully sealed new block            number=105 hash=2bfca8…23f9c1
INFO [10-28|13:43:31] �� mined potential block                  number=105 hash=2bfca8…23f9c1

Выходные данные показывают, что группа DAG создается в первую очередь, и когда это делается (занимает несколько минут), она начинает добывать блоки. Через несколько минут я запускаю miner.stop() в консоли.
Кстати, в консоли другого узла вы также должны увидеть активность во время майнинга; он получит добытые блоки от подключенного узла:

1
2
3
4
INFO [10-28|13:43:30] Imported new chain segment               blocks=2 txs=0 mgas=0.000 elapsed=13.597ms  mgasps=0.000 number=104 hash=7401b3…44addf ignored=102
INFO [10-28|13:43:31] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=7.794ms   mgasps=0.000 number=105 hash=2bfca8…23f9c1
INFO [10-28|13:43:32] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=5.089ms   mgasps=0.000 number=106 hash=d1e49c…656c2e
INFO [10-28|13:43:34] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=26.729ms  mgasps=0.000 number=107 hash=72f2fb…16a495

С помощью команды ‘web3.eth.getBalance ()’ в консоли ‘geth’ я получаю текущее количество эфира (выраженное в Wei ), которое достигается:

1
2
3
4
5
web3.eth.accounts
["0x30aa499b853d422b7e38bdb885fd9dfa2d964715"]
> web3.eth.getBalance("0x30aa499b853d422b7e38bdb885fd9dfa2d964715")
40000000000000000000
>

Итак, на данный момент у меня есть две учетные записи, для которых назначен какой-то эфир (я запустил процесс майнинга на обоих узлах). Теперь пришло время запустить мой браузер Mist и подключить его к моей приватной цепочке блоков. Приложение Mist можно скачать здесь . Я выбрал версию MacOs и запустил установщик. Обычно, когда вы запускаете браузер Mist, он запускает собственную версию «geth» и подключается к «основной» сети Ethereum. В этом случае я хочу подключиться к своей собственной цепочке блоков, поэтому при установке по умолчанию я добиваюсь этого, запустив браузер в окне терминала с помощью следующей команды:

1
2
3
/Applications/Mist.app/Contents/MacOS/Mist  \
  --rpc http://localhost:8545 \
  --swarmurl="http://swarm-gateways.net"

Это работает, потому что когда я запустил экземпляр Docker для узла 1, я открыл порт 8545 для своего локального хоста в 8545. И когда я запустил ‘geth’ в контейнере Docker, я передал параметры ‘rpc’, чтобы он принимал соединения со всех IP-адресов (0.0. 0.0). Часть ‘swarmurl’ — это обходной путь для этой проблемы .
После запуска браузера Mist выдает предупреждение о небезопасном RPC-соединении, но в этом случае его можно игнорировать (все узлы на моем компьютере работают локально) и нажимают «ОК». Сначала я получаю заставку браузера следующим образом:

Иногда мне приходилось перезагружать Docker Engine на моем Mac, прежде чем Mist смог подключиться к моему локальному компьютеру через порт 8545, и после того, как я нажал «Launch Application», я получаю окно браузера, показывающее одну учетную запись, которую я создал на node1 с количеством эфира что я добыл

Последнее, что я хочу показать, это отправить какой-нибудь эфир с одной учетной записи (созданной на узле 1) на другую (созданной на узле 2). Для этого я открываю страницу «Отправить средства» в браузере Mist и заполняю адрес учетной записи, созданной в node2, и назначаю количество эфира:

Когда я нажимаю «Отправить транзакцию», мне нужно ввести парольную фразу отправляющей учетной записи (в данном случае это «Напишите здесь хорошую, случайно сгенерированную парольную фразу!»):

После отправки транзакции в блокчейне с аккаунтами ничего не происходит. Транзакция создана, но еще не подтверждена / проверена. Так что теперь, когда я начну майнинг на одном из узлов, транзакция (/ блок) будет подтверждена, и количество эфира на счетах будет изменено:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
> web3.eth.getBalance("0x30aa499b853d422b7e38bdb885fd9dfa2d964715")
375000378000000000000
> miner.start(2)
INFO [10-28|17:45:13] Updated mining threads                   threads=2
INFO [10-28|17:45:13] Transaction pool price threshold updated price=18000000000
null
> INFO [10-28|17:45:13] Starting mining operation
INFO [10-28|17:45:13] Commit new mining work                   number=128 txs=1 uncles=0 elapsed=1.070ms
INFO [10-28|17:45:19] Successfully sealed new block            number=128 hash=7fa8ab…8dc486
INFO [10-28|17:45:19] �� block reached canonical chain          number=123 hash=779286…8d1f45
...
INFO [10-28|17:45:34] Commit new mining work                   number=137 txs=0 uncles=0 elapsed=245.115µs
> miner.stop()
INFO [10-28|17:45:40] Successfully sealed new block            number=137 hash=51d2c7…6533e1
...
INFO [10-28|17:45:44] Successfully sealed new block            number=140 hash=0bac45…26b5e0
INFO [10-28|17:45:44] �� block reached canonical chain          number=135 hash=93d2ad…a16e19
INFO [10-28|17:45:44] Commit new mining work                   number=141 txs=0 uncles=0 elapsed=160.114µs
INFO [10-28|17:45:44] �� mined potential block                  number=140 hash=0bac45…26b5e0
 
true
> INFO [10-28|17:59:20] Regenerated local transaction journal    transactions=0 accounts=0
 
> web3.eth.getBalance("0x30aa499b853d422b7e38bdb885fd9dfa2d964715")
540000756000000000000
>

А в браузере Mist вы видите увеличение количества подтверждений транзакции во время обработки майнинга:

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

Опубликовано на Java Code Geeks с разрешения Паскаля Альмы, партнера нашей программы JCG . Смотреть оригинальную статью здесь: Настройка приватного блокчейна с Ethereum (часть 2)

Мнения, высказанные участниками Java Code Geeks, являются их собственными.