Geth Websocket 重組期間的行為
我對重組期間 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 中,您可以使用回調函式來模擬這一點,但您仍然需要編寫可測試的程式碼。
基本上我的建議是編寫可測試的程式碼,並將讀取訂閱與處理新塊分離。模擬重組非常困難,模擬乙太坊節點也不舒服。最簡單的事情是將您的程式碼設計為可測試的。