@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
|
@@ -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,4 +1,5 @@
|
|
|
1
1
|
import {routes} from "@lodestar/api";
|
|
2
|
+
import {BeaconConfig} from "@lodestar/config";
|
|
2
3
|
import {
|
|
3
4
|
CachedBeaconStateAllForks,
|
|
4
5
|
computeStartSlotAtEpoch,
|
|
@@ -24,6 +25,7 @@ export type PersistentCheckpointStateCacheOpts = {
|
|
|
24
25
|
};
|
|
25
26
|
|
|
26
27
|
type PersistentCheckpointStateCacheModules = {
|
|
28
|
+
config: BeaconConfig;
|
|
27
29
|
metrics?: Metrics | null;
|
|
28
30
|
logger: Logger;
|
|
29
31
|
clock?: IClock | null;
|
|
@@ -107,6 +109,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
|
|
|
107
109
|
private readonly cache: MapTracker<CacheKey, CacheItem>;
|
|
108
110
|
/** Epoch -> Set<blockRoot> */
|
|
109
111
|
private readonly epochIndex = new MapDef<Epoch, Set<RootHex>>(() => new Set<string>());
|
|
112
|
+
private readonly config: BeaconConfig;
|
|
110
113
|
private readonly metrics: Metrics | null | undefined;
|
|
111
114
|
private readonly logger: Logger;
|
|
112
115
|
private readonly clock: IClock | null | undefined;
|
|
@@ -120,10 +123,20 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
|
|
|
120
123
|
private readonly bufferPool?: BufferPool | null;
|
|
121
124
|
|
|
122
125
|
constructor(
|
|
123
|
-
{
|
|
126
|
+
{
|
|
127
|
+
config,
|
|
128
|
+
metrics,
|
|
129
|
+
logger,
|
|
130
|
+
clock,
|
|
131
|
+
signal,
|
|
132
|
+
datastore,
|
|
133
|
+
blockStateCache,
|
|
134
|
+
bufferPool,
|
|
135
|
+
}: PersistentCheckpointStateCacheModules,
|
|
124
136
|
opts: PersistentCheckpointStateCacheOpts
|
|
125
137
|
) {
|
|
126
138
|
this.cache = new MapTracker(metrics?.cpStateCache);
|
|
139
|
+
this.config = config;
|
|
127
140
|
if (metrics) {
|
|
128
141
|
this.metrics = metrics;
|
|
129
142
|
metrics.cpStateCache.size.addCollect(() => {
|
|
@@ -484,7 +497,7 @@ export class PersistentCheckpointStateCache implements CheckpointStateCache {
|
|
|
484
497
|
}
|
|
485
498
|
|
|
486
499
|
const blockSlot = state.slot;
|
|
487
|
-
const processCPStatesTimeMs =
|
|
500
|
+
const processCPStatesTimeMs = this.config.getSlotComponentDurationMs(PROCESS_CHECKPOINT_STATES_BPS);
|
|
488
501
|
// we always have clock in production, fallback value is only for test
|
|
489
502
|
const msFromSlot = this.clock?.msFromSlot(blockSlot) ?? processCPStatesTimeMs;
|
|
490
503
|
const msToProcessCPStates = processCPStatesTimeMs - msFromSlot;
|
|
@@ -245,6 +245,18 @@ async function validateAggregateAndProof(
|
|
|
245
245
|
});
|
|
246
246
|
}
|
|
247
247
|
|
|
248
|
+
// Same race-condition check as above for seen aggregators
|
|
249
|
+
if (
|
|
250
|
+
!skipValidationKnownAttesters &&
|
|
251
|
+
chain.seenAggregatedAttestations.isKnown(targetEpoch, attIndex, attDataRootHex, aggregationBits)
|
|
252
|
+
) {
|
|
253
|
+
throw new AttestationError(GossipAction.IGNORE, {
|
|
254
|
+
code: AttestationErrorCode.ATTESTERS_ALREADY_KNOWN,
|
|
255
|
+
targetEpoch,
|
|
256
|
+
aggregateRoot: attDataRootHex,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
|
|
248
260
|
chain.seenAggregators.add(targetEpoch, aggregatorIndex);
|
|
249
261
|
chain.seenAggregatedAttestations.add(
|
|
250
262
|
targetEpoch,
|
|
@@ -43,7 +43,7 @@ export async function validateAttesterSlashing(
|
|
|
43
43
|
// [REJECT] All of the conditions within process_attester_slashing pass validation.
|
|
44
44
|
try {
|
|
45
45
|
// verifySignature = false, verified in batch below
|
|
46
|
-
assertValidAttesterSlashing(state, attesterSlashing, false);
|
|
46
|
+
assertValidAttesterSlashing(chain.index2pubkey, state, attesterSlashing, false);
|
|
47
47
|
} catch (e) {
|
|
48
48
|
throw new AttesterSlashingError(GossipAction.REJECT, {
|
|
49
49
|
code: AttesterSlashingErrorCode.INVALID,
|
|
@@ -51,7 +51,12 @@ export async function validateAttesterSlashing(
|
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
const signatureSets = getAttesterSlashingSignatureSets(
|
|
54
|
+
const signatureSets = getAttesterSlashingSignatureSets(
|
|
55
|
+
chain.config,
|
|
56
|
+
chain.index2pubkey,
|
|
57
|
+
state.slot,
|
|
58
|
+
attesterSlashing
|
|
59
|
+
);
|
|
55
60
|
if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
|
|
56
61
|
throw new AttesterSlashingError(GossipAction.REJECT, {
|
|
57
62
|
code: AttesterSlashingErrorCode.INVALID,
|
|
@@ -137,7 +137,11 @@ export async function validateGossipBlobSidecar(
|
|
|
137
137
|
// [REJECT] The proposer signature, signed_beacon_block.signature, is valid with respect to the proposer_index pubkey.
|
|
138
138
|
const signature = blobSidecar.signedBlockHeader.signature;
|
|
139
139
|
if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blobSlot, blockHex, signature)) {
|
|
140
|
-
const signatureSet = getBlockHeaderProposerSignatureSetByParentStateSlot(
|
|
140
|
+
const signatureSet = getBlockHeaderProposerSignatureSetByParentStateSlot(
|
|
141
|
+
chain.index2pubkey,
|
|
142
|
+
blockState,
|
|
143
|
+
blobSidecar.signedBlockHeader
|
|
144
|
+
);
|
|
141
145
|
// Don't batch so verification is not delayed
|
|
142
146
|
if (!(await chain.bls.verifySignatureSets([signatureSet], {verifyOnMainThread: true}))) {
|
|
143
147
|
throw new BlobSidecarGossipError(GossipAction.REJECT, {
|
|
@@ -240,7 +244,11 @@ export async function validateBlockBlobSidecars(
|
|
|
240
244
|
const signature = firstSidecarSignedBlockHeader.signature;
|
|
241
245
|
if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockSlot, blockRootHex, signature)) {
|
|
242
246
|
const headState = await chain.getHeadState();
|
|
243
|
-
const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(
|
|
247
|
+
const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(
|
|
248
|
+
chain.index2pubkey,
|
|
249
|
+
headState,
|
|
250
|
+
firstSidecarSignedBlockHeader
|
|
251
|
+
);
|
|
244
252
|
|
|
245
253
|
if (
|
|
246
254
|
!(await chain.bls.verifySignatureSets([signatureSet], {
|
|
@@ -154,7 +154,7 @@ export async function validateGossipBlock(
|
|
|
154
154
|
|
|
155
155
|
// [REJECT] The proposer signature, signed_beacon_block.signature, is valid with respect to the proposer_index pubkey.
|
|
156
156
|
if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockSlot, blockRoot, signedBlock.signature)) {
|
|
157
|
-
const signatureSet = getBlockProposerSignatureSet(
|
|
157
|
+
const signatureSet = getBlockProposerSignatureSet(chain.config, chain.index2pubkey, signedBlock);
|
|
158
158
|
// Don't batch so verification is not delayed
|
|
159
159
|
if (!(await chain.bls.verifySignatureSets([signatureSet], {verifyOnMainThread: true}))) {
|
|
160
160
|
throw new BlockGossipError(GossipAction.REJECT, {
|
|
@@ -41,7 +41,7 @@ async function validateBlsToExecutionChange(
|
|
|
41
41
|
// NOTE: No need to advance head state since the signature's fork is handled with `broadcastedOnFork`,
|
|
42
42
|
// and chanes relevant to `isValidBlsToExecutionChange()` happen only on processBlock(), not processEpoch()
|
|
43
43
|
const state = chain.getHeadState();
|
|
44
|
-
const {config} =
|
|
44
|
+
const {config} = chain;
|
|
45
45
|
|
|
46
46
|
// [REJECT] All of the conditions within process_bls_to_execution_change pass validation.
|
|
47
47
|
// verifySignature = false, verified in batch below
|
|
@@ -135,6 +135,7 @@ export async function validateGossipDataColumnSidecar(
|
|
|
135
135
|
const signature = dataColumnSidecar.signedBlockHeader.signature;
|
|
136
136
|
if (!chain.seenBlockInputCache.isVerifiedProposerSignature(blockHeader.slot, blockRootHex, signature)) {
|
|
137
137
|
const signatureSet = getBlockHeaderProposerSignatureSetByParentStateSlot(
|
|
138
|
+
chain.index2pubkey,
|
|
138
139
|
blockState,
|
|
139
140
|
dataColumnSidecar.signedBlockHeader
|
|
140
141
|
);
|
|
@@ -336,7 +337,11 @@ export async function validateBlockDataColumnSidecars(
|
|
|
336
337
|
const signature = firstSidecarSignedBlockHeader.signature;
|
|
337
338
|
if (!chain.seenBlockInputCache.isVerifiedProposerSignature(slot, rootHex, signature)) {
|
|
338
339
|
const headState = await chain.getHeadState();
|
|
339
|
-
const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(
|
|
340
|
+
const signatureSet = getBlockHeaderProposerSignatureSetByHeaderSlot(
|
|
341
|
+
chain.index2pubkey,
|
|
342
|
+
headState,
|
|
343
|
+
firstSidecarSignedBlockHeader
|
|
344
|
+
);
|
|
340
345
|
|
|
341
346
|
if (
|
|
342
347
|
!(await chain.bls.verifySignatureSets([signatureSet], {
|
|
@@ -44,7 +44,12 @@ async function validateProposerSlashing(
|
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
const signatureSets = getProposerSlashingSignatureSets(
|
|
47
|
+
const signatureSets = getProposerSlashingSignatureSets(
|
|
48
|
+
chain.config,
|
|
49
|
+
chain.index2pubkey,
|
|
50
|
+
state.slot,
|
|
51
|
+
proposerSlashing
|
|
52
|
+
);
|
|
48
53
|
if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true, priority: prioritizeBls}))) {
|
|
49
54
|
throw new ProposerSlashingError(GossipAction.REJECT, {
|
|
50
55
|
code: ProposerSlashingErrorCode.INVALID,
|
|
@@ -14,7 +14,7 @@ export function getAggregateAndProofSigningRoot(
|
|
|
14
14
|
epoch: Epoch,
|
|
15
15
|
aggregateAndProof: SignedAggregateAndProof
|
|
16
16
|
): Uint8Array {
|
|
17
|
-
// previously, we call `const aggregatorDomain =
|
|
17
|
+
// previously, we call `const aggregatorDomain = config.getDomain(state.slot, DOMAIN_AGGREGATE_AND_PROOF, slot);`
|
|
18
18
|
// at fork boundary, it's required to dial to target epoch https://github.com/ChainSafe/lodestar/blob/v1.11.3/packages/beacon-node/src/chain/validation/attestation.ts#L573
|
|
19
19
|
// instead of that, just use the fork of slot in the attestation data
|
|
20
20
|
const slot = computeStartSlotAtEpoch(epoch);
|
|
@@ -1,18 +1,21 @@
|
|
|
1
|
+
import {BeaconConfig} from "@lodestar/config";
|
|
1
2
|
import {DOMAIN_CONTRIBUTION_AND_PROOF} from "@lodestar/params";
|
|
2
3
|
import {
|
|
3
4
|
CachedBeaconStateAllForks,
|
|
4
5
|
ISignatureSet,
|
|
6
|
+
Index2PubkeyCache,
|
|
5
7
|
SignatureSetType,
|
|
6
8
|
computeSigningRoot,
|
|
7
9
|
} from "@lodestar/state-transition";
|
|
8
10
|
import {altair, ssz} from "@lodestar/types";
|
|
9
11
|
|
|
10
12
|
export function getContributionAndProofSignatureSet(
|
|
13
|
+
config: BeaconConfig,
|
|
14
|
+
index2pubkey: Index2PubkeyCache,
|
|
11
15
|
state: CachedBeaconStateAllForks,
|
|
12
16
|
signedContributionAndProof: altair.SignedContributionAndProof
|
|
13
17
|
): ISignatureSet {
|
|
14
|
-
const
|
|
15
|
-
const domain = state.config.getDomain(
|
|
18
|
+
const domain = config.getDomain(
|
|
16
19
|
state.slot,
|
|
17
20
|
DOMAIN_CONTRIBUTION_AND_PROOF,
|
|
18
21
|
signedContributionAndProof.message.contribution.slot
|
|
@@ -20,7 +23,7 @@ export function getContributionAndProofSignatureSet(
|
|
|
20
23
|
const signingData = signedContributionAndProof.message;
|
|
21
24
|
return {
|
|
22
25
|
type: SignatureSetType.single,
|
|
23
|
-
pubkey:
|
|
26
|
+
pubkey: index2pubkey[signedContributionAndProof.message.aggregatorIndex],
|
|
24
27
|
signingRoot: computeSigningRoot(ssz.altair.ContributionAndProof, signingData, domain),
|
|
25
28
|
signature: signedContributionAndProof.signature,
|
|
26
29
|
};
|
|
@@ -1,21 +1,25 @@
|
|
|
1
|
+
import {BeaconConfig} from "@lodestar/config";
|
|
1
2
|
import {DOMAIN_SYNC_COMMITTEE} from "@lodestar/params";
|
|
2
3
|
import {
|
|
3
4
|
CachedBeaconStateAllForks,
|
|
4
5
|
ISignatureSet,
|
|
6
|
+
Index2PubkeyCache,
|
|
5
7
|
SignatureSetType,
|
|
6
8
|
computeSigningRoot,
|
|
7
9
|
} from "@lodestar/state-transition";
|
|
8
10
|
import {altair, ssz} from "@lodestar/types";
|
|
9
11
|
|
|
10
12
|
export function getSyncCommitteeSignatureSet(
|
|
13
|
+
config: BeaconConfig,
|
|
14
|
+
index2pubkey: Index2PubkeyCache,
|
|
11
15
|
state: CachedBeaconStateAllForks,
|
|
12
16
|
syncCommittee: altair.SyncCommitteeMessage
|
|
13
17
|
): ISignatureSet {
|
|
14
|
-
const domain =
|
|
18
|
+
const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, syncCommittee.slot);
|
|
15
19
|
|
|
16
20
|
return {
|
|
17
21
|
type: SignatureSetType.single,
|
|
18
|
-
pubkey:
|
|
22
|
+
pubkey: index2pubkey[syncCommittee.validatorIndex],
|
|
19
23
|
signingRoot: computeSigningRoot(ssz.Root, syncCommittee.beaconBlockRoot, domain),
|
|
20
24
|
signature: syncCommittee.signature,
|
|
21
25
|
};
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import {PublicKey} from "@chainsafe/blst";
|
|
2
|
+
import {BeaconConfig} from "@lodestar/config";
|
|
2
3
|
import {DOMAIN_SYNC_COMMITTEE} from "@lodestar/params";
|
|
3
4
|
import {CachedBeaconStateAltair, ISignatureSet, SignatureSetType, computeSigningRoot} from "@lodestar/state-transition";
|
|
4
5
|
import {altair, ssz} from "@lodestar/types";
|
|
5
6
|
|
|
6
7
|
export function getSyncCommitteeContributionSignatureSet(
|
|
8
|
+
config: BeaconConfig,
|
|
7
9
|
state: CachedBeaconStateAltair,
|
|
8
10
|
contribution: altair.SyncCommitteeContribution,
|
|
9
11
|
pubkeys: PublicKey[]
|
|
10
12
|
): ISignatureSet {
|
|
11
|
-
const domain =
|
|
13
|
+
const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE, contribution.slot);
|
|
12
14
|
return {
|
|
13
15
|
type: SignatureSetType.aggregate,
|
|
14
16
|
pubkeys,
|
|
@@ -1,17 +1,20 @@
|
|
|
1
|
+
import {BeaconConfig} from "@lodestar/config";
|
|
1
2
|
import {DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF} from "@lodestar/params";
|
|
2
3
|
import {
|
|
3
4
|
CachedBeaconStateAllForks,
|
|
4
5
|
ISignatureSet,
|
|
6
|
+
Index2PubkeyCache,
|
|
5
7
|
SignatureSetType,
|
|
6
8
|
computeSigningRoot,
|
|
7
9
|
} from "@lodestar/state-transition";
|
|
8
10
|
import {altair, ssz} from "@lodestar/types";
|
|
9
11
|
|
|
10
12
|
export function getSyncCommitteeSelectionProofSignatureSet(
|
|
13
|
+
config: BeaconConfig,
|
|
14
|
+
index2pubkey: Index2PubkeyCache,
|
|
11
15
|
state: CachedBeaconStateAllForks,
|
|
12
16
|
contributionAndProof: altair.ContributionAndProof
|
|
13
17
|
): ISignatureSet {
|
|
14
|
-
const {epochCtx, config} = state;
|
|
15
18
|
const slot = contributionAndProof.contribution.slot;
|
|
16
19
|
const domain = config.getDomain(state.slot, DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF, slot);
|
|
17
20
|
const signingData: altair.SyncAggregatorSelectionData = {
|
|
@@ -20,7 +23,7 @@ export function getSyncCommitteeSelectionProofSignatureSet(
|
|
|
20
23
|
};
|
|
21
24
|
return {
|
|
22
25
|
type: SignatureSetType.single,
|
|
23
|
-
pubkey:
|
|
26
|
+
pubkey: index2pubkey[contributionAndProof.aggregatorIndex],
|
|
24
27
|
signingRoot: computeSigningRoot(ssz.altair.SyncAggregatorSelectionData, signingData, domain),
|
|
25
28
|
signature: contributionAndProof.selectionProof,
|
|
26
29
|
};
|
|
@@ -89,7 +89,7 @@ async function validateSyncCommitteeSigOnly(
|
|
|
89
89
|
syncCommittee: altair.SyncCommitteeMessage,
|
|
90
90
|
prioritizeBls = false
|
|
91
91
|
): Promise<void> {
|
|
92
|
-
const signatureSet = getSyncCommitteeSignatureSet(headState, syncCommittee);
|
|
92
|
+
const signatureSet = getSyncCommitteeSignatureSet(chain.config, chain.index2pubkey, headState, syncCommittee);
|
|
93
93
|
if (!(await chain.bls.verifySignatureSets([signatureSet], {batchable: true, priority: prioritizeBls}))) {
|
|
94
94
|
throw new SyncCommitteeError(GossipAction.REJECT, {
|
|
95
95
|
code: SyncCommitteeErrorCode.INVALID_SIGNATURE,
|
|
@@ -21,6 +21,7 @@ export async function validateSyncCommitteeGossipContributionAndProof(
|
|
|
21
21
|
const contributionAndProof = signedContributionAndProof.message;
|
|
22
22
|
const {contribution, aggregatorIndex} = contributionAndProof;
|
|
23
23
|
const {subcommitteeIndex, slot} = contribution;
|
|
24
|
+
const {index2pubkey} = chain;
|
|
24
25
|
|
|
25
26
|
const headState = chain.getHeadState();
|
|
26
27
|
validateGossipSyncCommitteeExceptSig(chain, headState, subcommitteeIndex, {
|
|
@@ -73,20 +74,23 @@ export async function validateSyncCommitteeGossipContributionAndProof(
|
|
|
73
74
|
// i.e. state.validators[contribution_and_proof.aggregator_index].pubkey in get_sync_subcommittee_pubkeys(state, contribution.subcommittee_index).
|
|
74
75
|
// > Checked in validateGossipSyncCommitteeExceptSig()
|
|
75
76
|
|
|
76
|
-
const participantPubkeys = syncCommitteeParticipantIndices.map(
|
|
77
|
-
(validatorIndex) => headState.epochCtx.index2pubkey[validatorIndex]
|
|
78
|
-
);
|
|
77
|
+
const participantPubkeys = syncCommitteeParticipantIndices.map((validatorIndex) => index2pubkey[validatorIndex]);
|
|
79
78
|
const signatureSets = [
|
|
80
79
|
// [REJECT] The contribution_and_proof.selection_proof is a valid signature of the SyncAggregatorSelectionData
|
|
81
80
|
// derived from the contribution by the validator with index contribution_and_proof.aggregator_index.
|
|
82
|
-
getSyncCommitteeSelectionProofSignatureSet(headState, contributionAndProof),
|
|
81
|
+
getSyncCommitteeSelectionProofSignatureSet(chain.config, index2pubkey, headState, contributionAndProof),
|
|
83
82
|
|
|
84
83
|
// [REJECT] The aggregator signature, signed_contribution_and_proof.signature, is valid.
|
|
85
|
-
getContributionAndProofSignatureSet(headState, signedContributionAndProof),
|
|
84
|
+
getContributionAndProofSignatureSet(chain.config, index2pubkey, headState, signedContributionAndProof),
|
|
86
85
|
|
|
87
86
|
// [REJECT] The aggregate signature is valid for the message beacon_block_root and aggregate pubkey derived from
|
|
88
87
|
// the participation info in aggregation_bits for the subcommittee specified by the contribution.subcommittee_index.
|
|
89
|
-
getSyncCommitteeContributionSignatureSet(
|
|
88
|
+
getSyncCommitteeContributionSignatureSet(
|
|
89
|
+
chain.config,
|
|
90
|
+
headState as CachedBeaconStateAltair,
|
|
91
|
+
contribution,
|
|
92
|
+
participantPubkeys
|
|
93
|
+
),
|
|
90
94
|
];
|
|
91
95
|
|
|
92
96
|
if (!(await chain.bls.verifySignatureSets(signatureSets, {batchable: true}))) {
|
|
@@ -59,7 +59,7 @@ async function validateVoluntaryExit(
|
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
const signatureSet = getVoluntaryExitSignatureSet(state, voluntaryExit);
|
|
62
|
+
const signatureSet = getVoluntaryExitSignatureSet(chain.config, chain.index2pubkey, state.slot, voluntaryExit);
|
|
63
63
|
if (!(await chain.bls.verifySignatureSets([signatureSet], {batchable: true, priority: prioritizeBls}))) {
|
|
64
64
|
throw new VoluntaryExitError(GossipAction.REJECT, {
|
|
65
65
|
code: VoluntaryExitErrorCode.INVALID_SIGNATURE,
|