Go-Ethereum

Geth 私網無法添加輕節點

  • February 14, 2022

我有一個帶有 geth 和幾台機器的專用網路設置(2 個用於挖礦的完整節點和一個輕節點)。這三個設備具有以下 IP:

  • 礦工1 - 10.42.0.40
  • 礦工2 - 10.42.0.250
  • 光節點 - 10.42.0.150

我按照建議的設置如下:

  1. 從新目錄設置帳戶,例如~/miner1

geth --datadir="./" account new 2. 為所有參與設備創建一個通用的 genesis.json 塊文件(我可以確認這是在所有設備上使用的相同文件)

{
"config": {
   "chainID"       : 10,
   "homesteadBlock": 0,
   "eip155Block":    0,
   "eip158Block":    0
},
"nonce": "0x01",
"difficulty": "0x20000",
"mixhash": "0x00000000000000000000000000000000000000647572616c65787365646c6578",
"coinbase": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00",
"gasLimit": "0x2FEFD8",
"alloc": {
}

} 3. 啟動創世塊

geth --datadir="./" init genesisblock.json 4. 啟動節點

全節點MINER1

geth --datadir="./" --identity "MINER1" --networkid 2008 --rpc --rpcaddr 0.0.0.0 --rpcport 8501 --nodiscover --minerthreads="1" --mine --unlock 0 console

全節點MINER2

geth --datadir="./" --identity "MINER2" --networkid 2008 --rpc --rpcaddr 0.0.0.0 --rpcport 8502 --nodiscover --minerthreads="1" --mine --unlock 0 console

輕節點(樹莓派)

geth --verbosity 6 --datadir="./" --cache=32 --syncmode=light --networkid 2008 --rpc --rpccorsdomain 0.0.0.0 --rpcport="8503" --nodiscover --unlock 0 console
  1. 使用執行手動發現admin.addPeer("enodeURL")

從 MINER1 執行以添加 MINER2

admin.addPeer("enode://a90cdb6f0c48b60052fc995fb3a2ae45de28baec009ba526418d46ff0a1e9005f6a79883f6b821b964accdadc5017481409e8494e5ad39f22453c3ecff3b8228@10.42.0.250:30303")

這完美地工作並且可以使用admin.peers兩個礦工節點能夠同步來看到

  1. 在輕節點上執行相同的手動發現添加 MINER1 和 MINER2

admin.addPeer("enode://a902f3231e561546896f4619bb7129e67f3b46ee4bc6a86e35ca1f575444e9f25dcb65bf0e09b02fd2714ce59bbb496a7783486d39eca4a17327ae1bacb3c699@10.42.0.40:30303")

admin.addPeer("enode://a90cdb6f0c48b60052fc995fb3a2ae45de28baec009ba526418d46ff0a1e9005f6a79883f6b821b964accdadc5017481409e8494e5ad39f22453c3ecff3b8228@10.42.0.250:30303")

這會導致true來自控制台的響應,但等待和執行admin.peers不會返回任何對等點 -[]

使用--verbosity 6命令行參數,我在執行命令後收到以下資訊admin.addPeer("enodeURL")

DEBUG[02-10|16:30:21] Adding static node                       node=enode://a902f3231e561546896f4619bb7129e67f3b46ee4bc6a86e35ca1f575444e9f25dcb65bf0e09b02fd2714ce59bbb496a7783486d39eca4a17327ae1bacb3c699@10.42.0.40:30303
TRACE[02-10|16:30:21] New dial task                            task="staticdial a902f3231e561546 10.42.0.40:30303"
TRACE[02-10|16:30:21] Rejected peer                            id=a902f3231e561546 addr=10.42.0.40:30303 conn=staticdial err="useless peer"
TRACE[02-10|16:30:21] Dial task done                           task="staticdial a902f3231e561546 10.42.0.40:30303"
TRACE[02-10|16:30:21] New dial task                            task="wait for dial hist expire (29.999612993s)"
DEBUG[02-10|16:30:40] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
TRACE[02-10|16:30:51] Dial task done                           task="wait for dial hist expire (29.999612993s)"
TRACE[02-10|16:30:52] New dial task                            task="staticdial a902f3231e561546 10.42.0.40:30303"
TRACE[02-10|16:30:52] Rejected peer                            id=a902f3231e561546 addr=10.42.0.40:30303 conn=staticdial err="useless peer"
TRACE[02-10|16:30:52] Dial task done                           task="staticdial a902f3231e561546 10.42.0.40:30303"
TRACE[02-10|16:30:52] New dial task                            task="wait for dial hist expire (29.999654995s)"
DEBUG[02-10|16:31:00] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[02-10|16:31:20] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s

