@lodestar/beacon-node 1.38.0 → 1.39.0-dev.39dac0f03d
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 +2 -2
- package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
- package/lib/chain/chain.d.ts +1 -4
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +10 -28
- 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 +0 -2
- 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/rewards/attestationsRewards.d.ts +3 -2
- package/lib/chain/rewards/attestationsRewards.d.ts.map +1 -1
- package/lib/chain/rewards/attestationsRewards.js +9 -9
- package/lib/chain/rewards/attestationsRewards.js.map +1 -1
- package/lib/chain/rewards/blockRewards.d.ts +2 -1
- package/lib/chain/rewards/blockRewards.d.ts.map +1 -1
- package/lib/chain/rewards/blockRewards.js +5 -5
- package/lib/chain/rewards/blockRewards.js.map +1 -1
- package/lib/chain/rewards/syncCommitteeRewards.d.ts +3 -2
- package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +1 -1
- package/lib/chain/rewards/syncCommitteeRewards.js +2 -3
- package/lib/chain/rewards/syncCommitteeRewards.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/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.map +1 -1
- package/lib/node/nodejs.js +10 -9
- 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 +5 -2
- package/src/chain/chain.ts +9 -32
- package/src/chain/initState.ts +1 -97
- package/src/chain/interface.ts +0 -2
- 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/rewards/attestationsRewards.ts +18 -8
- package/src/chain/rewards/blockRewards.ts +6 -3
- package/src/chain/rewards/syncCommitteeRewards.ts +5 -3
- package/src/chain/stateCache/persistentCheckpointsCache.ts +15 -2
- package/src/chain/validation/attesterSlashing.ts +2 -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 +1 -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 +11 -9
- 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 +10 -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/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/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
|
@@ -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
|
}
|
|
@@ -17,10 +17,8 @@ import {
|
|
|
17
17
|
CachedBeaconStateCapella,
|
|
18
18
|
CachedBeaconStateExecutions,
|
|
19
19
|
computeTimeAtSlot,
|
|
20
|
-
getCurrentEpoch,
|
|
21
20
|
getExpectedWithdrawals,
|
|
22
21
|
getRandaoMix,
|
|
23
|
-
isMergeTransitionComplete,
|
|
24
22
|
} from "@lodestar/state-transition";
|
|
25
23
|
import {
|
|
26
24
|
BLSPubkey,
|
|
@@ -44,13 +42,10 @@ import {
|
|
|
44
42
|
deneb,
|
|
45
43
|
electra,
|
|
46
44
|
fulu,
|
|
47
|
-
ssz,
|
|
48
|
-
sszTypesFor,
|
|
49
45
|
} from "@lodestar/types";
|
|
50
46
|
import {Logger, sleep, toHex, toPubkeyHex, toRootHex} from "@lodestar/utils";
|
|
51
|
-
import {
|
|
52
|
-
import {
|
|
53
|
-
import {numToQuantity} from "../../eth1/provider/utils.js";
|
|
47
|
+
import {ZERO_HASH_HEX} from "../../constants/index.js";
|
|
48
|
+
import {numToQuantity} from "../../execution/engine/utils.js";
|
|
54
49
|
import {
|
|
55
50
|
IExecutionBuilder,
|
|
56
51
|
IExecutionEngine,
|
|
@@ -83,7 +78,6 @@ export enum BlockProductionStep {
|
|
|
83
78
|
voluntaryExits = "voluntaryExits",
|
|
84
79
|
blsToExecutionChanges = "blsToExecutionChanges",
|
|
85
80
|
attestations = "attestations",
|
|
86
|
-
eth1DataAndDeposits = "eth1DataAndDeposits",
|
|
87
81
|
syncAggregate = "syncAggregate",
|
|
88
82
|
executionPayload = "executionPayload",
|
|
89
83
|
}
|
|
@@ -171,7 +165,7 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
171
165
|
// even though shouldOverrideBuilder is relevant for the engine response, for simplicity of typing
|
|
172
166
|
// we just return it undefined for the builder which anyway doesn't get consumed downstream
|
|
173
167
|
let shouldOverrideBuilder: boolean | undefined;
|
|
174
|
-
const fork =
|
|
168
|
+
const fork = this.config.getForkName(blockSlot);
|
|
175
169
|
const produceResult = {
|
|
176
170
|
type: blockType,
|
|
177
171
|
fork,
|
|
@@ -337,14 +331,6 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
337
331
|
feeRecipient
|
|
338
332
|
);
|
|
339
333
|
|
|
340
|
-
if (prepareRes.isPremerge) {
|
|
341
|
-
return {
|
|
342
|
-
...prepareRes,
|
|
343
|
-
executionPayload: sszTypesFor(fork).ExecutionPayload.defaultValue(),
|
|
344
|
-
executionPayloadValue: BigInt(0),
|
|
345
|
-
};
|
|
346
|
-
}
|
|
347
|
-
|
|
348
334
|
const {prepType, payloadId} = prepareRes;
|
|
349
335
|
Object.assign(logMeta, {executionPayloadPrepType: prepType});
|
|
350
336
|
|
|
@@ -366,37 +352,14 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
366
352
|
|
|
367
353
|
return {...prepareRes, ...payloadRes};
|
|
368
354
|
})().catch((e) => {
|
|
369
|
-
// catch payload fetch here, because there is still a recovery path possible if we
|
|
370
|
-
// are pre-merge. We don't care the same for builder segment as the execution block
|
|
371
|
-
// will takeover if the builder flow was activated and errors
|
|
372
355
|
this.metrics?.blockPayload.payloadFetchErrors.inc();
|
|
373
|
-
|
|
374
|
-
if (!isMergeTransitionComplete(currentState as CachedBeaconStateBellatrix)) {
|
|
375
|
-
this.logger?.warn(
|
|
376
|
-
"Fetch payload from the execution failed, however since we are still pre-merge proceeding with an empty one.",
|
|
377
|
-
{},
|
|
378
|
-
e as Error
|
|
379
|
-
);
|
|
380
|
-
// ok we don't have an execution payload here, so we can assign an empty one
|
|
381
|
-
// if pre-merge
|
|
382
|
-
return {
|
|
383
|
-
isPremerge: true as const,
|
|
384
|
-
executionPayload: sszTypesFor(fork).ExecutionPayload.defaultValue(),
|
|
385
|
-
executionPayloadValue: BigInt(0),
|
|
386
|
-
};
|
|
387
|
-
}
|
|
388
|
-
// since merge transition is complete, we need a valid payload even if with an
|
|
389
|
-
// empty (transactions) one. defaultValue isn't gonna cut it!
|
|
390
356
|
throw e;
|
|
391
357
|
});
|
|
392
358
|
|
|
393
359
|
const [engineRes, commonBlockBody] = await Promise.all([enginePromise, commonBlockBodyPromise]);
|
|
394
360
|
blockBody = Object.assign({}, commonBlockBody) as AssembledBodyType<BlockType.Blinded>;
|
|
395
361
|
|
|
396
|
-
|
|
397
|
-
(blockBody as BeaconBlockBody<ForkPostBellatrix & ForkPreGloas>).executionPayload = engineRes.executionPayload;
|
|
398
|
-
executionPayloadValue = engineRes.executionPayloadValue;
|
|
399
|
-
} else {
|
|
362
|
+
{
|
|
400
363
|
const {prepType, payloadId, executionPayload, blobsBundle, executionRequests} = engineRes;
|
|
401
364
|
shouldOverrideBuilder = engineRes.shouldOverrideBuilder;
|
|
402
365
|
|
|
@@ -504,15 +467,10 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
504
467
|
}
|
|
505
468
|
|
|
506
469
|
/**
|
|
507
|
-
* Produce ExecutionPayload for
|
|
508
|
-
*
|
|
509
|
-
* Expects `eth1MergeBlockFinder` to be actively searching for blocks well in advance to being called.
|
|
510
|
-
*
|
|
511
|
-
* @returns PayloadId = pow block found, null = pow NOT found
|
|
470
|
+
* Produce ExecutionPayload for post-merge.
|
|
512
471
|
*/
|
|
513
472
|
export async function prepareExecutionPayload(
|
|
514
473
|
chain: {
|
|
515
|
-
eth1: IEth1ForBlockProduction;
|
|
516
474
|
executionEngine: IExecutionEngine;
|
|
517
475
|
config: ChainForkConfig;
|
|
518
476
|
},
|
|
@@ -523,14 +481,8 @@ export async function prepareExecutionPayload(
|
|
|
523
481
|
finalizedBlockHash: RootHex,
|
|
524
482
|
state: CachedBeaconStateExecutions,
|
|
525
483
|
suggestedFeeRecipient: string
|
|
526
|
-
): Promise<{
|
|
527
|
-
const
|
|
528
|
-
if (parentHashRes.isPremerge) {
|
|
529
|
-
// Return null only if the execution is pre-merge
|
|
530
|
-
return {isPremerge: true};
|
|
531
|
-
}
|
|
532
|
-
|
|
533
|
-
const {parentHash} = parentHashRes;
|
|
484
|
+
): Promise<{prepType: PayloadPreparationType; payloadId: PayloadId}> {
|
|
485
|
+
const parentHash = state.latestExecutionPayloadHeader.blockHash;
|
|
534
486
|
const timestamp = computeTimeAtSlot(chain.config, state.slot, state.genesisTime);
|
|
535
487
|
const prevRandao = getRandaoMix(state, state.epochCtx.epoch);
|
|
536
488
|
|
|
@@ -586,12 +538,11 @@ export async function prepareExecutionPayload(
|
|
|
586
538
|
// We are only returning payloadId here because prepareExecutionPayload is also called from
|
|
587
539
|
// prepareNextSlot, which is an advance call to execution engine to start building payload
|
|
588
540
|
// Actual payload isn't produced till getPayload is called.
|
|
589
|
-
return {
|
|
541
|
+
return {payloadId, prepType};
|
|
590
542
|
}
|
|
591
543
|
|
|
592
544
|
async function prepareExecutionPayloadHeader(
|
|
593
545
|
chain: {
|
|
594
|
-
eth1: IEth1ForBlockProduction;
|
|
595
546
|
executionBuilder?: IExecutionBuilder;
|
|
596
547
|
config: ChainForkConfig;
|
|
597
548
|
},
|
|
@@ -608,53 +559,13 @@ async function prepareExecutionPayloadHeader(
|
|
|
608
559
|
throw Error("executionBuilder required");
|
|
609
560
|
}
|
|
610
561
|
|
|
611
|
-
const
|
|
612
|
-
if (parentHashRes.isPremerge) {
|
|
613
|
-
throw Error("External builder disabled pre-merge");
|
|
614
|
-
}
|
|
615
|
-
|
|
616
|
-
const {parentHash} = parentHashRes;
|
|
562
|
+
const parentHash = state.latestExecutionPayloadHeader.blockHash;
|
|
617
563
|
return chain.executionBuilder.getHeader(fork, state.slot, parentHash, proposerPubKey);
|
|
618
564
|
}
|
|
619
565
|
|
|
620
|
-
export
|
|
621
|
-
chain: {
|
|
622
|
-
eth1: IEth1ForBlockProduction;
|
|
623
|
-
config: ChainForkConfig;
|
|
624
|
-
},
|
|
625
|
-
state: CachedBeaconStateExecutions
|
|
626
|
-
): Promise<{isPremerge: true} | {isPremerge: false; parentHash: Root}> {
|
|
627
|
-
// Use different POW block hash parent for block production based on merge status.
|
|
628
|
-
// Returned value of null == using an empty ExecutionPayload value
|
|
629
|
-
if (isMergeTransitionComplete(state)) {
|
|
630
|
-
// Post-merge, normal payload
|
|
631
|
-
return {isPremerge: false, parentHash: state.latestExecutionPayloadHeader.blockHash};
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
if (
|
|
635
|
-
!ssz.Root.equals(chain.config.TERMINAL_BLOCK_HASH, ZERO_HASH) &&
|
|
636
|
-
getCurrentEpoch(state) < chain.config.TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH
|
|
637
|
-
) {
|
|
638
|
-
throw new Error(
|
|
639
|
-
`InvalidMergeTBH epoch: expected >= ${
|
|
640
|
-
chain.config.TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH
|
|
641
|
-
}, actual: ${getCurrentEpoch(state)}`
|
|
642
|
-
);
|
|
643
|
-
}
|
|
644
|
-
|
|
645
|
-
const terminalPowBlockHash = await chain.eth1.getTerminalPowBlock();
|
|
646
|
-
if (terminalPowBlockHash === null) {
|
|
647
|
-
// Pre-merge, no prepare payload call is needed
|
|
648
|
-
return {isPremerge: true};
|
|
649
|
-
}
|
|
650
|
-
// Signify merge via producing on top of the last PoW block
|
|
651
|
-
return {isPremerge: false, parentHash: terminalPowBlockHash};
|
|
652
|
-
}
|
|
653
|
-
|
|
654
|
-
export async function getPayloadAttributesForSSE(
|
|
566
|
+
export function getPayloadAttributesForSSE(
|
|
655
567
|
fork: ForkPostBellatrix,
|
|
656
568
|
chain: {
|
|
657
|
-
eth1: IEth1ForBlockProduction;
|
|
658
569
|
config: ChainForkConfig;
|
|
659
570
|
},
|
|
660
571
|
{
|
|
@@ -663,30 +574,23 @@ export async function getPayloadAttributesForSSE(
|
|
|
663
574
|
parentBlockRoot,
|
|
664
575
|
feeRecipient,
|
|
665
576
|
}: {prepareState: CachedBeaconStateExecutions; prepareSlot: Slot; parentBlockRoot: Root; feeRecipient: string}
|
|
666
|
-
):
|
|
667
|
-
const
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
parentBlockHash: parentHash,
|
|
684
|
-
payloadAttributes,
|
|
685
|
-
};
|
|
686
|
-
return ssePayloadAttributes;
|
|
687
|
-
}
|
|
688
|
-
|
|
689
|
-
throw Error("The execution is still pre-merge");
|
|
577
|
+
): SSEPayloadAttributes {
|
|
578
|
+
const parentHash = prepareState.latestExecutionPayloadHeader.blockHash;
|
|
579
|
+
const payloadAttributes = preparePayloadAttributes(fork, chain, {
|
|
580
|
+
prepareState,
|
|
581
|
+
prepareSlot,
|
|
582
|
+
parentBlockRoot,
|
|
583
|
+
feeRecipient,
|
|
584
|
+
});
|
|
585
|
+
const ssePayloadAttributes: SSEPayloadAttributes = {
|
|
586
|
+
proposerIndex: prepareState.epochCtx.getBeaconProposer(prepareSlot),
|
|
587
|
+
proposalSlot: prepareSlot,
|
|
588
|
+
parentBlockNumber: prepareState.latestExecutionPayloadHeader.blockNumber,
|
|
589
|
+
parentBlockRoot,
|
|
590
|
+
parentBlockHash: parentHash,
|
|
591
|
+
payloadAttributes,
|
|
592
|
+
};
|
|
593
|
+
return ssePayloadAttributes;
|
|
690
594
|
}
|
|
691
595
|
|
|
692
596
|
function preparePayloadAttributes(
|
|
@@ -740,7 +644,7 @@ export async function produceCommonBlockBody<T extends BlockType>(
|
|
|
740
644
|
? this.metrics?.executionBlockProductionTimeSteps
|
|
741
645
|
: this.metrics?.builderBlockProductionTimeSteps;
|
|
742
646
|
|
|
743
|
-
const fork =
|
|
647
|
+
const fork = this.config.getForkName(slot);
|
|
744
648
|
|
|
745
649
|
// TODO:
|
|
746
650
|
// Iterate through the naive aggregation pool and ensure all the attestations from there
|
|
@@ -762,20 +666,17 @@ export async function produceCommonBlockBody<T extends BlockType>(
|
|
|
762
666
|
step: BlockProductionStep.attestations,
|
|
763
667
|
});
|
|
764
668
|
|
|
765
|
-
const endEth1DataAndDeposits = stepsMetrics?.startTimer();
|
|
766
|
-
const {eth1Data, deposits} = await this.eth1.getEth1DataAndDeposits(currentState);
|
|
767
|
-
endEth1DataAndDeposits?.({
|
|
768
|
-
step: BlockProductionStep.eth1DataAndDeposits,
|
|
769
|
-
});
|
|
770
|
-
|
|
771
669
|
const blockBody: Omit<CommonBlockBody, "blsToExecutionChanges" | "syncAggregate"> = {
|
|
772
670
|
randaoReveal,
|
|
773
671
|
graffiti,
|
|
774
|
-
|
|
672
|
+
// Eth1 data voting is no longer required since electra
|
|
673
|
+
eth1Data: currentState.eth1Data,
|
|
775
674
|
proposerSlashings,
|
|
776
675
|
attesterSlashings,
|
|
777
676
|
attestations,
|
|
778
|
-
deposits,
|
|
677
|
+
// Since electra, deposits are processed by the execution layer,
|
|
678
|
+
// we no longer support handling deposits from earlier forks.
|
|
679
|
+
deposits: [],
|
|
779
680
|
voluntaryExits,
|
|
780
681
|
};
|
|
781
682
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import {PubkeyIndexMap} from "@chainsafe/pubkey-index-map";
|
|
1
2
|
import {routes} from "@lodestar/api";
|
|
2
3
|
import {BeaconConfig} from "@lodestar/config";
|
|
3
4
|
import {
|
|
@@ -25,7 +26,7 @@ import {
|
|
|
25
26
|
hasMarkers,
|
|
26
27
|
isInInactivityLeak,
|
|
27
28
|
} from "@lodestar/state-transition";
|
|
28
|
-
import {
|
|
29
|
+
import {ValidatorIndex} from "@lodestar/types";
|
|
29
30
|
import {fromHex} from "@lodestar/utils";
|
|
30
31
|
|
|
31
32
|
export type AttestationsRewards = routes.beacon.AttestationsRewards;
|
|
@@ -38,12 +39,12 @@ const defaultAttestationsReward = {head: 0, target: 0, source: 0, inclusionDelay
|
|
|
38
39
|
const defaultAttestationsPenalty = {target: 0, source: 0};
|
|
39
40
|
|
|
40
41
|
export async function computeAttestationsRewards(
|
|
41
|
-
|
|
42
|
+
config: BeaconConfig,
|
|
43
|
+
pubkey2index: PubkeyIndexMap,
|
|
42
44
|
state: CachedBeaconStateAllForks,
|
|
43
|
-
_config: BeaconConfig,
|
|
44
45
|
validatorIds?: (ValidatorIndex | string)[]
|
|
45
46
|
): Promise<AttestationsRewards> {
|
|
46
|
-
const fork =
|
|
47
|
+
const fork = config.getForkName(state.slot);
|
|
47
48
|
if (fork === ForkName.phase0) {
|
|
48
49
|
throw Error("Unsupported fork. Attestations rewards calculation is not available in phase0");
|
|
49
50
|
}
|
|
@@ -51,8 +52,14 @@ export async function computeAttestationsRewards(
|
|
|
51
52
|
const stateAltair = state as CachedBeaconStateAltair;
|
|
52
53
|
const transitionCache = beforeProcessEpoch(stateAltair);
|
|
53
54
|
|
|
54
|
-
const [idealRewards, penalties] = computeIdealAttestationsRewardsAndPenaltiesAltair(
|
|
55
|
+
const [idealRewards, penalties] = computeIdealAttestationsRewardsAndPenaltiesAltair(
|
|
56
|
+
config,
|
|
57
|
+
stateAltair,
|
|
58
|
+
transitionCache
|
|
59
|
+
);
|
|
55
60
|
const totalRewards = computeTotalAttestationsRewardsAltair(
|
|
61
|
+
config,
|
|
62
|
+
pubkey2index,
|
|
56
63
|
stateAltair,
|
|
57
64
|
transitionCache,
|
|
58
65
|
idealRewards,
|
|
@@ -64,12 +71,13 @@ export async function computeAttestationsRewards(
|
|
|
64
71
|
}
|
|
65
72
|
|
|
66
73
|
function computeIdealAttestationsRewardsAndPenaltiesAltair(
|
|
74
|
+
config: BeaconConfig,
|
|
67
75
|
state: CachedBeaconStateAllForks,
|
|
68
76
|
transitionCache: EpochTransitionCache
|
|
69
77
|
): [IdealAttestationsReward[], AttestationsPenalty[]] {
|
|
70
78
|
const baseRewardPerIncrement = transitionCache.baseRewardPerIncrement;
|
|
71
79
|
const activeBalanceByIncrement = transitionCache.totalActiveStakeByIncrement;
|
|
72
|
-
const fork =
|
|
80
|
+
const fork = config.getForkName(state.slot);
|
|
73
81
|
const maxEffectiveBalance = isForkPostElectra(fork) ? MAX_EFFECTIVE_BALANCE_ELECTRA : MAX_EFFECTIVE_BALANCE;
|
|
74
82
|
const maxEffectiveBalanceByIncrement = Math.floor(maxEffectiveBalance / EFFECTIVE_BALANCE_INCREMENT);
|
|
75
83
|
|
|
@@ -139,6 +147,8 @@ function computeIdealAttestationsRewardsAndPenaltiesAltair(
|
|
|
139
147
|
|
|
140
148
|
// Same calculation as `getRewardsAndPenaltiesAltair` but returns the breakdown of rewards instead of aggregated
|
|
141
149
|
function computeTotalAttestationsRewardsAltair(
|
|
150
|
+
config: BeaconConfig,
|
|
151
|
+
pubkey2index: PubkeyIndexMap,
|
|
142
152
|
state: CachedBeaconStateAltair,
|
|
143
153
|
transitionCache: EpochTransitionCache,
|
|
144
154
|
idealRewards: IdealAttestationsReward[],
|
|
@@ -147,9 +157,9 @@ function computeTotalAttestationsRewardsAltair(
|
|
|
147
157
|
): TotalAttestationsReward[] {
|
|
148
158
|
const rewards = [];
|
|
149
159
|
const {flags} = transitionCache;
|
|
150
|
-
const {epochCtx
|
|
160
|
+
const {epochCtx} = state;
|
|
151
161
|
const validatorIndices = validatorIds
|
|
152
|
-
.map((id) => (typeof id === "number" ? id :
|
|
162
|
+
.map((id) => (typeof id === "number" ? id : pubkey2index.get(fromHex(id))))
|
|
153
163
|
.filter((index) => index !== undefined); // Validator indices to include in the result
|
|
154
164
|
|
|
155
165
|
const inactivityPenaltyDenominator = config.INACTIVITY_SCORE_BIAS * INACTIVITY_PENALTY_QUOTIENT_ALTAIR;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {routes} from "@lodestar/api";
|
|
2
|
+
import {BeaconConfig} from "@lodestar/config";
|
|
2
3
|
import {
|
|
3
4
|
ForkName,
|
|
4
5
|
WHISTLEBLOWER_REWARD_QUOTIENT,
|
|
@@ -26,11 +27,12 @@ type SubRewardValue = number; // All reward values should be integer
|
|
|
26
27
|
* 3) Reporting slashable behaviours from proposer and attester
|
|
27
28
|
*/
|
|
28
29
|
export async function computeBlockRewards(
|
|
30
|
+
config: BeaconConfig,
|
|
29
31
|
block: BeaconBlock,
|
|
30
32
|
preState: CachedBeaconStateAllForks,
|
|
31
33
|
postState?: CachedBeaconStateAllForks
|
|
32
34
|
): Promise<BlockRewards> {
|
|
33
|
-
const fork =
|
|
35
|
+
const fork = config.getForkName(block.slot);
|
|
34
36
|
const {attestations: cachedAttestationsReward = 0, syncAggregate: cachedSyncAggregateReward = 0} =
|
|
35
37
|
postState?.proposerRewards ?? {};
|
|
36
38
|
let blockAttestationReward = cachedAttestationsReward;
|
|
@@ -40,7 +42,7 @@ export async function computeBlockRewards(
|
|
|
40
42
|
blockAttestationReward =
|
|
41
43
|
fork === ForkName.phase0
|
|
42
44
|
? computeBlockAttestationRewardPhase0(block as phase0.BeaconBlock, preState as CachedBeaconStatePhase0)
|
|
43
|
-
: computeBlockAttestationRewardAltair(block as altair.BeaconBlock, preState as CachedBeaconStateAltair);
|
|
45
|
+
: computeBlockAttestationRewardAltair(config, block as altair.BeaconBlock, preState as CachedBeaconStateAltair);
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
if (syncAggregateReward === 0) {
|
|
@@ -78,10 +80,11 @@ function computeBlockAttestationRewardPhase0(
|
|
|
78
80
|
* Reuses `processAttestationsAltair()`. Has dependency on RewardCache
|
|
79
81
|
*/
|
|
80
82
|
function computeBlockAttestationRewardAltair(
|
|
83
|
+
config: BeaconConfig,
|
|
81
84
|
block: altair.BeaconBlock,
|
|
82
85
|
preState: CachedBeaconStateAltair
|
|
83
86
|
): SubRewardValue {
|
|
84
|
-
const fork =
|
|
87
|
+
const fork = config.getForkSeq(block.slot);
|
|
85
88
|
const {attestations} = block.body;
|
|
86
89
|
|
|
87
90
|
processAttestationsAltair(fork, preState, attestations, false);
|
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
import {routes} from "@lodestar/api";
|
|
2
|
+
import {BeaconConfig} from "@lodestar/config";
|
|
2
3
|
import {ForkName, SYNC_COMMITTEE_SIZE} from "@lodestar/params";
|
|
3
|
-
import {CachedBeaconStateAllForks, CachedBeaconStateAltair} from "@lodestar/state-transition";
|
|
4
|
+
import {CachedBeaconStateAllForks, CachedBeaconStateAltair, Index2PubkeyCache} from "@lodestar/state-transition";
|
|
4
5
|
import {BeaconBlock, ValidatorIndex, altair} from "@lodestar/types";
|
|
5
6
|
|
|
6
7
|
export type SyncCommitteeRewards = routes.beacon.SyncCommitteeRewards;
|
|
7
8
|
type BalanceRecord = {val: number}; // Use val for convenient way to increment/decrement balance
|
|
8
9
|
|
|
9
10
|
export async function computeSyncCommitteeRewards(
|
|
11
|
+
config: BeaconConfig,
|
|
12
|
+
index2pubkey: Index2PubkeyCache,
|
|
10
13
|
block: BeaconBlock,
|
|
11
14
|
preState: CachedBeaconStateAllForks,
|
|
12
15
|
validatorIds: (ValidatorIndex | string)[] = []
|
|
13
16
|
): Promise<SyncCommitteeRewards> {
|
|
14
|
-
const fork =
|
|
17
|
+
const fork = config.getForkName(block.slot);
|
|
15
18
|
if (fork === ForkName.phase0) {
|
|
16
19
|
throw Error("Cannot get sync rewards as phase0 block does not have sync committee");
|
|
17
20
|
}
|
|
18
21
|
|
|
19
22
|
const altairBlock = block as altair.BeaconBlock;
|
|
20
23
|
const preStateAltair = preState as CachedBeaconStateAltair;
|
|
21
|
-
const {index2pubkey} = preStateAltair.epochCtx;
|
|
22
24
|
|
|
23
25
|
// Bound syncCommitteeValidatorIndices in case it goes beyond SYNC_COMMITTEE_SIZE just to be safe
|
|
24
26
|
const syncCommitteeValidatorIndices = preStateAltair.epochCtx.currentSyncCommitteeIndexed.validatorIndices.slice(
|