Go-Ethereum

乙太坊快速同步是否可以獲取日誌

  • July 27, 2020

我想通過過濾偶數傳輸事件來獲取合約地址的日誌。我不能使用 Infura 的限制和限制。所以我想為自己同步我自己的乙太坊節點。由於我自己對節點的要求是查詢其數據庫以獲取傳輸事件,所以快速同步節點對我來說就足夠了,還是我必須進入完全同步模式?

請注意,同步優化取決於客戶端,而不是乙太坊,因此每個客戶端都實現了自己的優化方法。

當您說快速同步時,我認為您指的是geth快速同步現在是 geth 的預設同步模式,它是一種對要同步的對象進行優先級排序的方法,以便您可以更快地開始使用鏈。

特別是,在 geth 的快速同步中,您開始向其他客戶端詢問網路狀態,而不是所有事務。一旦您擁有所有最近的狀態,您的客戶就會開始詢問所有交易,並開始在後台為您驗證每個狀態。在此過程結束時,您將擁有一個完整的完整節點。

提示:如果您真的對特定的智能合約感興趣,您還可以查看geth 1.9.14txlookuplimit引入的參數。此功能可以大大減少節點儲存索引數據庫所需的空間。

乙太坊主網目前包含超過 7 億筆交易。每個全節點都維護一個搜尋索引,說明交易hash H 儲存在block B. 這使您可以查找過去的任意交易(以顯著的儲存成本)。但是,您多久查看一次多年前的交易?

Geth v1.9.14 提供了一個--txlookuplimit標誌,它指定了您要為其維護搜尋索引的最近塊的數量(預設情況下它是0= since genesis)。在最極端的情況下,您可以將其設置為1, 以修剪所有過去的索引。在發佈時,這將您的 LevelDB SSD 佔用空間減少了 32GB!您可以隨意修改此標誌,Geth 將根據目前設置在後台取消索引/重新索引。 如果您取消索引大量事務,您可能需要壓縮數據庫以立即通過 debug.chaindbCompact() 回收空間。

在本地刪除事務索引很好,因為它們既不用於共識也不用於同步,因此網路健康不受影響。輕量級伺服器目前確實需要維護完整索引,因為輕量級客戶端依賴於它們。@rjl493456442@holiman為這項工作提供了巨大的支持 ( # 20302 )。

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