Как мне настроить 2 частных узла майнинга на одном компьютере?

Я пытаюсь настроить частную сеть 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?

Ответы (1)

В чем разница между 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и они есть. Успех++.

Спасибо за ответ. Я добавил IP-адрес, найденный ipconfig, но он все равно не работает. Я обнаружил, что оба моих узла имеют одинаковый адрес, кроме порта. Может ли это быть проблемой? Два узла имеют свои собственные каталоги данных, но они имеют один и тот же блок генезиса.
Я обновил пошаговый пример в OS/X. Должно работать одинаково в Windows и Linux. Должен работать и на отдельных машинах.
Большое спасибо. Я стер все и последовал твоему руководству. Теперь все работает нормально.
См. обновление в ответе — установка двух майнеров на одном компьютере может привести к тому, что жестко запрограммированное имя файла DAG вызовет сбой, поскольку только один из майнеров сможет записывать в этот файл. Я прорабатываю альтернативу.