Go-Ethereum

我如何(有效地)以程式方式查看我是在 ETH 還是 ETC 鏈上?

  • December 1, 2018

如果我有 2 個節點,一個 ETH 和一個 ETC,並且我正在編寫一個程序來使用這些節點,我如何確定在任何給定時間我正在使用哪個節點?

我能想出的最好辦法是檢查分叉後的已知塊並簡單地比較# of tx。我知道兩條鏈上的那個塊中有多少 tx,所以我可以區分這種方式。

這看起來很笨重。有一個更好的方法嗎?

編輯:這不是“ETH 和 ETC 使用相同的網路 ID 嗎?”的重複。因為我不是在詢問網路 ID。我問的是整個網路。eth/etc 共享1主網路的網路 ID。

您可以使用 web3 拉取塊 1920000 的塊數據。這是 dao 分叉塊,因此塊雜湊會有所不同。

ETC 是0x94365e3a8c0b35089c1d1195081fe7489b528a84b22199c916180db8b28ade7f

ETH 是0x4985f5ca3d2afbec36529aa96f74de3cc10a2a4a6c44f2157a57d2c6059a11bb

就像評論中的其他人所說的那樣,看起來沒有任何 RPC 命令可以完成這項工作,但是如果您的腳本/程序可以訪問執行 Geth 的機器(也許結束ssh),您可以嘗試 grepping 日誌或殺死並重新啟動 Geth 以獲取日誌輸出。

(話雖如此,如果您可以訪問機器,則datadir無論如何該名稱都會放棄遊戲:.ethereum-classicvs. .ethereum,除非在節點啟動時手動指定了非預設名稱。)

ETC:

$ cat /home/richard/.ethereum-classic/mainnet/log/geth.INFO | grep chainID
I1201 18:56:27.326033 cmd/geth/flag.go:767]         chainID: 61

乙太坊:

沒有與上述類似的文件,但在重新啟動 Geth 時:

INFO [12-01|19:09:25.456] Initialised chain configuration  config="{ChainID: 1 Homestead: 1150000 DAO: 1920000 DAOSupport: true EIP150: 2463000 EIP155: 2675000 EIP158: 2675000 Byzantium: 4370000 Constantinople: <nil> Engine: ethash}"

(我假設 - 可能是錯誤的 - 在 ETH 的情況下chainID 確實等同於鏈 ID 而不是網路 ID。無論哪種方式,如果沒有可以 grep 的日誌文件,您就可以推斷出它是 ETH 而不是 ETC。)

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