@lodestar/beacon-node 1.39.0-dev.3bf4734ba9 → 1.39.0-dev.882891d89c
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/chain/blocks/verifyBlock.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +1 -1
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts +2 -1
- 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 +8 -16
- 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/prepareNextSlot.d.ts +0 -4
- package/lib/chain/prepareNextSlot.d.ts.map +1 -1
- package/lib/chain/prepareNextSlot.js +1 -21
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +0 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +8 -11
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/rewards/attestationsRewards.d.ts +2 -1
- package/lib/chain/rewards/attestationsRewards.d.ts.map +1 -1
- package/lib/chain/rewards/attestationsRewards.js +8 -8
- 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 +2 -1
- package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +1 -1
- package/lib/chain/rewards/syncCommitteeRewards.js +2 -2
- 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 +1 -1
- package/lib/chain/validation/attesterSlashing.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/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 +2 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.js +2 -2
- package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommittee.d.ts +2 -1
- package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommittee.js +2 -2
- 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 +2 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +1 -2
- 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 +3 -3
- 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 +1 -1
- package/lib/execution/engine/http.d.ts.map +1 -1
- package/lib/execution/engine/http.js +2 -3
- 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.map +1 -1
- package/lib/execution/engine/mock.js +1 -1
- 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 -35
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +0 -90
- 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/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 -4
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/backfill/verify.d.ts +1 -1
- package/lib/sync/backfill/verify.d.ts.map +1 -1
- package/lib/sync/backfill/verify.js +2 -2
- package/lib/sync/backfill/verify.js.map +1 -1
- package/lib/util/workerEvents.d.ts +1 -6
- package/lib/util/workerEvents.d.ts.map +1 -1
- package/lib/util/workerEvents.js +8 -8
- package/lib/util/workerEvents.js.map +1 -1
- package/package.json +14 -20
- package/src/api/impl/beacon/blocks/utils.ts +1 -1
- package/src/chain/blocks/verifyBlock.ts +1 -0
- package/src/chain/blocks/verifyBlocksSignatures.ts +3 -1
- package/src/chain/chain.ts +7 -19
- 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/prepareNextSlot.ts +1 -28
- package/src/chain/produceBlock/produceBlockBody.ts +8 -12
- package/src/chain/rewards/attestationsRewards.ts +13 -4
- package/src/chain/rewards/blockRewards.ts +6 -3
- package/src/chain/rewards/syncCommitteeRewards.ts +3 -1
- package/src/chain/stateCache/persistentCheckpointsCache.ts +15 -2
- package/src/chain/validation/attesterSlashing.ts +1 -1
- package/src/chain/validation/block.ts +1 -1
- package/src/chain/validation/blsToExecutionChange.ts +1 -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 +3 -1
- package/src/chain/validation/signatureSets/syncCommittee.ts +3 -1
- package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +3 -1
- package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +2 -1
- package/src/chain/validation/syncCommittee.ts +1 -1
- package/src/chain/validation/syncCommitteeContributionAndProof.ts +8 -3
- 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 +8 -9
- 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 +1 -2
- 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 -92
- 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/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 +8 -3
- package/src/sync/backfill/verify.ts +3 -1
- 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/index.d.ts +0 -31
- package/lib/eth1/index.d.ts.map +0 -1
- package/lib/eth1/index.js +0 -71
- package/lib/eth1/index.js.map +0 -1
- package/lib/eth1/interface.d.ts +0 -74
- 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/index.ts +0 -94
- package/src/eth1/interface.ts +0 -87
- package/src/eth1/options.ts +0 -28
- package/src/eth1/provider/eth1Provider.ts +0 -229
- package/src/eth1/provider/utils.ts +0 -136
- package/src/eth1/stream.ts +0 -75
- package/src/eth1/utils/depositContract.ts +0 -37
- package/src/eth1/utils/deposits.ts +0 -70
- package/src/eth1/utils/eth1Data.ts +0 -100
- package/src/eth1/utils/eth1DepositEvent.ts +0 -12
- package/src/eth1/utils/eth1Vote.ts +0 -142
- package/src/eth1/utils/groupDepositEventsByBlock.ts +0 -19
- package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +0 -18
- /package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.js +0 -0
- /package/lib/{eth1/provider → execution/engine}/jwt.d.ts +0 -0
- /package/lib/{eth1/provider → execution/engine}/jwt.js +0 -0
- /package/src/{eth1/provider → execution/engine}/jwt.ts +0 -0
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/ChainSafe/lodestar/issues"
|
|
13
13
|
},
|
|
14
|
-
"version": "1.39.0-dev.
|
|
14
|
+
"version": "1.39.0-dev.882891d89c",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -39,11 +39,6 @@
|
|
|
39
39
|
"types": "./lib/db/index.d.ts",
|
|
40
40
|
"import": "./lib/db/index.js"
|
|
41
41
|
},
|
|
42
|
-
"./eth1": {
|
|
43
|
-
"bun": "./src/eth1/index.ts",
|
|
44
|
-
"types": "./lib/eth1/index.d.ts",
|
|
45
|
-
"import": "./lib/eth1/index.js"
|
|
46
|
-
},
|
|
47
42
|
"./metrics": {
|
|
48
43
|
"bun": "./src/metrics/index.ts",
|
|
49
44
|
"types": "./lib/metrics/index.d.ts",
|
|
@@ -126,7 +121,6 @@
|
|
|
126
121
|
"@chainsafe/ssz": "^1.2.2",
|
|
127
122
|
"@chainsafe/threads": "^1.11.3",
|
|
128
123
|
"@crate-crypto/node-eth-kzg": "0.9.1",
|
|
129
|
-
"@ethersproject/abi": "^5.7.0",
|
|
130
124
|
"@fastify/bearer-auth": "^10.0.1",
|
|
131
125
|
"@fastify/cors": "^10.0.1",
|
|
132
126
|
"@fastify/swagger": "^9.0.0",
|
|
@@ -140,18 +134,18 @@
|
|
|
140
134
|
"@libp2p/peer-id": "^5.1.0",
|
|
141
135
|
"@libp2p/prometheus-metrics": "^4.3.15",
|
|
142
136
|
"@libp2p/tcp": "^10.1.8",
|
|
143
|
-
"@lodestar/api": "1.39.0-dev.
|
|
144
|
-
"@lodestar/config": "1.39.0-dev.
|
|
145
|
-
"@lodestar/db": "1.39.0-dev.
|
|
146
|
-
"@lodestar/fork-choice": "1.39.0-dev.
|
|
147
|
-
"@lodestar/light-client": "1.39.0-dev.
|
|
148
|
-
"@lodestar/logger": "1.39.0-dev.
|
|
149
|
-
"@lodestar/params": "1.39.0-dev.
|
|
150
|
-
"@lodestar/reqresp": "1.39.0-dev.
|
|
151
|
-
"@lodestar/state-transition": "1.39.0-dev.
|
|
152
|
-
"@lodestar/types": "1.39.0-dev.
|
|
153
|
-
"@lodestar/utils": "1.39.0-dev.
|
|
154
|
-
"@lodestar/validator": "1.39.0-dev.
|
|
137
|
+
"@lodestar/api": "1.39.0-dev.882891d89c",
|
|
138
|
+
"@lodestar/config": "1.39.0-dev.882891d89c",
|
|
139
|
+
"@lodestar/db": "1.39.0-dev.882891d89c",
|
|
140
|
+
"@lodestar/fork-choice": "1.39.0-dev.882891d89c",
|
|
141
|
+
"@lodestar/light-client": "1.39.0-dev.882891d89c",
|
|
142
|
+
"@lodestar/logger": "1.39.0-dev.882891d89c",
|
|
143
|
+
"@lodestar/params": "1.39.0-dev.882891d89c",
|
|
144
|
+
"@lodestar/reqresp": "1.39.0-dev.882891d89c",
|
|
145
|
+
"@lodestar/state-transition": "1.39.0-dev.882891d89c",
|
|
146
|
+
"@lodestar/types": "1.39.0-dev.882891d89c",
|
|
147
|
+
"@lodestar/utils": "1.39.0-dev.882891d89c",
|
|
148
|
+
"@lodestar/validator": "1.39.0-dev.882891d89c",
|
|
155
149
|
"@multiformats/multiaddr": "^12.1.3",
|
|
156
150
|
"datastore-core": "^10.0.2",
|
|
157
151
|
"datastore-fs": "^10.0.6",
|
|
@@ -186,5 +180,5 @@
|
|
|
186
180
|
"beacon",
|
|
187
181
|
"blockchain"
|
|
188
182
|
],
|
|
189
|
-
"gitHead": "
|
|
183
|
+
"gitHead": "d61f386f2dfd87549476c464c05867b0d740c366"
|
|
190
184
|
}
|
|
@@ -5,7 +5,7 @@ import {blockToHeader} from "@lodestar/state-transition";
|
|
|
5
5
|
import {RootHex, SignedBeaconBlock, Slot} from "@lodestar/types";
|
|
6
6
|
import {IBeaconChain} from "../../../../chain/interface.js";
|
|
7
7
|
import {GENESIS_SLOT} from "../../../../constants/index.js";
|
|
8
|
-
import {rootHexRegex} from "../../../../
|
|
8
|
+
import {rootHexRegex} from "../../../../execution/engine/utils.js";
|
|
9
9
|
import {ApiError, ValidationError} from "../../errors.js";
|
|
10
10
|
|
|
11
11
|
export function toBeaconHeaderResponse(
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import {BeaconConfig} from "@lodestar/config";
|
|
1
2
|
import {CachedBeaconStateAllForks, Index2PubkeyCache, getBlockSignatureSets} from "@lodestar/state-transition";
|
|
2
3
|
import {IndexedAttestation, SignedBeaconBlock} from "@lodestar/types";
|
|
3
4
|
import {Logger} from "@lodestar/utils";
|
|
@@ -15,6 +16,7 @@ import {ImportBlockOpts} from "./types.js";
|
|
|
15
16
|
* Since all data is known in advance all signatures are verified at once in parallel.
|
|
16
17
|
*/
|
|
17
18
|
export async function verifyBlocksSignatures(
|
|
19
|
+
config: BeaconConfig,
|
|
18
20
|
index2pubkey: Index2PubkeyCache,
|
|
19
21
|
bls: IBlsVerifier,
|
|
20
22
|
logger: Logger,
|
|
@@ -39,7 +41,7 @@ export async function verifyBlocksSignatures(
|
|
|
39
41
|
: //
|
|
40
42
|
// Verify signatures per block to track which block is invalid
|
|
41
43
|
bls.verifySignatureSets(
|
|
42
|
-
getBlockSignatureSets(index2pubkey, preState0, block, indexedAttestationsByBlock[i], {
|
|
44
|
+
getBlockSignatureSets(config, index2pubkey, preState0, block, indexedAttestationsByBlock[i], {
|
|
43
45
|
skipProposerSignature: opts.validProposerSignature,
|
|
44
46
|
})
|
|
45
47
|
);
|
package/src/chain/chain.ts
CHANGED
|
@@ -43,7 +43,6 @@ import {Logger, fromHex, gweiToWei, isErrorAborted, pruneSetToMax, sleep, toRoot
|
|
|
43
43
|
import {ProcessShutdownCallback} from "@lodestar/validator";
|
|
44
44
|
import {GENESIS_EPOCH, ZERO_HASH} from "../constants/index.js";
|
|
45
45
|
import {IBeaconDb} from "../db/index.js";
|
|
46
|
-
import {IEth1ForBlockProduction} from "../eth1/index.js";
|
|
47
46
|
import {BuilderStatus} from "../execution/builder/http.js";
|
|
48
47
|
import {IExecutionBuilder, IExecutionEngine} from "../execution/index.js";
|
|
49
48
|
import {Metrics} from "../metrics/index.js";
|
|
@@ -117,7 +116,6 @@ const DEFAULT_MAX_CACHED_PRODUCED_RESULTS = 4;
|
|
|
117
116
|
export class BeaconChain implements IBeaconChain {
|
|
118
117
|
readonly genesisTime: UintNum64;
|
|
119
118
|
readonly genesisValidatorsRoot: Root;
|
|
120
|
-
readonly eth1: IEth1ForBlockProduction;
|
|
121
119
|
readonly executionEngine: IExecutionEngine;
|
|
122
120
|
readonly executionBuilder?: IExecutionBuilder;
|
|
123
121
|
// Expose config for convenience in modularized functions
|
|
@@ -144,7 +142,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
144
142
|
readonly aggregatedAttestationPool: AggregatedAttestationPool;
|
|
145
143
|
readonly syncCommitteeMessagePool: SyncCommitteeMessagePool;
|
|
146
144
|
readonly syncContributionAndProofPool;
|
|
147
|
-
readonly opPool
|
|
145
|
+
readonly opPool: OpPool;
|
|
148
146
|
|
|
149
147
|
// Gossip seen cache
|
|
150
148
|
readonly seenAttesters = new SeenAttesters();
|
|
@@ -216,7 +214,6 @@ export class BeaconChain implements IBeaconChain {
|
|
|
216
214
|
validatorMonitor,
|
|
217
215
|
anchorState,
|
|
218
216
|
isAnchorStateFinalized,
|
|
219
|
-
eth1,
|
|
220
217
|
executionEngine,
|
|
221
218
|
executionBuilder,
|
|
222
219
|
}: {
|
|
@@ -233,7 +230,6 @@ export class BeaconChain implements IBeaconChain {
|
|
|
233
230
|
validatorMonitor: ValidatorMonitor | null;
|
|
234
231
|
anchorState: BeaconStateAllForks;
|
|
235
232
|
isAnchorStateFinalized: boolean;
|
|
236
|
-
eth1: IEth1ForBlockProduction;
|
|
237
233
|
executionEngine: IExecutionEngine;
|
|
238
234
|
executionBuilder?: IExecutionBuilder;
|
|
239
235
|
}
|
|
@@ -248,7 +244,6 @@ export class BeaconChain implements IBeaconChain {
|
|
|
248
244
|
this.genesisTime = anchorState.genesisTime;
|
|
249
245
|
this.anchorStateLatestBlockSlot = anchorState.latestBlockHeader.slot;
|
|
250
246
|
this.genesisValidatorsRoot = anchorState.genesisValidatorsRoot;
|
|
251
|
-
this.eth1 = eth1;
|
|
252
247
|
this.executionEngine = executionEngine;
|
|
253
248
|
this.executionBuilder = executionBuilder;
|
|
254
249
|
const signal = this.abortController.signal;
|
|
@@ -265,6 +260,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
265
260
|
this.aggregatedAttestationPool = new AggregatedAttestationPool(this.config, metrics);
|
|
266
261
|
this.syncCommitteeMessagePool = new SyncCommitteeMessagePool(config, clock, this.opts?.preaggregateSlotDistance);
|
|
267
262
|
this.syncContributionAndProofPool = new SyncContributionAndProofPool(config, clock, metrics, logger);
|
|
263
|
+
this.opPool = new OpPool(config);
|
|
268
264
|
|
|
269
265
|
this.seenAggregatedAttestations = new SeenAggregatedAttestations(metrics);
|
|
270
266
|
this.seenContributionAndProof = new SeenContributionAndProof(metrics);
|
|
@@ -294,7 +290,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
294
290
|
// Restore state caches
|
|
295
291
|
// anchorState may already by a CachedBeaconState. If so, don't create the cache again, since deserializing all
|
|
296
292
|
// pubkeys takes ~30 seconds for 350k keys (mainnet 2022Q2).
|
|
297
|
-
// When the BeaconStateCache is created in
|
|
293
|
+
// When the BeaconStateCache is created in initializeBeaconStateFromEth1 it may be incorrect. Until we can ensure that
|
|
298
294
|
// it's safe to re-use _ANY_ BeaconStateCache, this option is disabled by default and only used in tests.
|
|
299
295
|
const cachedState =
|
|
300
296
|
isCachedBeaconState(anchorState) && opts.skipCreateStateCacheIfAvailable
|
|
@@ -339,6 +335,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
339
335
|
this.cpStateDatastore = fileDataStore ? new FileCPStateDatastore(dataDir) : new DbCPStateDatastore(this.db);
|
|
340
336
|
checkpointStateCache = new PersistentCheckpointStateCache(
|
|
341
337
|
{
|
|
338
|
+
config,
|
|
342
339
|
metrics,
|
|
343
340
|
logger,
|
|
344
341
|
clock,
|
|
@@ -417,15 +414,6 @@ export class BeaconChain implements IBeaconChain {
|
|
|
417
414
|
signal
|
|
418
415
|
);
|
|
419
416
|
|
|
420
|
-
// Stop polling eth1 data if anchor state is in Electra AND deposit_requests_start_index is reached
|
|
421
|
-
const anchorStateFork = this.config.getForkName(anchorState.slot);
|
|
422
|
-
if (isForkPostElectra(anchorStateFork)) {
|
|
423
|
-
const {eth1DepositIndex, depositRequestsStartIndex} = anchorState as BeaconStateElectra;
|
|
424
|
-
if (eth1DepositIndex === Number(depositRequestsStartIndex)) {
|
|
425
|
-
this.eth1.stopPollingEth1Data();
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
|
|
429
417
|
// always run PrepareNextSlotScheduler except for fork_choice spec tests
|
|
430
418
|
if (!opts?.disablePrepareNextSlot) {
|
|
431
419
|
new PrepareNextSlotScheduler(this, this.config, metrics, this.logger, signal);
|
|
@@ -1320,7 +1308,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1320
1308
|
|
|
1321
1309
|
const postState = this.regen.getStateSync(toRootHex(block.stateRoot)) ?? undefined;
|
|
1322
1310
|
|
|
1323
|
-
return computeBlockRewards(block, preState.clone(), postState?.clone());
|
|
1311
|
+
return computeBlockRewards(this.config, block, preState.clone(), postState?.clone());
|
|
1324
1312
|
}
|
|
1325
1313
|
|
|
1326
1314
|
async getAttestationsRewards(
|
|
@@ -1344,7 +1332,7 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1344
1332
|
throw Error(`State is not in cache for slot ${slot}`);
|
|
1345
1333
|
}
|
|
1346
1334
|
|
|
1347
|
-
const rewards = await computeAttestationsRewards(this.pubkey2index, cachedState, validatorIds);
|
|
1335
|
+
const rewards = await computeAttestationsRewards(this.config, this.pubkey2index, cachedState, validatorIds);
|
|
1348
1336
|
|
|
1349
1337
|
return {rewards, executionOptimistic, finalized};
|
|
1350
1338
|
}
|
|
@@ -1361,6 +1349,6 @@ export class BeaconChain implements IBeaconChain {
|
|
|
1361
1349
|
|
|
1362
1350
|
preState = processSlots(preState, block.slot); // Dial preState's slot to block.slot
|
|
1363
1351
|
|
|
1364
|
-
return computeSyncCommitteeRewards(this.index2pubkey, block, preState.clone(), validatorIds);
|
|
1352
|
+
return computeSyncCommitteeRewards(this.config, this.index2pubkey, block, preState.clone(), validatorIds);
|
|
1365
1353
|
}
|
|
1366
1354
|
}
|
package/src/chain/initState.ts
CHANGED
|
@@ -1,37 +1,11 @@
|
|
|
1
1
|
import {ChainForkConfig} from "@lodestar/config";
|
|
2
2
|
import {ZERO_HASH} from "@lodestar/params";
|
|
3
|
-
import {
|
|
4
|
-
BeaconStateAllForks,
|
|
5
|
-
CachedBeaconStateAllForks,
|
|
6
|
-
computeEpochAtSlot,
|
|
7
|
-
computeStartSlotAtEpoch,
|
|
8
|
-
} from "@lodestar/state-transition";
|
|
3
|
+
import {BeaconStateAllForks, computeEpochAtSlot, computeStartSlotAtEpoch} from "@lodestar/state-transition";
|
|
9
4
|
import {SignedBeaconBlock, ssz} from "@lodestar/types";
|
|
10
5
|
import {Logger, toHex, toRootHex} from "@lodestar/utils";
|
|
11
6
|
import {GENESIS_SLOT} from "../constants/index.js";
|
|
12
7
|
import {IBeaconDb} from "../db/index.js";
|
|
13
|
-
import {Eth1Provider} from "../eth1/index.js";
|
|
14
|
-
import {Eth1Options} from "../eth1/options.js";
|
|
15
8
|
import {Metrics} from "../metrics/index.js";
|
|
16
|
-
import {GenesisBuilder} from "./genesis/genesis.js";
|
|
17
|
-
import {GenesisResult} from "./genesis/interface.js";
|
|
18
|
-
|
|
19
|
-
export async function persistGenesisResult(
|
|
20
|
-
db: IBeaconDb,
|
|
21
|
-
genesisResult: GenesisResult,
|
|
22
|
-
genesisBlock: SignedBeaconBlock
|
|
23
|
-
): Promise<void> {
|
|
24
|
-
await Promise.all([
|
|
25
|
-
db.stateArchive.add(genesisResult.state),
|
|
26
|
-
db.blockArchive.add(genesisBlock),
|
|
27
|
-
db.depositDataRoot.putList(genesisResult.depositTree.getAllReadonlyValues()),
|
|
28
|
-
db.eth1Data.put(genesisResult.block.timestamp, {
|
|
29
|
-
...genesisResult.block,
|
|
30
|
-
depositCount: genesisResult.depositTree.length,
|
|
31
|
-
depositRoot: genesisResult.depositTree.hashTreeRoot(),
|
|
32
|
-
}),
|
|
33
|
-
]);
|
|
34
|
-
}
|
|
35
9
|
|
|
36
10
|
export async function persistAnchorState(
|
|
37
11
|
config: ChainForkConfig,
|
|
@@ -75,76 +49,6 @@ export function createGenesisBlock(config: ChainForkConfig, genesisState: Beacon
|
|
|
75
49
|
return genesisBlock;
|
|
76
50
|
}
|
|
77
51
|
|
|
78
|
-
/**
|
|
79
|
-
* Initialize and persist a genesis state and related data
|
|
80
|
-
*/
|
|
81
|
-
export async function initStateFromEth1({
|
|
82
|
-
config,
|
|
83
|
-
db,
|
|
84
|
-
logger,
|
|
85
|
-
opts,
|
|
86
|
-
signal,
|
|
87
|
-
}: {
|
|
88
|
-
config: ChainForkConfig;
|
|
89
|
-
db: IBeaconDb;
|
|
90
|
-
logger: Logger;
|
|
91
|
-
opts: Eth1Options;
|
|
92
|
-
signal: AbortSignal;
|
|
93
|
-
}): Promise<CachedBeaconStateAllForks> {
|
|
94
|
-
logger.info("Listening to eth1 for genesis state");
|
|
95
|
-
|
|
96
|
-
const statePreGenesis = await db.preGenesisState.get();
|
|
97
|
-
const depositTree = await db.depositDataRoot.getDepositRootTree();
|
|
98
|
-
const lastProcessedBlockNumber = await db.preGenesisStateLastProcessedBlock.get();
|
|
99
|
-
|
|
100
|
-
const builder = new GenesisBuilder({
|
|
101
|
-
config,
|
|
102
|
-
eth1Provider: new Eth1Provider(config, {...opts, logger}, signal),
|
|
103
|
-
logger,
|
|
104
|
-
signal,
|
|
105
|
-
pendingStatus:
|
|
106
|
-
statePreGenesis && depositTree !== undefined && lastProcessedBlockNumber != null
|
|
107
|
-
? {state: statePreGenesis, depositTree, lastProcessedBlockNumber}
|
|
108
|
-
: undefined,
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
try {
|
|
112
|
-
const genesisResult = await builder.waitForGenesis();
|
|
113
|
-
|
|
114
|
-
// Note: .hashTreeRoot() automatically commits()
|
|
115
|
-
const genesisBlock = createGenesisBlock(config, genesisResult.state);
|
|
116
|
-
const types = config.getForkTypes(GENESIS_SLOT);
|
|
117
|
-
const stateRoot = genesisResult.state.hashTreeRoot();
|
|
118
|
-
const blockRoot = types.BeaconBlock.hashTreeRoot(genesisBlock.message);
|
|
119
|
-
|
|
120
|
-
logger.info("Initializing genesis state", {
|
|
121
|
-
stateRoot: toRootHex(stateRoot),
|
|
122
|
-
blockRoot: toRootHex(blockRoot),
|
|
123
|
-
validatorCount: genesisResult.state.validators.length,
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
await persistGenesisResult(db, genesisResult, genesisBlock);
|
|
127
|
-
|
|
128
|
-
logger.verbose("Clearing pending genesis state if any");
|
|
129
|
-
await db.preGenesisState.delete();
|
|
130
|
-
await db.preGenesisStateLastProcessedBlock.delete();
|
|
131
|
-
|
|
132
|
-
return genesisResult.state;
|
|
133
|
-
} catch (e) {
|
|
134
|
-
if (builder.lastProcessedBlockNumber != null) {
|
|
135
|
-
logger.info("Persisting genesis state", {block: builder.lastProcessedBlockNumber});
|
|
136
|
-
|
|
137
|
-
// Commit changed before serializing
|
|
138
|
-
builder.state.commit();
|
|
139
|
-
|
|
140
|
-
await db.preGenesisState.put(builder.state);
|
|
141
|
-
await db.depositDataRoot.putList(builder.depositTree.getAllReadonlyValues());
|
|
142
|
-
await db.preGenesisStateLastProcessedBlock.put(builder.lastProcessedBlockNumber);
|
|
143
|
-
}
|
|
144
|
-
throw e;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
52
|
/**
|
|
149
53
|
* Restore the latest beacon state from db
|
|
150
54
|
*/
|
package/src/chain/interface.ts
CHANGED
|
@@ -25,7 +25,6 @@ import {
|
|
|
25
25
|
phase0,
|
|
26
26
|
} from "@lodestar/types";
|
|
27
27
|
import {Logger} from "@lodestar/utils";
|
|
28
|
-
import {IEth1ForBlockProduction} from "../eth1/index.js";
|
|
29
28
|
import {IExecutionBuilder, IExecutionEngine} from "../execution/index.js";
|
|
30
29
|
import {Metrics} from "../metrics/metrics.js";
|
|
31
30
|
import {BufferPool} from "../util/bufferPool.js";
|
|
@@ -88,7 +87,6 @@ export interface IBeaconChain {
|
|
|
88
87
|
readonly genesisTime: UintNum64;
|
|
89
88
|
readonly genesisValidatorsRoot: Root;
|
|
90
89
|
readonly earliestAvailableSlot: Slot;
|
|
91
|
-
readonly eth1: IEth1ForBlockProduction;
|
|
92
90
|
readonly executionEngine: IExecutionEngine;
|
|
93
91
|
readonly executionBuilder?: IExecutionBuilder;
|
|
94
92
|
// Expose config for convenience in modularized functions
|
|
@@ -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
|
|
|
@@ -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,
|
|
@@ -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
|
}
|
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
} from "@lodestar/types";
|
|
46
46
|
import {Logger, sleep, toHex, toPubkeyHex, toRootHex} from "@lodestar/utils";
|
|
47
47
|
import {ZERO_HASH_HEX} from "../../constants/index.js";
|
|
48
|
-
import {numToQuantity} from "../../
|
|
48
|
+
import {numToQuantity} from "../../execution/engine/utils.js";
|
|
49
49
|
import {
|
|
50
50
|
IExecutionBuilder,
|
|
51
51
|
IExecutionEngine,
|
|
@@ -78,7 +78,6 @@ export enum BlockProductionStep {
|
|
|
78
78
|
voluntaryExits = "voluntaryExits",
|
|
79
79
|
blsToExecutionChanges = "blsToExecutionChanges",
|
|
80
80
|
attestations = "attestations",
|
|
81
|
-
eth1DataAndDeposits = "eth1DataAndDeposits",
|
|
82
81
|
syncAggregate = "syncAggregate",
|
|
83
82
|
executionPayload = "executionPayload",
|
|
84
83
|
}
|
|
@@ -166,7 +165,7 @@ export async function produceBlockBody<T extends BlockType>(
|
|
|
166
165
|
// even though shouldOverrideBuilder is relevant for the engine response, for simplicity of typing
|
|
167
166
|
// we just return it undefined for the builder which anyway doesn't get consumed downstream
|
|
168
167
|
let shouldOverrideBuilder: boolean | undefined;
|
|
169
|
-
const fork =
|
|
168
|
+
const fork = this.config.getForkName(blockSlot);
|
|
170
169
|
const produceResult = {
|
|
171
170
|
type: blockType,
|
|
172
171
|
fork,
|
|
@@ -645,7 +644,7 @@ export async function produceCommonBlockBody<T extends BlockType>(
|
|
|
645
644
|
? this.metrics?.executionBlockProductionTimeSteps
|
|
646
645
|
: this.metrics?.builderBlockProductionTimeSteps;
|
|
647
646
|
|
|
648
|
-
const fork =
|
|
647
|
+
const fork = this.config.getForkName(slot);
|
|
649
648
|
|
|
650
649
|
// TODO:
|
|
651
650
|
// Iterate through the naive aggregation pool and ensure all the attestations from there
|
|
@@ -667,20 +666,17 @@ export async function produceCommonBlockBody<T extends BlockType>(
|
|
|
667
666
|
step: BlockProductionStep.attestations,
|
|
668
667
|
});
|
|
669
668
|
|
|
670
|
-
const endEth1DataAndDeposits = stepsMetrics?.startTimer();
|
|
671
|
-
const {eth1Data, deposits} = await this.eth1.getEth1DataAndDeposits(currentState);
|
|
672
|
-
endEth1DataAndDeposits?.({
|
|
673
|
-
step: BlockProductionStep.eth1DataAndDeposits,
|
|
674
|
-
});
|
|
675
|
-
|
|
676
669
|
const blockBody: Omit<CommonBlockBody, "blsToExecutionChanges" | "syncAggregate"> = {
|
|
677
670
|
randaoReveal,
|
|
678
671
|
graffiti,
|
|
679
|
-
|
|
672
|
+
// Eth1 data voting is no longer required since electra
|
|
673
|
+
eth1Data: currentState.eth1Data,
|
|
680
674
|
proposerSlashings,
|
|
681
675
|
attesterSlashings,
|
|
682
676
|
attestations,
|
|
683
|
-
deposits,
|
|
677
|
+
// Since electra, deposits are processed by the execution layer,
|
|
678
|
+
// we no longer support handling deposits from earlier forks.
|
|
679
|
+
deposits: [],
|
|
684
680
|
voluntaryExits,
|
|
685
681
|
};
|
|
686
682
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {PubkeyIndexMap} from "@chainsafe/pubkey-index-map";
|
|
2
2
|
import {routes} from "@lodestar/api";
|
|
3
|
+
import {BeaconConfig} from "@lodestar/config";
|
|
3
4
|
import {
|
|
4
5
|
EFFECTIVE_BALANCE_INCREMENT,
|
|
5
6
|
ForkName,
|
|
@@ -38,11 +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(
|
|
42
|
+
config: BeaconConfig,
|
|
41
43
|
pubkey2index: PubkeyIndexMap,
|
|
42
44
|
state: CachedBeaconStateAllForks,
|
|
43
45
|
validatorIds?: (ValidatorIndex | string)[]
|
|
44
46
|
): Promise<AttestationsRewards> {
|
|
45
|
-
const fork =
|
|
47
|
+
const fork = config.getForkName(state.slot);
|
|
46
48
|
if (fork === ForkName.phase0) {
|
|
47
49
|
throw Error("Unsupported fork. Attestations rewards calculation is not available in phase0");
|
|
48
50
|
}
|
|
@@ -50,8 +52,13 @@ export async function computeAttestationsRewards(
|
|
|
50
52
|
const stateAltair = state as CachedBeaconStateAltair;
|
|
51
53
|
const transitionCache = beforeProcessEpoch(stateAltair);
|
|
52
54
|
|
|
53
|
-
const [idealRewards, penalties] = computeIdealAttestationsRewardsAndPenaltiesAltair(
|
|
55
|
+
const [idealRewards, penalties] = computeIdealAttestationsRewardsAndPenaltiesAltair(
|
|
56
|
+
config,
|
|
57
|
+
stateAltair,
|
|
58
|
+
transitionCache
|
|
59
|
+
);
|
|
54
60
|
const totalRewards = computeTotalAttestationsRewardsAltair(
|
|
61
|
+
config,
|
|
55
62
|
pubkey2index,
|
|
56
63
|
stateAltair,
|
|
57
64
|
transitionCache,
|
|
@@ -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,7 @@ 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,
|
|
142
151
|
pubkey2index: PubkeyIndexMap,
|
|
143
152
|
state: CachedBeaconStateAltair,
|
|
144
153
|
transitionCache: EpochTransitionCache,
|
|
@@ -148,7 +157,7 @@ function computeTotalAttestationsRewardsAltair(
|
|
|
148
157
|
): TotalAttestationsReward[] {
|
|
149
158
|
const rewards = [];
|
|
150
159
|
const {flags} = transitionCache;
|
|
151
|
-
const {epochCtx
|
|
160
|
+
const {epochCtx} = state;
|
|
152
161
|
const validatorIndices = validatorIds
|
|
153
162
|
.map((id) => (typeof id === "number" ? id : pubkey2index.get(fromHex(id))))
|
|
154
163
|
.filter((index) => index !== undefined); // Validator indices to include in the result
|