@lodestar/beacon-node 1.22.0-dev.ba80aa345a → 1.22.0-dev.d3d61af6bd
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 +22 -10
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +31 -4
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/api/impl/config/constants.d.ts +5 -1
- package/lib/api/impl/config/constants.js +7 -2
- package/lib/api/impl/config/constants.js.map +1 -1
- package/lib/api/impl/lodestar/index.js +2 -2
- package/lib/api/impl/lodestar/index.js.map +1 -1
- package/lib/api/impl/validator/index.js +37 -14
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/archiver/archiveBlocks.js +6 -7
- package/lib/chain/archiver/archiveBlocks.js.map +1 -1
- package/lib/chain/archiver/archiveStates.d.ts +3 -1
- package/lib/chain/archiver/archiveStates.js +6 -3
- package/lib/chain/archiver/archiveStates.js.map +1 -1
- package/lib/chain/archiver/index.js +1 -1
- package/lib/chain/archiver/index.js.map +1 -1
- package/lib/chain/balancesCache.js +2 -2
- package/lib/chain/balancesCache.js.map +1 -1
- package/lib/chain/blocks/importBlock.js +10 -9
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/index.js +2 -2
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +2 -2
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +4 -4
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -6
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.js +3 -3
- package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.js +3 -3
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/chain.d.ts +42 -0
- package/lib/chain/chain.js +53 -22
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/errors/attestationError.d.ts +13 -1
- package/lib/chain/errors/attestationError.js +10 -2
- package/lib/chain/errors/attestationError.js.map +1 -1
- package/lib/chain/errors/blockError.js +3 -4
- package/lib/chain/errors/blockError.js.map +1 -1
- package/lib/chain/forkChoice/index.js +9 -9
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/historicalState/worker.js +4 -0
- package/lib/chain/historicalState/worker.js.map +1 -1
- package/lib/chain/initState.d.ts +3 -3
- package/lib/chain/initState.js +13 -13
- package/lib/chain/initState.js.map +1 -1
- package/lib/chain/interface.d.ts +2 -0
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/lightClient/index.js +9 -10
- package/lib/chain/lightClient/index.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts +46 -12
- package/lib/chain/opPools/aggregatedAttestationPool.js +229 -63
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/attestationPool.d.ts +22 -6
- package/lib/chain/opPools/attestationPool.js +61 -27
- package/lib/chain/opPools/attestationPool.js.map +1 -1
- package/lib/chain/opPools/opPool.d.ts +2 -2
- package/lib/chain/opPools/opPool.js +8 -6
- package/lib/chain/opPools/opPool.js.map +1 -1
- package/lib/chain/opPools/syncCommitteeMessagePool.js +4 -4
- package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
- package/lib/chain/opPools/syncContributionAndProofPool.js +4 -4
- package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
- package/lib/chain/opPools/utils.d.ts +2 -0
- package/lib/chain/opPools/utils.js +3 -0
- package/lib/chain/opPools/utils.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +7 -6
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/regen/queued.d.ts +6 -1
- package/lib/chain/regen/queued.js +41 -3
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/regen/regen.d.ts +1 -1
- package/lib/chain/regen/regen.js +50 -14
- package/lib/chain/regen/regen.js.map +1 -1
- package/lib/chain/seenCache/seenAttestationData.d.ts +13 -5
- package/lib/chain/seenCache/seenAttestationData.js +5 -3
- package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
- package/lib/chain/seenCache/seenCommitteeContribution.js +2 -3
- package/lib/chain/seenCache/seenCommitteeContribution.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js +3 -4
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/serializeState.d.ts +6 -0
- package/lib/chain/serializeState.js +22 -0
- package/lib/chain/serializeState.js.map +1 -0
- package/lib/chain/shufflingCache.js +2 -3
- package/lib/chain/shufflingCache.js.map +1 -1
- package/lib/chain/stateCache/blockStateCacheImpl.d.ts +1 -0
- package/lib/chain/stateCache/blockStateCacheImpl.js +8 -5
- package/lib/chain/stateCache/blockStateCacheImpl.js.map +1 -1
- package/lib/chain/stateCache/datastore/file.js +5 -5
- package/lib/chain/stateCache/datastore/file.js.map +1 -1
- package/lib/chain/stateCache/fifoBlockStateCache.d.ts +1 -0
- package/lib/chain/stateCache/fifoBlockStateCache.js +6 -3
- package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
- package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts +1 -0
- package/lib/chain/stateCache/inMemoryCheckpointsCache.js +7 -5
- package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +2 -2
- package/lib/chain/stateCache/persistentCheckpointsCache.js +35 -60
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/stateCache/types.d.ts +4 -0
- package/lib/chain/stateCache/types.js.map +1 -1
- package/lib/chain/validation/aggregateAndProof.d.ts +4 -4
- package/lib/chain/validation/aggregateAndProof.js +26 -9
- package/lib/chain/validation/aggregateAndProof.js.map +1 -1
- package/lib/chain/validation/attestation.d.ts +27 -6
- package/lib/chain/validation/attestation.js +115 -37
- package/lib/chain/validation/attestation.js.map +1 -1
- package/lib/chain/validation/attesterSlashing.js +2 -1
- package/lib/chain/validation/attesterSlashing.js.map +1 -1
- package/lib/chain/validation/blobSidecar.js +4 -4
- package/lib/chain/validation/blobSidecar.js.map +1 -1
- package/lib/chain/validation/block.js +3 -4
- package/lib/chain/validation/block.js.map +1 -1
- package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts +4 -3
- package/lib/chain/validation/signatureSets/aggregateAndProof.js +3 -2
- package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
- package/lib/chain/validation/syncCommittee.js +2 -2
- package/lib/chain/validation/syncCommittee.js.map +1 -1
- package/lib/eth1/eth1DepositDataTracker.d.ts +5 -2
- package/lib/eth1/eth1DepositDataTracker.js +13 -2
- package/lib/eth1/eth1DepositDataTracker.js.map +1 -1
- package/lib/eth1/eth1MergeBlockTracker.js +2 -3
- package/lib/eth1/eth1MergeBlockTracker.js.map +1 -1
- package/lib/eth1/index.d.ts +2 -0
- package/lib/eth1/index.js +8 -2
- package/lib/eth1/index.js.map +1 -1
- package/lib/eth1/interface.d.ts +4 -0
- package/lib/eth1/provider/eth1Provider.js +2 -3
- package/lib/eth1/provider/eth1Provider.js.map +1 -1
- package/lib/eth1/provider/utils.js +4 -5
- package/lib/eth1/provider/utils.js.map +1 -1
- package/lib/eth1/utils/depositContract.js +5 -5
- package/lib/eth1/utils/depositContract.js.map +1 -1
- package/lib/eth1/utils/deposits.d.ts +2 -2
- package/lib/eth1/utils/deposits.js +8 -7
- package/lib/eth1/utils/deposits.js.map +1 -1
- package/lib/eth1/utils/eth1Vote.js +2 -3
- package/lib/eth1/utils/eth1Vote.js.map +1 -1
- package/lib/execution/engine/http.d.ts +2 -2
- package/lib/execution/engine/http.js +19 -15
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +4 -4
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/execution/engine/mock.d.ts +1 -0
- package/lib/execution/engine/mock.js +6 -0
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/payloadIdCache.d.ts +17 -0
- package/lib/execution/engine/payloadIdCache.js.map +1 -1
- package/lib/execution/engine/types.d.ts +29 -3
- package/lib/execution/engine/types.js +81 -0
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +3 -0
- package/lib/metrics/metrics/beacon.js +6 -0
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +30 -3
- package/lib/metrics/metrics/lodestar.js +63 -4
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/metrics/validatorMonitor.d.ts +1 -1
- package/lib/metrics/validatorMonitor.js +15 -10
- package/lib/metrics/validatorMonitor.js.map +1 -1
- package/lib/network/core/networkCore.js +2 -3
- package/lib/network/core/networkCore.js.map +1 -1
- package/lib/network/gossip/encoding.js +6 -2
- package/lib/network/gossip/encoding.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +5 -5
- package/lib/network/gossip/interface.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +1720 -129
- package/lib/network/gossip/topic.js +5 -5
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +2 -2
- package/lib/network/network.d.ts +2 -2
- package/lib/network/network.js.map +1 -1
- package/lib/network/peers/utils/assertPeerRelevance.js +3 -3
- package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
- package/lib/network/processor/gossipHandlers.js +10 -11
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/index.js +5 -2
- package/lib/network/processor/gossipQueues/index.js.map +1 -1
- package/lib/network/processor/gossipQueues/indexed.js +1 -0
- package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +2 -2
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRoot.js +2 -2
- package/lib/network/reqresp/handlers/beaconBlocksByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +2 -2
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
- package/lib/sync/backfill/backfill.js +16 -17
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/range/chain.js +2 -3
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/range/range.js +4 -4
- package/lib/sync/range/range.js.map +1 -1
- package/lib/sync/range/utils/chainTarget.js +2 -2
- package/lib/sync/range/utils/chainTarget.js.map +1 -1
- package/lib/sync/range/utils/hashBlocks.js +4 -4
- package/lib/sync/range/utils/hashBlocks.js.map +1 -1
- package/lib/sync/unknownBlock.js +13 -14
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/util/bufferPool.d.ts +7 -2
- package/lib/util/bufferPool.js +13 -7
- package/lib/util/bufferPool.js.map +1 -1
- package/lib/util/sszBytes.d.ts +31 -8
- package/lib/util/sszBytes.js +85 -21
- package/lib/util/sszBytes.js.map +1 -1
- package/package.json +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seenGossipBlockInput.js","sourceRoot":"","sources":["../../../src/chain/seenCache/seenGossipBlockInput.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"seenGossipBlockInput.js","sourceRoot":"","sources":["../../../src/chain/seenCache/seenGossipBlockInput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAEvE,OAAO,EAAC,aAAa,EAAE,SAAS,EAAC,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAC,sBAAsB,EAAE,WAAW,EAAW,MAAM,kBAAkB,CAAC;AAE/E,OAAO,EAGL,aAAa,EACb,WAAW,EAGX,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAG5B,MAAM,CAAN,IAAY,4BAGX;AAHD,WAAY,4BAA4B;IACtC,iDAAiB,CAAA;IACjB,6DAA6B,CAAA;AAC/B,CAAC,EAHW,4BAA4B,KAA5B,4BAA4B,QAGvC;AAgBD,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC;;;;;;;;;;GAUG;AACH,MAAM,OAAO,oBAAoB;IAAjC;QACU,oBAAe,GAAG,IAAI,GAAG,EAAgC,CAAC;IAyIpE,CAAC;IAvIC,KAAK;QACH,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;IAC7D,CAAC;IAED,QAAQ,CAAC,SAAkB;QACzB,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,mBAAmB,CACjB,MAAuB,EACvB,aAAiC,EACjC,OAAuB;QAUvB,IAAI,QAAQ,CAAC;QACb,IAAI,UAAU,CAAC;QACf,IAAI,IAAI,CAAC;QAET,IAAI,aAAa,CAAC,IAAI,KAAK,iBAAiB,CAAC,KAAK,EAAE,CAAC;YACnD,MAAM,EAAC,WAAW,EAAE,UAAU,EAAC,GAAG,aAAa,CAAC;YAChD,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEpD,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YAClH,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAC;YAEtF,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC;YAC/B,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,EAAC,WAAW,EAAE,SAAS,EAAC,GAAG,aAAa,CAAC;YAC/C,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACnG,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEtE,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;YAChC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAC;YAEtF,sFAAsF;YACtF,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE;gBACvD,WAAW;gBACX,wEAAwE;gBACxE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC,IAAI,IAAI;aAC/D,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,EAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAC,GAAG,UAAU,CAAC;QAEtG,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,OAAO;oBACL,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,IAAI,IAAI,CAAC;oBAC9F,cAAc,EAAE,EAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAC;iBAChE,CAAC;YACJ,CAAC;YAED,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9D,MAAM,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,EAAC,UAAU,EAAE,mBAAmB,EAAC,GAAG,UAAU,CAAC;YAErD,uDAAuD;YACvD,MAAM,EAAC,IAAI,EAAE,IAAI,EAAC,GAAG,WAAW,CAAC,OAAO,CAAC;YACzC,MAAM,EAAC,kBAAkB,EAAC,GAAG,IAA6B,CAAC;YAC3D,MAAM,SAAS,GAAG,YAAY,QAAQ,UAAU,IAAI,EAAE,CAAC;YAEvD,IAAI,kBAAkB,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;gBAChD,MAAM,KAAK,CACT,uBAAuB,UAAU,CAAC,IAAI,qBAAqB,kBAAkB,CAAC,MAAM,QAAQ,SAAS,EAAE,CACxG,CAAC;YACJ,CAAC;YAED,IAAI,kBAAkB,CAAC,MAAM,KAAK,UAAU,CAAC,IAAI,EAAE,CAAC;gBAClD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;gBAChD,MAAM,SAAS,GAAG,EAAC,GAAG,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAC,CAAC;gBACxF,mBAAmB,CAAC,SAAS,CAAC,CAAC;gBAC/B,OAAO,EAAE,gBAAgB,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAC,MAAM,EAAE,4BAA4B,CAAC,MAAM,EAAC,CAAC,CAAC;gBACvG,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAC5C,MAAM,EACN,WAAW,EACX,WAAW,CAAC,MAAM,EAClB,UAAU,IAAI,IAAI,EAClB,SAAS,CACV,CAAC;gBAEF,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBAC9B,OAAO;oBACL,UAAU;oBACV,cAAc,EAAE,EAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,CAAC,MAAM,EAAC;iBAC5G,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAC1C,MAAM,EACN,WAAW,EACX,WAAW,CAAC,MAAM,EAClB,UAAU,IAAI,IAAI,EAClB,UAAU,CACX,CAAC;gBAEF,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBAC9B,OAAO;oBACL,UAAU;oBACV,cAAc,EAAE;wBACd,OAAO,EAAE,iBAAiB,CAAC,IAAI;wBAC/B,SAAS,EAAE,UAAU,CAAC,IAAI;wBAC1B,aAAa,EAAE,kBAAkB,CAAC,MAAM;qBACzC;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,4CAA4C;YAC5C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACrD,CAAC;YACD,MAAM,EAAC,UAAU,EAAC,GAAG,UAAU,CAAC;YAEhC,OAAO;gBACL,UAAU,EAAE;oBACV,KAAK,EAAE,IAAI;oBACX,YAAY,EAAE,QAAQ;oBACtB,UAAU;oBACV,iBAAiB;iBAClB;gBACD,cAAc,EAAE,EAAC,OAAO,EAAE,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAC;aACpG,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,SAAS,4BAA4B,CAAC,IAAc;IAClD,mFAAmF;IACnF,kGAAkG;IAClG,IAAI,iBAAiB,GAAyC,IAAI,CAAC;IACnE,MAAM,iBAAiB,GAAG,IAAI,OAAO,CAAa,CAAC,SAAS,EAAE,EAAE;QAC9D,iBAAiB,GAAG,SAAS,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC/B,MAAM,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,EAAC,IAAI,EAAE,iBAAiB,EAAE,iBAAiB,EAAC,CAAC;IACtD,CAAC;IAED,IAAI,mBAAmB,GAAkD,IAAI,CAAC;IAC9E,MAAM,mBAAmB,GAAG,IAAI,OAAO,CAAsB,CAAC,SAAS,EAAE,EAAE;QACzE,mBAAmB,GAAG,SAAS,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,IAAI,mBAAmB,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAe,EAAC,IAAI,EAAE,UAAU,EAAE,mBAAmB,EAAE,mBAAmB,EAAC,CAAC;IAC5F,OAAO,EAAC,IAAI,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CachedBeaconStateAllForks } from "@lodestar/state-transition";
|
|
2
|
+
import { AllocSource, BufferPool } from "../util/bufferPool.js";
|
|
3
|
+
type ProcessStateBytesFn<T> = (stateBytes: Uint8Array) => Promise<T>;
|
|
4
|
+
export declare function serializeState<T>(state: CachedBeaconStateAllForks, source: AllocSource, processFn: ProcessStateBytesFn<T>, bufferPool?: BufferPool | null): Promise<T>;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=serializeState.d.ts.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Serialize state using the BufferPool if provided.
|
|
3
|
+
*/
|
|
4
|
+
export async function serializeState(state, source, processFn, bufferPool) {
|
|
5
|
+
const size = state.type.tree_serializedSize(state.node);
|
|
6
|
+
let stateBytes = null;
|
|
7
|
+
if (bufferPool) {
|
|
8
|
+
const bufferWithKey = bufferPool.alloc(size, source);
|
|
9
|
+
if (bufferWithKey) {
|
|
10
|
+
stateBytes = bufferWithKey.buffer;
|
|
11
|
+
const dataView = new DataView(stateBytes.buffer, stateBytes.byteOffset, stateBytes.byteLength);
|
|
12
|
+
state.serializeToBytes({ uint8Array: stateBytes, dataView }, 0);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
if (!stateBytes) {
|
|
16
|
+
// we already have metrics in BufferPool so no need to do it here
|
|
17
|
+
stateBytes = state.serialize();
|
|
18
|
+
}
|
|
19
|
+
return processFn(stateBytes);
|
|
20
|
+
// release the buffer back to the pool automatically
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=serializeState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializeState.js","sourceRoot":"","sources":["../../src/chain/serializeState.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAgC,EAChC,MAAmB,EACnB,SAAiC,EACjC,UAA8B;IAE9B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,UAAU,GAAsB,IAAI,CAAC;IACzC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,aAAa,EAAE,CAAC;YAClB,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC;YAClC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;YAC/F,KAAK,CAAC,gBAAgB,CAAC,EAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAC,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,iEAAiE;QACjE,UAAU,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;IAED,OAAO,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7B,oDAAoD;AACtD,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { toHexString } from "@chainsafe/ssz";
|
|
2
1
|
import { getShufflingDecisionBlock } from "@lodestar/state-transition";
|
|
3
2
|
import { ssz } from "@lodestar/types";
|
|
4
|
-
import { MapDef, pruneSetToMax } from "@lodestar/utils";
|
|
3
|
+
import { MapDef, pruneSetToMax, toRootHex } from "@lodestar/utils";
|
|
5
4
|
import { GENESIS_SLOT } from "@lodestar/params";
|
|
6
5
|
import { computeAnchorCheckpoint } from "./initState.js";
|
|
7
6
|
/**
|
|
@@ -160,6 +159,6 @@ function isPromiseCacheItem(item) {
|
|
|
160
159
|
function getDecisionBlock(state, epoch) {
|
|
161
160
|
return state.slot > GENESIS_SLOT
|
|
162
161
|
? getShufflingDecisionBlock(state, epoch)
|
|
163
|
-
:
|
|
162
|
+
: toRootHex(ssz.phase0.BeaconBlockHeader.hashTreeRoot(computeAnchorCheckpoint(state.config, state).blockHeader));
|
|
164
163
|
}
|
|
165
164
|
//# sourceMappingURL=shufflingCache.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shufflingCache.js","sourceRoot":"","sources":["../../src/chain/shufflingCache.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"shufflingCache.js","sourceRoot":"","sources":["../../src/chain/shufflingCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,6 +49,7 @@ export declare class BlockStateCacheImpl implements BlockStateCache {
|
|
|
49
49
|
deleteAllBeforeEpoch(finalizedEpoch: Epoch): void;
|
|
50
50
|
/** ONLY FOR DEBUGGING PURPOSES. For lodestar debug API */
|
|
51
51
|
dumpSummary(): routes.lodestar.StateCacheItem[];
|
|
52
|
+
getStates(): IterableIterator<CachedBeaconStateAllForks>;
|
|
52
53
|
private deleteAllEpochItems;
|
|
53
54
|
}
|
|
54
55
|
//# sourceMappingURL=blockStateCacheImpl.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { toRootHex } from "@lodestar/utils";
|
|
2
2
|
import { MapTracker } from "./mapMetrics.js";
|
|
3
3
|
const MAX_STATES = 3 * 32;
|
|
4
4
|
/**
|
|
@@ -18,7 +18,7 @@ export class BlockStateCacheImpl {
|
|
|
18
18
|
this.maxStates = maxStates;
|
|
19
19
|
this.cache = new MapTracker(metrics?.stateCache);
|
|
20
20
|
if (metrics) {
|
|
21
|
-
this.metrics = metrics.stateCache;
|
|
21
|
+
this.metrics = { ...metrics.stateCache, ...metrics.epochCache };
|
|
22
22
|
metrics.stateCache.size.addCollect(() => metrics.stateCache.size.set(this.cache.size));
|
|
23
23
|
}
|
|
24
24
|
}
|
|
@@ -33,7 +33,7 @@ export class BlockStateCacheImpl {
|
|
|
33
33
|
return item.clone(opts?.dontTransferCache);
|
|
34
34
|
}
|
|
35
35
|
add(item) {
|
|
36
|
-
const key =
|
|
36
|
+
const key = toRootHex(item.hashTreeRoot());
|
|
37
37
|
if (this.cache.get(key)) {
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
@@ -50,7 +50,7 @@ export class BlockStateCacheImpl {
|
|
|
50
50
|
}
|
|
51
51
|
setHeadState(item) {
|
|
52
52
|
if (item) {
|
|
53
|
-
const key =
|
|
53
|
+
const key = toRootHex(item.hashTreeRoot());
|
|
54
54
|
this.head = { state: item, stateRoot: key };
|
|
55
55
|
}
|
|
56
56
|
else {
|
|
@@ -105,12 +105,15 @@ export class BlockStateCacheImpl {
|
|
|
105
105
|
dumpSummary() {
|
|
106
106
|
return Array.from(this.cache.entries()).map(([key, state]) => ({
|
|
107
107
|
slot: state.slot,
|
|
108
|
-
root:
|
|
108
|
+
root: toRootHex(state.hashTreeRoot()),
|
|
109
109
|
reads: this.cache.readCount.get(key) ?? 0,
|
|
110
110
|
lastRead: this.cache.lastRead.get(key) ?? 0,
|
|
111
111
|
checkpointState: false,
|
|
112
112
|
}));
|
|
113
113
|
}
|
|
114
|
+
getStates() {
|
|
115
|
+
return this.cache.values();
|
|
116
|
+
}
|
|
114
117
|
deleteAllEpochItems(epoch) {
|
|
115
118
|
for (const rootHex of this.epochIndex.get(epoch) || []) {
|
|
116
119
|
this.cache.delete(rootHex);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blockStateCacheImpl.js","sourceRoot":"","sources":["../../../src/chain/stateCache/blockStateCacheImpl.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"blockStateCacheImpl.js","sourceRoot":"","sources":["../../../src/chain/stateCache/blockStateCacheImpl.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAG1C,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAG3C,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,CAAC;AAE1B;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IAgB9B,YAAY,EAAC,SAAS,GAAG,UAAU,EAAE,OAAO,EAAiD;QAT7F,8BAA8B;QACb,eAAU,GAAG,IAAI,GAAG,EAAsB,CAAC;QAE5D;;;WAGG;QACK,SAAI,GAAkE,IAAI,CAAC;QAGjF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACjD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,OAAO,GAAG,EAAC,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,EAAC,CAAC;YAC9D,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAED,GAAG,CAAC,OAAgB,EAAE,IAAqB;QACzC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1F,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEzD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAC7C,CAAC;IAED,GAAG,CAAC,IAA+B;QACjC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,YAAY,CAAC,IAAsC;QACjD,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,GAAG,EAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,YAAY;QACV,MAAM,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACzD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,gBAAyB;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,iFAAiF;YACjF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9D,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;oBAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjC,IAAI,IAAI,EAAE,CAAC;wBACT,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;wBACtD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,cAAqB;QACxC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3C,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;gBAC3B,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7D,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YACrC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YACzC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YAC3C,eAAe,EAAE,KAAK;SACvB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC;IAEO,mBAAmB,CAAC,KAAY;QACtC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACvD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
-
import { toHexString, fromHexString } from "@chainsafe/ssz";
|
|
3
2
|
import { ssz } from "@lodestar/types";
|
|
3
|
+
import { fromHex, toHex } from "@lodestar/utils";
|
|
4
4
|
import { ensureDir, readFile, readFileNames, removeFile, writeIfNotExist } from "../../../util/file.js";
|
|
5
5
|
const CHECKPOINT_STATES_FOLDER = "checkpoint_states";
|
|
6
6
|
const CHECKPOINT_FILE_NAME_LENGTH = 82;
|
|
@@ -22,23 +22,23 @@ export class FileCPStateDatastore {
|
|
|
22
22
|
}
|
|
23
23
|
async write(cpKey, stateBytes) {
|
|
24
24
|
const serializedCheckpoint = ssz.phase0.Checkpoint.serialize(cpKey);
|
|
25
|
-
const filePath = path.join(this.folderPath,
|
|
25
|
+
const filePath = path.join(this.folderPath, toHex(serializedCheckpoint));
|
|
26
26
|
await writeIfNotExist(filePath, stateBytes);
|
|
27
27
|
return serializedCheckpoint;
|
|
28
28
|
}
|
|
29
29
|
async remove(serializedCheckpoint) {
|
|
30
|
-
const filePath = path.join(this.folderPath,
|
|
30
|
+
const filePath = path.join(this.folderPath, toHex(serializedCheckpoint));
|
|
31
31
|
await removeFile(filePath);
|
|
32
32
|
}
|
|
33
33
|
async read(serializedCheckpoint) {
|
|
34
|
-
const filePath = path.join(this.folderPath,
|
|
34
|
+
const filePath = path.join(this.folderPath, toHex(serializedCheckpoint));
|
|
35
35
|
return readFile(filePath);
|
|
36
36
|
}
|
|
37
37
|
async readKeys() {
|
|
38
38
|
const fileNames = await readFileNames(this.folderPath);
|
|
39
39
|
return fileNames
|
|
40
40
|
.filter((fileName) => fileName.startsWith("0x") && fileName.length === CHECKPOINT_FILE_NAME_LENGTH)
|
|
41
|
-
.map((fileName) =>
|
|
41
|
+
.map((fileName) => fromHex(fileName));
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
//# sourceMappingURL=file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../../../src/chain/stateCache/datastore/file.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../../../src/chain/stateCache/datastore/file.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAS,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAC,OAAO,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAC,MAAM,uBAAuB,CAAC;AAGtG,MAAM,wBAAwB,GAAG,mBAAmB,CAAC;AACrD,MAAM,2BAA2B,GAAG,EAAE,CAAC;AAEvC;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAG/B,YAAY,YAAoB,GAAG;QACjC,+DAA+D;QAC/D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,aAAa;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAwB,EAAE,UAAsB;QAC1D,MAAM,oBAAoB,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACzE,MAAM,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC5C,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,oBAAkC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACzE,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,oBAAkC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACzE,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvD,OAAO,SAAS;aACb,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,2BAA2B,CAAC;aAClG,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1C,CAAC;CACF"}
|
|
@@ -83,6 +83,7 @@ export declare class FIFOBlockStateCache implements BlockStateCache {
|
|
|
83
83
|
clear(): void;
|
|
84
84
|
/** ONLY FOR DEBUGGING PURPOSES. For lodestar debug API */
|
|
85
85
|
dumpSummary(): routes.lodestar.StateCacheItem[];
|
|
86
|
+
getStates(): IterableIterator<CachedBeaconStateAllForks>;
|
|
86
87
|
/**
|
|
87
88
|
* For unit test only.
|
|
88
89
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { toRootHex } from "@lodestar/utils";
|
|
2
2
|
import { LinkedList } from "../../util/array.js";
|
|
3
3
|
import { MapTracker } from "./mapMetrics.js";
|
|
4
4
|
/**
|
|
@@ -76,7 +76,7 @@ export class FIFOBlockStateCache {
|
|
|
76
76
|
* In importBlock() steps, normally it'll call add() with isHead = false first. Then call setHeadState() to set the head.
|
|
77
77
|
*/
|
|
78
78
|
add(item, isHead = false) {
|
|
79
|
-
const key =
|
|
79
|
+
const key = toRootHex(item.hashTreeRoot());
|
|
80
80
|
if (this.cache.get(key) != null) {
|
|
81
81
|
if (!this.keyOrder.has(key)) {
|
|
82
82
|
throw Error(`State exists but key not found in keyOrder: ${key}`);
|
|
@@ -149,12 +149,15 @@ export class FIFOBlockStateCache {
|
|
|
149
149
|
dumpSummary() {
|
|
150
150
|
return Array.from(this.cache.entries()).map(([key, state]) => ({
|
|
151
151
|
slot: state.slot,
|
|
152
|
-
root:
|
|
152
|
+
root: toRootHex(state.hashTreeRoot()),
|
|
153
153
|
reads: this.cache.readCount.get(key) ?? 0,
|
|
154
154
|
lastRead: this.cache.lastRead.get(key) ?? 0,
|
|
155
155
|
checkpointState: false,
|
|
156
156
|
}));
|
|
157
157
|
}
|
|
158
|
+
getStates() {
|
|
159
|
+
return this.cache.values();
|
|
160
|
+
}
|
|
158
161
|
/**
|
|
159
162
|
* For unit test only.
|
|
160
163
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fifoBlockStateCache.js","sourceRoot":"","sources":["../../../src/chain/stateCache/fifoBlockStateCache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fifoBlockStateCache.js","sourceRoot":"","sources":["../../../src/chain/stateCache/fifoBlockStateCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,6 +52,7 @@ export declare class InMemoryCheckpointStateCache implements CheckpointStateCach
|
|
|
52
52
|
clear(): void;
|
|
53
53
|
/** ONLY FOR DEBUGGING PURPOSES. For lodestar debug API */
|
|
54
54
|
dumpSummary(): routes.lodestar.StateCacheItem[];
|
|
55
|
+
getStates(): IterableIterator<CachedBeaconStateAllForks>;
|
|
55
56
|
/** ONLY FOR DEBUGGING PURPOSES. For spec tests on error */
|
|
56
57
|
dumpCheckpointKeys(): string[];
|
|
57
58
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { MapDef } from "@lodestar/utils";
|
|
1
|
+
import { MapDef, toRootHex } from "@lodestar/utils";
|
|
3
2
|
import { MapTracker } from "./mapMetrics.js";
|
|
4
3
|
import { CacheItemType } from "./types.js";
|
|
5
4
|
const MAX_EPOCHS = 10;
|
|
@@ -103,7 +102,7 @@ export class InMemoryCheckpointStateCache {
|
|
|
103
102
|
}
|
|
104
103
|
delete(cp) {
|
|
105
104
|
this.cache.delete(toCheckpointKey(toCheckpointHex(cp)));
|
|
106
|
-
const epochKey =
|
|
105
|
+
const epochKey = toRootHex(cp.root);
|
|
107
106
|
const value = this.epochIndex.get(cp.epoch);
|
|
108
107
|
if (value) {
|
|
109
108
|
value.delete(epochKey);
|
|
@@ -126,12 +125,15 @@ export class InMemoryCheckpointStateCache {
|
|
|
126
125
|
dumpSummary() {
|
|
127
126
|
return Array.from(this.cache.entries()).map(([key, state]) => ({
|
|
128
127
|
slot: state.slot,
|
|
129
|
-
root:
|
|
128
|
+
root: toRootHex(state.hashTreeRoot()),
|
|
130
129
|
reads: this.cache.readCount.get(key) ?? 0,
|
|
131
130
|
lastRead: this.cache.lastRead.get(key) ?? 0,
|
|
132
131
|
checkpointState: true,
|
|
133
132
|
}));
|
|
134
133
|
}
|
|
134
|
+
getStates() {
|
|
135
|
+
return this.cache.values();
|
|
136
|
+
}
|
|
135
137
|
/** ONLY FOR DEBUGGING PURPOSES. For spec tests on error */
|
|
136
138
|
dumpCheckpointKeys() {
|
|
137
139
|
return Array.from(this.cache.keys());
|
|
@@ -140,7 +142,7 @@ export class InMemoryCheckpointStateCache {
|
|
|
140
142
|
export function toCheckpointHex(checkpoint) {
|
|
141
143
|
return {
|
|
142
144
|
epoch: checkpoint.epoch,
|
|
143
|
-
rootHex:
|
|
145
|
+
rootHex: toRootHex(checkpoint.root),
|
|
144
146
|
};
|
|
145
147
|
}
|
|
146
148
|
export function toCheckpointKey(cp) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inMemoryCheckpointsCache.js","sourceRoot":"","sources":["../../../src/chain/stateCache/inMemoryCheckpointsCache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inMemoryCheckpointsCache.js","sourceRoot":"","sources":["../../../src/chain/stateCache/inMemoryCheckpointsCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ type PersistentCheckpointStateCacheModules = {
|
|
|
23
23
|
shufflingCache: ShufflingCache;
|
|
24
24
|
datastore: CPStateDatastore;
|
|
25
25
|
blockStateCache: BlockStateCache;
|
|
26
|
-
bufferPool?: BufferPool;
|
|
26
|
+
bufferPool?: BufferPool | null;
|
|
27
27
|
};
|
|
28
28
|
type LoadedStateBytesData = {
|
|
29
29
|
persistedKey: DatastoreKey;
|
|
@@ -208,6 +208,7 @@ export declare class PersistentCheckpointStateCache implements CheckpointStateCa
|
|
|
208
208
|
clear(): void;
|
|
209
209
|
/** ONLY FOR DEBUGGING PURPOSES. For lodestar debug API */
|
|
210
210
|
dumpSummary(): routes.lodestar.StateCacheItem[];
|
|
211
|
+
getStates(): IterableIterator<CachedBeaconStateAllForks>;
|
|
211
212
|
/** ONLY FOR DEBUGGING PURPOSES. For spec tests on error */
|
|
212
213
|
dumpCheckpointKeys(): string[];
|
|
213
214
|
/**
|
|
@@ -252,7 +253,6 @@ export declare class PersistentCheckpointStateCache implements CheckpointStateCa
|
|
|
252
253
|
* Delete all items of an epoch from disk and memory
|
|
253
254
|
*/
|
|
254
255
|
private deleteAllEpochItems;
|
|
255
|
-
private serializeState;
|
|
256
256
|
/**
|
|
257
257
|
* Serialize validators to bytes leveraging the buffer pool to save memory allocation.
|
|
258
258
|
* - As monitored on holesky as of Jan 2024, it helps save ~500ms state reload time (4.3s vs 3.8s)
|
|
@@ -43,11 +43,12 @@ var __disposeResources = (this && this.__disposeResources) || (function (Suppres
|
|
|
43
43
|
var e = new Error(message);
|
|
44
44
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
45
45
|
});
|
|
46
|
-
import { fromHexString, toHexString } from "@chainsafe/ssz";
|
|
47
46
|
import { computeStartSlotAtEpoch, getBlockRootAtSlot } from "@lodestar/state-transition";
|
|
48
|
-
import { MapDef, sleep } from "@lodestar/utils";
|
|
47
|
+
import { MapDef, fromHex, sleep, toHex, toRootHex } from "@lodestar/utils";
|
|
49
48
|
import { loadCachedBeaconState } from "@lodestar/state-transition";
|
|
50
49
|
import { INTERVALS_PER_SLOT } from "@lodestar/params";
|
|
50
|
+
import { AllocSource } from "../../util/bufferPool.js";
|
|
51
|
+
import { serializeState } from "../serializeState.js";
|
|
51
52
|
import { MapTracker } from "./mapMetrics.js";
|
|
52
53
|
import { datastoreKeyToCheckpoint } from "./datastore/index.js";
|
|
53
54
|
import { CacheItemType } from "./types.js";
|
|
@@ -144,7 +145,7 @@ export class PersistentCheckpointStateCache {
|
|
|
144
145
|
for (const persistedKey of persistedKeys) {
|
|
145
146
|
const cp = datastoreKeyToCheckpoint(persistedKey);
|
|
146
147
|
this.cache.set(toCacheKey(cp), { type: CacheItemType.persisted, value: persistedKey });
|
|
147
|
-
this.epochIndex.getOrDefault(cp.epoch).add(
|
|
148
|
+
this.epochIndex.getOrDefault(cp.epoch).add(toRootHex(cp.root));
|
|
148
149
|
}
|
|
149
150
|
this.logger.info("Loaded persisted checkpoint states from the last run", {
|
|
150
151
|
count: persistedKeys.length,
|
|
@@ -164,7 +165,7 @@ export class PersistentCheckpointStateCache {
|
|
|
164
165
|
return stateOrStateBytesData?.clone(opts?.dontTransferCache) ?? null;
|
|
165
166
|
}
|
|
166
167
|
const { persistedKey, stateBytes } = stateOrStateBytesData;
|
|
167
|
-
const logMeta = { persistedKey:
|
|
168
|
+
const logMeta = { persistedKey: toHex(persistedKey) };
|
|
168
169
|
this.logger.debug("Reload: read state successful", logMeta);
|
|
169
170
|
this.metrics?.stateReloadSecFromSlot.observe(this.clock?.secFromSlot(this.clock?.currentSlot ?? 0) ?? 0);
|
|
170
171
|
const seedState = this.findSeedStateToReload(cp);
|
|
@@ -195,8 +196,11 @@ export class PersistentCheckpointStateCache {
|
|
|
195
196
|
},
|
|
196
197
|
}, validatorsBytes);
|
|
197
198
|
newCachedState.commit();
|
|
198
|
-
const stateRoot =
|
|
199
|
+
const stateRoot = toRootHex(newCachedState.hashTreeRoot());
|
|
199
200
|
timer?.();
|
|
201
|
+
// load all cache in order for consumers (usually regen.getState()) to process blocks faster
|
|
202
|
+
newCachedState.validators.getAllReadonlyValues();
|
|
203
|
+
newCachedState.balances.getAll();
|
|
200
204
|
this.logger.debug("Reload: cached state load successful", {
|
|
201
205
|
...logMeta,
|
|
202
206
|
stateSlot: newCachedState.slot,
|
|
@@ -296,7 +300,7 @@ export class PersistentCheckpointStateCache {
|
|
|
296
300
|
this.logger.verbose("Added checkpoint state to memory but a persisted key existed", {
|
|
297
301
|
epoch: cp.epoch,
|
|
298
302
|
rootHex: cpHex.rootHex,
|
|
299
|
-
persistedKey:
|
|
303
|
+
persistedKey: toHex(persistedKey),
|
|
300
304
|
});
|
|
301
305
|
}
|
|
302
306
|
else {
|
|
@@ -505,7 +509,7 @@ export class PersistentCheckpointStateCache {
|
|
|
505
509
|
}
|
|
506
510
|
// amongst states of the same epoch, choose the one with the same view of reloadedCp
|
|
507
511
|
if (reloadedCpSlot < state.slot &&
|
|
508
|
-
|
|
512
|
+
toRootHex(getBlockRootAtSlot(state, reloadedCpSlot)) === reloadedCp.rootHex) {
|
|
509
513
|
return state;
|
|
510
514
|
}
|
|
511
515
|
}
|
|
@@ -533,6 +537,12 @@ export class PersistentCheckpointStateCache {
|
|
|
533
537
|
};
|
|
534
538
|
});
|
|
535
539
|
}
|
|
540
|
+
getStates() {
|
|
541
|
+
const items = Array.from(this.cache.values())
|
|
542
|
+
.filter(isInMemoryCacheItem)
|
|
543
|
+
.map((item) => item.state);
|
|
544
|
+
return items.values();
|
|
545
|
+
}
|
|
536
546
|
/** ONLY FOR DEBUGGING PURPOSES. For spec tests on error */
|
|
537
547
|
dumpCheckpointKeys() {
|
|
538
548
|
return Array.from(this.cache.keys());
|
|
@@ -577,9 +587,9 @@ export class PersistentCheckpointStateCache {
|
|
|
577
587
|
async processPastEpoch(blockRootHex, state, epoch) {
|
|
578
588
|
let persistCount = 0;
|
|
579
589
|
const epochBoundarySlot = computeStartSlotAtEpoch(epoch);
|
|
580
|
-
const epochBoundaryRoot = epochBoundarySlot === state.slot ?
|
|
581
|
-
const epochBoundaryHex =
|
|
582
|
-
const prevEpochRoot =
|
|
590
|
+
const epochBoundaryRoot = epochBoundarySlot === state.slot ? fromHex(blockRootHex) : getBlockRootAtSlot(state, epochBoundarySlot);
|
|
591
|
+
const epochBoundaryHex = toRootHex(epochBoundaryRoot);
|
|
592
|
+
const prevEpochRoot = toRootHex(getBlockRootAtSlot(state, epochBoundarySlot - 1));
|
|
583
593
|
// for each epoch, usually there are 2 rootHexes respective to the 2 checkpoint states: Previous Root Checkpoint State and Current Root Checkpoint State
|
|
584
594
|
const cpRootHexes = this.epochIndex.get(epoch) ?? [];
|
|
585
595
|
const persistedRootHexes = new Set();
|
|
@@ -603,7 +613,7 @@ export class PersistentCheckpointStateCache {
|
|
|
603
613
|
stateSlot: state.slot,
|
|
604
614
|
rootHex,
|
|
605
615
|
epochBoundaryHex,
|
|
606
|
-
persistedKey: persistedKey ?
|
|
616
|
+
persistedKey: persistedKey ? toHex(persistedKey) : "",
|
|
607
617
|
};
|
|
608
618
|
if (persistedRootHexes.has(rootHex)) {
|
|
609
619
|
if (persistedKey) {
|
|
@@ -613,34 +623,20 @@ export class PersistentCheckpointStateCache {
|
|
|
613
623
|
else {
|
|
614
624
|
// persist and do not update epochIndex
|
|
615
625
|
this.metrics?.statePersistSecFromSlot.observe(this.clock?.secFromSlot(this.clock?.currentSlot ?? 0) ?? 0);
|
|
616
|
-
const cpPersist = { epoch: epoch, root:
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
this.metrics?.persistedStateAllocCount.inc();
|
|
627
|
-
stateBytes = state.serialize();
|
|
628
|
-
}
|
|
629
|
-
timer?.();
|
|
630
|
-
persistedKey = await this.datastore.write(cpPersist, stateBytes);
|
|
631
|
-
}
|
|
632
|
-
catch (e_2) {
|
|
633
|
-
env_2.error = e_2;
|
|
634
|
-
env_2.hasError = true;
|
|
635
|
-
}
|
|
636
|
-
finally {
|
|
637
|
-
__disposeResources(env_2);
|
|
638
|
-
}
|
|
639
|
-
}
|
|
626
|
+
const cpPersist = { epoch: epoch, root: fromHex(rootHex) };
|
|
627
|
+
// It's not sustainable to allocate ~240MB for each state every epoch, so we use buffer pool to reuse the memory.
|
|
628
|
+
// As monitored on holesky as of Jan 2024:
|
|
629
|
+
// - This does not increase heap allocation while gc time is the same
|
|
630
|
+
// - It helps stabilize persist time and save ~300ms in average (1.5s vs 1.2s)
|
|
631
|
+
// - It also helps the state reload to save ~500ms in average (4.3s vs 3.8s)
|
|
632
|
+
// - Also `serializeState.test.ts` perf test shows a lot of differences allocating ~240MB once vs per state serialization
|
|
633
|
+
const timer = this.metrics?.stateSerializeDuration.startTimer();
|
|
634
|
+
persistedKey = await serializeState(state, AllocSource.PERSISTENT_CHECKPOINTS_CACHE_STATE, (stateBytes) => this.datastore.write(cpPersist, stateBytes), this.bufferPool);
|
|
635
|
+
timer?.();
|
|
640
636
|
persistCount++;
|
|
641
637
|
this.logger.verbose("Pruned checkpoint state from memory and persisted to disk", {
|
|
642
638
|
...logMeta,
|
|
643
|
-
persistedKey:
|
|
639
|
+
persistedKey: toHex(persistedKey),
|
|
644
640
|
});
|
|
645
641
|
}
|
|
646
642
|
// overwrite cpKey, this means the state is deleted from memory
|
|
@@ -691,27 +687,6 @@ export class PersistentCheckpointStateCache {
|
|
|
691
687
|
rootHexes: Array.from(rootHexes).join(","),
|
|
692
688
|
});
|
|
693
689
|
}
|
|
694
|
-
/*
|
|
695
|
-
* It's not sustainable to allocate ~240MB for each state every epoch, so we use buffer pool to reuse the memory.
|
|
696
|
-
* As monitored on holesky as of Jan 2024:
|
|
697
|
-
* - This does not increase heap allocation while gc time is the same
|
|
698
|
-
* - It helps stabilize persist time and save ~300ms in average (1.5s vs 1.2s)
|
|
699
|
-
* - It also helps the state reload to save ~500ms in average (4.3s vs 3.8s)
|
|
700
|
-
* - Also `serializeState.test.ts` perf test shows a lot of differences allocating ~240MB once vs per state serialization
|
|
701
|
-
*/
|
|
702
|
-
serializeState(state) {
|
|
703
|
-
const size = state.type.tree_serializedSize(state.node);
|
|
704
|
-
if (this.bufferPool) {
|
|
705
|
-
const bufferWithKey = this.bufferPool.alloc(size);
|
|
706
|
-
if (bufferWithKey) {
|
|
707
|
-
const stateBytes = bufferWithKey.buffer;
|
|
708
|
-
const dataView = new DataView(stateBytes.buffer, stateBytes.byteOffset, stateBytes.byteLength);
|
|
709
|
-
state.serializeToBytes({ uint8Array: stateBytes, dataView }, 0);
|
|
710
|
-
return bufferWithKey;
|
|
711
|
-
}
|
|
712
|
-
}
|
|
713
|
-
return null;
|
|
714
|
-
}
|
|
715
690
|
/**
|
|
716
691
|
* Serialize validators to bytes leveraging the buffer pool to save memory allocation.
|
|
717
692
|
* - As monitored on holesky as of Jan 2024, it helps save ~500ms state reload time (4.3s vs 3.8s)
|
|
@@ -722,7 +697,7 @@ export class PersistentCheckpointStateCache {
|
|
|
722
697
|
const type = state.type.fields.validators;
|
|
723
698
|
const size = type.tree_serializedSize(state.validators.node);
|
|
724
699
|
if (this.bufferPool) {
|
|
725
|
-
const bufferWithKey = this.bufferPool.alloc(size);
|
|
700
|
+
const bufferWithKey = this.bufferPool.alloc(size, AllocSource.PERSISTENT_CHECKPOINTS_CACHE_VALIDATORS);
|
|
726
701
|
if (bufferWithKey) {
|
|
727
702
|
const validatorsBytes = bufferWithKey.buffer;
|
|
728
703
|
const dataView = new DataView(validatorsBytes.buffer, validatorsBytes.byteOffset, validatorsBytes.byteLength);
|
|
@@ -736,14 +711,14 @@ export class PersistentCheckpointStateCache {
|
|
|
736
711
|
export function toCheckpointHex(checkpoint) {
|
|
737
712
|
return {
|
|
738
713
|
epoch: checkpoint.epoch,
|
|
739
|
-
rootHex:
|
|
714
|
+
rootHex: toRootHex(checkpoint.root),
|
|
740
715
|
};
|
|
741
716
|
}
|
|
742
717
|
function toCacheKey(cp) {
|
|
743
718
|
if (isCheckpointHex(cp)) {
|
|
744
719
|
return `${cp.rootHex}_${cp.epoch}`;
|
|
745
720
|
}
|
|
746
|
-
return `${
|
|
721
|
+
return `${toRootHex(cp.root)}_${cp.epoch}`;
|
|
747
722
|
}
|
|
748
723
|
function fromCacheKey(key) {
|
|
749
724
|
const [rootHex, epoch] = key.split("_");
|