如您所見,我err="useless peer"在跟踪中得到了一個被拒絕的對等體。

執行net.listening返回true,我能夠從輕節點 ping MINER1 和 MINER2 主機。

執行 geth 命令後,我收到有關網路上未啟用 UPNP 的警告:

DEBUG[02-10|16:28:42] Couldn't add port mapping                proto=tcp extport=30303 intport=30303 interface="UPnP or NAT-PMP" err="no UPnP or NAT-PMP router discovered"

但是,當我不打算通過 Internet/WAN 進行網路通信時,這不應該影響 LAN 上的專用網路嗎?

有沒有人能夠解釋為什麼我無法將我的輕節點附加到我的私有網路上的完整節點?

提前感謝你們可以提供的任何幫助,非常感謝!

首先創建這個 genesisblock 文件保存的任何位置:/genesisblock.json

{
   "nonce"     : "0x0000000000000055",
   "mixHash"   : "0x0000000000000000000000000000000000000000000000000000000000000000",
   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
   "difficulty": "0x20000",
   "gasLimit"  : "0x800000",
   "timestamp" : "0x0",
   "extraData" : "",
   "coinbase"  : "0x0000000000000000000000000000000000000000",
   "alloc"     : {},
   "config"    : {
       "chainId": 100,
       "homesteadBlock": 0,
       "eip155Block": 0,
       "eip158Block": 0
   }
}

然後啟動這個推薦執行的創世文件:

geth --datadir "D:\bolckchain\chaindata" init "c\genesisblock.json"

然後創建專用網路:此程式碼執行:

geth --networkid 13 --port 30303 --datadir "D:\bolckchain\chaindata" console

專用網路創建然後薄霧或圍牆開放

然後另一個節點添加私有網路這個私有網路是13

然後另一個節點添加這個網路然後 addPeer :範例:

admin.addPeer("enode://a902f3231e561546896f4619bb7129e67f3b46ee4bc6a86e35ca1f575444e9f25dcb65bf0e09b02fd2714ce59bbb496a7783486d39eca4a17327ae1bacb3c699@10.42.0.40:30303")

IP配置(使用ip地址創建enode)IP-192.168.1.114

10.42.0.40 this miens anther computer ip: example 192.168.0.101

然後同行檢查這個推薦執行:

$ admin 

新帳戶箱子推薦:

->personal.newAccount()

然後提供密碼並重新輸入密碼,然後創建新帳戶。

並且所有帳戶都列出了此推薦:

->personal.listAccounts 

和礦工乙太添加這個推薦執行:

-> miner.start(1)

有時等待和帳戶乙太添加:

和礦工停止推薦:

-> miner.stop()

和塊號資訊這個推薦:

-> eth.getBlock(10)

10地雷10號塊。

刪除對等命令:

-> admin.removePeer()

問題是輕客戶端仍在開發中,預設情況下節點不會連接到輕節點。

設置 geth 的此參數開始:

--lightserv value                 Maximum percentage of time allowed for serving LES requests (0-90) (default: 0)

例如 :

geth --lightserv 20

有關更多詳細資訊,請參閱此處的官方文件,或此問題如何為輕客戶端執行“伺服器”?

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