@lodestar/beacon-node 1.38.0 → 1.39.0-dev.100ab480bb
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/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 +4 -4
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +4 -4
- 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 +32 -98
- 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 -2
- 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.js +1 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.js +2 -2
- package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
- package/lib/chain/validation/proposerSlashing.js +1 -1
- 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 +2 -6
- package/lib/execution/engine/mock.d.ts.map +1 -1
- package/lib/execution/engine/mock.js +4 -15
- 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/node/nodejs.d.ts +6 -3
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js +13 -10
- 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.d.ts.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 +3 -3
- 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 +14 -21
- 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 +7 -7
- 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 +33 -132
- package/src/chain/stateCache/persistentCheckpointsCache.ts +15 -2
- package/src/chain/validation/aggregateAndProof.ts +12 -0
- package/src/chain/validation/attesterSlashing.ts +7 -2
- package/src/chain/validation/blobSidecar.ts +10 -2
- package/src/chain/validation/block.ts +1 -1
- package/src/chain/validation/blsToExecutionChange.ts +1 -1
- package/src/chain/validation/dataColumnSidecar.ts +6 -1
- package/src/chain/validation/proposerSlashing.ts +6 -1
- 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 +4 -17
- 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/node/nodejs.ts +20 -11
- 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 +14 -2
- package/src/sync/backfill/verify.ts +9 -2
- 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
package/src/chain/chain.ts
CHANGED
|
@@ -3,7 +3,7 @@ import {PrivateKey} from "@libp2p/interface";
|
|
|
3
3
|
import {PubkeyIndexMap} from "@chainsafe/pubkey-index-map";
|
|
4
4
|
import {CompositeTypeAny, TreeView, Type} from "@chainsafe/ssz";
|
|
5
5
|
import {BeaconConfig} from "@lodestar/config";
|
|
6
|
-
import {CheckpointWithHex,
|
|
6
|
+
import {CheckpointWithHex, IForkChoice, ProtoBlock, UpdateHeadOpt} from "@lodestar/fork-choice";
|
|
7
7
|
import {LoggerNode} from "@lodestar/logger/node";
|
|
8
8
|
import {EFFECTIVE_BALANCE_INCREMENT, GENESIS_SLOT, SLOTS_PER_EPOCH, isForkPostElectra} from "@lodestar/params";
|
|
9
9
|
import {
|
|
@@ -14,13 +14,14 @@ import {
|
|
|
14
14
|
EpochShuffling,
|
|
15
15
|
Index2PubkeyCache,
|
|
16
16
|
computeAnchorCheckpoint,
|
|
17
|
+
computeAttestationsRewards,
|
|
18
|
+
computeBlockRewards,
|
|
17
19
|
computeEndSlotAtEpoch,
|
|
18
20
|
computeEpochAtSlot,
|
|
19
21
|
computeStartSlotAtEpoch,
|
|
20
|
-
|
|
22
|
+
computeSyncCommitteeRewards,
|
|
21
23
|
getEffectiveBalanceIncrementsZeroInactive,
|
|
22
24
|
getEffectiveBalancesFromStateBytes,
|
|
23
|
-
isCachedBeaconState,
|
|
24
25
|
processSlots,
|
|
25
26
|
} from "@lodestar/state-transition";
|
|
26
27
|
import {
|
|
@@ -38,12 +39,12 @@ import {
|
|
|
38
39
|
Wei,
|
|
39
40
|
isBlindedBeaconBlock,
|
|
40
41
|
phase0,
|
|
42
|
+
rewards,
|
|
41
43
|
} from "@lodestar/types";
|
|
42
44
|
import {Logger, fromHex, gweiToWei, isErrorAborted, pruneSetToMax, sleep, toRootHex} from "@lodestar/utils";
|
|
43
45
|
import {ProcessShutdownCallback} from "@lodestar/validator";
|
|
44
46
|
import {GENESIS_EPOCH, ZERO_HASH} from "../constants/index.js";
|
|
45
47
|
import {IBeaconDb} from "../db/index.js";
|
|
46
|
-
import {IEth1ForBlockProduction} from "../eth1/index.js";
|
|
47
48
|
import {BuilderStatus} from "../execution/builder/http.js";
|
|
48
49
|
import {IExecutionBuilder, IExecutionEngine} from "../execution/index.js";
|
|
49
50
|
import {Metrics} from "../metrics/index.js";
|
|
@@ -80,9 +81,6 @@ import {AssembledBlockType, BlockType, ProduceResult} from "./produceBlock/index
|
|
|
80
81
|
import {BlockAttributes, produceBlockBody, produceCommonBlockBody} from "./produceBlock/produceBlockBody.js";
|
|
81
82
|
import {QueuedStateRegenerator, RegenCaller} from "./regen/index.js";
|
|
82
83
|
import {ReprocessController} from "./reprocess.js";
|
|
83
|
-
import {AttestationsRewards, computeAttestationsRewards} from "./rewards/attestationsRewards.js";
|
|
84
|
-
import {BlockRewards, computeBlockRewards} from "./rewards/blockRewards.js";
|
|
85
|
-
import {SyncCommitteeRewards, computeSyncCommitteeRewards} from "./rewards/syncCommitteeRewards.js";
|
|
86
84
|
import {
|
|
87
85
|
SeenAggregators,
|
|
88
86
|
SeenAttesters,
|
|
@@ -117,7 +115,6 @@ const DEFAULT_MAX_CACHED_PRODUCED_RESULTS = 4;
|
|
|
117
115
|
export class BeaconChain implements IBeaconChain {
|
|
118
116
|
readonly genesisTime: UintNum64;
|
|
119
117
|
readonly genesisValidatorsRoot: Root;
|
|
120
|
-
readonly eth1: IEth1ForBlockProduction;
|
|
121
118
|
readonly executionEngine: IExecutionEngine;
|
|
122
119
|
readonly executionBuilder?: IExecutionBuilder;
|
|
123
120
|
// Expose config for convenience in modularized functions
|
|
@@ -144,7 +141,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
144
141
|
readonly aggregatedAttestationPool: AggregatedAttestationPool;
|
|
145
142
|
readonly syncCommitteeMessagePool: SyncCommitteeMessagePool;
|
|
146
143
|
readonly syncContributionAndProofPool;
|
|
147
|
-
readonly opPool
|
|
144
|
+
readonly opPool: OpPool;
|
|
148
145
|
|
|
149
146
|
// Gossip seen cache
|
|
150
147
|
readonly seenAttesters = new SeenAttesters();
|
|
@@ -206,6 +203,8 @@ export class BeaconChain implements IBeaconChain {
|
|
|
206
203
|
{
|
|
207
204
|
privateKey,
|
|
208
205
|
config,
|
|
206
|
+
pubkey2index,
|
|
207
|
+
index2pubkey,
|
|
209
208
|
db,
|
|
210
209
|
dbName,
|
|
211
210
|
dataDir,
|
|
@@ -216,12 +215,13 @@ export class BeaconChain implements IBeaconChain {
|
|
|
216
215
|
validatorMonitor,
|
|
217
216
|
anchorState,
|
|
218
217
|
isAnchorStateFinalized,
|
|
219
|
-
eth1,
|
|
220
218
|
executionEngine,
|
|
221
219
|
executionBuilder,
|
|
222
220
|
}: {
|
|
223
221
|
privateKey: PrivateKey;
|
|
224
222
|
config: BeaconConfig;
|
|
223
|
+
pubkey2index: PubkeyIndexMap;
|
|
224
|
+
index2pubkey: Index2PubkeyCache;
|
|
225
225
|
db: IBeaconDb;
|
|
226
226
|
dbName: string;
|
|
227
227
|
dataDir: string;
|
|
@@ -231,9 +231,8 @@ export class BeaconChain implements IBeaconChain {
|
|
|
231
231
|
clock?: IClock;
|
|
232
232
|
metrics: Metrics | null;
|
|
233
233
|
validatorMonitor: ValidatorMonitor | null;
|
|
234
|
-
anchorState:
|
|
234
|
+
anchorState: CachedBeaconStateAllForks;
|
|
235
235
|
isAnchorStateFinalized: boolean;
|
|
236
|
-
eth1: IEth1ForBlockProduction;
|
|
237
236
|
executionEngine: IExecutionEngine;
|
|
238
237
|
executionBuilder?: IExecutionBuilder;
|
|
239
238
|
}
|
|
@@ -248,7 +247,6 @@ export class BeaconChain implements IBeaconChain {
|
|
|
248
247
|
this.genesisTime = anchorState.genesisTime;
|
|
249
248
|
this.anchorStateLatestBlockSlot = anchorState.latestBlockHeader.slot;
|
|
250
249
|
this.genesisValidatorsRoot = anchorState.genesisValidatorsRoot;
|
|
251
|
-
this.eth1 = eth1;
|
|
252
250
|
this.executionEngine = executionEngine;
|
|
253
251
|
this.executionBuilder = executionBuilder;
|
|
254
252
|
const signal = this.abortController.signal;
|
|
@@ -265,6 +263,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
265
263
|
this.aggregatedAttestationPool = new AggregatedAttestationPool(this.config, metrics);
|
|
266
264
|
this.syncCommitteeMessagePool = new SyncCommitteeMessagePool(config, clock, this.opts?.preaggregateSlotDistance);
|
|
267
265
|
this.syncContributionAndProofPool = new SyncContributionAndProofPool(config, clock, metrics, logger);
|
|
266
|
+
this.opPool = new OpPool(config);
|
|
268
267
|
|
|
269
268
|
this.seenAggregatedAttestations = new SeenAggregatedAttestations(metrics);
|
|
270
269
|
this.seenContributionAndProof = new SeenContributionAndProof(metrics);
|
|
@@ -291,39 +290,25 @@ export class BeaconChain implements IBeaconChain {
|
|
|
291
290
|
logger,
|
|
292
291
|
});
|
|
293
292
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
// pubkeys takes ~30 seconds for 350k keys (mainnet 2022Q2).
|
|
297
|
-
// When the BeaconStateCache is created in eth1 genesis builder it may be incorrect. Until we can ensure that
|
|
298
|
-
// it's safe to re-use _ANY_ BeaconStateCache, this option is disabled by default and only used in tests.
|
|
299
|
-
const cachedState =
|
|
300
|
-
isCachedBeaconState(anchorState) && opts.skipCreateStateCacheIfAvailable
|
|
301
|
-
? anchorState
|
|
302
|
-
: createCachedBeaconState(anchorState, {
|
|
303
|
-
config,
|
|
304
|
-
pubkey2index: new PubkeyIndexMap(),
|
|
305
|
-
index2pubkey: [],
|
|
306
|
-
});
|
|
307
|
-
this._earliestAvailableSlot = cachedState.slot;
|
|
308
|
-
|
|
309
|
-
this.shufflingCache = cachedState.epochCtx.shufflingCache = new ShufflingCache(metrics, logger, this.opts, [
|
|
293
|
+
this._earliestAvailableSlot = anchorState.slot;
|
|
294
|
+
this.shufflingCache = anchorState.epochCtx.shufflingCache = new ShufflingCache(metrics, logger, this.opts, [
|
|
310
295
|
{
|
|
311
|
-
shuffling:
|
|
312
|
-
decisionRoot:
|
|
296
|
+
shuffling: anchorState.epochCtx.previousShuffling,
|
|
297
|
+
decisionRoot: anchorState.epochCtx.previousDecisionRoot,
|
|
313
298
|
},
|
|
314
299
|
{
|
|
315
|
-
shuffling:
|
|
316
|
-
decisionRoot:
|
|
300
|
+
shuffling: anchorState.epochCtx.currentShuffling,
|
|
301
|
+
decisionRoot: anchorState.epochCtx.currentDecisionRoot,
|
|
317
302
|
},
|
|
318
303
|
{
|
|
319
|
-
shuffling:
|
|
320
|
-
decisionRoot:
|
|
304
|
+
shuffling: anchorState.epochCtx.nextShuffling,
|
|
305
|
+
decisionRoot: anchorState.epochCtx.nextDecisionRoot,
|
|
321
306
|
},
|
|
322
307
|
]);
|
|
323
308
|
|
|
324
|
-
//
|
|
325
|
-
this.pubkey2index =
|
|
326
|
-
this.index2pubkey =
|
|
309
|
+
// Global cache of validators pubkey/index mapping
|
|
310
|
+
this.pubkey2index = pubkey2index;
|
|
311
|
+
this.index2pubkey = index2pubkey;
|
|
327
312
|
|
|
328
313
|
const fileDataStore = opts.nHistoricalStatesFileDataStore ?? true;
|
|
329
314
|
const blockStateCache = this.opts.nHistoricalStates
|
|
@@ -339,6 +324,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
339
324
|
this.cpStateDatastore = fileDataStore ? new FileCPStateDatastore(dataDir) : new DbCPStateDatastore(this.db);
|
|
340
325
|
checkpointStateCache = new PersistentCheckpointStateCache(
|
|
341
326
|
{
|
|
327
|
+
config,
|
|
342
328
|
metrics,
|
|
343
329
|
logger,
|
|
344
330
|
clock,
|
|
@@ -353,15 +339,15 @@ export class BeaconChain implements IBeaconChain {
|
|
|
353
339
|
}
|
|
354
340
|
|
|
355
341
|
const {checkpoint} = computeAnchorCheckpoint(config, anchorState);
|
|
356
|
-
blockStateCache.add(
|
|
357
|
-
blockStateCache.setHeadState(
|
|
358
|
-
checkpointStateCache.add(checkpoint,
|
|
342
|
+
blockStateCache.add(anchorState);
|
|
343
|
+
blockStateCache.setHeadState(anchorState);
|
|
344
|
+
checkpointStateCache.add(checkpoint, anchorState);
|
|
359
345
|
|
|
360
346
|
const forkChoice = initializeForkChoice(
|
|
361
347
|
config,
|
|
362
348
|
emitter,
|
|
363
349
|
clock.currentSlot,
|
|
364
|
-
|
|
350
|
+
anchorState,
|
|
365
351
|
isAnchorStateFinalized,
|
|
366
352
|
opts,
|
|
367
353
|
this.justifiedBalancesGetter.bind(this),
|
|
@@ -417,15 +403,6 @@ export class BeaconChain implements IBeaconChain {
|
|
|
417
403
|
signal
|
|
418
404
|
);
|
|
419
405
|
|
|
420
|
-
// Stop polling eth1 data if anchor state is in Electra AND deposit_requests_start_index is reached
|
|
421
|
-
const anchorStateFork = this.config.getForkName(anchorState.slot);
|
|
422
|
-
if (isForkPostElectra(anchorStateFork)) {
|
|
423
|
-
const {eth1DepositIndex, depositRequestsStartIndex} = anchorState as BeaconStateElectra;
|
|
424
|
-
if (eth1DepositIndex === Number(depositRequestsStartIndex)) {
|
|
425
|
-
this.eth1.stopPollingEth1Data();
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
|
|
429
406
|
// always run PrepareNextSlotScheduler except for fork_choice spec tests
|
|
430
407
|
if (!opts?.disablePrepareNextSlot) {
|
|
431
408
|
new PrepareNextSlotScheduler(this, this.config, metrics, this.logger, signal);
|
|
@@ -757,7 +734,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
757
734
|
RegenCaller.produceBlock
|
|
758
735
|
);
|
|
759
736
|
const proposerIndex = state.epochCtx.getBeaconProposer(slot);
|
|
760
|
-
const proposerPubKey =
|
|
737
|
+
const proposerPubKey = this.index2pubkey[proposerIndex].toBytes();
|
|
761
738
|
|
|
762
739
|
const {body, produceResult, executionPayloadValue, shouldOverrideBuilder} = await produceBlockBody.call(
|
|
763
740
|
this,
|
|
@@ -1177,17 +1154,6 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1177
1154
|
this.seenAggregatedAttestations.prune(epoch);
|
|
1178
1155
|
this.seenBlockAttesters.prune(epoch);
|
|
1179
1156
|
this.beaconProposerCache.prune(epoch);
|
|
1180
|
-
|
|
1181
|
-
// Poll for merge block in the background to speed-up block production. Only if:
|
|
1182
|
-
// - after BELLATRIX_FORK_EPOCH
|
|
1183
|
-
// - Beacon node synced
|
|
1184
|
-
// - head state not isMergeTransitionComplete
|
|
1185
|
-
if (this.config.BELLATRIX_FORK_EPOCH - epoch < 1) {
|
|
1186
|
-
const head = this.forkChoice.getHead();
|
|
1187
|
-
if (epoch - computeEpochAtSlot(head.slot) < 5 && head.executionStatus === ExecutionStatus.PreMerge) {
|
|
1188
|
-
this.eth1.startPollingMergeBlock();
|
|
1189
|
-
}
|
|
1190
|
-
}
|
|
1191
1157
|
}
|
|
1192
1158
|
|
|
1193
1159
|
protected onNewHead(head: ProtoBlock): void {
|
|
@@ -1320,7 +1286,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1320
1286
|
}
|
|
1321
1287
|
}
|
|
1322
1288
|
|
|
1323
|
-
async getBlockRewards(block: BeaconBlock | BlindedBeaconBlock): Promise<BlockRewards> {
|
|
1289
|
+
async getBlockRewards(block: BeaconBlock | BlindedBeaconBlock): Promise<rewards.BlockRewards> {
|
|
1324
1290
|
let preState = this.regen.getPreStateSync(block);
|
|
1325
1291
|
|
|
1326
1292
|
if (preState === null) {
|
|
@@ -1331,13 +1297,13 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1331
1297
|
|
|
1332
1298
|
const postState = this.regen.getStateSync(toRootHex(block.stateRoot)) ?? undefined;
|
|
1333
1299
|
|
|
1334
|
-
return computeBlockRewards(block, preState.clone(), postState?.clone());
|
|
1300
|
+
return computeBlockRewards(this.config, block, preState.clone(), postState?.clone());
|
|
1335
1301
|
}
|
|
1336
1302
|
|
|
1337
1303
|
async getAttestationsRewards(
|
|
1338
1304
|
epoch: Epoch,
|
|
1339
1305
|
validatorIds?: (ValidatorIndex | string)[]
|
|
1340
|
-
): Promise<{rewards: AttestationsRewards; executionOptimistic: boolean; finalized: boolean}> {
|
|
1306
|
+
): Promise<{rewards: rewards.AttestationsRewards; executionOptimistic: boolean; finalized: boolean}> {
|
|
1341
1307
|
// We use end slot of (epoch + 1) to ensure we have seen all attestations. On-time or late. Any late attestation beyond this slot is not considered
|
|
1342
1308
|
const slot = computeEndSlotAtEpoch(epoch + 1);
|
|
1343
1309
|
const stateResult = await this.getStateBySlot(slot, {allowRegen: false}); // No regen if state not in cache
|
|
@@ -1355,7 +1321,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1355
1321
|
throw Error(`State is not in cache for slot ${slot}`);
|
|
1356
1322
|
}
|
|
1357
1323
|
|
|
1358
|
-
const rewards = await computeAttestationsRewards(
|
|
1324
|
+
const rewards = await computeAttestationsRewards(this.config, this.pubkey2index, cachedState, validatorIds);
|
|
1359
1325
|
|
|
1360
1326
|
return {rewards, executionOptimistic, finalized};
|
|
1361
1327
|
}
|
|
@@ -1363,7 +1329,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1363
1329
|
async getSyncCommitteeRewards(
|
|
1364
1330
|
block: BeaconBlock | BlindedBeaconBlock,
|
|
1365
1331
|
validatorIds?: (ValidatorIndex | string)[]
|
|
1366
|
-
): Promise<SyncCommitteeRewards> {
|
|
1332
|
+
): Promise<rewards.SyncCommitteeRewards> {
|
|
1367
1333
|
let preState = this.regen.getPreStateSync(block);
|
|
1368
1334
|
|
|
1369
1335
|
if (preState === null) {
|
|
@@ -1372,6 +1338,6 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1372
1338
|
|
|
1373
1339
|
preState = processSlots(preState, block.slot); // Dial preState's slot to block.slot
|
|
1374
1340
|
|
|
1375
|
-
return computeSyncCommitteeRewards(block, preState.clone(), validatorIds);
|
|
1341
|
+
return computeSyncCommitteeRewards(this.config, this.index2pubkey, block, preState.clone(), validatorIds);
|
|
1376
1342
|
}
|
|
1377
1343
|
}
|
package/src/chain/initState.ts
CHANGED
|
@@ -1,37 +1,11 @@
|
|
|
1
1
|
import {ChainForkConfig} from "@lodestar/config";
|
|
2
2
|
import {ZERO_HASH} from "@lodestar/params";
|
|
3
|
-
import {
|
|
4
|
-
BeaconStateAllForks,
|
|
5
|
-
CachedBeaconStateAllForks,
|
|
6
|
-
computeEpochAtSlot,
|
|
7
|
-
computeStartSlotAtEpoch,
|
|
8
|
-
} from "@lodestar/state-transition";
|
|
3
|
+
import {BeaconStateAllForks, computeEpochAtSlot, computeStartSlotAtEpoch} from "@lodestar/state-transition";
|
|
9
4
|
import {SignedBeaconBlock, ssz} from "@lodestar/types";
|
|
10
5
|
import {Logger, toHex, toRootHex} from "@lodestar/utils";
|
|
11
6
|
import {GENESIS_SLOT} from "../constants/index.js";
|
|
12
7
|
import {IBeaconDb} from "../db/index.js";
|
|
13
|
-
import {Eth1Provider} from "../eth1/index.js";
|
|
14
|
-
import {Eth1Options} from "../eth1/options.js";
|
|
15
8
|
import {Metrics} from "../metrics/index.js";
|
|
16
|
-
import {GenesisBuilder} from "./genesis/genesis.js";
|
|
17
|
-
import {GenesisResult} from "./genesis/interface.js";
|
|
18
|
-
|
|
19
|
-
export async function persistGenesisResult(
|
|
20
|
-
db: IBeaconDb,
|
|
21
|
-
genesisResult: GenesisResult,
|
|
22
|
-
genesisBlock: SignedBeaconBlock
|
|
23
|
-
): Promise<void> {
|
|
24
|
-
await Promise.all([
|
|
25
|
-
db.stateArchive.add(genesisResult.state),
|
|
26
|
-
db.blockArchive.add(genesisBlock),
|
|
27
|
-
db.depositDataRoot.putList(genesisResult.depositTree.getAllReadonlyValues()),
|
|
28
|
-
db.eth1Data.put(genesisResult.block.timestamp, {
|
|
29
|
-
...genesisResult.block,
|
|
30
|
-
depositCount: genesisResult.depositTree.length,
|
|
31
|
-
depositRoot: genesisResult.depositTree.hashTreeRoot(),
|
|
32
|
-
}),
|
|
33
|
-
]);
|
|
34
|
-
}
|
|
35
9
|
|
|
36
10
|
export async function persistAnchorState(
|
|
37
11
|
config: ChainForkConfig,
|
|
@@ -75,76 +49,6 @@ export function createGenesisBlock(config: ChainForkConfig, genesisState: Beacon
|
|
|
75
49
|
return genesisBlock;
|
|
76
50
|
}
|
|
77
51
|
|
|
78
|
-
/**
|
|
79
|
-
* Initialize and persist a genesis state and related data
|
|
80
|
-
*/
|
|
81
|
-
export async function initStateFromEth1({
|
|
82
|
-
config,
|
|
83
|
-
db,
|
|
84
|
-
logger,
|
|
85
|
-
opts,
|
|
86
|
-
signal,
|
|
87
|
-
}: {
|
|
88
|
-
config: ChainForkConfig;
|
|
89
|
-
db: IBeaconDb;
|
|
90
|
-
logger: Logger;
|
|
91
|
-
opts: Eth1Options;
|
|
92
|
-
signal: AbortSignal;
|
|
93
|
-
}): Promise<CachedBeaconStateAllForks> {
|
|
94
|
-
logger.info("Listening to eth1 for genesis state");
|
|
95
|
-
|
|
96
|
-
const statePreGenesis = await db.preGenesisState.get();
|
|
97
|
-
const depositTree = await db.depositDataRoot.getDepositRootTree();
|
|
98
|
-
const lastProcessedBlockNumber = await db.preGenesisStateLastProcessedBlock.get();
|
|
99
|
-
|
|
100
|
-
const builder = new GenesisBuilder({
|
|
101
|
-
config,
|
|
102
|
-
eth1Provider: new Eth1Provider(config, {...opts, logger}, signal),
|
|
103
|
-
logger,
|
|
104
|
-
signal,
|
|
105
|
-
pendingStatus:
|
|
106
|
-
statePreGenesis && depositTree !== undefined && lastProcessedBlockNumber != null
|
|
107
|
-
? {state: statePreGenesis, depositTree, lastProcessedBlockNumber}
|
|
108
|
-
: undefined,
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
try {
|
|
112
|
-
const genesisResult = await builder.waitForGenesis();
|
|
113
|
-
|
|
114
|
-
// Note: .hashTreeRoot() automatically commits()
|
|
115
|
-
const genesisBlock = createGenesisBlock(config, genesisResult.state);
|
|
116
|
-
const types = config.getForkTypes(GENESIS_SLOT);
|
|
117
|
-
const stateRoot = genesisResult.state.hashTreeRoot();
|
|
118
|
-
const blockRoot = types.BeaconBlock.hashTreeRoot(genesisBlock.message);
|
|
119
|
-
|
|
120
|
-
logger.info("Initializing genesis state", {
|
|
121
|
-
stateRoot: toRootHex(stateRoot),
|
|
122
|
-
blockRoot: toRootHex(blockRoot),
|
|
123
|
-
validatorCount: genesisResult.state.validators.length,
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
await persistGenesisResult(db, genesisResult, genesisBlock);
|
|
127
|
-
|
|
128
|
-
logger.verbose("Clearing pending genesis state if any");
|
|
129
|
-
await db.preGenesisState.delete();
|
|
130
|
-
await db.preGenesisStateLastProcessedBlock.delete();
|
|
131
|
-
|
|
132
|
-
return genesisResult.state;
|
|
133
|
-
} catch (e) {
|
|
134
|
-
if (builder.lastProcessedBlockNumber != null) {
|
|
135
|
-
logger.info("Persisting genesis state", {block: builder.lastProcessedBlockNumber});
|
|
136
|
-
|
|
137
|
-
// Commit changed before serializing
|
|
138
|
-
builder.state.commit();
|
|
139
|
-
|
|
140
|
-
await db.preGenesisState.put(builder.state);
|
|
141
|
-
await db.depositDataRoot.putList(builder.depositTree.getAllReadonlyValues());
|
|
142
|
-
await db.preGenesisStateLastProcessedBlock.put(builder.lastProcessedBlockNumber);
|
|
143
|
-
}
|
|
144
|
-
throw e;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
52
|
/**
|
|
149
53
|
* Restore the latest beacon state from db
|
|
150
54
|
*/
|
package/src/chain/interface.ts
CHANGED
|
@@ -23,9 +23,9 @@ import {
|
|
|
23
23
|
altair,
|
|
24
24
|
capella,
|
|
25
25
|
phase0,
|
|
26
|
+
rewards,
|
|
26
27
|
} from "@lodestar/types";
|
|
27
28
|
import {Logger} from "@lodestar/utils";
|
|
28
|
-
import {IEth1ForBlockProduction} from "../eth1/index.js";
|
|
29
29
|
import {IExecutionBuilder, IExecutionEngine} from "../execution/index.js";
|
|
30
30
|
import {Metrics} from "../metrics/metrics.js";
|
|
31
31
|
import {BufferPool} from "../util/bufferPool.js";
|
|
@@ -49,9 +49,6 @@ import {IChainOptions} from "./options.js";
|
|
|
49
49
|
import {AssembledBlockType, BlockAttributes, BlockType, ProduceResult} from "./produceBlock/produceBlockBody.js";
|
|
50
50
|
import {IStateRegenerator, RegenCaller} from "./regen/index.js";
|
|
51
51
|
import {ReprocessController} from "./reprocess.js";
|
|
52
|
-
import {AttestationsRewards} from "./rewards/attestationsRewards.js";
|
|
53
|
-
import {BlockRewards} from "./rewards/blockRewards.js";
|
|
54
|
-
import {SyncCommitteeRewards} from "./rewards/syncCommitteeRewards.js";
|
|
55
52
|
import {
|
|
56
53
|
SeenAggregators,
|
|
57
54
|
SeenAttesters,
|
|
@@ -88,7 +85,6 @@ export interface IBeaconChain {
|
|
|
88
85
|
readonly genesisTime: UintNum64;
|
|
89
86
|
readonly genesisValidatorsRoot: Root;
|
|
90
87
|
readonly earliestAvailableSlot: Slot;
|
|
91
|
-
readonly eth1: IEth1ForBlockProduction;
|
|
92
88
|
readonly executionEngine: IExecutionEngine;
|
|
93
89
|
readonly executionBuilder?: IExecutionBuilder;
|
|
94
90
|
// Expose config for convenience in modularized functions
|
|
@@ -257,15 +253,15 @@ export interface IBeaconChain {
|
|
|
257
253
|
regenCanAcceptWork(): boolean;
|
|
258
254
|
blsThreadPoolCanAcceptWork(): boolean;
|
|
259
255
|
|
|
260
|
-
getBlockRewards(blockRef: BeaconBlock | BlindedBeaconBlock): Promise<BlockRewards>;
|
|
256
|
+
getBlockRewards(blockRef: BeaconBlock | BlindedBeaconBlock): Promise<rewards.BlockRewards>;
|
|
261
257
|
getAttestationsRewards(
|
|
262
258
|
epoch: Epoch,
|
|
263
259
|
validatorIds?: (ValidatorIndex | string)[]
|
|
264
|
-
): Promise<{rewards: AttestationsRewards; executionOptimistic: boolean; finalized: boolean}>;
|
|
260
|
+
): Promise<{rewards: rewards.AttestationsRewards; executionOptimistic: boolean; finalized: boolean}>;
|
|
265
261
|
getSyncCommitteeRewards(
|
|
266
262
|
blockRef: BeaconBlock | BlindedBeaconBlock,
|
|
267
263
|
validatorIds?: (ValidatorIndex | string)[]
|
|
268
|
-
): Promise<SyncCommitteeRewards>;
|
|
264
|
+
): Promise<rewards.SyncCommitteeRewards>;
|
|
269
265
|
}
|
|
270
266
|
|
|
271
267
|
export type SSZObjectType =
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {Signature, aggregateSignatures} from "@chainsafe/blst";
|
|
2
2
|
import {BitArray} from "@chainsafe/ssz";
|
|
3
|
-
import {
|
|
3
|
+
import {BeaconConfig} from "@lodestar/config";
|
|
4
4
|
import {IForkChoice} from "@lodestar/fork-choice";
|
|
5
5
|
import {
|
|
6
6
|
ForkName,
|
|
@@ -162,7 +162,7 @@ export class AggregatedAttestationPool {
|
|
|
162
162
|
private lowestPermissibleSlot = 0;
|
|
163
163
|
|
|
164
164
|
constructor(
|
|
165
|
-
private readonly config:
|
|
165
|
+
private readonly config: BeaconConfig,
|
|
166
166
|
private readonly metrics: Metrics | null = null
|
|
167
167
|
) {
|
|
168
168
|
metrics?.opPool.aggregatedAttestationPool.attDataPerSlot.addCollect(() => this.onScrapeMetrics(metrics));
|
|
@@ -249,7 +249,7 @@ export class AggregatedAttestationPool {
|
|
|
249
249
|
const stateEpoch = state.epochCtx.epoch;
|
|
250
250
|
const statePrevEpoch = stateEpoch - 1;
|
|
251
251
|
|
|
252
|
-
const notSeenValidatorsFn = getNotSeenValidatorsFn(state);
|
|
252
|
+
const notSeenValidatorsFn = getNotSeenValidatorsFn(this.config, state);
|
|
253
253
|
const validateAttestationDataFn = getValidateAttestationDataFn(forkChoice, state);
|
|
254
254
|
|
|
255
255
|
const attestationsByScore: AttestationWithScore[] = [];
|
|
@@ -362,7 +362,7 @@ export class AggregatedAttestationPool {
|
|
|
362
362
|
const statePrevEpoch = stateEpoch - 1;
|
|
363
363
|
const rootCache = new RootCache(state);
|
|
364
364
|
|
|
365
|
-
const notSeenValidatorsFn = getNotSeenValidatorsFn(state);
|
|
365
|
+
const notSeenValidatorsFn = getNotSeenValidatorsFn(this.config, state);
|
|
366
366
|
const validateAttestationDataFn = getValidateAttestationDataFn(forkChoice, state);
|
|
367
367
|
|
|
368
368
|
const slots = Array.from(this.attestationGroupByIndexByDataHexBySlot.keys()).sort((a, b) => b - a);
|
|
@@ -656,7 +656,7 @@ export class MatchingDataAttestationGroup {
|
|
|
656
656
|
private readonly attestations: AttestationWithIndex[] = [];
|
|
657
657
|
|
|
658
658
|
constructor(
|
|
659
|
-
private readonly config:
|
|
659
|
+
private readonly config: BeaconConfig,
|
|
660
660
|
readonly committee: Uint32Array,
|
|
661
661
|
readonly data: phase0.AttestationData
|
|
662
662
|
) {}
|
|
@@ -864,9 +864,9 @@ export function aggregateConsolidation({byCommittee, attData}: AttestationsConso
|
|
|
864
864
|
* Pre-compute participation from a CachedBeaconStateAllForks, for use to check if an attestation's committee
|
|
865
865
|
* has already attested or not.
|
|
866
866
|
*/
|
|
867
|
-
export function getNotSeenValidatorsFn(state: CachedBeaconStateAllForks): GetNotSeenValidatorsFn {
|
|
867
|
+
export function getNotSeenValidatorsFn(config: BeaconConfig, state: CachedBeaconStateAllForks): GetNotSeenValidatorsFn {
|
|
868
868
|
const stateSlot = state.slot;
|
|
869
|
-
if (
|
|
869
|
+
if (config.getForkName(stateSlot) === ForkName.phase0) {
|
|
870
870
|
// Get attestations to be included in a phase0 block.
|
|
871
871
|
// As we are close to altair, this is not really important, it's mainly for e2e.
|
|
872
872
|
// The performance is not great due to the different BeaconState data structure to altair.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import {BeaconConfig} from "@lodestar/config";
|
|
1
2
|
import {Id, Repository} from "@lodestar/db";
|
|
2
3
|
import {
|
|
3
4
|
BLS_WITHDRAWAL_PREFIX,
|
|
@@ -51,6 +52,8 @@ export class OpPool {
|
|
|
51
52
|
/** Map of validator index -> SignedBLSToExecutionChange */
|
|
52
53
|
private readonly blsToExecutionChanges = new Map<ValidatorIndex, SignedBLSToExecutionChangeVersioned>();
|
|
53
54
|
|
|
55
|
+
constructor(private readonly config: BeaconConfig) {}
|
|
56
|
+
|
|
54
57
|
// Getters for metrics
|
|
55
58
|
|
|
56
59
|
get attesterSlashingsSize(): number {
|
|
@@ -191,9 +194,8 @@ export class OpPool {
|
|
|
191
194
|
phase0.SignedVoluntaryExit[],
|
|
192
195
|
capella.SignedBLSToExecutionChange[],
|
|
193
196
|
] {
|
|
194
|
-
const {config} = state;
|
|
195
197
|
const stateEpoch = computeEpochAtSlot(state.slot);
|
|
196
|
-
const stateFork = config.getForkSeq(state.slot);
|
|
198
|
+
const stateFork = this.config.getForkSeq(state.slot);
|
|
197
199
|
const toBeSlashedIndices = new Set<ValidatorIndex>();
|
|
198
200
|
const proposerSlashings: phase0.ProposerSlashing[] = [];
|
|
199
201
|
|
|
@@ -265,7 +267,7 @@ export class OpPool {
|
|
|
265
267
|
// a future fork.
|
|
266
268
|
isVoluntaryExitSignatureIncludable(
|
|
267
269
|
stateFork,
|
|
268
|
-
config.getForkSeq(computeStartSlotAtEpoch(voluntaryExit.message.epoch))
|
|
270
|
+
this.config.getForkSeq(computeStartSlotAtEpoch(voluntaryExit.message.epoch))
|
|
269
271
|
)
|
|
270
272
|
) {
|
|
271
273
|
voluntaryExits.push(voluntaryExit);
|
|
@@ -368,14 +370,13 @@ export class OpPool {
|
|
|
368
370
|
* Prune if validator has already exited at or before the finalized checkpoint of the head.
|
|
369
371
|
*/
|
|
370
372
|
private pruneVoluntaryExits(headState: CachedBeaconStateAllForks): void {
|
|
371
|
-
const
|
|
372
|
-
const headStateFork = config.getForkSeq(headState.slot);
|
|
373
|
+
const headStateFork = this.config.getForkSeq(headState.slot);
|
|
373
374
|
const finalizedEpoch = headState.finalizedCheckpoint.epoch;
|
|
374
375
|
|
|
375
376
|
for (const [key, voluntaryExit] of this.voluntaryExits.entries()) {
|
|
376
377
|
// VoluntaryExit messages signed in the previous fork become invalid and can never be included in any future
|
|
377
378
|
// block, so just drop as the head state advances into the next fork.
|
|
378
|
-
if (config.getForkSeq(computeStartSlotAtEpoch(voluntaryExit.message.epoch)) < headStateFork) {
|
|
379
|
+
if (this.config.getForkSeq(computeStartSlotAtEpoch(voluntaryExit.message.epoch)) < headStateFork) {
|
|
379
380
|
this.voluntaryExits.delete(key);
|
|
380
381
|
}
|
|
381
382
|
|
|
@@ -392,9 +393,8 @@ export class OpPool {
|
|
|
392
393
|
* to opPool once gossipsub seen cache TTL passes.
|
|
393
394
|
*/
|
|
394
395
|
private pruneBlsToExecutionChanges(headBlock: SignedBeaconBlock, headState: CachedBeaconStateAllForks): void {
|
|
395
|
-
const {config} = headState;
|
|
396
396
|
const recentBlsToExecutionChanges =
|
|
397
|
-
config.getForkSeq(headBlock.message.slot) >= ForkSeq.capella
|
|
397
|
+
this.config.getForkSeq(headBlock.message.slot) >= ForkSeq.capella
|
|
398
398
|
? (headBlock as capella.SignedBeaconBlock).message.body.blsToExecutionChanges
|
|
399
399
|
: [];
|
|
400
400
|
|
package/src/chain/options.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY} from "@lodestar/params";
|
|
2
1
|
import {defaultOptions as defaultValidatorOptions} from "@lodestar/validator";
|
|
3
2
|
import {DEFAULT_ARCHIVE_MODE} from "./archiveStore/constants.js";
|
|
4
3
|
import {ArchiveMode, ArchiveStoreOpts} from "./archiveStore/interface.js";
|
|
@@ -56,10 +55,6 @@ export type BlockProcessOpts = {
|
|
|
56
55
|
* Will double processing times. Use only for debugging purposes.
|
|
57
56
|
*/
|
|
58
57
|
disableBlsBatchVerify?: boolean;
|
|
59
|
-
/**
|
|
60
|
-
* Override SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY
|
|
61
|
-
*/
|
|
62
|
-
safeSlotsToImportOptimistically?: number;
|
|
63
58
|
/**
|
|
64
59
|
* Assert progressive balances the same to EpochTransitionCache
|
|
65
60
|
*/
|
|
@@ -109,7 +104,6 @@ export const defaultChainOptions: IChainOptions = {
|
|
|
109
104
|
proposerBoost: true,
|
|
110
105
|
proposerBoostReorg: true,
|
|
111
106
|
computeUnrealized: true,
|
|
112
|
-
safeSlotsToImportOptimistically: SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY,
|
|
113
107
|
suggestedFeeRecipient: defaultValidatorOptions.suggestedFeeRecipient,
|
|
114
108
|
serveHistoricalState: false,
|
|
115
109
|
assertCorrectProgressiveBalances: false,
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import {routes} from "@lodestar/api";
|
|
2
2
|
import {ChainForkConfig} from "@lodestar/config";
|
|
3
3
|
import {getSafeExecutionBlockHash} from "@lodestar/fork-choice";
|
|
4
|
-
import {ForkPostBellatrix, ForkSeq, SLOTS_PER_EPOCH
|
|
4
|
+
import {ForkPostBellatrix, ForkSeq, SLOTS_PER_EPOCH} from "@lodestar/params";
|
|
5
5
|
import {
|
|
6
|
-
BeaconStateElectra,
|
|
7
6
|
CachedBeaconStateAllForks,
|
|
8
7
|
CachedBeaconStateExecutions,
|
|
9
8
|
StateHashTreeRootSource,
|
|
@@ -197,7 +196,7 @@ export class PrepareNextSlotScheduler {
|
|
|
197
196
|
this.chain.opts.emitPayloadAttributes === true &&
|
|
198
197
|
this.chain.emitter.listenerCount(routes.events.EventType.payloadAttributes)
|
|
199
198
|
) {
|
|
200
|
-
const data =
|
|
199
|
+
const data = getPayloadAttributesForSSE(fork as ForkPostBellatrix, this.chain, {
|
|
201
200
|
prepareState: updatedPrepareState,
|
|
202
201
|
prepareSlot,
|
|
203
202
|
parentBlockRoot: fromHex(headRoot),
|
|
@@ -222,9 +221,6 @@ export class PrepareNextSlotScheduler {
|
|
|
222
221
|
}
|
|
223
222
|
this.metrics?.precomputeNextEpochTransition.hits.set(previousHits ?? 0);
|
|
224
223
|
|
|
225
|
-
// Check if we can stop polling eth1 data
|
|
226
|
-
this.stopEth1Polling();
|
|
227
|
-
|
|
228
224
|
this.logger.verbose("Completed PrepareNextSlotScheduler epoch transition", {
|
|
229
225
|
nextEpoch,
|
|
230
226
|
headSlot,
|
|
@@ -252,27 +248,4 @@ export class PrepareNextSlotScheduler {
|
|
|
252
248
|
state.hashTreeRoot();
|
|
253
249
|
hashTreeRootTimer?.();
|
|
254
250
|
}
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* Stop eth1 data polling after eth1_deposit_index has reached deposit_requests_start_index in Electra as described in EIP-6110
|
|
258
|
-
*/
|
|
259
|
-
stopEth1Polling(): void {
|
|
260
|
-
// Only continue if eth1 is still polling and finalized checkpoint is in Electra. State regen is expensive
|
|
261
|
-
if (this.chain.eth1.isPollingEth1Data()) {
|
|
262
|
-
const finalizedCheckpoint = this.chain.forkChoice.getFinalizedCheckpoint();
|
|
263
|
-
const checkpointFork = this.config.getForkInfoAtEpoch(finalizedCheckpoint.epoch).name;
|
|
264
|
-
|
|
265
|
-
if (isForkPostElectra(checkpointFork)) {
|
|
266
|
-
const finalizedState = this.chain.getStateByCheckpoint(finalizedCheckpoint)?.state;
|
|
267
|
-
|
|
268
|
-
if (
|
|
269
|
-
finalizedState !== undefined &&
|
|
270
|
-
finalizedState.eth1DepositIndex === Number((finalizedState as BeaconStateElectra).depositRequestsStartIndex)
|
|
271
|
-
) {
|
|
272
|
-
// Signal eth1 to stop polling eth1Data
|
|
273
|
-
this.chain.eth1.stopPollingEth1Data();
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
251
|
}
|