@lodestar/beacon-node 1.33.0-dev.f3e21c7679 → 1.33.0-peerDAS.00a7126d44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/impl/beacon/blocks/index.js +144 -40
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/debug/index.d.ts +1 -1
- package/lib/api/impl/debug/index.js +24 -1
- package/lib/api/impl/debug/index.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.d.ts +1 -1
- package/lib/chain/archiveStore/archiveStore.js +2 -2
- package/lib/chain/archiveStore/interface.d.ts +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.js +88 -23
- package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
- package/lib/chain/beaconProposerCache.d.ts +1 -0
- package/lib/chain/beaconProposerCache.js +3 -0
- package/lib/chain/beaconProposerCache.js.map +1 -1
- package/lib/chain/blocks/importBlock.js +61 -6
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +69 -24
- package/lib/chain/blocks/types.js +40 -6
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.js +21 -10
- package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.js +89 -15
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/chain.d.ts +16 -5
- package/lib/chain/chain.js +42 -9
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +18 -2
- package/lib/chain/emitter.js +13 -0
- package/lib/chain/emitter.js.map +1 -1
- package/lib/chain/errors/dataColumnSidecarError.d.ts +69 -0
- package/lib/chain/errors/dataColumnSidecarError.js +21 -0
- package/lib/chain/errors/dataColumnSidecarError.js.map +1 -0
- package/lib/chain/errors/index.d.ts +1 -0
- package/lib/chain/errors/index.js +1 -0
- package/lib/chain/errors/index.js.map +1 -1
- package/lib/chain/interface.d.ts +10 -4
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/options.d.ts +4 -1
- package/lib/chain/options.js +5 -1
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/prepareNextSlot.js +1 -1
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +4 -2
- package/lib/chain/produceBlock/produceBlockBody.js +7 -2
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts +3 -2
- package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js +25 -2
- package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts +64 -18
- package/lib/chain/seenCache/seenGossipBlockInput.js +321 -53
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts +28 -0
- package/lib/chain/validation/dataColumnSidecar.js +248 -0
- package/lib/chain/validation/dataColumnSidecar.js.map +1 -0
- package/lib/constants/network.d.ts +1 -0
- package/lib/constants/network.js +2 -0
- package/lib/constants/network.js.map +1 -1
- package/lib/db/beacon.d.ts +3 -1
- package/lib/db/beacon.js +3 -1
- package/lib/db/beacon.js.map +1 -1
- package/lib/db/buckets.d.ts +3 -1
- package/lib/db/buckets.js +2 -0
- package/lib/db/buckets.js.map +1 -1
- package/lib/db/interface.d.ts +3 -1
- package/lib/db/repositories/dataColumnSidecars.d.ts +47 -0
- package/lib/db/repositories/dataColumnSidecars.js +40 -0
- package/lib/db/repositories/dataColumnSidecars.js.map +1 -0
- package/lib/db/repositories/dataColumnSidecarsArchive.d.ts +15 -0
- package/lib/db/repositories/dataColumnSidecarsArchive.js +23 -0
- package/lib/db/repositories/dataColumnSidecarsArchive.js.map +1 -0
- package/lib/db/repositories/index.d.ts +2 -0
- package/lib/db/repositories/index.js +2 -0
- package/lib/db/repositories/index.js.map +1 -1
- package/lib/execution/builder/http.d.ts +1 -0
- package/lib/execution/builder/http.js +3 -0
- package/lib/execution/builder/http.js.map +1 -1
- package/lib/execution/builder/interface.d.ts +1 -0
- package/lib/execution/engine/http.d.ts +5 -3
- package/lib/execution/engine/http.js +70 -31
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +4 -2
- package/lib/execution/engine/interface.js +1 -1
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/execution/engine/mock.d.ts +1 -0
- package/lib/execution/engine/mock.js +5 -0
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/types.d.ts +10 -0
- package/lib/execution/engine/types.js +6 -0
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +15 -1
- package/lib/metrics/metrics/beacon.js +58 -1
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +27 -1
- package/lib/metrics/metrics/lodestar.js +44 -0
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/core/metrics.d.ts +10 -3
- package/lib/network/core/metrics.js +22 -4
- package/lib/network/core/metrics.js.map +1 -1
- package/lib/network/core/networkCore.d.ts +8 -3
- package/lib/network/core/networkCore.js +24 -10
- package/lib/network/core/networkCore.js.map +1 -1
- package/lib/network/core/networkCoreWorker.js +1 -0
- package/lib/network/core/networkCoreWorker.js.map +1 -1
- package/lib/network/core/networkCoreWorkerHandler.d.ts +4 -3
- package/lib/network/core/networkCoreWorkerHandler.js +4 -0
- package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
- package/lib/network/core/types.d.ts +6 -4
- package/lib/network/events.d.ts +4 -2
- package/lib/network/events.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +8 -1
- package/lib/network/gossip/interface.js +1 -0
- package/lib/network/gossip/interface.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +1047 -1031
- package/lib/network/gossip/topic.js +20 -1
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +13 -1
- package/lib/network/metadata.d.ts +9 -5
- package/lib/network/metadata.js +25 -5
- package/lib/network/metadata.js.map +1 -1
- package/lib/network/network.d.ts +12 -2
- package/lib/network/network.js +59 -8
- package/lib/network/network.js.map +1 -1
- package/lib/network/networkConfig.d.ts +25 -0
- package/lib/network/networkConfig.js +29 -0
- package/lib/network/networkConfig.js.map +1 -0
- package/lib/network/options.d.ts +1 -0
- package/lib/network/options.js +5 -0
- package/lib/network/options.js.map +1 -1
- package/lib/network/peers/discover.d.ts +10 -4
- package/lib/network/peers/discover.js +116 -15
- package/lib/network/peers/discover.js.map +1 -1
- package/lib/network/peers/peerManager.d.ts +10 -4
- package/lib/network/peers/peerManager.js +135 -21
- package/lib/network/peers/peerManager.js.map +1 -1
- package/lib/network/peers/peersData.d.ts +17 -3
- package/lib/network/peers/peersData.js.map +1 -1
- package/lib/network/peers/score/constants.d.ts +3 -1
- package/lib/network/peers/score/constants.js +3 -1
- package/lib/network/peers/score/constants.js.map +1 -1
- package/lib/network/peers/score/interface.d.ts +6 -1
- package/lib/network/peers/score/interface.js.map +1 -1
- package/lib/network/peers/score/score.d.ts +7 -2
- package/lib/network/peers/score/score.js +39 -3
- package/lib/network/peers/score/score.js.map +1 -1
- package/lib/network/peers/score/store.d.ts +12 -1
- package/lib/network/peers/score/store.js +19 -2
- package/lib/network/peers/score/store.js.map +1 -1
- package/lib/network/peers/utils/assertPeerRelevance.d.ts +7 -3
- package/lib/network/peers/utils/assertPeerRelevance.js +10 -1
- package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
- package/lib/network/peers/utils/prioritizePeers.d.ts +18 -7
- package/lib/network/peers/utils/prioritizePeers.js +43 -7
- package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
- package/lib/network/processor/extractSlotRootFns.js +8 -1
- package/lib/network/processor/extractSlotRootFns.js.map +1 -1
- package/lib/network/processor/gossipHandlers.js +157 -9
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/index.js +5 -0
- package/lib/network/processor/gossipQueues/index.js.map +1 -1
- package/lib/network/processor/index.js +1 -0
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts +2 -2
- package/lib/network/reqresp/ReqRespBeaconNode.js +32 -9
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +16 -5
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +204 -14
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +32 -6
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +283 -28
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts +8 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +106 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts +6 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +57 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -0
- package/lib/network/reqresp/handlers/index.js +10 -0
- package/lib/network/reqresp/handlers/index.js.map +1 -1
- package/lib/network/reqresp/handlers/status.js +3 -2
- package/lib/network/reqresp/handlers/status.js.map +1 -1
- package/lib/network/reqresp/protocols.d.ts +4 -0
- package/lib/network/reqresp/protocols.js +20 -0
- package/lib/network/reqresp/protocols.js.map +1 -1
- package/lib/network/reqresp/rateLimit.js +11 -1
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/reqresp/types.d.ts +15 -8
- package/lib/network/reqresp/types.js +10 -3
- package/lib/network/reqresp/types.js.map +1 -1
- package/lib/network/statusCache.d.ts +5 -5
- package/lib/network/statusCache.js.map +1 -1
- package/lib/network/subnets/interface.d.ts +3 -0
- package/lib/network/subnets/interface.js +14 -1
- package/lib/network/subnets/interface.js.map +1 -1
- package/lib/network/subnets/syncnetsService.js +4 -5
- package/lib/network/subnets/syncnetsService.js.map +1 -1
- package/lib/node/nodejs.js +1 -0
- package/lib/node/nodejs.js.map +1 -1
- package/lib/sync/constants.d.ts +1 -1
- package/lib/sync/constants.js +4 -1
- package/lib/sync/constants.js.map +1 -1
- package/lib/sync/interface.d.ts +2 -2
- package/lib/sync/interface.js +1 -1
- package/lib/sync/interface.js.map +1 -1
- package/lib/sync/range/batch.d.ts +16 -2
- package/lib/sync/range/batch.js +38 -7
- package/lib/sync/range/batch.js.map +1 -1
- package/lib/sync/range/chain.d.ts +16 -1
- package/lib/sync/range/chain.js +110 -30
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/range/range.d.ts +3 -2
- package/lib/sync/range/range.js +9 -3
- package/lib/sync/range/range.js.map +1 -1
- package/lib/sync/range/utils/chainTarget.d.ts +5 -1
- package/lib/sync/range/utils/chainTarget.js +26 -1
- package/lib/sync/range/utils/chainTarget.js.map +1 -1
- package/lib/sync/range/utils/peerBalancer.d.ts +12 -5
- package/lib/sync/range/utils/peerBalancer.js +69 -10
- package/lib/sync/range/utils/peerBalancer.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts +8 -1
- package/lib/sync/unknownBlock.js +226 -69
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/remoteSyncType.d.ts +4 -4
- package/lib/sync/utils/remoteSyncType.js.map +1 -1
- package/lib/util/blobs.d.ts +23 -1
- package/lib/util/blobs.js +156 -1
- package/lib/util/blobs.js.map +1 -1
- package/lib/util/dataColumns.d.ts +135 -0
- package/lib/util/dataColumns.js +352 -0
- package/lib/util/dataColumns.js.map +1 -0
- package/lib/util/metadata.d.ts +4 -0
- package/lib/util/metadata.js +7 -0
- package/lib/util/metadata.js.map +1 -1
- package/lib/util/sszBytes.d.ts +1 -0
- package/lib/util/sszBytes.js +17 -0
- package/lib/util/sszBytes.js.map +1 -1
- package/package.json +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/chain/blocks/types.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/chain/blocks/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgD,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAoD,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAGjH,MAAM,CAAN,IAAY,cAOX;AAPD,WAAY,cAAc;IACxB,sBAAsB;IACtB,qCAAmB,CAAA;IACnB,6FAA6F;IAC7F,mDAAiC,CAAA;IACjC,iDAA+B,CAAA;IAC/B,8CAA4B,CAAA;AAC9B,CAAC,EAPW,cAAc,KAAd,cAAc,QAOzB;AAED,+CAA+C;AAC/C,MAAM,CAAN,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,0BAAW,CAAA;IACX,4CAA6B,CAAA;IAC7B,0CAA2B,CAAA;AAC7B,CAAC,EALW,WAAW,KAAX,WAAW,QAKtB;AAED,MAAM,CAAN,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,oCAAe,CAAA;IACf,kCAAa,CAAA;IACb,+CAA0B,CAAA;AAC5B,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,QAI5B;AAUD;;;;GAIG;AACH,8CAA8C;AAC9C,MAAM,CAAN,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,0BAAW,CAAA;IACX,4CAA6B,CAAA;IAC7B,0CAA2B,CAAA;AAC7B,CAAC,EALW,WAAW,KAAX,WAAW,QAKtB;AAeD;;;;GAIG;AACH,MAAM,CAAN,IAAY,iBAMX;AAND,WAAY,iBAAiB;IAC3B,sCAAiB,CAAA;IACjB,gCAAW,CAAA;IACX,sCAAiB,CAAA;IACjB,kDAA6B,CAAA;IAC7B,gDAA2B,CAAA;AAC7B,CAAC,EANW,iBAAiB,KAAjB,iBAAiB,QAM5B;AAmDD,MAAM,UAAU,kBAAkB,CAAC,MAAuB,EAAE,SAAe,EAAE,SAAe;IAC1F,OAAO,CACL,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,KAAK;QAC7C,+CAA+C;QAC/C,kBAAkB,CAAC,SAAS,CAAC,IAAI,kBAAkB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,qCAAqC,CAC9G,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO,CAAC,MAAuB,EAAE,KAAwB,EAAE,MAAmB;QAC5E,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAC3D,MAAM,KAAK,CAAC,yBAAyB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO;YACL,IAAI,EAAE,cAAc,CAAC,OAAO;YAC5B,KAAK;YACL,MAAM;SACP,CAAC;IACJ,CAAC;IAED,6FAA6F;IAC7F,wFAAwF;IACxF,kFAAkF;IAClF,EAAE;IACF,8FAA8F;IAC9F,yFAAyF;IACzF,cAAc,CAAC,MAAuB,EAAE,KAAwB,EAAE,MAAmB;QACnF,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YAC1D,MAAM,KAAK,CAAC,wBAAwB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO;YACL,IAAI,EAAE,cAAc,CAAC,cAAc;YACnC,KAAK;YACL,MAAM;SACP,CAAC;IACJ,CAAC;IAED,aAAa,CACX,MAAuB,EACvB,KAAwB,EACxB,MAAmB,EACnB,SAAkC;QAElC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YAC1D,MAAM,KAAK,CAAC,wBAAwB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO;YACL,IAAI,EAAE,cAAc,CAAC,aAAa;YAClC,KAAK;YACL,MAAM;YACN,SAAS;SACV,CAAC;IACJ,CAAC;IAED,WAAW,CACT,MAAuB,EACvB,KAAwB,EACxB,MAAmB,EACnB,UAAsB;QAEtB,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YAC1D,MAAM,KAAK,CAAC,wBAAwB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO;YACL,IAAI,EAAE,cAAc,CAAC,WAAW;YAChC,KAAK;YACL,MAAM;YACN,UAAU;SACX,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,UAAyB;IAC1D,MAAM,KAAK,GAAG,EAAE,CAAC;IAEjB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,KAAK,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,EAAC,KAAK,EAAC,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,gBAAqC,EACrC,aAA4B;IAE5B,MAAM,WAAW,GAAG,EAAE,CAAC;IACvB,MAAM,gBAAgB,GAAG,EAAE,CAAC;IAE5B,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,eAAe,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAClC,2DAA2D;YAC3D,MAAM,KAAK,CAAC,oCAAoC,KAAK,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,EAAC,UAAU,EAAE,iBAAiB,EAAE,eAAe,EAAC,GAAG,eAAe,CAAC;QACzE,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACpC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,EAAC,WAAW,EAAE,gBAAgB,EAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAN,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,+DAAI,CAAA;IACJ,iEAAK,CAAA;AACP,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,QAG/B;AAED,MAAM,CAAN,IAAY,qBASX;AATD,WAAY,qBAAqB;IAC/B,gFAAgF;IAChF,6EAAU,CAAA;IACV;;;;OAIG;IACH,iEAAI,CAAA;AACN,CAAC,EATW,qBAAqB,KAArB,qBAAqB,QAShC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { ForkName } from "@lodestar/params";
|
|
1
2
|
import { DataAvailabilityStatus, computeTimeAtSlot } from "@lodestar/state-transition";
|
|
2
3
|
import { ErrorAborted } from "@lodestar/utils";
|
|
3
4
|
import { BlockError, BlockErrorCode } from "../errors/index.js";
|
|
4
5
|
import { validateBlobSidecars } from "../validation/blobSidecar.js";
|
|
5
|
-
import {
|
|
6
|
+
import { validateDataColumnsSidecars } from "../validation/dataColumnSidecar.js";
|
|
7
|
+
import { BlobSidecarValidation, BlockInputType, getBlockInput, } from "./types.js";
|
|
6
8
|
// we can now wait for full 12 seconds because unavailable block sync will try pulling
|
|
7
9
|
// the blobs from the network anyway after 500ms of seeing the block
|
|
8
10
|
const BLOB_AVAILABILITY_TIMEOUT = 12_000;
|
|
@@ -64,17 +66,26 @@ async function maybeValidateBlobs(chain, blockInput, signal, opts) {
|
|
|
64
66
|
// run full validation
|
|
65
67
|
const { block } = blockInput;
|
|
66
68
|
const blockSlot = block.message.slot;
|
|
67
|
-
const blobsData = blockInput.type === BlockInputType.availableData
|
|
68
|
-
? blockInput.blockData
|
|
69
|
-
: await raceWithCutoff(chain, blockInput, blockInput.cachedData.availabilityPromise, signal);
|
|
70
|
-
const { blobs } = blobsData;
|
|
71
69
|
const { blobKzgCommitments } = block.message.body;
|
|
72
70
|
const beaconBlockRoot = chain.config.getForkTypes(blockSlot).BeaconBlock.hashTreeRoot(block.message);
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
71
|
+
const blockData = blockInput.type === BlockInputType.availableData
|
|
72
|
+
? blockInput.blockData
|
|
73
|
+
: await raceWithCutoff(chain, blockInput, blockInput.cachedData.availabilityPromise, signal);
|
|
74
|
+
if (blockData.fork === ForkName.deneb || blockData.fork === ForkName.electra) {
|
|
75
|
+
const { blobs } = blockData;
|
|
76
|
+
// if the blob sidecars have been individually verified then we can skip kzg proof check
|
|
77
|
+
// but other checks to match blobs with block data still need to be performed
|
|
78
|
+
const skipProofsCheck = opts.validBlobSidecars === BlobSidecarValidation.Individual;
|
|
79
|
+
await validateBlobSidecars(blockSlot, beaconBlockRoot, blobKzgCommitments, blobs, { skipProofsCheck });
|
|
80
|
+
}
|
|
81
|
+
else if (blockData.fork === ForkName.fulu) {
|
|
82
|
+
const { dataColumns } = blockData;
|
|
83
|
+
const skipProofsCheck = opts.validBlobSidecars === BlobSidecarValidation.Individual;
|
|
84
|
+
await validateDataColumnsSidecars(blockSlot, beaconBlockRoot, blobKzgCommitments, dataColumns, chain.metrics, {
|
|
85
|
+
skipProofsCheck,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
const availableBlockInput = getBlockInput.availableData(chain.config, blockInput.block, blockInput.source, blockData);
|
|
78
89
|
return { dataAvailabilityStatus: DataAvailabilityStatus.Available, availableBlockInput: availableBlockInput };
|
|
79
90
|
}
|
|
80
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlocksDataAvailability.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksDataAvailability.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,sBAAsB,EAAE,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAErF,OAAO,EAAC,YAAY,EAAS,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAC,oBAAoB,EAAC,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAC,qBAAqB,
|
|
1
|
+
{"version":3,"file":"verifyBlocksDataAvailability.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksDataAvailability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { ForkName, NUMBER_OF_COLUMNS } from "@lodestar/params";
|
|
2
|
+
import { ssz } from "@lodestar/types";
|
|
1
3
|
import { toRootHex } from "@lodestar/utils";
|
|
4
|
+
import { toHex } from "@lodestar/utils";
|
|
2
5
|
import { BlockInputType } from "./types.js";
|
|
3
6
|
/**
|
|
4
7
|
* Persists block input data to DB. This operation must be eventually completed if a block is imported to the fork-choice.
|
|
@@ -26,22 +29,68 @@ export async function writeBlockInputToDb(blocksInput) {
|
|
|
26
29
|
this.logger.debug("Persist block to hot DB", {
|
|
27
30
|
slot: block.message.slot,
|
|
28
31
|
root: blockRootHex,
|
|
32
|
+
inputType: blockInput.type,
|
|
29
33
|
});
|
|
30
34
|
if (blockInput.type === BlockInputType.availableData || blockInput.type === BlockInputType.dataPromise) {
|
|
31
|
-
const
|
|
32
|
-
? blockInput.blockData
|
|
33
|
-
:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
const blockData = blockInput.type === BlockInputType.availableData
|
|
36
|
+
? blockInput.blockData
|
|
37
|
+
: await blockInput.cachedData.availabilityPromise;
|
|
38
|
+
// NOTE: Old data is pruned on archive
|
|
39
|
+
if (blockData.fork === ForkName.deneb || blockData.fork === ForkName.electra) {
|
|
40
|
+
const blobSidecars = blockData.blobs;
|
|
41
|
+
fnPromises.push(this.db.blobSidecars.add({ blockRoot, slot: block.message.slot, blobSidecars }));
|
|
42
|
+
this.logger.debug("Persisted blobSidecars to hot DB", {
|
|
43
|
+
blobsLen: blobSidecars.length,
|
|
44
|
+
slot: block.message.slot,
|
|
45
|
+
root: blockRootHex,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const { custodyConfig } = this;
|
|
50
|
+
const { custodyColumnsIndex, custodyColumns } = custodyConfig;
|
|
51
|
+
const blobsLen = block.message.body.blobKzgCommitments.length;
|
|
52
|
+
let dataColumnsLen;
|
|
53
|
+
let dataColumnsIndex;
|
|
54
|
+
if (blobsLen === 0) {
|
|
55
|
+
dataColumnsLen = 0;
|
|
56
|
+
dataColumnsIndex = new Uint8Array(NUMBER_OF_COLUMNS);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
dataColumnsLen = custodyColumns.length;
|
|
60
|
+
dataColumnsIndex = custodyColumnsIndex;
|
|
61
|
+
}
|
|
62
|
+
const blockDataColumns = blockData.dataColumns;
|
|
63
|
+
const dataColumnSidecars = blockDataColumns.filter((dataColumnSidecar) => custodyColumns.includes(dataColumnSidecar.index));
|
|
64
|
+
if (dataColumnSidecars.length !== dataColumnsLen) {
|
|
65
|
+
throw Error(`Invalid dataColumnSidecars=${dataColumnSidecars.length} for custody expected custodyColumnsLen=${dataColumnsLen}`);
|
|
66
|
+
}
|
|
67
|
+
const dataColumnsSize = ssz.fulu.DataColumnSidecar.minSize +
|
|
68
|
+
blobsLen * (ssz.fulu.Cell.fixedSize + ssz.deneb.KZGCommitment.fixedSize + ssz.deneb.KZGProof.fixedSize);
|
|
69
|
+
const slot = block.message.slot;
|
|
70
|
+
const writeData = {
|
|
71
|
+
blockRoot,
|
|
72
|
+
slot,
|
|
73
|
+
dataColumnsLen,
|
|
74
|
+
dataColumnsSize,
|
|
75
|
+
dataColumnsIndex,
|
|
76
|
+
dataColumnSidecars,
|
|
77
|
+
};
|
|
78
|
+
fnPromises.push(this.db.dataColumnSidecars.add(writeData));
|
|
79
|
+
this.logger.debug("Persisted dataColumnSidecars to hot DB", {
|
|
80
|
+
dataColumnsSize,
|
|
81
|
+
dataColumnsLen,
|
|
82
|
+
dataColumnSidecars: dataColumnSidecars.length,
|
|
83
|
+
slot: block.message.slot,
|
|
84
|
+
root: blockRootHex,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
42
87
|
}
|
|
43
88
|
}
|
|
44
89
|
await Promise.all(fnPromises);
|
|
90
|
+
this.logger.debug("Persisted blocksInput to db", {
|
|
91
|
+
blocksInput: blocksInput.length,
|
|
92
|
+
slots: blocksInput.map((blockInput) => blockInput.block.message.slot).join(" "),
|
|
93
|
+
});
|
|
45
94
|
}
|
|
46
95
|
/**
|
|
47
96
|
* Prunes eagerly persisted block inputs only if not known to the fork-choice
|
|
@@ -49,15 +98,39 @@ export async function writeBlockInputToDb(blocksInput) {
|
|
|
49
98
|
export async function removeEagerlyPersistedBlockInputs(blockInputs) {
|
|
50
99
|
const blockToRemove = [];
|
|
51
100
|
const blobsToRemove = [];
|
|
101
|
+
const dataColumnsToRemove = [];
|
|
52
102
|
for (const blockInput of blockInputs) {
|
|
53
103
|
const { block, type } = blockInput;
|
|
54
|
-
const
|
|
55
|
-
const
|
|
104
|
+
const slot = block.message.slot;
|
|
105
|
+
const blockRoot = this.config.getForkTypes(slot).BeaconBlock.hashTreeRoot(block.message);
|
|
106
|
+
const blockRootHex = toHex(blockRoot);
|
|
56
107
|
if (!this.forkChoice.hasBlockHex(blockRootHex)) {
|
|
57
108
|
blockToRemove.push(block);
|
|
58
109
|
if (type === BlockInputType.availableData) {
|
|
59
|
-
const
|
|
60
|
-
|
|
110
|
+
const { blockData } = blockInput;
|
|
111
|
+
if (blockData.fork === ForkName.deneb || blockData.fork === ForkName.electra) {
|
|
112
|
+
const blobSidecars = blockData.blobs;
|
|
113
|
+
blobsToRemove.push({ blockRoot, slot, blobSidecars });
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
const { custodyConfig } = this;
|
|
117
|
+
const { custodyColumnsIndex: dataColumnsIndex, custodyColumns } = custodyConfig;
|
|
118
|
+
const dataColumnsLen = custodyColumns.length;
|
|
119
|
+
const dataColumnSidecars = blockData.dataColumns.filter((dataColumnSidecar) => custodyColumns.includes(dataColumnSidecar.index));
|
|
120
|
+
if (dataColumnSidecars.length !== dataColumnsLen) {
|
|
121
|
+
throw Error(`Invalid dataColumnSidecars=${dataColumnSidecars.length} for custody expected custodyColumnsLen=${dataColumnsLen}`);
|
|
122
|
+
}
|
|
123
|
+
const blobsLen = block.message.body.blobKzgCommitments.length;
|
|
124
|
+
const dataColumnsSize = ssz.fulu.Cell.fixedSize * blobsLen;
|
|
125
|
+
dataColumnsToRemove.push({
|
|
126
|
+
blockRoot,
|
|
127
|
+
slot,
|
|
128
|
+
dataColumnsLen,
|
|
129
|
+
dataColumnsSize,
|
|
130
|
+
dataColumnsIndex,
|
|
131
|
+
dataColumnSidecars,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
61
134
|
}
|
|
62
135
|
}
|
|
63
136
|
}
|
|
@@ -65,6 +138,7 @@ export async function removeEagerlyPersistedBlockInputs(blockInputs) {
|
|
|
65
138
|
// TODO: Batch DB operations not with Promise.all but with level db ops
|
|
66
139
|
this.db.block.batchRemove(blockToRemove),
|
|
67
140
|
this.db.blobSidecars.batchRemove(blobsToRemove),
|
|
141
|
+
this.db.dataColumnSidecars.batchRemove(dataColumnsToRemove),
|
|
68
142
|
]);
|
|
69
143
|
}
|
|
70
144
|
//# sourceMappingURL=writeBlockInputToDb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writeBlockInputToDb.js","sourceRoot":"","sources":["../../../src/chain/blocks/writeBlockInputToDb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"writeBlockInputToDb.js","sourceRoot":"","sources":["../../../src/chain/blocks/writeBlockInputToDb.ts"],"names":[],"mappings":"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"}
|
package/lib/chain/chain.d.ts
CHANGED
|
@@ -3,15 +3,17 @@ import { CompositeTypeAny, TreeView, Type } from "@chainsafe/ssz";
|
|
|
3
3
|
import { BeaconConfig } from "@lodestar/config";
|
|
4
4
|
import { CheckpointWithHex, IForkChoice, ProtoBlock } from "@lodestar/fork-choice";
|
|
5
5
|
import { BeaconStateAllForks, CachedBeaconStateAllForks, EpochShuffling, Index2PubkeyCache } from "@lodestar/state-transition";
|
|
6
|
-
import { BeaconBlock, BlindedBeaconBlock, Epoch, Root, RootHex, SignedBeaconBlock, Slot, UintNum64, ValidatorIndex, Wei, deneb,
|
|
6
|
+
import { BeaconBlock, BlindedBeaconBlock, Epoch, Root, RootHex, SignedBeaconBlock, Slot, Status, UintNum64, ValidatorIndex, Wei, deneb, fulu } from "@lodestar/types";
|
|
7
7
|
import { Logger } from "@lodestar/utils";
|
|
8
8
|
import { ProcessShutdownCallback } from "@lodestar/validator";
|
|
9
|
+
import { PrivateKey } from "@libp2p/interface";
|
|
9
10
|
import { IBeaconDb } from "../db/index.js";
|
|
10
11
|
import { IEth1ForBlockProduction } from "../eth1/index.js";
|
|
11
12
|
import { IExecutionBuilder, IExecutionEngine } from "../execution/index.js";
|
|
12
13
|
import { Metrics } from "../metrics/index.js";
|
|
13
14
|
import { BufferPool } from "../util/bufferPool.js";
|
|
14
15
|
import { IClock } from "../util/clock.js";
|
|
16
|
+
import { CustodyConfig } from "../util/dataColumns.js";
|
|
15
17
|
import { SerializedCache } from "../util/serializedCache.js";
|
|
16
18
|
import { ArchiveStore } from "./archiveStore/archiveStore.js";
|
|
17
19
|
import { CheckpointBalancesCache } from "./balancesCache.js";
|
|
@@ -47,6 +49,7 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
47
49
|
readonly executionEngine: IExecutionEngine;
|
|
48
50
|
readonly executionBuilder?: IExecutionBuilder;
|
|
49
51
|
readonly config: BeaconConfig;
|
|
52
|
+
readonly custodyConfig: CustodyConfig;
|
|
50
53
|
readonly logger: Logger;
|
|
51
54
|
readonly metrics: Metrics | null;
|
|
52
55
|
readonly validatorMonitor: ValidatorMonitor | null;
|
|
@@ -81,7 +84,9 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
81
84
|
readonly checkpointBalancesCache: CheckpointBalancesCache;
|
|
82
85
|
readonly shufflingCache: ShufflingCache;
|
|
83
86
|
/** Map keyed by executionPayload.blockHash of the block for those blobs */
|
|
84
|
-
readonly producedContentsCache: Map<string, deneb.Contents
|
|
87
|
+
readonly producedContentsCache: Map<string, deneb.Contents & {
|
|
88
|
+
cells?: fulu.Cell[][];
|
|
89
|
+
}>;
|
|
85
90
|
readonly producedBlockRoot: Map<string, import("@chainsafe/ssz").ValueOfFields<{
|
|
86
91
|
transactions: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteListType>;
|
|
87
92
|
parentHash: import("@chainsafe/ssz").ByteVectorType;
|
|
@@ -173,7 +178,11 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
173
178
|
protected readonly db: IBeaconDb;
|
|
174
179
|
private abortController;
|
|
175
180
|
private processShutdownCallback;
|
|
176
|
-
|
|
181
|
+
private _earliestAvailableSlot;
|
|
182
|
+
get earliestAvailableSlot(): Slot;
|
|
183
|
+
set earliestAvailableSlot(slot: Slot);
|
|
184
|
+
constructor(opts: IChainOptions, { privateKey, config, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, validatorMonitor, anchorState, eth1, executionEngine, executionBuilder, }: {
|
|
185
|
+
privateKey: PrivateKey;
|
|
177
186
|
config: BeaconConfig;
|
|
178
187
|
db: IBeaconDb;
|
|
179
188
|
dbName: string;
|
|
@@ -271,10 +280,12 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
271
280
|
* kzg_aggregated_proof=compute_proof_from_blobs(blobs),
|
|
272
281
|
* )
|
|
273
282
|
*/
|
|
274
|
-
getContents(beaconBlock: deneb.BeaconBlock): deneb.Contents
|
|
283
|
+
getContents(beaconBlock: deneb.BeaconBlock): deneb.Contents & {
|
|
284
|
+
cells?: fulu.Cell[][];
|
|
285
|
+
};
|
|
275
286
|
processBlock(block: BlockInput, opts?: ImportBlockOpts): Promise<void>;
|
|
276
287
|
processChainSegment(blocks: BlockInput[], opts?: ImportBlockOpts): Promise<void>;
|
|
277
|
-
getStatus():
|
|
288
|
+
getStatus(): Status;
|
|
278
289
|
recomputeForkChoiceHead(caller: ForkchoiceCaller): ProtoBlock;
|
|
279
290
|
predictProposerHead(slot: Slot): ProtoBlock;
|
|
280
291
|
getProposerHead(slot: Slot): ProtoBlock;
|
package/lib/chain/chain.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { PubkeyIndexMap } from "@chainsafe/pubkey-index-map";
|
|
3
3
|
import { ExecutionStatus, UpdateHeadOpt } from "@lodestar/fork-choice";
|
|
4
|
-
import { ForkSeq, GENESIS_SLOT, SLOTS_PER_EPOCH, isForkPostElectra } from "@lodestar/params";
|
|
4
|
+
import { ForkSeq, GENESIS_SLOT, SLOTS_PER_EPOCH, isForkPostElectra, isForkPostFulu } from "@lodestar/params";
|
|
5
5
|
import { computeAnchorCheckpoint, computeEndSlotAtEpoch, computeEpochAtSlot, computeStartSlotAtEpoch, createCachedBeaconState, getEffectiveBalanceIncrementsZeroInactive, isCachedBeaconState, processSlots, } from "@lodestar/state-transition";
|
|
6
6
|
import { isBlindedBeaconBlock, } from "@lodestar/types";
|
|
7
7
|
import { fromHex, gweiToWei, isErrorAborted, pruneSetToMax, sleep, toRootHex } from "@lodestar/utils";
|
|
8
8
|
import { GENESIS_EPOCH, ZERO_HASH } from "../constants/index.js";
|
|
9
|
+
import { computeNodeIdFromPrivateKey } from "../network/subnets/interface.js";
|
|
9
10
|
import { BufferPool } from "../util/bufferPool.js";
|
|
10
11
|
import { Clock, ClockEvent } from "../util/clock.js";
|
|
12
|
+
import { CustodyConfig, getValidatorsCustodyRequirement } from "../util/dataColumns.js";
|
|
11
13
|
import { ensureDir, writeIfNotExist } from "../util/file.js";
|
|
12
14
|
import { isOptimisticBlock } from "../util/forkChoice.js";
|
|
13
15
|
import { SerializedCache } from "../util/serializedCache.js";
|
|
@@ -50,14 +52,22 @@ import { PersistentCheckpointStateCache } from "./stateCache/persistentCheckpoin
|
|
|
50
52
|
*/
|
|
51
53
|
const DEFAULT_MAX_CACHED_PRODUCED_ROOTS = 4;
|
|
52
54
|
export class BeaconChain {
|
|
53
|
-
|
|
55
|
+
get earliestAvailableSlot() {
|
|
56
|
+
return this._earliestAvailableSlot;
|
|
57
|
+
}
|
|
58
|
+
set earliestAvailableSlot(slot) {
|
|
59
|
+
if (this._earliestAvailableSlot !== slot) {
|
|
60
|
+
this._earliestAvailableSlot = slot;
|
|
61
|
+
this.emitter.emit(ChainEvent.updateStatus);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
constructor(opts, { privateKey, config, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, validatorMonitor, anchorState, eth1, executionEngine, executionBuilder, }) {
|
|
54
65
|
this.opPool = new OpPool();
|
|
55
66
|
// Gossip seen cache
|
|
56
67
|
this.seenAttesters = new SeenAttesters();
|
|
57
68
|
this.seenAggregators = new SeenAggregators();
|
|
58
69
|
this.seenBlockProposers = new SeenBlockProposers();
|
|
59
70
|
this.seenSyncCommitteeMessages = new SeenSyncCommitteeMessages();
|
|
60
|
-
this.seenGossipBlockInput = new SeenGossipBlockInput();
|
|
61
71
|
// Seen cache for liveness checks
|
|
62
72
|
this.seenBlockAttesters = new SeenBlockAttesters();
|
|
63
73
|
/** Map keyed by executionPayload.blockHash of the block for those blobs */
|
|
@@ -98,6 +108,9 @@ export class BeaconChain {
|
|
|
98
108
|
this.seenAggregatedAttestations = new SeenAggregatedAttestations(metrics);
|
|
99
109
|
this.seenContributionAndProof = new SeenContributionAndProof(metrics);
|
|
100
110
|
this.seenAttestationDatas = new SeenAttestationDatas(metrics, this.opts?.attDataCacheSlotDistance);
|
|
111
|
+
const nodeId = computeNodeIdFromPrivateKey(privateKey);
|
|
112
|
+
this.custodyConfig = new CustodyConfig(nodeId, config, metrics, this.opts);
|
|
113
|
+
this.seenGossipBlockInput = new SeenGossipBlockInput(this.custodyConfig, this.executionEngine, emitter, clock, logger);
|
|
101
114
|
this.beaconProposerCache = new BeaconProposerCache(opts);
|
|
102
115
|
this.checkpointBalancesCache = new CheckpointBalancesCache();
|
|
103
116
|
this.seenBlockInputCache = new SeenBlockInputCache({
|
|
@@ -120,6 +133,7 @@ export class BeaconChain {
|
|
|
120
133
|
pubkey2index: new PubkeyIndexMap(),
|
|
121
134
|
index2pubkey: [],
|
|
122
135
|
});
|
|
136
|
+
this._earliestAvailableSlot = cachedState.slot;
|
|
123
137
|
this.shufflingCache = cachedState.epochCtx.shufflingCache = new ShufflingCache(metrics, logger, this.opts, [
|
|
124
138
|
{
|
|
125
139
|
shuffling: cachedState.epochCtx.previousShuffling,
|
|
@@ -502,7 +516,7 @@ export class BeaconChain {
|
|
|
502
516
|
const head = this.forkChoice.getHead();
|
|
503
517
|
const finalizedCheckpoint = this.forkChoice.getFinalizedCheckpoint();
|
|
504
518
|
const boundary = this.config.getForkBoundaryAtEpoch(this.clock.currentEpoch);
|
|
505
|
-
|
|
519
|
+
const status = {
|
|
506
520
|
// fork_digest: The node's ForkDigest (compute_fork_digest(current_fork_version, genesis_validators_root)) where
|
|
507
521
|
// - current_fork_version is the fork version at the node's current epoch defined by the wall-clock time (not necessarily the epoch to which the node is sync)
|
|
508
522
|
// - genesis_validators_root is the static Root found in state.genesis_validators_root
|
|
@@ -515,15 +529,19 @@ export class BeaconChain {
|
|
|
515
529
|
headRoot: fromHex(head.blockRoot),
|
|
516
530
|
headSlot: head.slot,
|
|
517
531
|
};
|
|
532
|
+
if (isForkPostFulu(boundary.fork)) {
|
|
533
|
+
status.earliestAvailableSlot = this._earliestAvailableSlot;
|
|
534
|
+
}
|
|
535
|
+
return status;
|
|
518
536
|
}
|
|
519
537
|
recomputeForkChoiceHead(caller) {
|
|
520
538
|
this.metrics?.forkChoice.requests.inc();
|
|
521
539
|
const timer = this.metrics?.forkChoice.findHead.startTimer({ caller });
|
|
522
540
|
try {
|
|
523
|
-
return this.forkChoice.updateAndGetHead({ mode: UpdateHeadOpt.
|
|
541
|
+
return this.forkChoice.updateAndGetHead({ mode: UpdateHeadOpt.GetCanonicalHead }).head;
|
|
524
542
|
}
|
|
525
543
|
catch (e) {
|
|
526
|
-
this.metrics?.forkChoice.errors.inc({ entrypoint: UpdateHeadOpt.
|
|
544
|
+
this.metrics?.forkChoice.errors.inc({ entrypoint: UpdateHeadOpt.GetCanonicalHead });
|
|
527
545
|
throw e;
|
|
528
546
|
}
|
|
529
547
|
finally {
|
|
@@ -533,8 +551,9 @@ export class BeaconChain {
|
|
|
533
551
|
predictProposerHead(slot) {
|
|
534
552
|
this.metrics?.forkChoice.requests.inc();
|
|
535
553
|
const timer = this.metrics?.forkChoice.findHead.startTimer({ caller: FindHeadFnName.predictProposerHead });
|
|
554
|
+
const secFromSlot = this.clock.secFromSlot(slot);
|
|
536
555
|
try {
|
|
537
|
-
return this.forkChoice.updateAndGetHead({ mode: UpdateHeadOpt.GetPredictedProposerHead, slot }).head;
|
|
556
|
+
return this.forkChoice.updateAndGetHead({ mode: UpdateHeadOpt.GetPredictedProposerHead, secFromSlot, slot }).head;
|
|
538
557
|
}
|
|
539
558
|
catch (e) {
|
|
540
559
|
this.metrics?.forkChoice.errors.inc({ entrypoint: UpdateHeadOpt.GetPredictedProposerHead });
|
|
@@ -750,9 +769,10 @@ export class BeaconChain {
|
|
|
750
769
|
metrics.forkChoice.balancesLength.set(forkChoiceMetrics.balancesLength);
|
|
751
770
|
metrics.forkChoice.nodes.set(forkChoiceMetrics.nodes);
|
|
752
771
|
metrics.forkChoice.indices.set(forkChoiceMetrics.indices);
|
|
753
|
-
const
|
|
772
|
+
const headState = this.getHeadState();
|
|
773
|
+
const fork = this.config.getForkName(headState.slot);
|
|
754
774
|
if (isForkPostElectra(fork)) {
|
|
755
|
-
const headStateElectra =
|
|
775
|
+
const headStateElectra = headState;
|
|
756
776
|
metrics.pendingDeposits.set(headStateElectra.pendingDeposits.length);
|
|
757
777
|
metrics.pendingPartialWithdrawals.set(headStateElectra.pendingPartialWithdrawals.length);
|
|
758
778
|
metrics.pendingConsolidations.set(headStateElectra.pendingConsolidations.length);
|
|
@@ -829,6 +849,19 @@ export class BeaconChain {
|
|
|
829
849
|
}
|
|
830
850
|
if (headState) {
|
|
831
851
|
this.opPool.pruneAll(headBlock, headState);
|
|
852
|
+
// Disable dynamic custody updates for supernodes since they must maintain custody
|
|
853
|
+
// of all custody groups regardless of validator effective balances
|
|
854
|
+
if (!this.opts.supernode) {
|
|
855
|
+
// Update custody requirement based on finalized state
|
|
856
|
+
const validatorIndices = this.beaconProposerCache.getValidatorIndices();
|
|
857
|
+
const targetCustodyGroupCount = getValidatorsCustodyRequirement(headState, validatorIndices, this.config);
|
|
858
|
+
// only update if target is increased
|
|
859
|
+
if (targetCustodyGroupCount > this.custodyConfig.targetCustodyGroupCount) {
|
|
860
|
+
this.custodyConfig.updateTargetCustodyGroupCount(targetCustodyGroupCount);
|
|
861
|
+
this.logger.verbose(`Updated targetCustodyGroupCount=${this.custodyConfig.targetCustodyGroupCount}`);
|
|
862
|
+
this.emitter.emit(ChainEvent.updateTargetGroupCount, this.custodyConfig.targetCustodyGroupCount);
|
|
863
|
+
}
|
|
864
|
+
}
|
|
832
865
|
}
|
|
833
866
|
if (headState === null) {
|
|
834
867
|
this.logger.verbose("Head state is null");
|