Я пытаюсь настроить частную сеть ethereum. Я запустил два узла на одной машине (Windows 7) в двух разных портах.
Я не могу добавить один узел в качестве партнера другого узла. То, что я сделал до сих пор, это.
Найдите адрес узла одного узла.
> admin.nodeInfo.enode
"enode://5d272e8bee6d29dfff6313999a4a2c3d8109ae6f3eb103480f4536c0542549b9fa12a8d8ae5ebee9c4db55cab553693b04eedbc9b29f35bbc0af1956231b42b4@0.0.0.0:30303"
Добавьте узел к другому узлу.
> admin.addPeer("enode://5d272e8bee6d29dfff6313999a4a2c3d8109ae6f3eb103480f4536c0542549b9fa12a8d8ae5ebee9c4db55cab553693b04eedbc9b29f35bbc0af1956231b42b4@127.0.0.1:30303")
true
Но если я проверю информацию об одноранговых узлах второго однорангового узла, это покажет, что у него нет одноранговых узлов.
> admin.peers
[]
Кто-нибудь знает, что происходит не так?
Кроме того, почему первый узел показывает свой IP-адрес как 0.0.0.0?
В чем разница между 127.0.0.1 и 0.0.0.0? :
В чем разница между 127.0.0.1 и 0.0.0.0?
- 127.0.0.1 — это петлевой адрес (также известный как localhost).
- 0.0.0.0 — это немаршрутизируемый метаадрес, используемый для обозначения недействительной, неизвестной или неприменимой цели (заполнитель «без конкретного адреса»).
В контексте записи маршрута это обычно означает маршрут по умолчанию.
В контексте серверов 0.0.0.0 означает все адреса IPv4 на локальном компьютере. Если хост имеет два IP-адреса, 192.168.1.1 и 10.1.2.1, и сервер, работающий на хосте, прослушивает 0.0.0.0, он будет доступен по обоим этим IP-адресам.
Что вам нужно сделать, так это найти IP-адрес машин, отличный от 127.0.0.1, который будет выглядеть в OS/X (и Linux):
Iota:~ bok$ ifconfig -a
...
inet 127.0.0.1 netmask 0xff000000
...
inet 192.168.0.11 netmask 0xffffff00 broadcast 192.168.0.255
В Windows эквивалентная команда ipconfig /all
.
Адрес 192.168.0.11 — это тот, который вы хотите использовать в своей строке enode, поскольку это IP-адрес машины, с которой могут связаться другие ваши компьютеры в вашей сети.
Затем вам нужно будет добавить своего пира, используя команду вроде:
> admin.addPeer("enode://5d272e8bee6d29dfff6313999a4a2c3d8109ae6f3eb103480f4536c0542549b9fa12a8d8ae5ebee9c4db55cab553693b04eedbc9b29f35bbc0af1956231b42b4@192.168.0.11:30303")
Вот пошаговый пример запуска 2 майнеров на одном компьютере под OS/X, когда майнеры взаимодействуют друг с другом. Вы должны быть в состоянии воспроизвести это в Windows и Linux. Вы также должны иметь возможность реплицировать это на более чем 2 узлах и на отдельных компьютерах.
Обновление от 31 октября 2016 г., 00:00:56 UTC. Вы можете столкнуться с проблемой создания DAG, так как оба майнера будут пытаться создать DAG одновременно в одном и том же файле. В OS/X (и Linux) файл DAG хранится в формате $HOME/.ethash
. Это та же проблема, что описана в приватной цепочке, два гет-майнера на одной машине, второй майнер выдает «панику: ethash_full_new IO или ошибка памяти» . Обходной путь заключается в том, чтобы запустить второй майнер после того, как первый майнер завершит создание группы обеспечения доступности баз данных, когда необходимо создать первоначальную группу доступности баз данных. Необходимо будет периодически создавать новую DAG, и это может привести к сбою одного из ваших майнеров.
Детали:
geth version
отчеты1.4.18-stable-c72f5459
/tmp/Test2Miners
с каталогом данных майнера №1 и каталогом данных /tmp/Test2Miners/miner1data
майнера №2 /tmp/Test2Miners/miner2data
.Я создал файл /tmp/Test2Miners/genesis.json
со следующим содержимым:
{
"config": {
"homesteadBlock": 10
},
"nonce": "0",
"difficulty": "0x400",
"mixhash": "0x00000000000000000000000000000000000000647572616c65787365646c6578",
"coinbase": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x",
"gasLimit": "0x3B4A1B44",
"alloc": {}
}
Я создал /tmp/Test2Miners/testpassword
со следующим содержимым:
aaaargh
Я создал /tmp/Test2Miners/initMiner1
со следующим содержимым, а затем установил исполняемый бит с помощью команды chmod 700 /tmp/Test2Miners/initMiner1
:
#!/bin/sh
geth --datadir /tmp/Test2Miners/miner1data init /tmp/Test2Miners/genesis.json
geth --datadir /tmp/Test2Miners/miner1data --password /tmp/Test2Miners/testpassword account new
Я создал /tmp/Test2Miners/initMiner2
со следующим содержимым, а затем установил исполняемый бит с помощью команды chmod 700 /tmp/Test2Miners/initMiner2
:
#!/bin/sh
geth --datadir /tmp/Test2Miners/miner2data init /tmp/Test2Miners/genesis.json
geth --datadir /tmp/Test2Miners/miner2data --password /tmp/Test2Miners/testpassword account new
Я создал /tmp/Test2Miners/runMiner1
со следующим содержимым, а затем установил исполняемый бит с помощью команды chmod 700 /tmp/Test2Miners/runMiner1
:
#!/bin/sh
geth --datadir /tmp/Test2Miners/miner1data --unlock 0 --password /tmp/Test2Miners/testpassword --mine --minerthreads 1 --port 30301 console
Я создал /tmp/Test2Miners/runMiner2
со следующим содержимым, а затем установил исполняемый бит с помощью команды chmod 700 /tmp/Test2Miners/runMiner2
:
#!/bin/sh
geth --datadir /tmp/Test2Miners/miner2data --unlock 0 --password /tmp/Test2Miners/testpassword --mine --minerthreads 1 --port 30302 console
Я инициализировал каталоги данных и создал первую учетную запись (coinbase) для обоих майнеров с помощью команды:
/tmp/Test2Miners/initMiner1
/tmp/Test2Miners/initMiner2
В окне терминала №1 я запустил майнер №1 с помощью следующей команды. Я включил информацию об эноде, напечатанную на консоли, которую также можно определить с помощью admin.nodeInfo
команды:
/tmp/Test2Miners/runMiner1
...
enode://dd57ddfb071ab01bcb1f310601e97b06a07dc97f949e14d73dbffaf8cf60e41455a31cf671d87dc7d256d24c20b8d061296041645ac36872239c48ee74fd587d@[::]:30301
В окне терминала №2 я запустил майнер №2 с помощью команды:
/tmp/Test2Miners/runMiner2
...
enode://b47e69bed67be3f9974ce44d08b9232fd5a555a7c6d4adca5402f93406a806c7181a963c02cff991452bcaee1ab7affdbada4153d236a0017f3dd1931b9c4436@[::]:30302
Я заменил [::]
в строках enode локальный IP-адрес, поэтому мои admin.addPeer(...)
команды будут выглядеть так:
admin.addPeer("enode://dd57ddfb071ab01bcb1f310601e97b06a07dc97f949e14d73dbffaf8cf60e41455a31cf671d87dc7d256d24c20b8d061296041645ac36872239c48ee74fd587d@192.168.1.11:30301")
а также
admin.addPeer("enode://b47e69bed67be3f9974ce44d08b9232fd5a555a7c6d4adca5402f93406a806c7181a963c02cff991452bcaee1ab7affdbada4153d236a0017f3dd1931b9c4436@192.168.1.11:30302")
Я вставил admin.addPeer(...)
строку enode из майнера №1 в консоль майнера №2.
В консоли майнера №1:
> admin.peers
[{
caps: ["eth/62", "eth/63"],
id: "b47e69bed67be3f9974ce44d08b9232fd5a555a7c6d4adca5402f93406a806c7181a963c02cff991452bcaee1ab7affdbada4153d236a0017f3dd1931b9c4436",
name: "Geth/v1.4.18-stable-c72f5459/darwin/go1.7.1",
network: {
localAddress: "192.168.1.11:30301",
remoteAddress: "192.168.1.11:62922"
},
protocols: {
eth: {
difficulty: 152346260,
head: "0x8296dbd46fe12cef1415c27cb21f2ad6d70b6ee174977529eaf266c3488e6e2e",
version: 63
}
}
}]
Успех!
И в консоли майнера №2:
> admin.peers
[{
caps: ["eth/62", "eth/63"],
id: "dd57ddfb071ab01bcb1f310601e97b06a07dc97f949e14d73dbffaf8cf60e41455a31cf671d87dc7d256d24c20b8d061296041645ac36872239c48ee74fd587d",
name: "Geth/v1.4.18-stable-c72f5459/darwin/go1.7.1",
network: {
localAddress: "192.168.1.11:62922",
remoteAddress: "192.168.1.11:30301"
},
protocols: {
eth: {
difficulty: 157293798,
head: "0xd9b044d4e996407ff94b075c36b845db219078c64e7898e628983496d46067bf",
version: 63
}
}
}]
Подтвердите успех!
Вот консольный лог одного из майнеров:
I1031 00:53:27.604563 miner/worker.go:435] 🔨 🔗 Mined 5 blocks back: block #1447
I1031 00:53:27.605050 miner/worker.go:539] commit new work on block 1453 with 0 txs & 0 uncles. Took 460.253µs
I1031 00:53:29.682117 core/blockchain.go:1001] imported 1 block(s) (0 queued 0 ignored) including 0 txs in 12.081834ms. #1453 [3a94659b / 3a94659b]
I1031 00:53:29.683526 miner/worker.go:539] commit new work on block 1454 with 0 txs & 0 uncles. Took 1.167337ms
I1031 00:53:29.683565 miner/worker.go:435] 🔨 🔗 Mined 5 blocks back: block #1448
3-я строка показывает, что другой майнер добыл блок, и этот майнер импортирует блок. Остальные строки показывают, что этот майнер занимается добычей блоков.
Чтобы автоматизировать одноранговое обнаружение, я создаю /tmp/Test2Miners/miner1data/static-nodes.json
следующую информацию (ссылка Static nodes ):
[
"enode://dd57ddfb071ab01bcb1f310601e97b06a07dc97f949e14d73dbffaf8cf60e41455a31cf671d87dc7d256d24c20b8d061296041645ac36872239c48ee74fd587d@192.168.1.11:30301",
"enode://b47e69bed67be3f9974ce44d08b9232fd5a555a7c6d4adca5402f93406a806c7181a963c02cff991452bcaee1ab7affdbada4153d236a0017f3dd1931b9c4436@192.168.1.11:30302"
]
и я копирую этот файл в /tmp/Test2Miners/miner2data/static-nodes.json
.
Я перезапускаю оба майнера с помощью команд /tmp/Test2Miners/runMiner1
и /tmp/Test2Miners/runMiner2
в отдельных окнах терминала и проверяю, подключены ли они друг к другу с помощью admin.peers
и они есть. Успех++.
Лахиру Чандима
конфиденциальностьisahumanright.eth
Лахиру Чандима
конфиденциальностьisahumanright.eth