@lodestar/beacon-node 1.38.0 → 1.39.0-dev.39dac0f03d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/impl/beacon/blocks/utils.js +1 -1
- package/lib/api/impl/beacon/blocks/utils.js.map +1 -1
- package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/state/index.js +4 -5
- package/lib/api/impl/beacon/state/index.js.map +1 -1
- package/lib/api/impl/validator/index.js +1 -1
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +1 -21
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +1 -6
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +9 -128
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts +3 -2
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.js +2 -2
- package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
- package/lib/chain/chain.d.ts +1 -4
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +10 -28
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/initState.d.ts +1 -14
- package/lib/chain/initState.d.ts.map +1 -1
- package/lib/chain/initState.js +1 -62
- package/lib/chain/initState.js.map +1 -1
- package/lib/chain/interface.d.ts +0 -2
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts +4 -4
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +4 -4
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/opPool.d.ts +3 -0
- package/lib/chain/opPools/opPool.d.ts.map +1 -1
- package/lib/chain/opPools/opPool.js +9 -8
- package/lib/chain/opPools/opPool.js.map +1 -1
- package/lib/chain/options.d.ts +0 -4
- package/lib/chain/options.d.ts.map +1 -1
- package/lib/chain/options.js +0 -2
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/prepareNextSlot.d.ts +0 -4
- package/lib/chain/prepareNextSlot.d.ts.map +1 -1
- package/lib/chain/prepareNextSlot.js +2 -22
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +2 -22
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +32 -98
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/rewards/attestationsRewards.d.ts +3 -2
- package/lib/chain/rewards/attestationsRewards.d.ts.map +1 -1
- package/lib/chain/rewards/attestationsRewards.js +9 -9
- package/lib/chain/rewards/attestationsRewards.js.map +1 -1
- package/lib/chain/rewards/blockRewards.d.ts +2 -1
- package/lib/chain/rewards/blockRewards.d.ts.map +1 -1
- package/lib/chain/rewards/blockRewards.js +5 -5
- package/lib/chain/rewards/blockRewards.js.map +1 -1
- package/lib/chain/rewards/syncCommitteeRewards.d.ts +3 -2
- package/lib/chain/rewards/syncCommitteeRewards.d.ts.map +1 -1
- package/lib/chain/rewards/syncCommitteeRewards.js +2 -3
- package/lib/chain/rewards/syncCommitteeRewards.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +4 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.js +4 -2
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/validation/attesterSlashing.js +2 -2
- package/lib/chain/validation/attesterSlashing.js.map +1 -1
- package/lib/chain/validation/blobSidecar.d.ts.map +1 -1
- package/lib/chain/validation/blobSidecar.js +2 -2
- package/lib/chain/validation/blobSidecar.js.map +1 -1
- package/lib/chain/validation/block.js +1 -1
- package/lib/chain/validation/block.js.map +1 -1
- package/lib/chain/validation/blsToExecutionChange.js +1 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.js +2 -2
- package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
- package/lib/chain/validation/proposerSlashing.js +1 -1
- package/lib/chain/validation/proposerSlashing.js.map +1 -1
- package/lib/chain/validation/signatureSets/aggregateAndProof.js +1 -1
- package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.d.ts +3 -2
- package/lib/chain/validation/signatureSets/contributionAndProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/contributionAndProof.js +3 -4
- package/lib/chain/validation/signatureSets/contributionAndProof.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommittee.d.ts +3 -2
- package/lib/chain/validation/signatureSets/syncCommittee.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommittee.js +3 -3
- package/lib/chain/validation/signatureSets/syncCommittee.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts +2 -1
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.js +2 -2
- package/lib/chain/validation/signatureSets/syncCommitteeContribution.js.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts +3 -2
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.d.ts.map +1 -1
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js +2 -3
- package/lib/chain/validation/signatureSets/syncCommitteeSelectionProof.js.map +1 -1
- package/lib/chain/validation/syncCommittee.js +1 -1
- package/lib/chain/validation/syncCommittee.js.map +1 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.js +5 -4
- package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
- package/lib/chain/validation/voluntaryExit.js +1 -1
- package/lib/chain/validation/voluntaryExit.js.map +1 -1
- package/lib/db/beacon.d.ts +3 -7
- package/lib/db/beacon.d.ts.map +1 -1
- package/lib/db/beacon.js +33 -12
- package/lib/db/beacon.js.map +1 -1
- package/lib/db/buckets.d.ts +12 -6
- package/lib/db/buckets.d.ts.map +1 -1
- package/lib/db/buckets.js +6 -1
- package/lib/db/buckets.js.map +1 -1
- package/lib/db/interface.d.ts +2 -7
- package/lib/db/interface.d.ts.map +1 -1
- package/lib/db/repositories/index.d.ts +0 -3
- package/lib/db/repositories/index.d.ts.map +1 -1
- package/lib/db/repositories/index.js +0 -3
- package/lib/db/repositories/index.js.map +1 -1
- package/lib/execution/engine/http.d.ts +5 -13
- package/lib/execution/engine/http.d.ts.map +1 -1
- package/lib/execution/engine/http.js +6 -15
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/index.d.ts.map +1 -1
- package/lib/execution/engine/index.js +1 -1
- package/lib/execution/engine/index.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +1 -1
- package/lib/execution/engine/interface.d.ts.map +1 -1
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.d.ts +1 -1
- package/lib/execution/engine/jsonRpcHttpClient.d.ts.map +1 -0
- package/lib/execution/engine/jsonRpcHttpClient.js.map +1 -0
- package/lib/execution/engine/jwt.d.ts.map +1 -0
- package/lib/execution/engine/jwt.js.map +1 -0
- package/lib/execution/engine/mock.d.ts +2 -6
- package/lib/execution/engine/mock.d.ts.map +1 -1
- package/lib/execution/engine/mock.js +4 -15
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/payloadIdCache.d.ts +1 -1
- package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
- package/lib/execution/engine/types.d.ts +1 -1
- package/lib/execution/engine/types.d.ts.map +1 -1
- package/lib/execution/engine/types.js +1 -1
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/execution/engine/utils.d.ts +64 -2
- package/lib/execution/engine/utils.d.ts.map +1 -1
- package/lib/execution/engine/utils.js +91 -2
- package/lib/execution/engine/utils.js.map +1 -1
- package/lib/index.d.ts +1 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -2
- package/lib/index.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +0 -49
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +0 -134
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/core/events.d.ts +1 -1
- package/lib/network/core/events.d.ts.map +1 -1
- package/lib/network/core/events.js +1 -1
- package/lib/network/core/events.js.map +1 -1
- package/lib/network/events.d.ts +6 -1
- package/lib/network/events.d.ts.map +1 -1
- package/lib/network/events.js +7 -1
- package/lib/network/events.js.map +1 -1
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js +10 -9
- package/lib/node/nodejs.js.map +1 -1
- package/lib/node/notifier.d.ts.map +1 -1
- package/lib/node/notifier.js +0 -13
- package/lib/node/notifier.js.map +1 -1
- package/lib/node/options.d.ts +0 -2
- package/lib/node/options.d.ts.map +1 -1
- package/lib/node/options.js +0 -2
- package/lib/node/options.js.map +1 -1
- package/lib/node/utils/interop/deposits.d.ts +2 -1
- package/lib/node/utils/interop/deposits.d.ts.map +1 -1
- package/lib/node/utils/interop/deposits.js.map +1 -1
- package/lib/node/utils/interop/state.d.ts +1 -1
- package/lib/node/utils/interop/state.d.ts.map +1 -1
- package/lib/node/utils/state.d.ts +1 -7
- package/lib/node/utils/state.d.ts.map +1 -1
- package/lib/node/utils/state.js +1 -14
- package/lib/node/utils/state.js.map +1 -1
- package/lib/sync/backfill/backfill.d.ts.map +1 -1
- package/lib/sync/backfill/backfill.js +2 -2
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/backfill/verify.d.ts +2 -2
- package/lib/sync/backfill/verify.d.ts.map +1 -1
- package/lib/sync/backfill/verify.js +3 -3
- package/lib/sync/backfill/verify.js.map +1 -1
- package/lib/util/workerEvents.d.ts +1 -6
- package/lib/util/workerEvents.d.ts.map +1 -1
- package/lib/util/workerEvents.js +8 -8
- package/lib/util/workerEvents.js.map +1 -1
- package/package.json +14 -21
- package/src/api/impl/beacon/blocks/utils.ts +1 -1
- package/src/api/impl/beacon/state/index.ts +4 -5
- package/src/api/impl/validator/index.ts +1 -1
- package/src/chain/blocks/verifyBlock.ts +3 -24
- package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -161
- package/src/chain/blocks/verifyBlocksSignatures.ts +5 -2
- package/src/chain/chain.ts +9 -32
- package/src/chain/initState.ts +1 -97
- package/src/chain/interface.ts +0 -2
- package/src/chain/opPools/aggregatedAttestationPool.ts +7 -7
- package/src/chain/opPools/opPool.ts +8 -8
- package/src/chain/options.ts +0 -6
- package/src/chain/prepareNextSlot.ts +2 -29
- package/src/chain/produceBlock/produceBlockBody.ts +33 -132
- package/src/chain/rewards/attestationsRewards.ts +18 -8
- package/src/chain/rewards/blockRewards.ts +6 -3
- package/src/chain/rewards/syncCommitteeRewards.ts +5 -3
- package/src/chain/stateCache/persistentCheckpointsCache.ts +15 -2
- package/src/chain/validation/attesterSlashing.ts +2 -2
- package/src/chain/validation/blobSidecar.ts +10 -2
- package/src/chain/validation/block.ts +1 -1
- package/src/chain/validation/blsToExecutionChange.ts +1 -1
- package/src/chain/validation/dataColumnSidecar.ts +6 -1
- package/src/chain/validation/proposerSlashing.ts +1 -1
- package/src/chain/validation/signatureSets/aggregateAndProof.ts +1 -1
- package/src/chain/validation/signatureSets/contributionAndProof.ts +6 -3
- package/src/chain/validation/signatureSets/syncCommittee.ts +6 -2
- package/src/chain/validation/signatureSets/syncCommitteeContribution.ts +3 -1
- package/src/chain/validation/signatureSets/syncCommitteeSelectionProof.ts +5 -2
- package/src/chain/validation/syncCommittee.ts +1 -1
- package/src/chain/validation/syncCommitteeContributionAndProof.ts +10 -6
- package/src/chain/validation/voluntaryExit.ts +1 -1
- package/src/db/beacon.ts +38 -16
- package/src/db/buckets.ts +12 -7
- package/src/db/interface.ts +2 -13
- package/src/db/repositories/index.ts +0 -3
- package/src/execution/engine/http.ts +12 -21
- package/src/execution/engine/index.ts +1 -1
- package/src/execution/engine/interface.ts +1 -1
- package/src/{eth1/provider → execution/engine}/jsonRpcHttpClient.ts +1 -1
- package/src/execution/engine/mock.ts +4 -17
- package/src/execution/engine/payloadIdCache.ts +1 -1
- package/src/execution/engine/types.ts +9 -9
- package/src/execution/engine/utils.ts +111 -5
- package/src/index.ts +1 -2
- package/src/metrics/metrics/lodestar.ts +0 -144
- package/src/network/core/events.ts +1 -1
- package/src/network/events.ts +7 -1
- package/src/node/nodejs.ts +11 -9
- package/src/node/notifier.ts +0 -16
- package/src/node/options.ts +0 -3
- package/src/node/utils/interop/deposits.ts +3 -1
- package/src/node/utils/interop/state.ts +1 -1
- package/src/node/utils/state.ts +3 -18
- package/src/sync/backfill/backfill.ts +14 -2
- package/src/sync/backfill/verify.ts +10 -2
- package/src/util/workerEvents.ts +9 -8
- package/lib/chain/genesis/genesis.d.ts +0 -51
- package/lib/chain/genesis/genesis.d.ts.map +0 -1
- package/lib/chain/genesis/genesis.js +0 -123
- package/lib/chain/genesis/genesis.js.map +0 -1
- package/lib/chain/genesis/interface.d.ts +0 -13
- package/lib/chain/genesis/interface.d.ts.map +0 -1
- package/lib/chain/genesis/interface.js +0 -2
- package/lib/chain/genesis/interface.js.map +0 -1
- package/lib/db/repositories/depositDataRoot.d.ts +0 -22
- package/lib/db/repositories/depositDataRoot.d.ts.map +0 -1
- package/lib/db/repositories/depositDataRoot.js +0 -62
- package/lib/db/repositories/depositDataRoot.js.map +0 -1
- package/lib/db/repositories/depositEvent.d.ts +0 -13
- package/lib/db/repositories/depositEvent.d.ts.map +0 -1
- package/lib/db/repositories/depositEvent.js +0 -27
- package/lib/db/repositories/depositEvent.js.map +0 -1
- package/lib/db/repositories/eth1Data.d.ts +0 -13
- package/lib/db/repositories/eth1Data.d.ts.map +0 -1
- package/lib/db/repositories/eth1Data.js +0 -26
- package/lib/db/repositories/eth1Data.js.map +0 -1
- package/lib/db/single/index.d.ts +0 -3
- package/lib/db/single/index.d.ts.map +0 -1
- package/lib/db/single/index.js +0 -3
- package/lib/db/single/index.js.map +0 -1
- package/lib/db/single/preGenesisState.d.ts +0 -16
- package/lib/db/single/preGenesisState.d.ts.map +0 -1
- package/lib/db/single/preGenesisState.js +0 -29
- package/lib/db/single/preGenesisState.js.map +0 -1
- package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts +0 -14
- package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts.map +0 -1
- package/lib/db/single/preGenesisStateLastProcessedBlock.js +0 -27
- package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +0 -1
- package/lib/eth1/errors.d.ts +0 -66
- package/lib/eth1/errors.d.ts.map +0 -1
- package/lib/eth1/errors.js +0 -27
- package/lib/eth1/errors.js.map +0 -1
- package/lib/eth1/eth1DataCache.d.ts +0 -19
- package/lib/eth1/eth1DataCache.d.ts.map +0 -1
- package/lib/eth1/eth1DataCache.js +0 -19
- package/lib/eth1/eth1DataCache.js.map +0 -1
- package/lib/eth1/eth1DepositDataTracker.d.ts +0 -80
- package/lib/eth1/eth1DepositDataTracker.d.ts.map +0 -1
- package/lib/eth1/eth1DepositDataTracker.js +0 -317
- package/lib/eth1/eth1DepositDataTracker.js.map +0 -1
- package/lib/eth1/eth1DepositsCache.d.ts +0 -42
- package/lib/eth1/eth1DepositsCache.d.ts.map +0 -1
- package/lib/eth1/eth1DepositsCache.js +0 -119
- package/lib/eth1/eth1DepositsCache.js.map +0 -1
- package/lib/eth1/eth1MergeBlockTracker.d.ts +0 -65
- package/lib/eth1/eth1MergeBlockTracker.d.ts.map +0 -1
- package/lib/eth1/eth1MergeBlockTracker.js +0 -262
- package/lib/eth1/eth1MergeBlockTracker.js.map +0 -1
- package/lib/eth1/index.d.ts +0 -46
- package/lib/eth1/index.d.ts.map +0 -1
- package/lib/eth1/index.js +0 -121
- package/lib/eth1/index.js.map +0 -1
- package/lib/eth1/interface.d.ts +0 -112
- package/lib/eth1/interface.d.ts.map +0 -1
- package/lib/eth1/interface.js +0 -8
- package/lib/eth1/interface.js.map +0 -1
- package/lib/eth1/options.d.ts +0 -22
- package/lib/eth1/options.d.ts.map +0 -1
- package/lib/eth1/options.js +0 -8
- package/lib/eth1/options.js.map +0 -1
- package/lib/eth1/provider/eth1Provider.d.ts +0 -39
- package/lib/eth1/provider/eth1Provider.d.ts.map +0 -1
- package/lib/eth1/provider/eth1Provider.js +0 -147
- package/lib/eth1/provider/eth1Provider.js.map +0 -1
- package/lib/eth1/provider/jsonRpcHttpClient.d.ts.map +0 -1
- package/lib/eth1/provider/jsonRpcHttpClient.js.map +0 -1
- package/lib/eth1/provider/jwt.d.ts.map +0 -1
- package/lib/eth1/provider/jwt.js.map +0 -1
- package/lib/eth1/provider/utils.d.ts +0 -65
- package/lib/eth1/provider/utils.d.ts.map +0 -1
- package/lib/eth1/provider/utils.js +0 -120
- package/lib/eth1/provider/utils.js.map +0 -1
- package/lib/eth1/stream.d.ts +0 -15
- package/lib/eth1/stream.d.ts.map +0 -1
- package/lib/eth1/stream.js +0 -54
- package/lib/eth1/stream.js.map +0 -1
- package/lib/eth1/utils/depositContract.d.ts +0 -14
- package/lib/eth1/utils/depositContract.d.ts.map +0 -1
- package/lib/eth1/utils/depositContract.js +0 -33
- package/lib/eth1/utils/depositContract.js.map +0 -1
- package/lib/eth1/utils/deposits.d.ts +0 -8
- package/lib/eth1/utils/deposits.d.ts.map +0 -1
- package/lib/eth1/utils/deposits.js +0 -47
- package/lib/eth1/utils/deposits.js.map +0 -1
- package/lib/eth1/utils/eth1Data.d.ts +0 -22
- package/lib/eth1/utils/eth1Data.d.ts.map +0 -1
- package/lib/eth1/utils/eth1Data.js +0 -77
- package/lib/eth1/utils/eth1Data.js.map +0 -1
- package/lib/eth1/utils/eth1DepositEvent.d.ts +0 -7
- package/lib/eth1/utils/eth1DepositEvent.d.ts.map +0 -1
- package/lib/eth1/utils/eth1DepositEvent.js +0 -13
- package/lib/eth1/utils/eth1DepositEvent.js.map +0 -1
- package/lib/eth1/utils/eth1Vote.d.ts +0 -17
- package/lib/eth1/utils/eth1Vote.d.ts.map +0 -1
- package/lib/eth1/utils/eth1Vote.js +0 -111
- package/lib/eth1/utils/eth1Vote.js.map +0 -1
- package/lib/eth1/utils/groupDepositEventsByBlock.d.ts +0 -9
- package/lib/eth1/utils/groupDepositEventsByBlock.d.ts.map +0 -1
- package/lib/eth1/utils/groupDepositEventsByBlock.js +0 -17
- package/lib/eth1/utils/groupDepositEventsByBlock.js.map +0 -1
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts +0 -10
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.d.ts.map +0 -1
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js +0 -14
- package/lib/eth1/utils/optimizeNextBlockDiffForGenesis.js.map +0 -1
- package/src/chain/genesis/genesis.ts +0 -190
- package/src/chain/genesis/interface.ts +0 -14
- package/src/db/repositories/depositDataRoot.ts +0 -80
- package/src/db/repositories/depositEvent.ts +0 -32
- package/src/db/repositories/eth1Data.ts +0 -33
- package/src/db/single/index.ts +0 -2
- package/src/db/single/preGenesisState.ts +0 -37
- package/src/db/single/preGenesisStateLastProcessedBlock.ts +0 -34
- package/src/eth1/errors.ts +0 -40
- package/src/eth1/eth1DataCache.ts +0 -26
- package/src/eth1/eth1DepositDataTracker.ts +0 -410
- package/src/eth1/eth1DepositsCache.ts +0 -141
- package/src/eth1/eth1MergeBlockTracker.ts +0 -328
- package/src/eth1/index.ts +0 -157
- package/src/eth1/interface.ts +0 -131
- package/src/eth1/options.ts +0 -28
- package/src/eth1/provider/eth1Provider.ts +0 -229
- package/src/eth1/provider/utils.ts +0 -136
- package/src/eth1/stream.ts +0 -75
- package/src/eth1/utils/depositContract.ts +0 -37
- package/src/eth1/utils/deposits.ts +0 -70
- package/src/eth1/utils/eth1Data.ts +0 -100
- package/src/eth1/utils/eth1DepositEvent.ts +0 -12
- package/src/eth1/utils/eth1Vote.ts +0 -142
- package/src/eth1/utils/groupDepositEventsByBlock.ts +0 -19
- package/src/eth1/utils/optimizeNextBlockDiffForGenesis.ts +0 -18
- /package/lib/{eth1/provider → execution/engine}/jsonRpcHttpClient.js +0 -0
- /package/lib/{eth1/provider → execution/engine}/jwt.d.ts +0 -0
- /package/lib/{eth1/provider → execution/engine}/jwt.js +0 -0
- /package/src/{eth1/provider → execution/engine}/jwt.ts +0 -0
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { byteArrayEquals } from "@chainsafe/ssz";
|
|
2
|
-
import { ssz } from "@lodestar/types";
|
|
3
|
-
import { Eth1Error, Eth1ErrorCode } from "./errors.js";
|
|
4
|
-
import { getDepositsWithProofs } from "./utils/deposits.js";
|
|
5
|
-
import { getEth1DataForBlocks } from "./utils/eth1Data.js";
|
|
6
|
-
import { assertConsecutiveDeposits } from "./utils/eth1DepositEvent.js";
|
|
7
|
-
export class Eth1DepositsCache {
|
|
8
|
-
unsafeAllowDepositDataOverwrite;
|
|
9
|
-
db;
|
|
10
|
-
config;
|
|
11
|
-
constructor(opts, config, db) {
|
|
12
|
-
this.config = config;
|
|
13
|
-
this.db = db;
|
|
14
|
-
this.unsafeAllowDepositDataOverwrite = opts.unsafeAllowDepositDataOverwrite ?? false;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Returns a list of `Deposit` objects, within the given deposit index `range`.
|
|
18
|
-
*
|
|
19
|
-
* The `depositCount` is used to generate the proofs for the `Deposits`. For example, if we
|
|
20
|
-
* have 100 proofs, but the Ethereum Consensus chain only acknowledges 50 of them, we must produce our
|
|
21
|
-
* proofs with respect to a tree size of 50.
|
|
22
|
-
*/
|
|
23
|
-
async get(indexRange, eth1Data) {
|
|
24
|
-
const depositEvents = await this.db.depositEvent.values(indexRange);
|
|
25
|
-
const depositRootTree = await this.db.depositDataRoot.getDepositRootTree();
|
|
26
|
-
return getDepositsWithProofs(depositEvents, depositRootTree, eth1Data);
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Add log to cache
|
|
30
|
-
* This function enforces that `logs` are imported one-by-one with consecutive indexes
|
|
31
|
-
*/
|
|
32
|
-
async add(depositEvents) {
|
|
33
|
-
assertConsecutiveDeposits(depositEvents);
|
|
34
|
-
const lastLog = await this.db.depositEvent.lastValue();
|
|
35
|
-
const firstEvent = depositEvents[0];
|
|
36
|
-
// Check, validate and skip if we got any deposit events already present in DB
|
|
37
|
-
// This can happen if the remote eth1/EL resets its head in these four scenarios:
|
|
38
|
-
// 1. Remote eth1/EL resynced/restarted from head behind its previous head pre-merge
|
|
39
|
-
// 2. In a post merge scenario, Lodestar restarted from finalized state from DB which
|
|
40
|
-
// generally is a few epochs behind the last synced head. This causes eth1 tracker to reset
|
|
41
|
-
// and refetch the deposits as the lodestar syncs further along (Post merge there is 1-1
|
|
42
|
-
// correspondence between EL and CL blocks)
|
|
43
|
-
// 3. The EL reorged beyond the eth1 follow distance.
|
|
44
|
-
//
|
|
45
|
-
// While 1. & 2. are benign and we handle them below by checking if the duplicate log fetched
|
|
46
|
-
// is same as one written in DB. Refer to this issue for some data dump of how this happens
|
|
47
|
-
// https://github.com/ChainSafe/lodestar/issues/3674
|
|
48
|
-
//
|
|
49
|
-
// If the duplicate log fetched is not same as written in DB then its probablu scenario 3.
|
|
50
|
-
// which would be a catastrophic event for the network (or we messed up real bad!!!).
|
|
51
|
-
//
|
|
52
|
-
// So we provide for a way to overwrite this log without deleting full db via
|
|
53
|
-
// --unsafeAllowDepositDataOverwrite cli flag which will just overwrite the previous tracker data
|
|
54
|
-
// if any. This option as indicated by its name is unsafe and to be only used if you know what
|
|
55
|
-
// you are doing.
|
|
56
|
-
if (lastLog !== null && firstEvent !== undefined) {
|
|
57
|
-
const newIndex = firstEvent.index;
|
|
58
|
-
const lastLogIndex = lastLog.index;
|
|
59
|
-
if (!this.unsafeAllowDepositDataOverwrite && firstEvent.index <= lastLog.index) {
|
|
60
|
-
// lastLogIndex - newIndex + 1 events are duplicate since this is a consecutive log
|
|
61
|
-
// as asserted by assertConsecutiveDeposits. Splice those events out from depositEvents.
|
|
62
|
-
const skipEvents = depositEvents.splice(0, lastLogIndex - newIndex + 1);
|
|
63
|
-
// After splicing skipEvents will contain duplicate events to be checked and validated
|
|
64
|
-
// and rest of the remaining events in depositEvents could be safely written to DB and
|
|
65
|
-
// move the tracker along.
|
|
66
|
-
for (const depositEvent of skipEvents) {
|
|
67
|
-
const prevDBSerializedEvent = await this.db.depositEvent.getBinary(depositEvent.index);
|
|
68
|
-
if (!prevDBSerializedEvent) {
|
|
69
|
-
throw new Eth1Error({ code: Eth1ErrorCode.MISSING_DEPOSIT_LOG, newIndex, lastLogIndex });
|
|
70
|
-
}
|
|
71
|
-
const serializedEvent = ssz.phase0.DepositEvent.serialize(depositEvent);
|
|
72
|
-
if (!byteArrayEquals(prevDBSerializedEvent, serializedEvent)) {
|
|
73
|
-
throw new Eth1Error({ code: Eth1ErrorCode.DUPLICATE_DISTINCT_LOG, newIndex, lastLogIndex });
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
else if (newIndex > lastLogIndex + 1) {
|
|
78
|
-
// deposit events need to be consective, the way we fetch our tracker. If the deposit event
|
|
79
|
-
// is not consecutive it means either our tracker, or the corresponding eth1/EL
|
|
80
|
-
// node or the database has messed up. All these failures are critical and the tracker
|
|
81
|
-
// shouldn't proceed without the resolution of this error.
|
|
82
|
-
throw new Eth1Error({ code: Eth1ErrorCode.NON_CONSECUTIVE_LOGS, newIndex, lastLogIndex });
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
const depositRoots = depositEvents.map((depositEvent) => ({
|
|
86
|
-
index: depositEvent.index,
|
|
87
|
-
root: ssz.phase0.DepositData.hashTreeRoot(depositEvent.depositData),
|
|
88
|
-
}));
|
|
89
|
-
// Store events after verifying that data is consecutive
|
|
90
|
-
// depositDataRoot will throw if adding non consecutive roots
|
|
91
|
-
await this.db.depositDataRoot.batchPutValues(depositRoots);
|
|
92
|
-
await this.db.depositEvent.batchPutValues(depositEvents);
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Appends partial eth1 data (depositRoot, depositCount) in a block range (inclusive)
|
|
96
|
-
* Returned array is sequential and ascending in blockNumber
|
|
97
|
-
* @param fromBlock
|
|
98
|
-
* @param toBlock
|
|
99
|
-
*/
|
|
100
|
-
async getEth1DataForBlocks(blocks, lastProcessedDepositBlockNumber) {
|
|
101
|
-
const highestBlock = blocks.at(-1)?.blockNumber;
|
|
102
|
-
return getEth1DataForBlocks(blocks, this.db.depositEvent.valuesStream({ lte: highestBlock, reverse: true }), await this.db.depositDataRoot.getDepositRootTree(), lastProcessedDepositBlockNumber);
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Returns the highest blockNumber stored in DB if any
|
|
106
|
-
*/
|
|
107
|
-
async getHighestDepositEventBlockNumber() {
|
|
108
|
-
const latestEvent = await this.db.depositEvent.lastValue();
|
|
109
|
-
return latestEvent?.blockNumber || null;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Returns the lowest blockNumber stored in DB if any
|
|
113
|
-
*/
|
|
114
|
-
async getLowestDepositEventBlockNumber() {
|
|
115
|
-
const firstEvent = await this.db.depositEvent.firstValue();
|
|
116
|
-
return firstEvent?.blockNumber || null;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
//# sourceMappingURL=eth1DepositsCache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"eth1DepositsCache.js","sourceRoot":"","sources":["../../src/eth1/eth1DepositsCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { ChainConfig } from "@lodestar/config";
|
|
2
|
-
import { Logger } from "@lodestar/utils";
|
|
3
|
-
import { Metrics } from "../metrics/index.js";
|
|
4
|
-
import { EthJsonRpcBlockRaw, IEth1Provider, PowMergeBlock, TDProgress } from "./interface.js";
|
|
5
|
-
export declare enum StatusCode {
|
|
6
|
-
STOPPED = "STOPPED",
|
|
7
|
-
SEARCHING = "SEARCHING",
|
|
8
|
-
FOUND = "FOUND"
|
|
9
|
-
}
|
|
10
|
-
export type Eth1MergeBlockTrackerModules = {
|
|
11
|
-
config: ChainConfig;
|
|
12
|
-
logger: Logger;
|
|
13
|
-
signal: AbortSignal;
|
|
14
|
-
metrics: Metrics | null;
|
|
15
|
-
};
|
|
16
|
-
/**
|
|
17
|
-
* Follows the eth1 chain to find a (or multiple?) merge blocks that cross the threshold of total terminal difficulty
|
|
18
|
-
*
|
|
19
|
-
* Finding the mergeBlock could be done in demand when proposing pre-merge blocks. However, that would slow block
|
|
20
|
-
* production during the weeks between BELLATRIX_EPOCH and TTD.
|
|
21
|
-
*/
|
|
22
|
-
export declare class Eth1MergeBlockTracker {
|
|
23
|
-
private readonly eth1Provider;
|
|
24
|
-
private readonly config;
|
|
25
|
-
private readonly logger;
|
|
26
|
-
private readonly metrics;
|
|
27
|
-
private readonly blocksByHashCache;
|
|
28
|
-
private readonly intervals;
|
|
29
|
-
private status;
|
|
30
|
-
private latestEth1Block;
|
|
31
|
-
private getTerminalPowBlockFromEth1Promise;
|
|
32
|
-
private readonly safeTDFactor;
|
|
33
|
-
constructor({ config, logger, signal, metrics }: Eth1MergeBlockTrackerModules, eth1Provider: IEth1Provider);
|
|
34
|
-
/**
|
|
35
|
-
* Returns the most recent POW block that satisfies the merge block condition
|
|
36
|
-
*/
|
|
37
|
-
getTerminalPowBlock(): Promise<PowMergeBlock | null>;
|
|
38
|
-
getTDProgress(): TDProgress | null;
|
|
39
|
-
/**
|
|
40
|
-
* Get a POW block by hash checking the local cache first
|
|
41
|
-
*/
|
|
42
|
-
getPowBlock(powBlockHash: string): Promise<PowMergeBlock | null>;
|
|
43
|
-
/**
|
|
44
|
-
* Should only start polling for mergeBlock if:
|
|
45
|
-
* - after BELLATRIX_FORK_EPOCH
|
|
46
|
-
* - Beacon node synced
|
|
47
|
-
* - head state not isMergeTransitionComplete
|
|
48
|
-
*/
|
|
49
|
-
startPollingMergeBlock(): void;
|
|
50
|
-
private close;
|
|
51
|
-
private getTerminalPowBlockFromEth1;
|
|
52
|
-
/**
|
|
53
|
-
* **internal** + **unsafe** since it can create multiple backward searches that overload the eth1 client.
|
|
54
|
-
* Must be called in a wrapper to ensure that there's only once concurrent call to this fn.
|
|
55
|
-
*/
|
|
56
|
-
private internalGetTerminalPowBlockFromEth1;
|
|
57
|
-
private cacheBlock;
|
|
58
|
-
}
|
|
59
|
-
export declare function toPowBlock(block: EthJsonRpcBlockRaw): PowMergeBlock;
|
|
60
|
-
/**
|
|
61
|
-
* TTD values can be very large, for xDAI > 1e45. So scale down.
|
|
62
|
-
* To be good, TTD should be rendered as a number < Number.MAX_TD_RENDER_VALUE ~= 9e15
|
|
63
|
-
*/
|
|
64
|
-
export declare function getSafeTDFactor(ttd: bigint): bigint;
|
|
65
|
-
//# sourceMappingURL=eth1MergeBlockTracker.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"eth1MergeBlockTracker.d.ts","sourceRoot":"","sources":["../../src/eth1/eth1MergeBlockTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAC,MAAM,EAA2B,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAE5C,OAAO,EAAC,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAA0B,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAGpH,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,KAAK,UAAU;CAChB;AAkBD,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB,CAAC;AAIF;;;;;GAKG;AACH,qBAAa,qBAAqB;IAe9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAd/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IAEzC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqC;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAElD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,kCAAkC,CAA8C;IACxF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAGpC,EAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAC,EAAE,4BAA4B,EAC9C,YAAY,EAAE,aAAa;IAiC9C;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAe1D,aAAa,IAAI,UAAU,GAAG,IAAI;IAsBlC;;OAEG;IACG,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAkBtE;;;;;OAKG;IACH,sBAAsB,IAAI,IAAI;IAsB9B,OAAO,CAAC,KAAK;YAIC,2BAA2B;IA4CzC;;;OAGG;YACW,mCAAmC;IA6DjD,OAAO,CAAC,UAAU;CAInB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAQnE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWnD"}
|
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
import { pruneSetToMax, toRootHex } from "@lodestar/utils";
|
|
2
|
-
import { ZERO_HASH_HEX } from "../constants/index.js";
|
|
3
|
-
import { enumToIndexMap } from "../util/enum.js";
|
|
4
|
-
import { dataToRootHex, quantityToBigint, quantityToNum } from "./provider/utils.js";
|
|
5
|
-
export var StatusCode;
|
|
6
|
-
(function (StatusCode) {
|
|
7
|
-
StatusCode["STOPPED"] = "STOPPED";
|
|
8
|
-
StatusCode["SEARCHING"] = "SEARCHING";
|
|
9
|
-
StatusCode["FOUND"] = "FOUND";
|
|
10
|
-
})(StatusCode || (StatusCode = {}));
|
|
11
|
-
/** For metrics, index order = declaration order of StatusCode */
|
|
12
|
-
const statusCodeIdx = enumToIndexMap(StatusCode);
|
|
13
|
-
/**
|
|
14
|
-
* Bounds `blocksByHashCache` cache, imposing a max distance between highest and lowest block numbers.
|
|
15
|
-
* In case of extreme forking the cache might grow unbounded.
|
|
16
|
-
*/
|
|
17
|
-
const MAX_CACHE_POW_BLOCKS = 1024;
|
|
18
|
-
const MAX_TD_RENDER_VALUE = Number.MAX_SAFE_INTEGER;
|
|
19
|
-
// get_pow_block_at_total_difficulty
|
|
20
|
-
/**
|
|
21
|
-
* Follows the eth1 chain to find a (or multiple?) merge blocks that cross the threshold of total terminal difficulty
|
|
22
|
-
*
|
|
23
|
-
* Finding the mergeBlock could be done in demand when proposing pre-merge blocks. However, that would slow block
|
|
24
|
-
* production during the weeks between BELLATRIX_EPOCH and TTD.
|
|
25
|
-
*/
|
|
26
|
-
export class Eth1MergeBlockTracker {
|
|
27
|
-
eth1Provider;
|
|
28
|
-
config;
|
|
29
|
-
logger;
|
|
30
|
-
metrics;
|
|
31
|
-
blocksByHashCache = new Map();
|
|
32
|
-
intervals = [];
|
|
33
|
-
status;
|
|
34
|
-
latestEth1Block = null;
|
|
35
|
-
getTerminalPowBlockFromEth1Promise = null;
|
|
36
|
-
safeTDFactor;
|
|
37
|
-
constructor({ config, logger, signal, metrics }, eth1Provider) {
|
|
38
|
-
this.eth1Provider = eth1Provider;
|
|
39
|
-
this.config = config;
|
|
40
|
-
this.logger = logger;
|
|
41
|
-
this.metrics = metrics;
|
|
42
|
-
this.status = { code: StatusCode.STOPPED };
|
|
43
|
-
signal.addEventListener("abort", () => this.close(), { once: true });
|
|
44
|
-
this.safeTDFactor = getSafeTDFactor(this.config.TERMINAL_TOTAL_DIFFICULTY);
|
|
45
|
-
const scaledTTD = this.config.TERMINAL_TOTAL_DIFFICULTY / this.safeTDFactor;
|
|
46
|
-
// Only run metrics if necessary
|
|
47
|
-
if (metrics) {
|
|
48
|
-
// TTD can't be dynamically changed during execution, register metric once
|
|
49
|
-
metrics.eth1.eth1MergeTTD.set(Number(scaledTTD));
|
|
50
|
-
metrics.eth1.eth1MergeTDFactor.set(Number(this.safeTDFactor));
|
|
51
|
-
metrics.eth1.eth1MergeStatus.addCollect(() => {
|
|
52
|
-
// Set merge ttd, merge status and merge block status
|
|
53
|
-
metrics.eth1.eth1MergeStatus.set(statusCodeIdx[this.status.code]);
|
|
54
|
-
if (this.latestEth1Block !== null) {
|
|
55
|
-
// Set latestBlock stats
|
|
56
|
-
metrics.eth1.eth1LatestBlockNumber.set(this.latestEth1Block.number);
|
|
57
|
-
metrics.eth1.eth1LatestBlockTD.set(Number(this.latestEth1Block.totalDifficulty / this.safeTDFactor));
|
|
58
|
-
metrics.eth1.eth1LatestBlockTimestamp.set(this.latestEth1Block.timestamp);
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Returns the most recent POW block that satisfies the merge block condition
|
|
65
|
-
*/
|
|
66
|
-
async getTerminalPowBlock() {
|
|
67
|
-
switch (this.status.code) {
|
|
68
|
-
case StatusCode.STOPPED:
|
|
69
|
-
// If not module is not polling fetch the mergeBlock explicitly
|
|
70
|
-
return this.getTerminalPowBlockFromEth1();
|
|
71
|
-
case StatusCode.SEARCHING:
|
|
72
|
-
// Assume that polling would have found the block
|
|
73
|
-
return null;
|
|
74
|
-
case StatusCode.FOUND:
|
|
75
|
-
return this.status.mergeBlock;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
getTDProgress() {
|
|
79
|
-
if (this.latestEth1Block === null) {
|
|
80
|
-
return this.latestEth1Block;
|
|
81
|
-
}
|
|
82
|
-
const tdDiff = this.config.TERMINAL_TOTAL_DIFFICULTY - this.latestEth1Block.totalDifficulty;
|
|
83
|
-
if (tdDiff > BigInt(0)) {
|
|
84
|
-
return {
|
|
85
|
-
ttdHit: false,
|
|
86
|
-
tdFactor: this.safeTDFactor,
|
|
87
|
-
tdDiffScaled: Number((tdDiff / this.safeTDFactor)),
|
|
88
|
-
ttd: this.config.TERMINAL_TOTAL_DIFFICULTY,
|
|
89
|
-
td: this.latestEth1Block.totalDifficulty,
|
|
90
|
-
timestamp: this.latestEth1Block.timestamp,
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
return {
|
|
94
|
-
ttdHit: true,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Get a POW block by hash checking the local cache first
|
|
99
|
-
*/
|
|
100
|
-
async getPowBlock(powBlockHash) {
|
|
101
|
-
// Check cache first
|
|
102
|
-
const cachedBlock = this.blocksByHashCache.get(powBlockHash);
|
|
103
|
-
if (cachedBlock) {
|
|
104
|
-
return cachedBlock;
|
|
105
|
-
}
|
|
106
|
-
// Fetch from node
|
|
107
|
-
const blockRaw = await this.eth1Provider.getBlockByHash(powBlockHash);
|
|
108
|
-
if (blockRaw) {
|
|
109
|
-
const block = toPowBlock(blockRaw);
|
|
110
|
-
this.cacheBlock(block);
|
|
111
|
-
return block;
|
|
112
|
-
}
|
|
113
|
-
return null;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Should only start polling for mergeBlock if:
|
|
117
|
-
* - after BELLATRIX_FORK_EPOCH
|
|
118
|
-
* - Beacon node synced
|
|
119
|
-
* - head state not isMergeTransitionComplete
|
|
120
|
-
*/
|
|
121
|
-
startPollingMergeBlock() {
|
|
122
|
-
if (this.status.code !== StatusCode.STOPPED) {
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
this.status = { code: StatusCode.SEARCHING };
|
|
126
|
-
this.logger.info("Starting search for terminal POW block", {
|
|
127
|
-
TERMINAL_TOTAL_DIFFICULTY: this.config.TERMINAL_TOTAL_DIFFICULTY,
|
|
128
|
-
});
|
|
129
|
-
const interval = setInterval(() => {
|
|
130
|
-
// Preemptively try to find merge block and cache it if found.
|
|
131
|
-
// Future callers of getTerminalPowBlock() will re-use the cached found mergeBlock.
|
|
132
|
-
this.getTerminalPowBlockFromEth1().catch((e) => {
|
|
133
|
-
this.logger.error("Error on findMergeBlock", {}, e);
|
|
134
|
-
this.metrics?.eth1.eth1PollMergeBlockErrors.inc();
|
|
135
|
-
});
|
|
136
|
-
}, this.config.SECONDS_PER_ETH1_BLOCK * 1000);
|
|
137
|
-
this.intervals.push(interval);
|
|
138
|
-
}
|
|
139
|
-
close() {
|
|
140
|
-
this.intervals.forEach(clearInterval);
|
|
141
|
-
}
|
|
142
|
-
async getTerminalPowBlockFromEth1() {
|
|
143
|
-
if (!this.getTerminalPowBlockFromEth1Promise) {
|
|
144
|
-
this.getTerminalPowBlockFromEth1Promise = this.internalGetTerminalPowBlockFromEth1()
|
|
145
|
-
.then((mergeBlock) => {
|
|
146
|
-
// Persist found merge block here to affect both caller paths:
|
|
147
|
-
// - internal searcher
|
|
148
|
-
// - external caller if STOPPED
|
|
149
|
-
if (mergeBlock && this.status.code !== StatusCode.FOUND) {
|
|
150
|
-
if (this.status.code === StatusCode.SEARCHING) {
|
|
151
|
-
this.close();
|
|
152
|
-
}
|
|
153
|
-
this.logger.info("Terminal POW block found!", {
|
|
154
|
-
hash: mergeBlock.blockHash,
|
|
155
|
-
number: mergeBlock.number,
|
|
156
|
-
totalDifficulty: mergeBlock.totalDifficulty,
|
|
157
|
-
});
|
|
158
|
-
this.status = { code: StatusCode.FOUND, mergeBlock };
|
|
159
|
-
this.metrics?.eth1.eth1MergeBlockDetails.set({
|
|
160
|
-
terminalBlockHash: mergeBlock.blockHash,
|
|
161
|
-
// Convert all number/bigints to string labels
|
|
162
|
-
terminalBlockNumber: mergeBlock.number.toString(10),
|
|
163
|
-
terminalBlockTD: mergeBlock.totalDifficulty.toString(10),
|
|
164
|
-
}, 1);
|
|
165
|
-
}
|
|
166
|
-
return mergeBlock;
|
|
167
|
-
})
|
|
168
|
-
.finally(() => {
|
|
169
|
-
this.getTerminalPowBlockFromEth1Promise = null;
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
// This should no happen, since getTerminalPowBlockFromEth1() should resolve faster than SECONDS_PER_ETH1_BLOCK.
|
|
174
|
-
// else something is wrong: the el-cl comms are two slow, or the backsearch got stuck in a deep search.
|
|
175
|
-
this.metrics?.eth1.getTerminalPowBlockPromiseCacheHit.inc();
|
|
176
|
-
}
|
|
177
|
-
return this.getTerminalPowBlockFromEth1Promise;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* **internal** + **unsafe** since it can create multiple backward searches that overload the eth1 client.
|
|
181
|
-
* Must be called in a wrapper to ensure that there's only once concurrent call to this fn.
|
|
182
|
-
*/
|
|
183
|
-
async internalGetTerminalPowBlockFromEth1() {
|
|
184
|
-
// Search merge block by hash
|
|
185
|
-
// Terminal block hash override takes precedence over terminal total difficulty
|
|
186
|
-
const terminalBlockHash = toRootHex(this.config.TERMINAL_BLOCK_HASH);
|
|
187
|
-
if (terminalBlockHash !== ZERO_HASH_HEX) {
|
|
188
|
-
const block = await this.getPowBlock(terminalBlockHash);
|
|
189
|
-
if (block) {
|
|
190
|
-
return block;
|
|
191
|
-
}
|
|
192
|
-
// if a TERMINAL_BLOCK_HASH other than ZERO_HASH is configured and we can't find it, return NONE
|
|
193
|
-
return null;
|
|
194
|
-
}
|
|
195
|
-
// Search merge block by TTD
|
|
196
|
-
const latestBlockRaw = await this.eth1Provider.getBlockByNumber("latest");
|
|
197
|
-
if (!latestBlockRaw) {
|
|
198
|
-
throw Error("getBlockByNumber('latest') returned null");
|
|
199
|
-
}
|
|
200
|
-
let block = toPowBlock(latestBlockRaw);
|
|
201
|
-
this.latestEth1Block = { ...block, timestamp: quantityToNum(latestBlockRaw.timestamp) };
|
|
202
|
-
this.cacheBlock(block);
|
|
203
|
-
// This code path to look backwards for the merge block is only necessary if:
|
|
204
|
-
// - The network has not yet found the merge block
|
|
205
|
-
// - There are descendants of the merge block in the eth1 chain
|
|
206
|
-
// For the search below to require more than a few hops, multiple block proposers in a row must fail to detect
|
|
207
|
-
// an existing merge block. Such situation is extremely unlikely, so this search is left un-optimized. Since
|
|
208
|
-
// this class can start eagerly looking for the merge block when not necessary, startPollingMergeBlock() should
|
|
209
|
-
// only be called when there is certainty that a mergeBlock search is necessary.
|
|
210
|
-
while (true) {
|
|
211
|
-
if (block.totalDifficulty < this.config.TERMINAL_TOTAL_DIFFICULTY) {
|
|
212
|
-
// TTD not reached yet
|
|
213
|
-
return null;
|
|
214
|
-
}
|
|
215
|
-
// else block.totalDifficulty >= this.config.TERMINAL_TOTAL_DIFFICULTY
|
|
216
|
-
// Potential mergeBlock! Must find the first block that passes TTD
|
|
217
|
-
// Allow genesis block to reach TTD https://github.com/ethereum/consensus-specs/pull/2719
|
|
218
|
-
if (block.parentHash === ZERO_HASH_HEX) {
|
|
219
|
-
return block;
|
|
220
|
-
}
|
|
221
|
-
const parent = await this.getPowBlock(block.parentHash);
|
|
222
|
-
if (!parent) {
|
|
223
|
-
throw Error(`Unknown parent of block with TD>TTD ${block.parentHash}`);
|
|
224
|
-
}
|
|
225
|
-
this.metrics?.eth1.eth1ParentBlocksFetched.inc();
|
|
226
|
-
// block.td > TTD && parent.td < TTD => block is mergeBlock
|
|
227
|
-
if (parent.totalDifficulty < this.config.TERMINAL_TOTAL_DIFFICULTY) {
|
|
228
|
-
// Is terminal total difficulty block AND has verified block -> parent relationship
|
|
229
|
-
return block;
|
|
230
|
-
}
|
|
231
|
-
block = parent;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
cacheBlock(block) {
|
|
235
|
-
this.blocksByHashCache.set(block.blockHash, block);
|
|
236
|
-
pruneSetToMax(this.blocksByHashCache, MAX_CACHE_POW_BLOCKS);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
export function toPowBlock(block) {
|
|
240
|
-
// Validate untrusted data from API
|
|
241
|
-
return {
|
|
242
|
-
number: quantityToNum(block.number),
|
|
243
|
-
blockHash: dataToRootHex(block.hash),
|
|
244
|
-
parentHash: dataToRootHex(block.parentHash),
|
|
245
|
-
totalDifficulty: quantityToBigint(block.totalDifficulty),
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* TTD values can be very large, for xDAI > 1e45. So scale down.
|
|
250
|
-
* To be good, TTD should be rendered as a number < Number.MAX_TD_RENDER_VALUE ~= 9e15
|
|
251
|
-
*/
|
|
252
|
-
export function getSafeTDFactor(ttd) {
|
|
253
|
-
const safeIntegerMult = ttd / BigInt(MAX_TD_RENDER_VALUE);
|
|
254
|
-
// TTD < MAX_TD_RENDER_VALUE, no need to scale down
|
|
255
|
-
if (safeIntegerMult === BigInt(0)) {
|
|
256
|
-
return BigInt(1);
|
|
257
|
-
}
|
|
258
|
-
// Return closest power of 10 to ensure TD < max
|
|
259
|
-
const safeIntegerMultDigits = safeIntegerMult.toString(10).length;
|
|
260
|
-
return BigInt(10) ** BigInt(safeIntegerMultDigits);
|
|
261
|
-
}
|
|
262
|
-
//# sourceMappingURL=eth1MergeBlockTracker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"eth1MergeBlockTracker.js","sourceRoot":"","sources":["../../src/eth1/eth1MergeBlockTracker.ts"],"names":[],"mappings":"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"}
|
package/lib/eth1/index.d.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { CachedBeaconStateAllForks } from "@lodestar/state-transition";
|
|
2
|
-
import { Root } from "@lodestar/types";
|
|
3
|
-
import { Eth1DepositDataTrackerModules } from "./eth1DepositDataTracker.js";
|
|
4
|
-
import { Eth1MergeBlockTrackerModules } from "./eth1MergeBlockTracker.js";
|
|
5
|
-
import { Eth1DataAndDeposits, IEth1ForBlockProduction, IEth1Provider, PowMergeBlock, TDProgress } from "./interface.js";
|
|
6
|
-
import { Eth1Options } from "./options.js";
|
|
7
|
-
import { Eth1Provider } from "./provider/eth1Provider.js";
|
|
8
|
-
export { Eth1Provider };
|
|
9
|
-
export type { IEth1ForBlockProduction, IEth1Provider };
|
|
10
|
-
export declare function initializeEth1ForBlockProduction(opts: Eth1Options, modules: Pick<Eth1DepositDataTrackerModules, "db" | "config" | "metrics" | "logger" | "signal">): IEth1ForBlockProduction;
|
|
11
|
-
export declare class Eth1ForBlockProduction implements IEth1ForBlockProduction {
|
|
12
|
-
private readonly eth1DepositDataTracker;
|
|
13
|
-
private readonly eth1MergeBlockTracker;
|
|
14
|
-
constructor(opts: Eth1Options, modules: Eth1DepositDataTrackerModules & Eth1MergeBlockTrackerModules & {
|
|
15
|
-
eth1Provider?: IEth1Provider;
|
|
16
|
-
});
|
|
17
|
-
getEth1DataAndDeposits(state: CachedBeaconStateAllForks): Promise<Eth1DataAndDeposits>;
|
|
18
|
-
getTerminalPowBlock(): Promise<Root | null>;
|
|
19
|
-
getPowBlock(powBlockHash: string): Promise<PowMergeBlock | null>;
|
|
20
|
-
getTDProgress(): TDProgress | null;
|
|
21
|
-
startPollingMergeBlock(): void;
|
|
22
|
-
isPollingEth1Data(): boolean;
|
|
23
|
-
stopPollingEth1Data(): void;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Disabled version of Eth1ForBlockProduction
|
|
27
|
-
* May produce invalid blocks by not adding new deposits and voting for the same eth1Data
|
|
28
|
-
*/
|
|
29
|
-
export declare class Eth1ForBlockProductionDisabled implements IEth1ForBlockProduction {
|
|
30
|
-
/**
|
|
31
|
-
* Returns same eth1Data as in state and no deposits
|
|
32
|
-
* May produce invalid blocks if deposits have to be added
|
|
33
|
-
*/
|
|
34
|
-
getEth1DataAndDeposits(state: CachedBeaconStateAllForks): Promise<Eth1DataAndDeposits>;
|
|
35
|
-
/**
|
|
36
|
-
* Will miss the oportunity to propose the merge block but will still produce valid blocks
|
|
37
|
-
*/
|
|
38
|
-
getTerminalPowBlock(): Promise<Root | null>;
|
|
39
|
-
/** Will not be able to validate the merge block */
|
|
40
|
-
getPowBlock(_powBlockHash: string): Promise<PowMergeBlock | null>;
|
|
41
|
-
getTDProgress(): TDProgress | null;
|
|
42
|
-
isPollingEth1Data(): boolean;
|
|
43
|
-
startPollingMergeBlock(): void;
|
|
44
|
-
stopPollingEth1Data(): void;
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=index.d.ts.map
|
package/lib/eth1/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eth1/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,yBAAyB,EAAC,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAC,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAErC,OAAO,EAAyB,6BAA6B,EAAC,MAAM,6BAA6B,CAAC;AAClG,OAAO,EAAwB,4BAA4B,EAAC,MAAM,4BAA4B,CAAC;AAC/F,OAAO,EAAC,mBAAmB,EAAE,uBAAuB,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;AACtH,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAC,YAAY,EAAC,CAAC;AACtB,YAAY,EAAC,uBAAuB,EAAE,aAAa,EAAC,CAAC;AAkCrD,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,IAAI,CAAC,6BAA6B,EAAE,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAC9F,uBAAuB,CAWzB;AAED,qBAAa,sBAAuB,YAAW,uBAAuB;IACpE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAgC;IACvE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAwB;gBAG5D,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,6BAA6B,GAAG,4BAA4B,GAAG;QAAC,YAAY,CAAC,EAAE,aAAa,CAAA;KAAC;IAkBlG,sBAAsB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAOtF,mBAAmB,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAKjD,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAIhE,aAAa,IAAI,UAAU,GAAG,IAAI;IAIlC,sBAAsB,IAAI,IAAI;IAI9B,iBAAiB,IAAI,OAAO;IAI5B,mBAAmB,IAAI,IAAI;CAG5B;AAED;;;GAGG;AACH,qBAAa,8BAA+B,YAAW,uBAAuB;IAC5E;;;OAGG;IACG,sBAAsB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAI5F;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAIjD,mDAAmD;IAC7C,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAIvE,aAAa,IAAI,UAAU,GAAG,IAAI;IAIlC,iBAAiB,IAAI,OAAO;IAI5B,sBAAsB,IAAI,IAAI;IAI9B,mBAAmB,IAAI,IAAI;CAG5B"}
|
package/lib/eth1/index.js
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { fromHex } from "@lodestar/utils";
|
|
2
|
-
import { Eth1DepositDataTracker } from "./eth1DepositDataTracker.js";
|
|
3
|
-
import { Eth1MergeBlockTracker } from "./eth1MergeBlockTracker.js";
|
|
4
|
-
import { Eth1Provider } from "./provider/eth1Provider.js";
|
|
5
|
-
export { Eth1Provider };
|
|
6
|
-
// This module encapsulates all consumer functionality to the execution node (formerly eth1). The execution client
|
|
7
|
-
// has to:
|
|
8
|
-
//
|
|
9
|
-
// - For genesis, the beacon node must follow the eth1 chain: get all deposit events + blocks within that range.
|
|
10
|
-
// Once the genesis conditions are met, start the POS chain with the resulting state. The logic is similar to the
|
|
11
|
-
// two points below, but the implementation is specialized for each scenario.
|
|
12
|
-
//
|
|
13
|
-
// - Follow the eth1 block chain to validate eth1Data votes. It needs all consecutive blocks within a specific range
|
|
14
|
-
// and at a distance from the head.
|
|
15
|
-
// ETH1_FOLLOW_DISTANCE uint64(2**11) (= 2,048) Eth1 blocks ~8 hours
|
|
16
|
-
// EPOCHS_PER_ETH1_VOTING_PERIOD uint64(2**6) (= 64) epochs ~6.8 hours
|
|
17
|
-
//
|
|
18
|
-
// - Fetch ALL deposit events from the deposit contract to build the deposit tree and validate future merkle proofs.
|
|
19
|
-
// Then it must follow deposit events at a distance roughly similar to the `ETH1_FOLLOW_DISTANCE` parameter above.
|
|
20
|
-
//
|
|
21
|
-
// - [New bellatrix]: After BELLATRIX_FORK_EPOCH, it must fetch the block with hash
|
|
22
|
-
// `state.eth1_data.block_hash` to compute `terminal_total_difficulty`. Note this may change with
|
|
23
|
-
// https://github.com/ethereum/consensus-specs/issues/2603.
|
|
24
|
-
//
|
|
25
|
-
// - [New bellatrix]: On block production post BELLATRIX_FORK_EPOCH, pre merge, the beacon node must find the merge block
|
|
26
|
-
// crossing the `terminal_total_difficulty` boundary and include it in the block. After the merge block production
|
|
27
|
-
// will just use `execution_engine.assemble_block` without fetching individual blocks.
|
|
28
|
-
//
|
|
29
|
-
// - [New bellatrix]: Fork-choice must validate the merge block ensuring it crossed the `terminal_total_difficulty`
|
|
30
|
-
// boundary, so it must fetch the POW block referenced in the merge block + its POW parent block.
|
|
31
|
-
//
|
|
32
|
-
// With the merge the beacon node has to follow the eth1 chain at two distances:
|
|
33
|
-
// 1. At `ETH1_FOLLOW_DISTANCE` for eth1Data to be re-org safe
|
|
34
|
-
// 2. At the head to get the first merge block, tolerating possible re-orgs
|
|
35
|
-
//
|
|
36
|
-
// Then both streams of blocks should not be merged since it's harder to guard against re-orgs from (2) to (1).
|
|
37
|
-
export function initializeEth1ForBlockProduction(opts, modules) {
|
|
38
|
-
if (opts.enabled) {
|
|
39
|
-
return new Eth1ForBlockProduction(opts, {
|
|
40
|
-
config: modules.config,
|
|
41
|
-
db: modules.db,
|
|
42
|
-
metrics: modules.metrics,
|
|
43
|
-
logger: modules.logger,
|
|
44
|
-
signal: modules.signal,
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
return new Eth1ForBlockProductionDisabled();
|
|
48
|
-
}
|
|
49
|
-
export class Eth1ForBlockProduction {
|
|
50
|
-
eth1DepositDataTracker;
|
|
51
|
-
eth1MergeBlockTracker;
|
|
52
|
-
constructor(opts, modules) {
|
|
53
|
-
const eth1Provider = modules.eth1Provider ||
|
|
54
|
-
new Eth1Provider(modules.config, { ...opts, logger: modules.logger }, modules.signal, modules.metrics?.eth1HttpClient);
|
|
55
|
-
this.eth1DepositDataTracker = opts.disableEth1DepositDataTracker
|
|
56
|
-
? null
|
|
57
|
-
: new Eth1DepositDataTracker(opts, modules, eth1Provider);
|
|
58
|
-
this.eth1MergeBlockTracker = new Eth1MergeBlockTracker(modules, eth1Provider);
|
|
59
|
-
}
|
|
60
|
-
async getEth1DataAndDeposits(state) {
|
|
61
|
-
if (this.eth1DepositDataTracker === null) {
|
|
62
|
-
return { eth1Data: state.eth1Data, deposits: [] };
|
|
63
|
-
}
|
|
64
|
-
return this.eth1DepositDataTracker.getEth1DataAndDeposits(state);
|
|
65
|
-
}
|
|
66
|
-
async getTerminalPowBlock() {
|
|
67
|
-
const block = await this.eth1MergeBlockTracker.getTerminalPowBlock();
|
|
68
|
-
return block && fromHex(block.blockHash);
|
|
69
|
-
}
|
|
70
|
-
getPowBlock(powBlockHash) {
|
|
71
|
-
return this.eth1MergeBlockTracker.getPowBlock(powBlockHash);
|
|
72
|
-
}
|
|
73
|
-
getTDProgress() {
|
|
74
|
-
return this.eth1MergeBlockTracker.getTDProgress();
|
|
75
|
-
}
|
|
76
|
-
startPollingMergeBlock() {
|
|
77
|
-
this.eth1MergeBlockTracker.startPollingMergeBlock();
|
|
78
|
-
}
|
|
79
|
-
isPollingEth1Data() {
|
|
80
|
-
return this.eth1DepositDataTracker?.isPollingEth1Data() ?? false;
|
|
81
|
-
}
|
|
82
|
-
stopPollingEth1Data() {
|
|
83
|
-
this.eth1DepositDataTracker?.stopPollingEth1Data();
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Disabled version of Eth1ForBlockProduction
|
|
88
|
-
* May produce invalid blocks by not adding new deposits and voting for the same eth1Data
|
|
89
|
-
*/
|
|
90
|
-
export class Eth1ForBlockProductionDisabled {
|
|
91
|
-
/**
|
|
92
|
-
* Returns same eth1Data as in state and no deposits
|
|
93
|
-
* May produce invalid blocks if deposits have to be added
|
|
94
|
-
*/
|
|
95
|
-
async getEth1DataAndDeposits(state) {
|
|
96
|
-
return { eth1Data: state.eth1Data, deposits: [] };
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Will miss the oportunity to propose the merge block but will still produce valid blocks
|
|
100
|
-
*/
|
|
101
|
-
async getTerminalPowBlock() {
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
|
-
/** Will not be able to validate the merge block */
|
|
105
|
-
async getPowBlock(_powBlockHash) {
|
|
106
|
-
throw Error("eth1 must be enabled to verify merge block");
|
|
107
|
-
}
|
|
108
|
-
getTDProgress() {
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
isPollingEth1Data() {
|
|
112
|
-
return false;
|
|
113
|
-
}
|
|
114
|
-
startPollingMergeBlock() {
|
|
115
|
-
// Ignore
|
|
116
|
-
}
|
|
117
|
-
stopPollingEth1Data() {
|
|
118
|
-
// Ignore
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=index.js.map
|
package/lib/eth1/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eth1/index.ts"],"names":[],"mappings":"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"}
|