@lodestar/beacon-node 1.38.0 → 1.39.0-dev.0321dbcf04
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/README.md +1 -1
- package/lib/api/impl/beacon/blocks/utils.js +1 -1
- package/lib/api/impl/beacon/blocks/utils.js.map +1 -1
- package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/state/index.js +4 -5
- package/lib/api/impl/beacon/state/index.js.map +1 -1
- package/lib/api/impl/validator/index.js +1 -1
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +1 -21
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +1 -6
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +9 -128
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts +3 -2
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.js +3 -2
- package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
- package/lib/chain/chain.d.ts +8 -12
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +25 -59
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/initState.d.ts +1 -14
- package/lib/chain/initState.d.ts.map +1 -1
- package/lib/chain/initState.js +1 -62
- package/lib/chain/initState.js.map +1 -1
- package/lib/chain/interface.d.ts +4 -9
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts +5 -6
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +7 -132
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/opPool.d.ts +3 -0
- package/lib/chain/opPools/opPool.d.ts.map +1 -1
- package/lib/chain/opPools/opPool.js +9 -8
- package/lib/chain/opPools/opPool.js.map +1 -1
- package/lib/chain/options.d.ts +0 -4
- package/lib/chain/options.d.ts.map +1 -1
- package/lib/chain/options.js +0 -2
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/prepareNextSlot.d.ts +0 -4
- package/lib/chain/prepareNextSlot.d.ts.map +1 -1
- package/lib/chain/prepareNextSlot.js +2 -22
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +2 -22
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +33 -99
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +4 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.js +4 -2
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/validation/aggregateAndProof.js +9 -0
- package/lib/chain/validation/aggregateAndProof.js.map +1 -1
- package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
- package/lib/chain/validation/attesterSlashing.js +2 -2
- package/lib/chain/validation/attesterSlashing.js.map +1 -1
- package/lib/chain/validation/blobSidecar.d.ts.map +1 -1
- package/lib/chain/validation/blobSidecar.js +2 -3
- package/lib/chain/validation/blobSidecar.js.map +1 -1
- package/lib/chain/validation/block.js +1 -1
- package/lib/chain/validation/block.js.map +1 -1
- package/lib/chain/validation/blsToExecutionChange.d.ts.map +1 -1
- package/lib/chain/validation/blsToExecutionChange.js +10 -3
- package/lib/chain/validation/blsToExecutionChange.js.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.js +2 -3
- package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
- package/lib/chain/validation/proposerSlashing.js +3 -2
- package/lib/chain/validation/proposerSlashing.js.map +1 -1
- package/lib/chain/validation/signatureSets/aggregateAndProof.js +1 -1
- package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +3 -2
- package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.js +3 -4
- package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommittee.d.ts +3 -2
- package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommittee.js +3 -3
- package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -1
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.js +2 -2
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +3 -2
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +2 -3
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
- package/lib/chain/validation/syncCommittee.js +1 -1
- package/lib/chain/validation/syncCommittee.js.map +1 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.js +5 -4
- package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
- package/lib/chain/validation/voluntaryExit.js +1 -1
- package/lib/chain/validation/voluntaryExit.js.map +1 -1
- package/lib/db/beacon.d.ts +3 -7
- package/lib/db/beacon.d.ts.map +1 -1
- package/lib/db/beacon.js +33 -12
- package/lib/db/beacon.js.map +1 -1
- package/lib/db/buckets.d.ts +12 -6
- package/lib/db/buckets.d.ts.map +1 -1
- package/lib/db/buckets.js +6 -1
- package/lib/db/buckets.js.map +1 -1
- package/lib/db/interface.d.ts +2 -7
- package/lib/db/interface.d.ts.map +1 -1
- package/lib/db/repositories/index.d.ts +0 -3
- package/lib/db/repositories/index.d.ts.map +1 -1
- package/lib/db/repositories/index.js +0 -3
- package/lib/db/repositories/index.js.map +1 -1
- package/lib/execution/engine/http.d.ts +5 -13
- package/lib/execution/engine/http.d.ts.map +1 -1
- package/lib/execution/engine/http.js +6 -15
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/index.d.ts.map +1 -1
- package/lib/execution/engine/index.js +1 -1
- package/lib/execution/engine/index.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +1 -1
- package/lib/execution/engine/interface.d.ts.map +1 -1
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.d.ts +1 -1
- package/lib/execution/engine/jsonRpcHttpClient.d.ts.map +1 -0
- package/lib/execution/engine/jsonRpcHttpClient.js.map +1 -0
- package/lib/execution/engine/jwt.d.ts.map +1 -0
- package/lib/execution/engine/jwt.js.map +1 -0
- package/lib/execution/engine/mock.d.ts +11 -12
- package/lib/execution/engine/mock.d.ts.map +1 -1
- package/lib/execution/engine/mock.js +38 -22
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/payloadIdCache.d.ts +1 -1
- package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
- package/lib/execution/engine/types.d.ts +1 -1
- package/lib/execution/engine/types.d.ts.map +1 -1
- package/lib/execution/engine/types.js +1 -1
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/execution/engine/utils.d.ts +64 -2
- package/lib/execution/engine/utils.d.ts.map +1 -1
- package/lib/execution/engine/utils.js +91 -2
- package/lib/execution/engine/utils.js.map +1 -1
- package/lib/index.d.ts +1 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -2
- package/lib/index.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +0 -49
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +0 -134
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/core/events.d.ts +1 -1
- package/lib/network/core/events.d.ts.map +1 -1
- package/lib/network/core/events.js +1 -1
- package/lib/network/core/events.js.map +1 -1
- package/lib/network/events.d.ts +6 -1
- package/lib/network/events.d.ts.map +1 -1
- package/lib/network/events.js +7 -1
- package/lib/network/events.js.map +1 -1
- package/lib/network/peers/discover.d.ts.map +1 -1
- package/lib/network/peers/discover.js.map +1 -1
- package/lib/node/nodejs.d.ts +6 -3
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js +30 -12
- package/lib/node/nodejs.js.map +1 -1
- package/lib/node/notifier.d.ts.map +1 -1
- package/lib/node/notifier.js +0 -13
- package/lib/node/notifier.js.map +1 -1
- package/lib/node/options.d.ts +0 -2
- package/lib/node/options.d.ts.map +1 -1
- package/lib/node/options.js +0 -2
- package/lib/node/options.js.map +1 -1
- package/lib/node/utils/interop/deposits.d.ts +2 -1
- package/lib/node/utils/interop/deposits.d.ts.map +1 -1
- package/lib/node/utils/interop/deposits.js.map +1 -1
- package/lib/node/utils/interop/state.d.ts +1 -1
- package/lib/node/utils/interop/state.d.ts.map +1 -1
- package/lib/node/utils/state.d.ts +1 -7
- package/lib/node/utils/state.d.ts.map +1 -1
- package/lib/node/utils/state.js +1 -14
- package/lib/node/utils/state.js.map +1 -1
- package/lib/sync/backfill/backfill.js +2 -2
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/backfill/verify.d.ts +2 -2
- package/lib/sync/backfill/verify.d.ts.map +1 -1
- package/lib/sync/backfill/verify.js +2 -2
- package/lib/sync/backfill/verify.js.map +1 -1
- package/lib/util/workerEvents.d.ts +1 -6
- package/lib/util/workerEvents.d.ts.map +1 -1
- package/lib/util/workerEvents.js +8 -8
- package/lib/util/workerEvents.js.map +1 -1
- package/package.json +28 -27
- package/src/api/impl/beacon/blocks/utils.ts +1 -1
- package/src/api/impl/beacon/state/index.ts +4 -5
- package/src/api/impl/validator/index.ts +1 -1
- package/src/chain/blocks/verifyBlock.ts +3 -24
- package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -161
- package/src/chain/blocks/verifyBlocksSignatures.ts +15 -4
- package/src/chain/chain.ts +35 -69
- package/src/chain/initState.ts +1 -97
- package/src/chain/interface.ts +4 -8
- package/src/chain/opPools/aggregatedAttestationPool.ts +9 -184
- package/src/chain/opPools/opPool.ts +8 -8
- package/src/chain/options.ts +0 -6
- package/src/chain/prepareNextSlot.ts +2 -29
- package/src/chain/produceBlock/produceBlockBody.ts +34 -133
- package/src/chain/stateCache/persistentCheckpointsCache.ts +15 -2
- package/src/chain/validation/aggregateAndProof.ts +12 -0
- package/src/chain/validation/attesterSlashing.ts +14 -2
- package/src/chain/validation/blobSidecar.ts +11 -3
- package/src/chain/validation/block.ts +1 -1
- package/src/chain/validation/blsToExecutionChange.ts +10 -8
- package/src/chain/validation/dataColumnSidecar.ts +8 -3
- package/src/chain/validation/proposerSlashing.ts +8 -2
- package/src/chain/validation/signatureSets/aggregateAndProof.ts +1 -1
- package/src/chain/validation/signatureSets/contributionAndProof.ts +6 -3
- package/src/chain/validation/signatureSets/syncCommittee.ts +6 -2
- package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +3 -1
- package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +5 -2
- package/src/chain/validation/syncCommittee.ts +1 -1
- package/src/chain/validation/syncCommitteeContributionAndProof.ts +10 -6
- package/src/chain/validation/voluntaryExit.ts +1 -1
- package/src/db/beacon.ts +38 -16
- package/src/db/buckets.ts +12 -7
- package/src/db/interface.ts +2 -13
- package/src/db/repositories/index.ts +0 -3
- package/src/execution/engine/http.ts +12 -21
- package/src/execution/engine/index.ts +1 -1
- package/src/execution/engine/interface.ts +1 -1
- package/src/{eth1/provider → execution/engine}/jsonRpcHttpClient.ts +1 -1
- package/src/execution/engine/mock.ts +44 -30
- package/src/execution/engine/payloadIdCache.ts +1 -1
- package/src/execution/engine/types.ts +9 -9
- package/src/execution/engine/utils.ts +111 -5
- package/src/index.ts +1 -2
- package/src/metrics/metrics/lodestar.ts +0 -144
- package/src/network/core/events.ts +1 -1
- package/src/network/events.ts +7 -1
- package/src/network/peers/discover.ts +3 -3
- package/src/node/nodejs.ts +37 -13
- package/src/node/notifier.ts +0 -16
- package/src/node/options.ts +0 -3
- package/src/node/utils/interop/deposits.ts +3 -1
- package/src/node/utils/interop/state.ts +1 -1
- package/src/node/utils/state.ts +3 -18
- package/src/sync/backfill/backfill.ts +2 -2
- package/src/sync/backfill/verify.ts +4 -3
- package/src/util/workerEvents.ts +9 -8
- package/lib/chain/genesis/genesis.d.ts +0 -51
- package/lib/chain/genesis/genesis.d.ts.map +0 -1
- package/lib/chain/genesis/genesis.js +0 -123
- package/lib/chain/genesis/genesis.js.map +0 -1
- package/lib/chain/genesis/interface.d.ts +0 -13
- package/lib/chain/genesis/interface.d.ts.map +0 -1
- package/lib/chain/genesis/interface.js +0 -2
- package/lib/chain/genesis/interface.js.map +0 -1
- package/lib/chain/rewards/attestationsRewards.d.ts +0 -7
- package/lib/chain/rewards/attestationsRewards.d.ts.map +0 -1
- package/lib/chain/rewards/attestationsRewards.js +0 -112
- package/lib/chain/rewards/attestationsRewards.js.map +0 -1
- package/lib/chain/rewards/blockRewards.d.ts +0 -14
- package/lib/chain/rewards/blockRewards.d.ts.map +0 -1
- package/lib/chain/rewards/blockRewards.js +0 -94
- package/lib/chain/rewards/blockRewards.js.map +0 -1
- package/lib/chain/rewards/syncCommitteeRewards.d.ts +0 -6
- package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +0 -1
- package/lib/chain/rewards/syncCommitteeRewards.js +0 -37
- package/lib/chain/rewards/syncCommitteeRewards.js.map +0 -1
- package/lib/db/repositories/depositDataRoot.d.ts +0 -22
- package/lib/db/repositories/depositDataRoot.d.ts.map +0 -1
- package/lib/db/repositories/depositDataRoot.js +0 -62
- package/lib/db/repositories/depositDataRoot.js.map +0 -1
- package/lib/db/repositories/depositEvent.d.ts +0 -13
- package/lib/db/repositories/depositEvent.d.ts.map +0 -1
- package/lib/db/repositories/depositEvent.js +0 -27
- package/lib/db/repositories/depositEvent.js.map +0 -1
- package/lib/db/repositories/eth1Data.d.ts +0 -13
- package/lib/db/repositories/eth1Data.d.ts.map +0 -1
- package/lib/db/repositories/eth1Data.js +0 -26
- package/lib/db/repositories/eth1Data.js.map +0 -1
- package/lib/db/single/index.d.ts +0 -3
- package/lib/db/single/index.d.ts.map +0 -1
- package/lib/db/single/index.js +0 -3
- package/lib/db/single/index.js.map +0 -1
- package/lib/db/single/preGenesisState.d.ts +0 -16
- package/lib/db/single/preGenesisState.d.ts.map +0 -1
- package/lib/db/single/preGenesisState.js +0 -29
- package/lib/db/single/preGenesisState.js.map +0 -1
- package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts +0 -14
- package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +0 -1
- package/lib/db/single/preGenesisStateLastProcessedBlock.js +0 -27
- package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +0 -1
- package/lib/eth1/errors.d.ts +0 -66
- package/lib/eth1/errors.d.ts.map +0 -1
- package/lib/eth1/errors.js +0 -27
- package/lib/eth1/errors.js.map +0 -1
- package/lib/eth1/eth1DataCache.d.ts +0 -19
- package/lib/eth1/eth1DataCache.d.ts.map +0 -1
- package/lib/eth1/eth1DataCache.js +0 -19
- package/lib/eth1/eth1DataCache.js.map +0 -1
- package/lib/eth1/eth1DepositDataTracker.d.ts +0 -80
- package/lib/eth1/eth1DepositDataTracker.d.ts.map +0 -1
- package/lib/eth1/eth1DepositDataTracker.js +0 -317
- package/lib/eth1/eth1DepositDataTracker.js.map +0 -1
- package/lib/eth1/eth1DepositsCache.d.ts +0 -42
- package/lib/eth1/eth1DepositsCache.d.ts.map +0 -1
- package/lib/eth1/eth1DepositsCache.js +0 -119
- package/lib/eth1/eth1DepositsCache.js.map +0 -1
- package/lib/eth1/eth1MergeBlockTracker.d.ts +0 -65
- package/lib/eth1/eth1MergeBlockTracker.d.ts.map +0 -1
- package/lib/eth1/eth1MergeBlockTracker.js +0 -262
- package/lib/eth1/eth1MergeBlockTracker.js.map +0 -1
- package/lib/eth1/index.d.ts +0 -46
- package/lib/eth1/index.d.ts.map +0 -1
- package/lib/eth1/index.js +0 -121
- package/lib/eth1/index.js.map +0 -1
- package/lib/eth1/interface.d.ts +0 -112
- package/lib/eth1/interface.d.ts.map +0 -1
- package/lib/eth1/interface.js +0 -8
- package/lib/eth1/interface.js.map +0 -1
- package/lib/eth1/options.d.ts +0 -22
- package/lib/eth1/options.d.ts.map +0 -1
- package/lib/eth1/options.js +0 -8
- package/lib/eth1/options.js.map +0 -1
- package/lib/eth1/provider/eth1Provider.d.ts +0 -39
- package/lib/eth1/provider/eth1Provider.d.ts.map +0 -1
- package/lib/eth1/provider/eth1Provider.js +0 -147
- package/lib/eth1/provider/eth1Provider.js.map +0 -1
- package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +0 -1
- package/lib/eth1/provider/jsonRpcHttpClient.js.map +0 -1
- package/lib/eth1/provider/jwt.d.ts.map +0 -1
- package/lib/eth1/provider/jwt.js.map +0 -1
- package/lib/eth1/provider/utils.d.ts +0 -65
- package/lib/eth1/provider/utils.d.ts.map +0 -1
- package/lib/eth1/provider/utils.js +0 -120
- package/lib/eth1/provider/utils.js.map +0 -1
- package/lib/eth1/stream.d.ts +0 -15
- package/lib/eth1/stream.d.ts.map +0 -1
- package/lib/eth1/stream.js +0 -54
- package/lib/eth1/stream.js.map +0 -1
- package/lib/eth1/utils/depositContract.d.ts +0 -14
- package/lib/eth1/utils/depositContract.d.ts.map +0 -1
- package/lib/eth1/utils/depositContract.js +0 -33
- package/lib/eth1/utils/depositContract.js.map +0 -1
- package/lib/eth1/utils/deposits.d.ts +0 -8
- package/lib/eth1/utils/deposits.d.ts.map +0 -1
- package/lib/eth1/utils/deposits.js +0 -47
- package/lib/eth1/utils/deposits.js.map +0 -1
- package/lib/eth1/utils/eth1Data.d.ts +0 -22
- package/lib/eth1/utils/eth1Data.d.ts.map +0 -1
- package/lib/eth1/utils/eth1Data.js +0 -77
- package/lib/eth1/utils/eth1Data.js.map +0 -1
- package/lib/eth1/utils/eth1DepositEvent.d.ts +0 -7
- package/lib/eth1/utils/eth1DepositEvent.d.ts.map +0 -1
- package/lib/eth1/utils/eth1DepositEvent.js +0 -13
- package/lib/eth1/utils/eth1DepositEvent.js.map +0 -1
- package/lib/eth1/utils/eth1Vote.d.ts +0 -17
- package/lib/eth1/utils/eth1Vote.d.ts.map +0 -1
- package/lib/eth1/utils/eth1Vote.js +0 -111
- package/lib/eth1/utils/eth1Vote.js.map +0 -1
- package/lib/eth1/utils/groupDepositEventsByBlock.d.ts +0 -9
- package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +0 -1
- package/lib/eth1/utils/groupDepositEventsByBlock.js +0 -17
- package/lib/eth1/utils/groupDepositEventsByBlock.js.map +0 -1
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts +0 -10
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +0 -1
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js +0 -14
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js.map +0 -1
- package/src/chain/genesis/genesis.ts +0 -190
- package/src/chain/genesis/interface.ts +0 -14
- package/src/chain/rewards/attestationsRewards.ts +0 -196
- package/src/chain/rewards/blockRewards.ts +0 -150
- package/src/chain/rewards/syncCommitteeRewards.ts +0 -58
- package/src/db/repositories/depositDataRoot.ts +0 -80
- package/src/db/repositories/depositEvent.ts +0 -32
- package/src/db/repositories/eth1Data.ts +0 -33
- package/src/db/single/index.ts +0 -2
- package/src/db/single/preGenesisState.ts +0 -37
- package/src/db/single/preGenesisStateLastProcessedBlock.ts +0 -34
- package/src/eth1/errors.ts +0 -40
- package/src/eth1/eth1DataCache.ts +0 -26
- package/src/eth1/eth1DepositDataTracker.ts +0 -410
- package/src/eth1/eth1DepositsCache.ts +0 -141
- package/src/eth1/eth1MergeBlockTracker.ts +0 -328
- package/src/eth1/index.ts +0 -157
- package/src/eth1/interface.ts +0 -131
- package/src/eth1/options.ts +0 -28
- package/src/eth1/provider/eth1Provider.ts +0 -229
- package/src/eth1/provider/utils.ts +0 -136
- package/src/eth1/stream.ts +0 -75
- package/src/eth1/utils/depositContract.ts +0 -37
- package/src/eth1/utils/deposits.ts +0 -70
- package/src/eth1/utils/eth1Data.ts +0 -100
- package/src/eth1/utils/eth1DepositEvent.ts +0 -12
- package/src/eth1/utils/eth1Vote.ts +0 -142
- package/src/eth1/utils/groupDepositEventsByBlock.ts +0 -19
- package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +0 -18
- /package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.js +0 -0
- /package/lib/{eth1/provider → execution/engine}/jwt.d.ts +0 -0
- /package/lib/{eth1/provider → execution/engine}/jwt.js +0 -0
- /package/src/{eth1/provider → execution/engine}/jwt.ts +0 -0
|
@@ -21,6 +21,7 @@ export async function validateSyncCommitteeGossipContributionAndProof(
|
|
|
21
21
|
const contributionAndProof = signedContributionAndProof.message;
|
|
22
22
|
const {contribution, aggregatorIndex} = contributionAndProof;
|
|
23
23
|
const {subcommitteeIndex, slot} = contribution;
|
|
24
|
+
const {index2pubkey} = chain;
|
|
24
25
|
|
|
25
26
|
const headState = chain.getHeadState();
|
|
26
27
|
validateGossipSyncCommitteeExceptSig(chain, headState, subcommitteeIndex, {
|
|
@@ -73,20 +74,23 @@ export async function validateSyncCommitteeGossipContributionAndProof(
|
|
|
73
74
|
// i.e. state.validators[contribution_and_proof.aggregator_index].pubkey in get_sync_subcommittee_pubkeys(state, contribution.subcommittee_index).
|
|
74
75
|
// > Checked in validateGossipSyncCommitteeExceptSig()
|
|
75
76
|
|
|
76
|
-
const participantPubkeys = syncCommitteeParticipantIndices.map(
|
|
77
|
-
(validatorIndex) => headState.epochCtx.index2pubkey[validatorIndex]
|
|
78
|
-
);
|
|
77
|
+
const participantPubkeys = syncCommitteeParticipantIndices.map((validatorIndex) => index2pubkey[validatorIndex]);
|
|
79
78
|
const signatureSets = [
|
|
80
79
|
// [REJECT] The contribution_and_proof.selection_proof is a valid signature of the SyncAggregatorSelectionData
|
|
81
80
|
// derived from the contribution by the validator with index contribution_and_proof.aggregator_index.
|
|
82
|
-
getSyncCommitteeSelectionProofSignatureSet(headState, contributionAndProof),
|
|
81
|
+
getSyncCommitteeSelectionProofSignatureSet(chain.config, index2pubkey, headState, contributionAndProof),
|
|
83
82
|
|
|
84
83
|
// [REJECT] The aggregator signature, signed_contribution_and_proof.signature, is valid.
|
|
85
|
-
getContributionAndProofSignatureSet(headState, signedContributionAndProof),
|
|
84
|
+
getContributionAndProofSignatureSet(chain.config, index2pubkey, headState, signedContributionAndProof),
|
|
86
85
|
|
|
87
86
|
// [REJECT] The aggregate signature is valid for the message beacon_block_root and aggregate pubkey derived from
|
|
88
87
|
// the participation info in aggregation_bits for the subcommittee specified by the contribution.subcommittee_index.
|
|
89
|
-
getSyncCommitteeContributionSignatureSet(
|
|
88
|
+
getSyncCommitteeContributionSignatureSet(
|
|
89
|
+
chain.config,
|
|
90
|
+
headState as CachedBeaconStateAltair,
|
|
91
|
+
contribution,
|
|
92
|
+
participantPubkeys
|
|
93
|
+
),
|
|
90
94
|
];
|
|
91
95
|
|
|
92
96
|
if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true}))) {
|
|
@@ -59,7 +59,7 @@ async function validateVoluntaryExit(
|
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
const signatureSet = getVoluntaryExitSignatureSet(state, voluntaryExit);
|
|
62
|
+
const signatureSet = getVoluntaryExitSignatureSet(chain.config, chain.index2pubkey, state.slot, voluntaryExit);
|
|
63
63
|
if (!(await chain.bls.verifySignatureSets([signatureSet], {batchable: true, priority: prioritizeBls}))) {
|
|
64
64
|
throw new VoluntaryExitError(GossipAction.REJECT, {
|
|
65
65
|
code: VoluntaryExitErrorCode.INVALID_SIGNATURE,
|
package/src/db/beacon.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {ChainForkConfig} from "@lodestar/config";
|
|
2
|
-
import {Db, LevelDbControllerMetrics} from "@lodestar/db";
|
|
2
|
+
import {Db, LevelDbControllerMetrics, encodeKey} from "@lodestar/db";
|
|
3
|
+
import {Bucket} from "./buckets.js";
|
|
3
4
|
import {IBeaconDb} from "./interface.js";
|
|
4
5
|
import {CheckpointStateRepository} from "./repositories/checkpointState.js";
|
|
5
6
|
import {
|
|
@@ -14,16 +15,12 @@ import {
|
|
|
14
15
|
CheckpointHeaderRepository,
|
|
15
16
|
DataColumnSidecarArchiveRepository,
|
|
16
17
|
DataColumnSidecarRepository,
|
|
17
|
-
DepositDataRootRepository,
|
|
18
|
-
DepositEventRepository,
|
|
19
|
-
Eth1DataRepository,
|
|
20
18
|
ProposerSlashingRepository,
|
|
21
19
|
StateArchiveRepository,
|
|
22
20
|
SyncCommitteeRepository,
|
|
23
21
|
SyncCommitteeWitnessRepository,
|
|
24
22
|
VoluntaryExitRepository,
|
|
25
23
|
} from "./repositories/index.js";
|
|
26
|
-
import {PreGenesisState, PreGenesisStateLastProcessedBlock} from "./single/index.js";
|
|
27
24
|
|
|
28
25
|
export type BeaconDbModules = {
|
|
29
26
|
config: ChainForkConfig;
|
|
@@ -45,14 +42,8 @@ export class BeaconDb implements IBeaconDb {
|
|
|
45
42
|
voluntaryExit: VoluntaryExitRepository;
|
|
46
43
|
proposerSlashing: ProposerSlashingRepository;
|
|
47
44
|
attesterSlashing: AttesterSlashingRepository;
|
|
48
|
-
depositEvent: DepositEventRepository;
|
|
49
45
|
blsToExecutionChange: BLSToExecutionChangeRepository;
|
|
50
46
|
|
|
51
|
-
depositDataRoot: DepositDataRootRepository;
|
|
52
|
-
eth1Data: Eth1DataRepository;
|
|
53
|
-
preGenesisState: PreGenesisState;
|
|
54
|
-
preGenesisStateLastProcessedBlock: PreGenesisStateLastProcessedBlock;
|
|
55
|
-
|
|
56
47
|
// lightclient
|
|
57
48
|
bestLightClientUpdate: BestLightClientUpdateRepository;
|
|
58
49
|
checkpointHeader: CheckpointHeaderRepository;
|
|
@@ -80,11 +71,6 @@ export class BeaconDb implements IBeaconDb {
|
|
|
80
71
|
this.blsToExecutionChange = new BLSToExecutionChangeRepository(config, db);
|
|
81
72
|
this.proposerSlashing = new ProposerSlashingRepository(config, db);
|
|
82
73
|
this.attesterSlashing = new AttesterSlashingRepository(config, db);
|
|
83
|
-
this.depositEvent = new DepositEventRepository(config, db);
|
|
84
|
-
this.depositDataRoot = new DepositDataRootRepository(config, db);
|
|
85
|
-
this.eth1Data = new Eth1DataRepository(config, db);
|
|
86
|
-
this.preGenesisState = new PreGenesisState(config, db);
|
|
87
|
-
this.preGenesisStateLastProcessedBlock = new PreGenesisStateLastProcessedBlock(config, db);
|
|
88
74
|
|
|
89
75
|
// lightclient
|
|
90
76
|
this.bestLightClientUpdate = new BestLightClientUpdateRepository(config, db);
|
|
@@ -110,4 +96,40 @@ export class BeaconDb implements IBeaconDb {
|
|
|
110
96
|
// TODO: Enable once it's deemed safe
|
|
111
97
|
// await this.block.batchDelete(await this.block.keys());
|
|
112
98
|
}
|
|
99
|
+
|
|
100
|
+
async deleteDeprecatedEth1Data(): Promise<void> {
|
|
101
|
+
const deprecatedBuckets = [
|
|
102
|
+
Bucket.phase0_eth1Data,
|
|
103
|
+
Bucket.index_depositDataRoot,
|
|
104
|
+
Bucket.phase0_depositData,
|
|
105
|
+
Bucket.phase0_depositEvent,
|
|
106
|
+
Bucket.phase0_preGenesisState,
|
|
107
|
+
Bucket.phase0_preGenesisStateLastProcessedBlock,
|
|
108
|
+
];
|
|
109
|
+
|
|
110
|
+
for (const bucket of deprecatedBuckets) {
|
|
111
|
+
await this.deleteBucketData(bucket);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
private async deleteBucketData(bucket: Bucket): Promise<void> {
|
|
116
|
+
const minKey = encodeKey(bucket, Buffer.alloc(0));
|
|
117
|
+
const maxKey = encodeKey(bucket + 1, Buffer.alloc(0));
|
|
118
|
+
|
|
119
|
+
// Batch delete to avoid loading all keys into memory at once
|
|
120
|
+
const BATCH_DELETE_SIZE = 1000;
|
|
121
|
+
let keysBatch: Uint8Array[] = [];
|
|
122
|
+
|
|
123
|
+
for await (const key of this.db.keysStream({gte: minKey, lt: maxKey})) {
|
|
124
|
+
keysBatch.push(key);
|
|
125
|
+
if (keysBatch.length >= BATCH_DELETE_SIZE) {
|
|
126
|
+
await this.db.batchDelete(keysBatch);
|
|
127
|
+
keysBatch = [];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (keysBatch.length > 0) {
|
|
132
|
+
await this.db.batchDelete(keysBatch);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
113
135
|
}
|
package/src/db/buckets.ts
CHANGED
|
@@ -16,14 +16,16 @@ export enum Bucket {
|
|
|
16
16
|
index_mainChain = 6, // Slot -> Root<BeaconBlock>
|
|
17
17
|
// justified, finalized state and block hashes
|
|
18
18
|
index_chainInfo = 7, // Key -> Number64 | stateHash | blockHash
|
|
19
|
-
|
|
20
|
-
phase0_eth1Data = 8,
|
|
21
|
-
|
|
19
|
+
/** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
|
|
20
|
+
phase0_eth1Data = 8,
|
|
21
|
+
/** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
|
|
22
|
+
index_depositDataRoot = 9,
|
|
22
23
|
|
|
23
24
|
// op pool
|
|
24
25
|
// phase0_attestation = 10, // DEPRECATED on v0.25.0
|
|
25
26
|
// phase0_aggregateAndProof = 11, // Root -> AggregateAndProof, DEPRECATED on v.27.0
|
|
26
|
-
|
|
27
|
+
/** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
|
|
28
|
+
phase0_depositData = 12,
|
|
27
29
|
phase0_exit = 13, // ValidatorIndex -> VoluntaryExit
|
|
28
30
|
phase0_proposerSlashing = 14, // ValidatorIndex -> ProposerSlashing
|
|
29
31
|
allForks_attesterSlashing = 15, // Root -> AttesterSlashing
|
|
@@ -32,15 +34,18 @@ export enum Bucket {
|
|
|
32
34
|
allForks_checkpointState = 17, // Root -> BeaconState
|
|
33
35
|
|
|
34
36
|
// allForks_pendingBlock = 25, // Root -> SignedBeaconBlock // DEPRECATED on v0.30.0
|
|
35
|
-
|
|
37
|
+
/** @deprecated Eth1 deposit tracking is not required since electra, only kept around to delete data from existing databases */
|
|
38
|
+
phase0_depositEvent = 19,
|
|
36
39
|
|
|
37
40
|
index_stateArchiveRootIndex = 26, // State Root -> slot
|
|
38
41
|
|
|
39
42
|
deneb_blobSidecars = 27, // DENEB BeaconBlockRoot -> BlobSidecars
|
|
40
43
|
deneb_blobSidecarsArchive = 28, // DENEB BeaconBlockSlot -> BlobSidecars
|
|
41
44
|
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
/** @deprecated Genesis from eth1 is no longer supported, only kept around to delete data from existing databases */
|
|
46
|
+
phase0_preGenesisState = 30,
|
|
47
|
+
/** @deprecated Genesis from eth1 is no longer supported, only kept around to delete data from existing databases */
|
|
48
|
+
phase0_preGenesisStateLastProcessedBlock = 31,
|
|
44
49
|
|
|
45
50
|
// Lightclient server
|
|
46
51
|
// altair_bestUpdatePerCommitteePeriod = 30, // DEPRECATED on v0.32.0
|
package/src/db/interface.ts
CHANGED
|
@@ -12,16 +12,12 @@ import {
|
|
|
12
12
|
CheckpointHeaderRepository,
|
|
13
13
|
DataColumnSidecarArchiveRepository,
|
|
14
14
|
DataColumnSidecarRepository,
|
|
15
|
-
DepositDataRootRepository,
|
|
16
|
-
DepositEventRepository,
|
|
17
|
-
Eth1DataRepository,
|
|
18
15
|
ProposerSlashingRepository,
|
|
19
16
|
StateArchiveRepository,
|
|
20
17
|
SyncCommitteeRepository,
|
|
21
18
|
SyncCommitteeWitnessRepository,
|
|
22
19
|
VoluntaryExitRepository,
|
|
23
20
|
} from "./repositories/index.js";
|
|
24
|
-
import {PreGenesisState, PreGenesisStateLastProcessedBlock} from "./single/index.js";
|
|
25
21
|
|
|
26
22
|
/**
|
|
27
23
|
* The DB service manages the data layer of the beacon chain
|
|
@@ -48,17 +44,8 @@ export interface IBeaconDb {
|
|
|
48
44
|
voluntaryExit: VoluntaryExitRepository;
|
|
49
45
|
proposerSlashing: ProposerSlashingRepository;
|
|
50
46
|
attesterSlashing: AttesterSlashingRepository;
|
|
51
|
-
depositEvent: DepositEventRepository;
|
|
52
47
|
blsToExecutionChange: BLSToExecutionChangeRepository;
|
|
53
48
|
|
|
54
|
-
// eth1 processing
|
|
55
|
-
preGenesisState: PreGenesisState;
|
|
56
|
-
preGenesisStateLastProcessedBlock: PreGenesisStateLastProcessedBlock;
|
|
57
|
-
|
|
58
|
-
// all deposit data roots and merkle tree
|
|
59
|
-
depositDataRoot: DepositDataRootRepository;
|
|
60
|
-
eth1Data: Eth1DataRepository;
|
|
61
|
-
|
|
62
49
|
// lightclient
|
|
63
50
|
bestLightClientUpdate: BestLightClientUpdateRepository;
|
|
64
51
|
checkpointHeader: CheckpointHeaderRepository;
|
|
@@ -69,6 +56,8 @@ export interface IBeaconDb {
|
|
|
69
56
|
|
|
70
57
|
pruneHotDb(): Promise<void>;
|
|
71
58
|
|
|
59
|
+
deleteDeprecatedEth1Data(): Promise<void>;
|
|
60
|
+
|
|
72
61
|
/** Close the connection to the db instance and close the db store. */
|
|
73
62
|
close(): Promise<void>;
|
|
74
63
|
/** To inject metrics after CLI initialization */
|
|
@@ -8,9 +8,6 @@ export {BlockArchiveRepository} from "./blockArchive.js";
|
|
|
8
8
|
export {BLSToExecutionChangeRepository} from "./blsToExecutionChange.js";
|
|
9
9
|
export {DataColumnSidecarRepository} from "./dataColumnSidecar.js";
|
|
10
10
|
export {DataColumnSidecarArchiveRepository} from "./dataColumnSidecarArchive.js";
|
|
11
|
-
export {DepositDataRootRepository} from "./depositDataRoot.js";
|
|
12
|
-
export {DepositEventRepository} from "./depositEvent.js";
|
|
13
|
-
export {Eth1DataRepository} from "./eth1Data.js";
|
|
14
11
|
export {BestLightClientUpdateRepository} from "./lightclientBestUpdate.js";
|
|
15
12
|
export {CheckpointHeaderRepository} from "./lightclientCheckpointHeader.js";
|
|
16
13
|
export {SyncCommitteeRepository} from "./lightclientSyncCommittee.js";
|
|
@@ -4,14 +4,6 @@ import {BlobsBundle, ExecutionPayload, ExecutionRequests, Root, RootHex, Wei} fr
|
|
|
4
4
|
import {BlobAndProof} from "@lodestar/types/deneb";
|
|
5
5
|
import {BlobAndProofV2} from "@lodestar/types/fulu";
|
|
6
6
|
import {strip0xPrefix} from "@lodestar/utils";
|
|
7
|
-
import {
|
|
8
|
-
ErrorJsonRpcResponse,
|
|
9
|
-
HttpRpcError,
|
|
10
|
-
IJsonRpcHttpClient,
|
|
11
|
-
JsonRpcHttpClientEvent,
|
|
12
|
-
ReqOpts,
|
|
13
|
-
} from "../../eth1/provider/jsonRpcHttpClient.js";
|
|
14
|
-
import {bytesToData, numToQuantity} from "../../eth1/provider/utils.js";
|
|
15
7
|
import {Metrics} from "../../metrics/index.js";
|
|
16
8
|
import {EPOCHS_PER_BATCH} from "../../sync/constants.js";
|
|
17
9
|
import {getLodestarClientVersion} from "../../util/metadata.js";
|
|
@@ -27,6 +19,13 @@ import {
|
|
|
27
19
|
PayloadId,
|
|
28
20
|
VersionedHashes,
|
|
29
21
|
} from "./interface.js";
|
|
22
|
+
import {
|
|
23
|
+
ErrorJsonRpcResponse,
|
|
24
|
+
HttpRpcError,
|
|
25
|
+
IJsonRpcHttpClient,
|
|
26
|
+
JsonRpcHttpClientEvent,
|
|
27
|
+
ReqOpts,
|
|
28
|
+
} from "./jsonRpcHttpClient.js";
|
|
30
29
|
import {PayloadIdCache} from "./payloadIdCache.js";
|
|
31
30
|
import {
|
|
32
31
|
BLOB_AND_PROOF_V2_RPC_BYTES,
|
|
@@ -45,7 +44,7 @@ import {
|
|
|
45
44
|
serializePayloadAttributes,
|
|
46
45
|
serializeVersionedHashes,
|
|
47
46
|
} from "./types.js";
|
|
48
|
-
import {getExecutionEngineState} from "./utils.js";
|
|
47
|
+
import {bytesToData, getExecutionEngineState, numToQuantity} from "./utils.js";
|
|
49
48
|
|
|
50
49
|
export type ExecutionEngineModules = {
|
|
51
50
|
signal: AbortSignal;
|
|
@@ -194,15 +193,12 @@ export class ExecutionEngineHttp implements IExecutionEngine {
|
|
|
194
193
|
* 1. {status: INVALID_BLOCK_HASH, latestValidHash: null, validationError:
|
|
195
194
|
* errorMessage | null} if the blockHash validation has failed
|
|
196
195
|
*
|
|
197
|
-
* 2. {status:
|
|
198
|
-
* errorMessage | null} if terminal block conditions are not satisfied
|
|
199
|
-
*
|
|
200
|
-
* 3. {status: SYNCING, latestValidHash: null, validationError: null} if the payload
|
|
196
|
+
* 2. {status: SYNCING, latestValidHash: null, validationError: null} if the payload
|
|
201
197
|
* extends the canonical chain and requisite data for its validation is missing
|
|
202
198
|
* with the payload status obtained from the Payload validation process if the payload
|
|
203
199
|
* has been fully validated while processing the call
|
|
204
200
|
*
|
|
205
|
-
*
|
|
201
|
+
* 3. {status: ACCEPTED, latestValidHash: null, validationError: null} if the
|
|
206
202
|
* following conditions are met:
|
|
207
203
|
* i) the blockHash of the payload is valid
|
|
208
204
|
* ii) the payload doesn't extend the canonical chain
|
|
@@ -330,16 +326,11 @@ export class ExecutionEngineHttp implements IExecutionEngine {
|
|
|
330
326
|
* errorMessage | null}, payloadId: null}
|
|
331
327
|
* obtained from the Payload validation process if the payload is deemed INVALID
|
|
332
328
|
*
|
|
333
|
-
* 3. {payloadStatus: {status:
|
|
334
|
-
* validationError: errorMessage | null}, payloadId: null}
|
|
335
|
-
* either obtained from the Payload validation process or as a result of validating a
|
|
336
|
-
* PoW block referenced by forkchoiceState.headBlockHash
|
|
337
|
-
*
|
|
338
|
-
* 4. {payloadStatus: {status: VALID, latestValidHash: forkchoiceState.headBlockHash,
|
|
329
|
+
* 3. {payloadStatus: {status: VALID, latestValidHash: forkchoiceState.headBlockHash,
|
|
339
330
|
* validationError: null}, payloadId: null}
|
|
340
331
|
* if the payload is deemed VALID and a build process hasn't been started
|
|
341
332
|
*
|
|
342
|
-
*
|
|
333
|
+
* 4. {payloadStatus: {status: VALID, latestValidHash: forkchoiceState.headBlockHash,
|
|
343
334
|
* validationError: null}, payloadId: buildProcessId}
|
|
344
335
|
* if the payload is deemed VALID and the build process has begun.
|
|
345
336
|
*
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {fromHex, toPrintableUrl} from "@lodestar/utils";
|
|
2
|
-
import {JsonRpcHttpClient} from "../../eth1/provider/jsonRpcHttpClient.js";
|
|
3
2
|
import {ExecutionEngineDisabled} from "./disabled.js";
|
|
4
3
|
import {
|
|
5
4
|
ExecutionEngineHttp,
|
|
@@ -8,6 +7,7 @@ import {
|
|
|
8
7
|
defaultExecutionEngineHttpOpts,
|
|
9
8
|
} from "./http.js";
|
|
10
9
|
import {IExecutionEngine} from "./interface.js";
|
|
10
|
+
import {JsonRpcHttpClient} from "./jsonRpcHttpClient.js";
|
|
11
11
|
import {ExecutionEngineMockBackend, ExecutionEngineMockOpts} from "./mock.js";
|
|
12
12
|
import {ExecutionEngineMockJsonRpcClient, JsonRpcBackend} from "./utils.js";
|
|
13
13
|
|
|
@@ -9,9 +9,9 @@ import {
|
|
|
9
9
|
import {BlobsBundle, ExecutionPayload, ExecutionRequests, Root, RootHex, Wei, capella} from "@lodestar/types";
|
|
10
10
|
import {BlobAndProof} from "@lodestar/types/deneb";
|
|
11
11
|
import {BlobAndProofV2} from "@lodestar/types/fulu";
|
|
12
|
-
import {DATA} from "../../eth1/provider/utils.js";
|
|
13
12
|
import {PayloadId, PayloadIdCache, WithdrawalV1} from "./payloadIdCache.js";
|
|
14
13
|
import {ExecutionPayloadBody} from "./types.js";
|
|
14
|
+
import {DATA} from "./utils.js";
|
|
15
15
|
|
|
16
16
|
export {PayloadIdCache, type PayloadId, type WithdrawalV1};
|
|
17
17
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {EventEmitter} from "node:events";
|
|
2
2
|
import {StrictEventEmitter} from "strict-event-emitter-types";
|
|
3
3
|
import {ErrorAborted, Gauge, Histogram, TimeoutError, fetch, isValidHttpUrl, retry} from "@lodestar/utils";
|
|
4
|
-
import {IJson, RpcPayload} from "../interface.js";
|
|
5
4
|
import {JwtClaim, encodeJwtToken} from "./jwt.js";
|
|
5
|
+
import {IJson, RpcPayload} from "./utils.js";
|
|
6
6
|
|
|
7
7
|
export enum JsonRpcHttpClientEvent {
|
|
8
8
|
/**
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
|
+
import {ChainConfig} from "@lodestar/config";
|
|
2
3
|
import {
|
|
3
4
|
BLOB_TX_TYPE,
|
|
4
5
|
BYTES_PER_FIELD_ELEMENT,
|
|
@@ -7,11 +8,12 @@ import {
|
|
|
7
8
|
ForkPostBellatrix,
|
|
8
9
|
ForkPostCapella,
|
|
9
10
|
ForkSeq,
|
|
11
|
+
SLOTS_PER_EPOCH,
|
|
10
12
|
} from "@lodestar/params";
|
|
13
|
+
import {computeTimeAtSlot} from "@lodestar/state-transition";
|
|
11
14
|
import {ExecutionPayload, RootHex, bellatrix, deneb, ssz} from "@lodestar/types";
|
|
12
|
-
import {fromHex,
|
|
15
|
+
import {fromHex, toRootHex} from "@lodestar/utils";
|
|
13
16
|
import {ZERO_HASH_HEX} from "../../constants/index.js";
|
|
14
|
-
import {quantityToNum} from "../../eth1/provider/utils.js";
|
|
15
17
|
import {INTEROP_BLOCK_HASH} from "../../node/utils/interop/state.js";
|
|
16
18
|
import {kzgCommitmentToVersionedHash} from "../../util/blobs.js";
|
|
17
19
|
import {kzg} from "../../util/kzg.js";
|
|
@@ -29,20 +31,17 @@ import {
|
|
|
29
31
|
serializeExecutionPayload,
|
|
30
32
|
serializeExecutionRequests,
|
|
31
33
|
} from "./types.js";
|
|
32
|
-
import {JsonRpcBackend} from "./utils.js";
|
|
34
|
+
import {JsonRpcBackend, quantityToNum} from "./utils.js";
|
|
33
35
|
|
|
34
36
|
const INTEROP_GAS_LIMIT = 30e6;
|
|
35
37
|
const PRUNE_PAYLOAD_ID_AFTER_MS = 5000;
|
|
36
38
|
|
|
37
39
|
export type ExecutionEngineMockOpts = {
|
|
38
|
-
genesisBlockHash
|
|
40
|
+
genesisBlockHash?: string;
|
|
39
41
|
eth1BlockHash?: string;
|
|
40
42
|
onlyPredefinedResponses?: boolean;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
electraForkTimestamp?: number;
|
|
44
|
-
fuluForkTimestamp?: number;
|
|
45
|
-
gloasForkTimestamp?: number;
|
|
43
|
+
genesisTime?: number;
|
|
44
|
+
config?: ChainConfig;
|
|
46
45
|
};
|
|
47
46
|
|
|
48
47
|
type ExecutionBlock = {
|
|
@@ -70,22 +69,26 @@ export class ExecutionEngineMockBackend implements JsonRpcBackend {
|
|
|
70
69
|
finalizedBlockHash = ZERO_HASH_HEX;
|
|
71
70
|
readonly payloadIdCache = new PayloadIdCache();
|
|
72
71
|
|
|
73
|
-
/** Known valid blocks
|
|
72
|
+
/** Known valid blocks */
|
|
74
73
|
private readonly validBlocks = new Map<RootHex, ExecutionBlock>();
|
|
75
74
|
/** Preparing payloads to be retrieved via engine_getPayloadV1 */
|
|
76
75
|
private readonly preparingPayloads = new Map<number, PreparedPayload>();
|
|
77
76
|
private readonly payloadsForDeletion = new Map<number, number>();
|
|
78
|
-
|
|
79
77
|
private readonly predefinedPayloadStatuses = new Map<RootHex, PayloadStatus>();
|
|
80
78
|
|
|
81
79
|
private payloadId = 0;
|
|
80
|
+
private capellaForkTimestamp: number;
|
|
81
|
+
private denebForkTimestamp: number;
|
|
82
|
+
private electraForkTimestamp: number;
|
|
83
|
+
private fuluForkTimestamp: number;
|
|
84
|
+
private gloasForkTimestamp: number;
|
|
82
85
|
|
|
83
86
|
readonly handlers: {
|
|
84
87
|
[K in keyof EngineApiRpcParamTypes]: (...args: EngineApiRpcParamTypes[K]) => EngineApiRpcReturnTypes[K];
|
|
85
88
|
};
|
|
86
89
|
|
|
87
90
|
constructor(private readonly opts: ExecutionEngineMockOpts) {
|
|
88
|
-
this.validBlocks.set(opts.genesisBlockHash, {
|
|
91
|
+
this.validBlocks.set(opts.genesisBlockHash ?? ZERO_HASH_HEX, {
|
|
89
92
|
parentHash: ZERO_HASH_HEX,
|
|
90
93
|
blockHash: ZERO_HASH_HEX,
|
|
91
94
|
timestamp: 0,
|
|
@@ -101,6 +104,29 @@ export class ExecutionEngineMockBackend implements JsonRpcBackend {
|
|
|
101
104
|
blockNumber: 1,
|
|
102
105
|
});
|
|
103
106
|
|
|
107
|
+
const {config} = opts;
|
|
108
|
+
|
|
109
|
+
this.capellaForkTimestamp =
|
|
110
|
+
opts.genesisTime && config
|
|
111
|
+
? computeTimeAtSlot(config, config.CAPELLA_FORK_EPOCH * SLOTS_PER_EPOCH, opts.genesisTime)
|
|
112
|
+
: Infinity;
|
|
113
|
+
this.denebForkTimestamp =
|
|
114
|
+
opts.genesisTime && config
|
|
115
|
+
? computeTimeAtSlot(config, config.DENEB_FORK_EPOCH * SLOTS_PER_EPOCH, opts.genesisTime)
|
|
116
|
+
: Infinity;
|
|
117
|
+
this.electraForkTimestamp =
|
|
118
|
+
opts.genesisTime && config
|
|
119
|
+
? computeTimeAtSlot(config, config.ELECTRA_FORK_EPOCH * SLOTS_PER_EPOCH, opts.genesisTime)
|
|
120
|
+
: Infinity;
|
|
121
|
+
this.fuluForkTimestamp =
|
|
122
|
+
opts.genesisTime && config
|
|
123
|
+
? computeTimeAtSlot(config, config.FULU_FORK_EPOCH * SLOTS_PER_EPOCH, opts.genesisTime)
|
|
124
|
+
: Infinity;
|
|
125
|
+
this.gloasForkTimestamp =
|
|
126
|
+
opts.genesisTime && config
|
|
127
|
+
? computeTimeAtSlot(config, config.GLOAS_FORK_EPOCH * SLOTS_PER_EPOCH, opts.genesisTime)
|
|
128
|
+
: Infinity;
|
|
129
|
+
|
|
104
130
|
this.handlers = {
|
|
105
131
|
engine_newPayloadV1: this.notifyNewPayload.bind(this),
|
|
106
132
|
engine_newPayloadV2: this.notifyNewPayload.bind(this),
|
|
@@ -135,18 +161,6 @@ export class ExecutionEngineMockBackend implements JsonRpcBackend {
|
|
|
135
161
|
return [] as ExecutionPayloadBodyRpc[];
|
|
136
162
|
}
|
|
137
163
|
|
|
138
|
-
/**
|
|
139
|
-
* Mock manipulator to add more known blocks to this mock.
|
|
140
|
-
*/
|
|
141
|
-
addPowBlock(powBlock: bellatrix.PowBlock): void {
|
|
142
|
-
this.validBlocks.set(toHex(powBlock.blockHash), {
|
|
143
|
-
parentHash: toHex(powBlock.parentHash),
|
|
144
|
-
blockHash: toHex(powBlock.blockHash),
|
|
145
|
-
timestamp: 0,
|
|
146
|
-
blockNumber: 0,
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
|
|
150
164
|
/**
|
|
151
165
|
* Mock manipulator to add predefined responses before execution engine client calls
|
|
152
166
|
*/
|
|
@@ -258,7 +272,7 @@ export class ExecutionEngineMockBackend implements JsonRpcBackend {
|
|
|
258
272
|
// section of the EIP. Additionally, if this validation fails, client software MUST NOT update the forkchoice
|
|
259
273
|
// state and MUST NOT begin a payload build process.
|
|
260
274
|
//
|
|
261
|
-
// >
|
|
275
|
+
// > N/A: All networks have completed the merge transition
|
|
262
276
|
|
|
263
277
|
// 4. Before updating the forkchoice state, client software MUST ensure the validity of the payload referenced by
|
|
264
278
|
// forkchoiceState.headBlockHash, and MAY validate the payload while processing the call. The validation process
|
|
@@ -461,11 +475,11 @@ export class ExecutionEngineMockBackend implements JsonRpcBackend {
|
|
|
461
475
|
}
|
|
462
476
|
|
|
463
477
|
private timestampToFork(timestamp: number): ForkPostBellatrix {
|
|
464
|
-
if (timestamp >=
|
|
465
|
-
if (timestamp >=
|
|
466
|
-
if (timestamp >=
|
|
467
|
-
if (timestamp >=
|
|
468
|
-
if (timestamp >=
|
|
478
|
+
if (timestamp >= this.gloasForkTimestamp) return ForkName.gloas;
|
|
479
|
+
if (timestamp >= this.fuluForkTimestamp) return ForkName.fulu;
|
|
480
|
+
if (timestamp >= this.electraForkTimestamp) return ForkName.electra;
|
|
481
|
+
if (timestamp >= this.denebForkTimestamp) return ForkName.deneb;
|
|
482
|
+
if (timestamp >= this.capellaForkTimestamp) return ForkName.capella;
|
|
469
483
|
return ForkName.bellatrix;
|
|
470
484
|
}
|
|
471
485
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {SLOTS_PER_EPOCH} from "@lodestar/params";
|
|
2
2
|
import {pruneSetToMax} from "@lodestar/utils";
|
|
3
|
-
import {DATA, QUANTITY} from "../../eth1/provider/utils.js";
|
|
4
3
|
import {PayloadAttributesRpc} from "./types.js";
|
|
4
|
+
import {DATA, QUANTITY} from "./utils.js";
|
|
5
5
|
|
|
6
6
|
// Idealy this only need to be set to the max head reorgs number
|
|
7
7
|
const MAX_PAYLOAD_IDS = SLOTS_PER_EPOCH;
|
|
@@ -23,6 +23,14 @@ import {
|
|
|
23
23
|
} from "@lodestar/types";
|
|
24
24
|
import {BlobAndProof} from "@lodestar/types/deneb";
|
|
25
25
|
import {BlobAndProofV2} from "@lodestar/types/fulu";
|
|
26
|
+
import {
|
|
27
|
+
ExecutionPayloadStatus,
|
|
28
|
+
ExecutionRequestType,
|
|
29
|
+
PayloadAttributes,
|
|
30
|
+
VersionedHashes,
|
|
31
|
+
isExecutionRequestType,
|
|
32
|
+
} from "./interface.js";
|
|
33
|
+
import {WithdrawalV1} from "./payloadIdCache.js";
|
|
26
34
|
import {
|
|
27
35
|
DATA,
|
|
28
36
|
QUANTITY,
|
|
@@ -32,15 +40,7 @@ import {
|
|
|
32
40
|
numToQuantity,
|
|
33
41
|
quantityToBigint,
|
|
34
42
|
quantityToNum,
|
|
35
|
-
} from "
|
|
36
|
-
import {
|
|
37
|
-
ExecutionPayloadStatus,
|
|
38
|
-
ExecutionRequestType,
|
|
39
|
-
PayloadAttributes,
|
|
40
|
-
VersionedHashes,
|
|
41
|
-
isExecutionRequestType,
|
|
42
|
-
} from "./interface.js";
|
|
43
|
-
import {WithdrawalV1} from "./payloadIdCache.js";
|
|
43
|
+
} from "./utils.js";
|
|
44
44
|
|
|
45
45
|
export type EngineApiRpcParamTypes = {
|
|
46
46
|
/**
|
|
@@ -1,14 +1,120 @@
|
|
|
1
|
-
import {isErrorAborted, isFetchError} from "@lodestar/utils";
|
|
2
|
-
import {
|
|
1
|
+
import {bigIntToBytes, bytesToBigInt, fromHex, fromHexInto, isErrorAborted, isFetchError, toHex} from "@lodestar/utils";
|
|
2
|
+
import {isQueueErrorAborted} from "../../util/queue/errors.js";
|
|
3
|
+
import {ExecutionEngineState, ExecutionPayloadStatus} from "./interface.js";
|
|
3
4
|
import {
|
|
4
5
|
ErrorJsonRpcResponse,
|
|
5
6
|
HttpRpcError,
|
|
6
7
|
IJsonRpcHttpClient,
|
|
7
8
|
JsonRpcHttpClientEvent,
|
|
8
9
|
JsonRpcHttpClientEventEmitter,
|
|
9
|
-
} from "
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
} from "./jsonRpcHttpClient.js";
|
|
11
|
+
|
|
12
|
+
/** QUANTITY as defined in ethereum execution layer JSON RPC https://eth.wiki/json-rpc/API */
|
|
13
|
+
export type QUANTITY = string;
|
|
14
|
+
/** DATA as defined in ethereum execution layer JSON RPC https://eth.wiki/json-rpc/API */
|
|
15
|
+
export type DATA = string;
|
|
16
|
+
|
|
17
|
+
export const rootHexRegex = /^0x[a-fA-F0-9]{64}$/;
|
|
18
|
+
|
|
19
|
+
export type IJson = string | number | boolean | undefined | IJson[] | {[key: string]: IJson};
|
|
20
|
+
|
|
21
|
+
export interface RpcPayload<P = IJson[]> {
|
|
22
|
+
method: string;
|
|
23
|
+
params: P;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* QUANTITY as defined in ethereum execution layer JSON RPC https://eth.wiki/json-rpc/API
|
|
28
|
+
*
|
|
29
|
+
* When encoding QUANTITIES (integers, numbers): encode as hex, prefix with “0x”, the most compact representation (slight exception: zero should be represented as “0x0”). Examples:
|
|
30
|
+
* - 0x41 (65 in decimal)
|
|
31
|
+
* - 0x400 (1024 in decimal)
|
|
32
|
+
* - WRONG: 0x (should always have at least one digit - zero is “0x0”)
|
|
33
|
+
* - WRONG: 0x0400 (no leading zeroes allowed)
|
|
34
|
+
* - WRONG: ff (must be prefixed 0x)
|
|
35
|
+
*/
|
|
36
|
+
export function numToQuantity(num: number | bigint): QUANTITY {
|
|
37
|
+
return "0x" + num.toString(16);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* QUANTITY as defined in ethereum execution layer JSON RPC https://eth.wiki/json-rpc/API
|
|
42
|
+
*/
|
|
43
|
+
export function quantityToNum(hex: QUANTITY, id = ""): number {
|
|
44
|
+
const num = parseInt(hex, 16);
|
|
45
|
+
if (Number.isNaN(num) || num < 0) throw Error(`Invalid hex decimal ${id} '${hex}'`);
|
|
46
|
+
return num;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* QUANTITY as defined in ethereum execution layer JSON RPC https://eth.wiki/json-rpc/API.
|
|
51
|
+
* Typesafe fn to convert hex string to bigint. The BigInt constructor param is any
|
|
52
|
+
*/
|
|
53
|
+
export function quantityToBigint(hex: QUANTITY, id = ""): bigint {
|
|
54
|
+
try {
|
|
55
|
+
return BigInt(hex);
|
|
56
|
+
} catch (e) {
|
|
57
|
+
throw Error(`Invalid hex bigint ${id} '${hex}': ${(e as Error).message}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* QUANTITY as defined in ethereum execution layer JSON RPC https://eth.wiki/json-rpc/API.
|
|
63
|
+
*/
|
|
64
|
+
export function quantityToBytes(hex: QUANTITY): Uint8Array {
|
|
65
|
+
const bn = quantityToBigint(hex);
|
|
66
|
+
return bigIntToBytes(bn, 32, "le");
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* QUANTITY as defined in ethereum execution layer JSON RPC https://eth.wiki/json-rpc/API.
|
|
71
|
+
* Compress a 32 ByteVector into a QUANTITY
|
|
72
|
+
*/
|
|
73
|
+
export function bytesToQuantity(bytes: Uint8Array): QUANTITY {
|
|
74
|
+
const bn = bytesToBigInt(bytes, "le");
|
|
75
|
+
return numToQuantity(bn);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* DATA as defined in ethereum execution layer JSON RPC https://eth.wiki/json-rpc/API
|
|
80
|
+
*
|
|
81
|
+
* When encoding UNFORMATTED DATA (byte arrays, account addresses, hashes, bytecode arrays): encode as hex, prefix with
|
|
82
|
+
* “0x”, two hex digits per byte. Examples:
|
|
83
|
+
*
|
|
84
|
+
* - 0x41 (size 1, “A”)
|
|
85
|
+
* - 0x004200 (size 3, “\0B\0”)
|
|
86
|
+
* - 0x (size 0, “”)
|
|
87
|
+
* - WRONG: 0xf0f0f (must be even number of digits)
|
|
88
|
+
* - WRONG: 004200 (must be prefixed 0x)
|
|
89
|
+
*/
|
|
90
|
+
export function bytesToData(bytes: Uint8Array): DATA {
|
|
91
|
+
return toHex(bytes);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* DATA as defined in ethereum execution layer JSON RPC https://eth.wiki/json-rpc/API
|
|
96
|
+
*/
|
|
97
|
+
export function dataToBytes(hex: DATA, fixedLength: number | null): Uint8Array {
|
|
98
|
+
try {
|
|
99
|
+
const bytes = fromHex(hex);
|
|
100
|
+
if (fixedLength != null && bytes.length !== fixedLength) {
|
|
101
|
+
throw Error(`Wrong data length ${bytes.length} expected ${fixedLength}`);
|
|
102
|
+
}
|
|
103
|
+
return bytes;
|
|
104
|
+
} catch (e) {
|
|
105
|
+
(e as Error).message = `Invalid hex string: ${(e as Error).message}`;
|
|
106
|
+
throw e;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Convert DATA into a preallocated buffer
|
|
112
|
+
* fromHexInto will throw if buffer's length is not the same as the decoded hex length
|
|
113
|
+
*/
|
|
114
|
+
export function dataIntoBytes(hex: DATA, buffer: Uint8Array): Uint8Array {
|
|
115
|
+
fromHexInto(hex, buffer);
|
|
116
|
+
return buffer;
|
|
117
|
+
}
|
|
12
118
|
|
|
13
119
|
export type JsonRpcBackend = {
|
|
14
120
|
// biome-ignore lint/suspicious/noExplicitAny: We need to use `any` type here
|