Go-Ethereum

geth沒有連接到專用網路

  • February 12, 2018

我正在執行一個私有區塊鏈,並且我的奇偶校驗節點似乎連接得很好。我已經解決了一些我之前遇到的 geth 問題,但 geth 仍然無法連接。

但是,當我使用 Parity 從同一台電腦連接時,它似乎連接得很好。

這是我第一次呼叫 geth 的方式(不是真正的埠 9090,但例如):

./geth --datadir /path/to/custom --networkid 9090 --port 9090 init CustomGenesis.json

CustomGenesis.json 文件具有從我的 Parity .json 文件中手動獲取的值,並且我已成功連接 Parity。所以我相信這些價值觀是正確的。我使用了此處列出的項目,以及奇偶校驗值: https ://github.com/ethereum/go-ethereum/wiki/Private-network

我還有一個名為 /path/to/custom/static-nodes.json 的文件,其中列出了兩個現有 Parity 節點的“節點”。

另外,我(有時是單獨的,有時除了 static-nodes.json 文件之外)使用了 –bootnodes 標誌並在命令行上列出了奇偶校驗節點的節點。

./geth --datadir /path/to/custom --networkid 9090 --port 9090 --ipcpath ~/.ethCustom/geth.ipc

但是,這些事情會發生/不會發生:

1)我的其他節點沒有顯示新節點已進入網路

2)當我在 /path/to/custom/geth.ipc 連接到控制台時,我執行“admin.peers”,我只是得到“

$$ $$" 3)除了偶爾我會得到一個對等點,但它不是自定義網路上的對等點之一,而是一些看似隨機的節點,埠為 30303!太奇怪了!為什麼 30303 會滲透到我的自定義設置中?

但是當我輸入

admin.nodeInfo

我得到了一個非常令人滿意的輸出,它顯示了正確的本地 enode;“listenAddr”、“偵聽器”和“發現”的相同(正確)埠;正確的網路 ID 和正確的難度。

我錯過了什麼?如果我能提供其他資訊,請告訴我。謝謝你。

我錯過了什麼?如果我能提供其他資訊,請告訴我。謝謝你。

下次用平價標記你的問題,以確保我不會錯過它:p

跨客戶端專用網路:問題

Geth 是為乙太坊編寫的客戶。它是最早的官方參考實現之一,除了乙太坊之外,從未打算執行其他任何東西。如果您想為任何其他鏈配置配置 Geth,則必須分叉原始碼並根據所需的規則集創建自己的客戶端實現。例如,Expanse ( Gexp ) 和 Ethereum Classic ( Getc ) 就發生了這種情況。

然而,Parity 是由一個最初參與 C++ 乙太坊客戶端 ( Eth ) 的團隊創建的,比乙太坊本身晚得多。在他們(Gavin Wood 等人)創建了 Ethcore(現在的 Parity)之後,他們創建了一個視野更廣闊的客戶端,一個不應該只執行乙太坊的客戶端。

Parity 允許在核心中進行更多抽象,因此,啟動新鏈所需的只是一個所謂的鏈規範文件,該文件描述了整個鏈的參數,包括共識規則、驗證器引擎等。最明顯的後果是 Ethereum、Ethereum Classic 和 Expanse(僅舉上面的範例)不需要維護自己的 Parity 原始碼副本來支持他們的項目和他們的共識規則。--chainParity 使用參數foundationclassic或開箱即用expanse

此外,該--chain參數允許配置具有可插入共識、自定義轉換和您喜歡的驗證器引擎的完全自定義鏈。

相比之下,Geth 只允許指定一個自定義的 Genesis,這只是完整鏈規範的一部分。因此,您將無法將 Geth 節點連接到 Parity 節點的自定義網路。但是,您基本上有兩種選擇來執行具有 Geth 和 Parity 節點的自定義跨客戶端網路,如下所述。

最佳實踐:“Geth First”

現在,由於在 Geth 中的鏈配置選項比在 Parity 中少,我將把最明顯的想法稱為“Geth First”。您選擇了一個網路 ID 並創建了一個自定義 Genesis,並使用 初始化您的新網路geth init。此時你可以啟動一個礦工執行緒和幾個 Geth 節點,以驗證網路是否正是你所需要的。

現在,您可以開始集成 Parity 節點了。有一個小型的 rust 工具keorn/parity-spec可以將您的自定義 Geth 創世文件轉換為完整的 Parity 鏈規範文件。

cargo run -- geth-genesis.json

您可以使用參數將輸出parity-spec.json直接傳遞給 Parity 節點--chain。對於發現,您可以使用Geth 的admin.addPeer()命令Parity 的--reserved-peers功能

然而,Geth 和 Parity 都是積極開發的程式碼庫,並且轉換器工具容易出現錯誤,並且使用者經常報告生成的鏈規範文件仍然會導致共識問題。如果這種情況經常發生在您身上,請查看下面的其他選項。

最佳實踐:“Ropsten Revived - Revived”

執行與 Geth、Parity 以及可能所有其他客戶端兼容的專用網路可能是最穩定和最明顯的選擇,我稱之為“Ropsten Revived - Revived”。

只需了解所有客戶端都支持的工作網路,例如Ropsten 公共測試網,並對其稍作修改。為了簡化這個過程,我在5chdn/crossclient-chainsepc為 Genesis 和 Parity Chain Specification 創建了預設。它包含一個geth.json和一個parity.json模仿 Ropsten 復興的網路 ID 為 1337 ( 0x539)。

這樣做的缺點可能是沒有滿足為您的自定義私有開發網路添加更複雜修改的願望。然而,預定義的 genesis 和鏈規範提供了一個很好的起點,可以讓您使用您想到的任何網路進行引導。

引用自:https://ethereum.stackexchange.com/questions/16866