Eth-2.0

Eth2 客戶端 Teku 缺少提案:MissingDepositsException

  • June 7, 2021

我的 Eth2 驗證器偶爾會遇到MissingDepositsException

現在我的驗證者第二次錯過了一個區塊提案,但有以下例外: tech.pegasys.teku.validator.coordinator.MissingDepositsException

設置:

此異常僅在某些時候發生。兩個半月前,我第一次遇到這個錯誤。然後我有 9 個沒有問題的塊提案,現在我又得到了錯誤。

此異常僅影響塊提案,在整個錯過的提案中,證明性能保持在 100%。

任何有關可能導致此異常發生的提示都將不勝感激!


異常日誌:

tech.pegasys.teku.validator.coordinator.MissingDepositsException: Unable to create block because ETH1 deposits are not available. Missing deposits 124010 to 165920
       at tech.pegasys.teku.validator.coordinator.MissingDepositsException.missingRange(MissingDepositsException.java:31) ~[teku-validator-coordinator-21.4.1.jar:21.4.1]
       at tech.pegasys.teku.validator.coordinator.DepositProvider.checkRequiredDepositsAvailable(DepositProvider.java:159) ~[teku-validator-coordinator-21.4.1.jar:21.4.1]
       at tech.pegasys.teku.validator.coordinator.DepositProvider.getDeposits(DepositProvider.java:138) ~[teku-validator-coordinator-21.4.1.jar:21.4.1]
       at tech.pegasys.teku.validator.coordinator.BlockFactory.createUnsignedBlock(BlockFactory.java:117) ~[teku-validator-coordinator-21.4.1.jar:21.4.1]
       at tech.pegasys.teku.validator.coordinator.ValidatorApiHandler.createBlock(ValidatorApiHandler.java:269) ~[teku-validator-coordinator-21.4.1.jar:21.4.1]
       at tech.pegasys.teku.validator.coordinator.ValidatorApiHandler.lambda$createUnsignedBlock$11(ValidatorApiHandler.java:252) ~[teku-validator-coordinator-21.4.1.jar:21.4.1]
       at tech.pegasys.teku.infrastructure.async.SafeFuture.lambda$thenApplyChecked$28(SafeFuture.java:410) ~[teku-infrastructure-async-21.4.1.jar:21.4.1]
       at java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072) ~[?:?]
       at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) ~[?:?]
       at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073) ~[?:?]
       at tech.pegasys.teku.dataproviders.generators.CachingTaskQueue.lambda$completePendingTask$9(CachingTaskQueue.java:204) ~[teku-ethereum-dataproviders-21.4.1.jar:21.4.1]
       at tech.pegasys.teku.infrastructure.async.SafeFuture.fromRunnable(SafeFuture.java:154) ~[teku-infrastructure-async-21.4.1.jar:21.4.1]
       at tech.pegasys.teku.infrastructure.async.AsyncRunner.lambda$runAsync$0(AsyncRunner.java:23) ~[teku-infrastructure-async-21.4.1.jar:21.4.1]
       at tech.pegasys.teku.infrastructure.async.SafeFuture.of(SafeFuture.java:73) ~[teku-infrastructure-async-21.4.1.jar:21.4.1]
       at tech.pegasys.teku.infrastructure.async.ScheduledExecutorAsyncRunner.lambda$createRunnableForAction$1(ScheduledExecutorAsyncRunner.java:119) ~[teku-infrastructure-async-21.4.1.jar:21.4.1]
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
       at java.lang.Thread.run(Thread.java:829) [?:?]

此錯誤表明 eth1 節點在查詢時失去或未能提供存款事件的日誌。這對 Geth 來說是非常不尋常的,但如果它仍在同步,它可能是可能的。

如果有尚未包括的待處理存款,則只有在創建塊時失去存款才是一個問題。那是相當少的塊數,所以你很不幸兩次擊中它。

此時此錯誤不太可能自行解決,因為 Teku 不會在鏈中向後查詢以查找舊存款,因為 API 最初應該提供這些存款,並且查詢大範圍的鏈非常昂貴。

我建議升級到最新的 Teku(目前是 21.5.0)並重新同步信標節點以強制它再次從鏈開始掃描存款事件 - 如果 Geth 仍然沒有返回它們,最新的 Teku 應該會產生一個非常清除錯誤作為重新同步的一部分。幸運的是,使用快照同步功能可以在幾分鐘內完成重新同步。作為額外的好處,您可以將數據庫遷移到使用更少記憶體的 LevelDB。只需按照https://docs.teku.consensys.net/en/latest/HowTo/Migrate-Database/上的說明進行操作

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