Go-Ethereum

Geth Websocket 重組期間的行為

  • May 5, 2019

我對重組期間 Geth 的行為有疑問。特別是,我連接到 Geth web-socket 以在發現新塊時接收它們。通常每 10 到 15 秒我就會在網路套接字上收到一條阻塞消息。

我的問題是在重組期間我會收到什麼? 假設發生了 4 個塊的重組(所以我收到的最後 3 個塊現在是孤立的,並且有 4 個新塊給我),Geth 會一次發送所有塊(舊/新),或者它會發送什麼確切地。我無法找到上述任何文件,如果您能找到任何文件,請提供文件連結。

另外請幫助如何在測試網上使用 Geth 模擬/測試重組。

對於第一個問題,根據文件,你得到的應該如下。

假設你提到的最後 3 個塊稱為 a、b 和 c,而 4 個新塊是 A、B、C、D。應該是

a, b, c, A, B, C, D

因為它說

在鏈重組的情況下,訂閱將發出新鏈的所有新標頭。因此,訂閱可以在同一高度發出多個標頭。

如果發生重組,您是否訂閱了 PUB/SUB 功能

{"id": 1, "method": "eth_subscribe", "params": ["newHeads", {}]}

您將開始獲得新的塊。

1, 2, 3, 4, …

在重組時,將返回相同的先前塊。例如

1, 2, 3, 4, 2, 3, 4, 5, …

請注意2, 3,4被第二次發送。這意味著他們被重組了。

要模擬這一點,您需要分解程式碼。在 golang 中,你可以有一個函式來接收帶有新塊號的通道,並完全解耦連接到乙太坊節點和接收節點。

在 javascript 中,您可以使用回調函式來模擬這一點,但您仍然需要編寫可測試的程式碼。

基本上我的建議是編寫可測試的程式碼,並將讀取訂閱與處理新塊分離。模擬重組非常困難,模擬乙太坊節點也不舒服。最簡單的事情是將您的程式碼設計為可測試的。

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