как подключиться к geth с двух локальных машин ethereum

Я новичок в Ethereum и пробовал все, чтобы подключить тестовую сеть с двух узлов локальной машины. Я попытался запустить две консоли на одной машине с помощью admin.addPeers (nodeUrl) и смог подключиться. когда я пытался использовать одно и то же для разных машин, используя один и тот же сетевой идентификатор, он показывает количество одноранговых узлов как ноль. пожалуйста, помогите решить это. заранее спасибо

Ответы (5)

Поскольку вы используете два узла на двух разных машинах, вам необходимо указать IP-адрес узла при подключении через addPeer(enodeURI).

Подробное прохождение:

  • Вам нужно иметь один и тот же файл генезиса на каждой машине, на которой вы хотите запустить узел.

  • Все узлы должны иметь одинаковые--networkid

  • И --rpcportдолжны --portбыть разными для каждого экземпляра geth.

  • Если вы работаете на одной и той же машине, каждый экземпляр geth должен иметь разные файлы --datadir.

Запуск экземпляров geth:

Узел 1:

geth --genesis path/to/genesis.json --datadir path/to/directory --networkid 1234 --port 30301 --rpcport 8101 console

Узел 2:

geth --genesis path/to/genesis.json --datadir path/to/directory --networkid 1234 --port 30302 --rpcport 8102 console

Вы можете добавить такие команды, как --maxpeersи --nodiscover, если хотите.

После запуска этих экземпляров проверьте наличие похожего сообщения в консоли:

I0829 13:30:07.347738   3987 backend.go:303] Successfully wrote genesis block. New genesis hash = 82b6159155c00fb0b420046012a02257a176ad5dcfce4be4a15da39c166518e2

Если это так, вы успешно запустили узлы с частной цепочкой блоков. Если вы видите сообщение, похожее на Warning: Wrote default ethereum genesis block, значит, что-то не так.

Соединительные узлы:

Узел 1: (в консоли JavaScript)

admin.nodeInfo.enode

Вывод будет примерно таким:

"enode://da97197a3335806658f17fdc167e943bd040fdf59ed882389d5f87b29f31362b12f13bd58438b7b5619497b54bab252a696cafc7cdd9696c4db1cacdb7e6a962@[::]:30301"

Обратите внимание, что номер порта в конце URI равен 30301.

Узел 2:

Выполните ту же команду на узле 2, и вы получите аналогичный вывод с 30302 в конце:

"enode://47e61e304d802fb98403fbf877e1018d13044630a16eb9c15c1d0fb139d465e02d995acd239768f6ced04579d9639d8a75c73c30d7443a9d6d6146a44c8b5e7b@[::]:30302"

Чтобы соединить эти узлы, узнайте IP-адрес узла 2. Так как это локальная сеть, каждая машина должна иметь уникальный частный IP-адрес. При использовании addPeer(enodeURI)функции [::]в enodeURI следует заменить IP-адрес машины, на которой работает узел. Теперь на узле 1:

admin.addPeer("enode://47e61e304d802fb98403fbf877e1018d13044630a16eb9c15c1d0fb139d465e02d995acd239768f6ced04579d9639d8a75c73c30d7443a9d6d6146a44c8b5e7b@10.0.0.123:30302") 

После того, как эта команда вернет true , она net.peerCountдолжна вернуть 1 и admin.peersдолжна вернуть сведения о добавленном/подключенном узле. Перед подключением проверьте, net.listeningвозвращает ли значение true на обоих узлах.

Источники:

Настройка частной сети или локального кластера

Подключение к сети

Как создать частную сеть Ethereum

--genesis больше недействителен
@galahad, спасибо за подробный ответ. Я знаю, что это прошлогодний ответ, и все изменилось. Тем не менее, я спрашиваю вас о третьем шаге, т.е. addPeer. Нужно ли указывать IP-адрес машины, если мы пытаемся работать на той же машине? И должны ли обе ноды майнить, даже если они в одной сети?

Ответ Роланда хорош, но вы должны иметь в виду, что geth (и все эфириумы на данный момент) привязаны к одним и тем же портам по умолчанию, что означает, что вы должны изменить их по умолчанию при запуске нескольких экземпляров на одном хосте (например, 127.0.0.1) .

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

Если вы хотите большей независимости между экземплярами geth, рассмотрите возможность создания отдельного каталога данных для каждого (измените аргумент командной строки --datadir из другого ответа):

--datadir "~/privethnet/geth_client"
--datadir "~/privethnet/geth_bootstrap"
буд он сказал две машины...
Две локальные машины также могут относиться к виртуальным хостам. Может, он прояснит?
Спасибо, ребята .. две локальные машины означают, скажем, два ноутбука ..

Пример настройки для частной сети

Создайте файл с именем genesis.json со следующим содержимым:

{
    "nonce": "0xdeadbeefdeadbeef",
    "timestamp": "0x0",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "0x0",
    "gasLimit": "0x8000000",
    "difficulty": "0x400",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x3333333333333333333333333333333333333333",
    "alloc": {
    }
}

Запустите следующее:geth --datadir ./ init genesis.json

geth --identity "nodeA" --rpc --rpcport "8000" --rpccorsdomain "*" --datadir "~/privethnet/" --port "30303" --ipcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --rpcapi "db,eth,net,web3" --autodag --networkid 1900 --nat "any" console


geth --identity "nodeB" --rpc --rpcport "8000" --rpccorsdomain "*" --datadir "~/privethnet/" --port "30303" --ipcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --rpcapi "db,eth,net,web3" --autodag --networkid 1900 --nat "any" console

Добавьте одноранговый узел, используя URL-адрес однорангового узла:
найдите одноранговый узел в журнале запуска geth.0712 13:34:00.865021 p2p/discover/udp.go:217] Listening, enode:...

admin.addPeer(nodeURL)

Проверьте, был ли добавлен одноранговый узел:admin.peers

Примеры nodeURLS: Node A nodeURL:

enode://da97197a3335806658f17fdc167e943bd040fdf59ed882389d5f87b29f31362b12f13bd58438b7b5619497b54bab252a696cafc7cdd9696c4db1cacdb7e6a962@151.62.56.89:30303

URL-адрес узла узла B:

enode://9d4687d7cfa8c2215d2f2b4278a3e0ab4bde22ab838dd203b234866d69405b4b704fce4a71638f8c66018ba187a3599c612267ac382589bb81131c7dc18ff251@151.62.56.89:30303
Спасибо .. я пробовал это, и я также мог получить количество пиров .. но когда я выполняю транзакцию и майнинг, это не будет передано .. скажем, у меня есть две учетные записи на первой машине, и я перевел деньги с acc1 на acc2 на первой машине и запустить майнинг со второй машины, он не будет передан .. я не понимаю, в чем ошибка ..

Пользователь на Github по имени FleetingCloud собрал приятный скрипт пользовательского интерфейса в командном стиле для настройки Ethereum в частной сети. Я очень рекомендую это.

https://libraries.io/github/FleetingClouds/InitializeEthereumPrivateNetwork

Редактировать:

После клонирования репозитория просто запустите скрипт initializeEthereumPrivateNetwork.sh. Затем он спросит вас, как вы хотели бы назвать свою сеть, каталоги geth на корневых и клиентских узлах и т. д.

Хотя теоретически это может ответить на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки.

--genesis больше недействителен. Вместо этого нужно использовать init. Вот мой код, который я заменил на шаг 1:

geth --identity "MyTestNode" --nodiscover --networkid 1999 --port 30301 -- rpcport 8101 --datadir /home/appo/geth/  init /home/appo/.json console

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