Go-Ethereum

如何區分 ETH 和 ETC 節點

  • December 23, 2019

我正在使用 go-ethereum 程式碼(主要是發現(discv4)和 rlpx)來編寫節點發現工具。

該程序正在使用 discv4 來發現 Internet 上的節點並將發現的節點放入隊列中。

然後,一個不同的子程序從隊列中拉出一個節點並進行孔握手以傳遞“HELLO (0x00)”消息。所以我得到了節點正在執行的軟體的功能、名稱、作業系統、…。

現在我想區分節點實際上是 ETH 還是 ETC 節點。我怎樣才能做到這一點?

不幸的是,由於大多數客戶端實現 eth/63,它將 STATUS 0x00 定義為

$$ protocolVersion: P, networkId: P, td: P, bestHash: B_32, genesisHash: B_32 $$

由於 ETC / ETH 具有相同的創世雜湊和網路 ID,因此無法將它們與 ENR / 握手區分開來

EIP-2124試圖通過在STATUS 0x00. 這僅在 Geth 中實現(請參閱此處,並且大多數 ETC 節點不會發送此數據包。

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