@lodestar/beacon-node 1.39.0-dev.b37f2bd1bd → 1.39.0-dev.c151a164f2
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/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/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/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/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
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
-
import { Db } from "@lodestar/db";
|
|
3
|
-
export declare class PreGenesisStateLastProcessedBlock {
|
|
4
|
-
private readonly bucket;
|
|
5
|
-
private readonly type;
|
|
6
|
-
private readonly db;
|
|
7
|
-
private readonly key;
|
|
8
|
-
private readonly dbReqOpts;
|
|
9
|
-
constructor(_config: ChainForkConfig, db: Db);
|
|
10
|
-
put(value: number): Promise<void>;
|
|
11
|
-
get(): Promise<number | null>;
|
|
12
|
-
delete(): Promise<void>;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=preGenesisStateLastProcessedBlock.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preGenesisStateLastProcessedBlock.d.ts","sourceRoot":"","sources":["../../../src/db/single/preGenesisStateLastProcessedBlock.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAC,EAAE,EAAY,MAAM,cAAc,CAAC;AAI3C,qBAAa,iCAAiC;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAE1B,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE;IAQtC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,GAAG,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK7B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAG9B"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { ssz } from "@lodestar/types";
|
|
2
|
-
import { Bucket, getBucketNameByValue } from "../buckets.js";
|
|
3
|
-
export class PreGenesisStateLastProcessedBlock {
|
|
4
|
-
bucket;
|
|
5
|
-
type;
|
|
6
|
-
db;
|
|
7
|
-
key;
|
|
8
|
-
dbReqOpts;
|
|
9
|
-
constructor(_config, db) {
|
|
10
|
-
this.db = db;
|
|
11
|
-
this.type = ssz.UintNum64;
|
|
12
|
-
this.bucket = Bucket.phase0_preGenesisStateLastProcessedBlock;
|
|
13
|
-
this.key = new Uint8Array([this.bucket]);
|
|
14
|
-
this.dbReqOpts = { bucketId: getBucketNameByValue(this.bucket) };
|
|
15
|
-
}
|
|
16
|
-
async put(value) {
|
|
17
|
-
await this.db.put(this.key, this.type.serialize(value), this.dbReqOpts);
|
|
18
|
-
}
|
|
19
|
-
async get() {
|
|
20
|
-
const value = await this.db.get(this.key, this.dbReqOpts);
|
|
21
|
-
return value ? this.type.deserialize(value) : null;
|
|
22
|
-
}
|
|
23
|
-
async delete() {
|
|
24
|
-
await this.db.delete(this.key, this.dbReqOpts);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=preGenesisStateLastProcessedBlock.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preGenesisStateLastProcessedBlock.js","sourceRoot":"","sources":["../../../src/db/single/preGenesisStateLastProcessedBlock.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,GAAG,EAAC,MAAM,iBAAiB,CAAC;AACpC,OAAO,EAAC,MAAM,EAAE,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAE3D,MAAM,OAAO,iCAAiC;IAC3B,MAAM,CAAS;IACf,IAAI,CAAiB;IACrB,EAAE,CAAK;IACP,GAAG,CAAa;IAChB,SAAS,CAAY;IAEtC,YAAY,OAAwB,EAAE,EAAM;QAC1C,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,wCAAwC,CAAC;QAC9D,IAAI,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,EAAC,QAAQ,EAAE,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAa;QACrB,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1D,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;CACF"}
|
package/lib/eth1/errors.d.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { LodestarError } from "@lodestar/utils";
|
|
2
|
-
export declare enum Eth1ErrorCode {
|
|
3
|
-
/** Deposit index too high */
|
|
4
|
-
DEPOSIT_INDEX_TOO_HIGH = "ETH1_ERROR_DEPOSIT_INDEX_TOO_HIGH",
|
|
5
|
-
/** Not enough deposits in DB */
|
|
6
|
-
NOT_ENOUGH_DEPOSITS = "ETH1_ERROR_NOT_ENOUGH_DEPOSITS",
|
|
7
|
-
/** Too many deposits returned by DB */
|
|
8
|
-
TOO_MANY_DEPOSITS = "ETH1_ERROR_TOO_MANY_DEPOSITS",
|
|
9
|
-
/** Deposit root tree does not match current eth1Data */
|
|
10
|
-
WRONG_DEPOSIT_ROOT = "ETH1_ERROR_WRONG_DEPOSIT_ROOT",
|
|
11
|
-
/** No deposits found for block range */
|
|
12
|
-
NO_DEPOSITS_FOR_BLOCK_RANGE = "ETH1_ERROR_NO_DEPOSITS_FOR_BLOCK_RANGE",
|
|
13
|
-
/** No depositRoot for depositCount */
|
|
14
|
-
NO_DEPOSIT_ROOT = "ETH1_ERROR_NO_DEPOSIT_ROOT",
|
|
15
|
-
/** Not enough deposit roots for index */
|
|
16
|
-
NOT_ENOUGH_DEPOSIT_ROOTS = "ETH1_ERROR_NOT_ENOUGH_DEPOSIT_ROOTS",
|
|
17
|
-
/** Attempted to insert a duplicate log for same index into the Eth1DepositsCache */
|
|
18
|
-
DUPLICATE_DISTINCT_LOG = "ETH1_ERROR_DUPLICATE_DISTINCT_LOG",
|
|
19
|
-
/** Attempted to insert a log with index != prev + 1 into the Eth1DepositsCache */
|
|
20
|
-
NON_CONSECUTIVE_LOGS = "ETH1_ERROR_NON_CONSECUTIVE_LOGS",
|
|
21
|
-
/** Expected a deposit log in the db for the index, missing log implies a corrupted db */
|
|
22
|
-
MISSING_DEPOSIT_LOG = "ETH1_ERROR_MISSING_DEPOSIT_LOG"
|
|
23
|
-
}
|
|
24
|
-
export type Eth1ErrorType = {
|
|
25
|
-
code: Eth1ErrorCode.DEPOSIT_INDEX_TOO_HIGH;
|
|
26
|
-
depositIndex: number;
|
|
27
|
-
depositCount: number;
|
|
28
|
-
} | {
|
|
29
|
-
code: Eth1ErrorCode.NOT_ENOUGH_DEPOSITS;
|
|
30
|
-
len: number;
|
|
31
|
-
expectedLen: number;
|
|
32
|
-
} | {
|
|
33
|
-
code: Eth1ErrorCode.TOO_MANY_DEPOSITS;
|
|
34
|
-
len: number;
|
|
35
|
-
expectedLen: number;
|
|
36
|
-
} | {
|
|
37
|
-
code: Eth1ErrorCode.WRONG_DEPOSIT_ROOT;
|
|
38
|
-
root: string;
|
|
39
|
-
expectedRoot: string;
|
|
40
|
-
} | {
|
|
41
|
-
code: Eth1ErrorCode.NO_DEPOSITS_FOR_BLOCK_RANGE;
|
|
42
|
-
fromBlock: number;
|
|
43
|
-
toBlock: number;
|
|
44
|
-
} | {
|
|
45
|
-
code: Eth1ErrorCode.NO_DEPOSIT_ROOT;
|
|
46
|
-
depositCount: number;
|
|
47
|
-
} | {
|
|
48
|
-
code: Eth1ErrorCode.NOT_ENOUGH_DEPOSIT_ROOTS;
|
|
49
|
-
index: number;
|
|
50
|
-
treeLength: number;
|
|
51
|
-
} | {
|
|
52
|
-
code: Eth1ErrorCode.DUPLICATE_DISTINCT_LOG;
|
|
53
|
-
newIndex: number;
|
|
54
|
-
lastLogIndex: number;
|
|
55
|
-
} | {
|
|
56
|
-
code: Eth1ErrorCode.NON_CONSECUTIVE_LOGS;
|
|
57
|
-
newIndex: number;
|
|
58
|
-
lastLogIndex: number;
|
|
59
|
-
} | {
|
|
60
|
-
code: Eth1ErrorCode.MISSING_DEPOSIT_LOG;
|
|
61
|
-
newIndex: number;
|
|
62
|
-
lastLogIndex: number;
|
|
63
|
-
};
|
|
64
|
-
export declare class Eth1Error extends LodestarError<Eth1ErrorType> {
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=errors.d.ts.map
|
package/lib/eth1/errors.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/eth1/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,oBAAY,aAAa;IACvB,6BAA6B;IAC7B,sBAAsB,sCAAsC;IAC5D,gCAAgC;IAChC,mBAAmB,mCAAmC;IACtD,uCAAuC;IACvC,iBAAiB,iCAAiC;IAClD,wDAAwD;IACxD,kBAAkB,kCAAkC;IAEpD,wCAAwC;IACxC,2BAA2B,2CAA2C;IACtE,sCAAsC;IACtC,eAAe,+BAA+B;IAC9C,yCAAyC;IACzC,wBAAwB,wCAAwC;IAEhE,oFAAoF;IACpF,sBAAsB,sCAAsC;IAC5D,kFAAkF;IAClF,oBAAoB,oCAAoC;IACxD,yFAAyF;IACzF,mBAAmB,mCAAmC;CACvD;AAED,MAAM,MAAM,aAAa,GACrB;IAAC,IAAI,EAAE,aAAa,CAAC,sBAAsB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GACxF;IAAC,IAAI,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAC,GAC3E;IAAC,IAAI,EAAE,aAAa,CAAC,iBAAiB,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAC,GACzE;IAAC,IAAI,EAAE,aAAa,CAAC,kBAAkB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GAC5E;IAAC,IAAI,EAAE,aAAa,CAAC,2BAA2B,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,GACrF;IAAC,IAAI,EAAE,aAAa,CAAC,eAAe,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GAC3D;IAAC,IAAI,EAAE,aAAa,CAAC,wBAAwB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,GACjF;IAAC,IAAI,EAAE,aAAa,CAAC,sBAAsB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GACpF;IAAC,IAAI,EAAE,aAAa,CAAC,oBAAoB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GAClF;IAAC,IAAI,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,CAAC;AAEtF,qBAAa,SAAU,SAAQ,aAAa,CAAC,aAAa,CAAC;CAAG"}
|
package/lib/eth1/errors.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { LodestarError } from "@lodestar/utils";
|
|
2
|
-
export var Eth1ErrorCode;
|
|
3
|
-
(function (Eth1ErrorCode) {
|
|
4
|
-
/** Deposit index too high */
|
|
5
|
-
Eth1ErrorCode["DEPOSIT_INDEX_TOO_HIGH"] = "ETH1_ERROR_DEPOSIT_INDEX_TOO_HIGH";
|
|
6
|
-
/** Not enough deposits in DB */
|
|
7
|
-
Eth1ErrorCode["NOT_ENOUGH_DEPOSITS"] = "ETH1_ERROR_NOT_ENOUGH_DEPOSITS";
|
|
8
|
-
/** Too many deposits returned by DB */
|
|
9
|
-
Eth1ErrorCode["TOO_MANY_DEPOSITS"] = "ETH1_ERROR_TOO_MANY_DEPOSITS";
|
|
10
|
-
/** Deposit root tree does not match current eth1Data */
|
|
11
|
-
Eth1ErrorCode["WRONG_DEPOSIT_ROOT"] = "ETH1_ERROR_WRONG_DEPOSIT_ROOT";
|
|
12
|
-
/** No deposits found for block range */
|
|
13
|
-
Eth1ErrorCode["NO_DEPOSITS_FOR_BLOCK_RANGE"] = "ETH1_ERROR_NO_DEPOSITS_FOR_BLOCK_RANGE";
|
|
14
|
-
/** No depositRoot for depositCount */
|
|
15
|
-
Eth1ErrorCode["NO_DEPOSIT_ROOT"] = "ETH1_ERROR_NO_DEPOSIT_ROOT";
|
|
16
|
-
/** Not enough deposit roots for index */
|
|
17
|
-
Eth1ErrorCode["NOT_ENOUGH_DEPOSIT_ROOTS"] = "ETH1_ERROR_NOT_ENOUGH_DEPOSIT_ROOTS";
|
|
18
|
-
/** Attempted to insert a duplicate log for same index into the Eth1DepositsCache */
|
|
19
|
-
Eth1ErrorCode["DUPLICATE_DISTINCT_LOG"] = "ETH1_ERROR_DUPLICATE_DISTINCT_LOG";
|
|
20
|
-
/** Attempted to insert a log with index != prev + 1 into the Eth1DepositsCache */
|
|
21
|
-
Eth1ErrorCode["NON_CONSECUTIVE_LOGS"] = "ETH1_ERROR_NON_CONSECUTIVE_LOGS";
|
|
22
|
-
/** Expected a deposit log in the db for the index, missing log implies a corrupted db */
|
|
23
|
-
Eth1ErrorCode["MISSING_DEPOSIT_LOG"] = "ETH1_ERROR_MISSING_DEPOSIT_LOG";
|
|
24
|
-
})(Eth1ErrorCode || (Eth1ErrorCode = {}));
|
|
25
|
-
export class Eth1Error extends LodestarError {
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=errors.js.map
|
package/lib/eth1/errors.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/eth1/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAN,IAAY,aAuBX;AAvBD,WAAY,aAAa;IACvB,6BAA6B;IAC7B,6EAA4D,CAAA;IAC5D,gCAAgC;IAChC,uEAAsD,CAAA;IACtD,uCAAuC;IACvC,mEAAkD,CAAA;IAClD,wDAAwD;IACxD,qEAAoD,CAAA;IAEpD,wCAAwC;IACxC,uFAAsE,CAAA;IACtE,sCAAsC;IACtC,+DAA8C,CAAA;IAC9C,yCAAyC;IACzC,iFAAgE,CAAA;IAEhE,oFAAoF;IACpF,6EAA4D,CAAA;IAC5D,kFAAkF;IAClF,yEAAwD,CAAA;IACxD,yFAAyF;IACzF,uEAAsD,CAAA;AACxD,CAAC,EAvBW,aAAa,KAAb,aAAa,QAuBxB;AAcD,MAAM,OAAO,SAAU,SAAQ,aAA4B;CAAG"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
-
import { phase0 } from "@lodestar/types";
|
|
3
|
-
import { IBeaconDb } from "../db/index.js";
|
|
4
|
-
export declare class Eth1DataCache {
|
|
5
|
-
db: IBeaconDb;
|
|
6
|
-
config: ChainForkConfig;
|
|
7
|
-
constructor(config: ChainForkConfig, db: IBeaconDb);
|
|
8
|
-
get({ timestampRange }: {
|
|
9
|
-
timestampRange: {
|
|
10
|
-
gte: number;
|
|
11
|
-
lte: number;
|
|
12
|
-
};
|
|
13
|
-
}): Promise<phase0.Eth1DataOrdered[]>;
|
|
14
|
-
add(eth1Datas: (phase0.Eth1DataOrdered & {
|
|
15
|
-
timestamp: number;
|
|
16
|
-
})[]): Promise<void>;
|
|
17
|
-
getHighestCachedBlockNumber(): Promise<number | null>;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=eth1DataCache.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"eth1DataCache.d.ts","sourceRoot":"","sources":["../../src/eth1/eth1DataCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAEzC,qBAAa,aAAa;IACxB,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;gBAEZ,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,SAAS;IAK5C,GAAG,CAAC,EAAC,cAAc,EAAC,EAAE;QAAC,cAAc,EAAE;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAC,CAAA;KAAC,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;IAItG,GAAG,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,eAAe,GAAG;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/E,2BAA2B,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAI5D"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export class Eth1DataCache {
|
|
2
|
-
db;
|
|
3
|
-
config;
|
|
4
|
-
constructor(config, db) {
|
|
5
|
-
this.config = config;
|
|
6
|
-
this.db = db;
|
|
7
|
-
}
|
|
8
|
-
async get({ timestampRange }) {
|
|
9
|
-
return this.db.eth1Data.values(timestampRange);
|
|
10
|
-
}
|
|
11
|
-
async add(eth1Datas) {
|
|
12
|
-
await this.db.eth1Data.batchPutValues(eth1Datas);
|
|
13
|
-
}
|
|
14
|
-
async getHighestCachedBlockNumber() {
|
|
15
|
-
const highestEth1Data = await this.db.eth1Data.lastValue();
|
|
16
|
-
return highestEth1Data?.blockNumber ?? null;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=eth1DataCache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"eth1DataCache.js","sourceRoot":"","sources":["../../src/eth1/eth1DataCache.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,aAAa;IACxB,EAAE,CAAY;IACd,MAAM,CAAkB;IAExB,YAAY,MAAuB,EAAE,EAAa;QAChD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAC,cAAc,EAA+C;QACtE,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAA2D;QACnE,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,2BAA2B;QAC/B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC3D,OAAO,eAAe,EAAE,WAAW,IAAI,IAAI,CAAC;IAC9C,CAAC;CACF"}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
-
import { CachedBeaconStateAllForks } from "@lodestar/state-transition";
|
|
3
|
-
import { Logger } from "@lodestar/utils";
|
|
4
|
-
import { IBeaconDb } from "../db/index.js";
|
|
5
|
-
import { Metrics } from "../metrics/index.js";
|
|
6
|
-
import { Eth1DataAndDeposits, IEth1Provider } from "./interface.js";
|
|
7
|
-
import { Eth1Options } from "./options.js";
|
|
8
|
-
export type Eth1DepositDataTrackerModules = {
|
|
9
|
-
config: ChainForkConfig;
|
|
10
|
-
db: IBeaconDb;
|
|
11
|
-
metrics: Metrics | null;
|
|
12
|
-
logger: Logger;
|
|
13
|
-
signal: AbortSignal;
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* Main class handling eth1 data fetching, processing and storing
|
|
17
|
-
* Upon instantiation, starts fetching deposits and blocks at regular intervals
|
|
18
|
-
*/
|
|
19
|
-
export declare class Eth1DepositDataTracker {
|
|
20
|
-
private readonly eth1Provider;
|
|
21
|
-
private config;
|
|
22
|
-
private logger;
|
|
23
|
-
private signal;
|
|
24
|
-
private readonly metrics;
|
|
25
|
-
private depositsCache;
|
|
26
|
-
private eth1DataCache;
|
|
27
|
-
private lastProcessedDepositBlockNumber;
|
|
28
|
-
/** Dynamically adjusted follow distance */
|
|
29
|
-
private eth1FollowDistance;
|
|
30
|
-
/** Dynamically adjusted batch size to fetch deposit logs */
|
|
31
|
-
private eth1GetBlocksBatchSizeDynamic;
|
|
32
|
-
/** Dynamically adjusted batch size to fetch deposit logs */
|
|
33
|
-
private eth1GetLogsBatchSizeDynamic;
|
|
34
|
-
private readonly forcedEth1DataVote;
|
|
35
|
-
/** To stop `runAutoUpdate()` in addition to AbortSignal */
|
|
36
|
-
private stopPolling;
|
|
37
|
-
constructor(opts: Eth1Options, { config, db, metrics, logger, signal }: Eth1DepositDataTrackerModules, eth1Provider: IEth1Provider);
|
|
38
|
-
isPollingEth1Data(): boolean;
|
|
39
|
-
stopPollingEth1Data(): void;
|
|
40
|
-
/**
|
|
41
|
-
* Return eth1Data and deposits ready for block production for a given state
|
|
42
|
-
*/
|
|
43
|
-
getEth1DataAndDeposits(state: CachedBeaconStateAllForks): Promise<Eth1DataAndDeposits>;
|
|
44
|
-
/**
|
|
45
|
-
* Returns an eth1Data vote for a given state.
|
|
46
|
-
* Requires internal caches to be updated regularly to return good results
|
|
47
|
-
*/
|
|
48
|
-
private getEth1Data;
|
|
49
|
-
/**
|
|
50
|
-
* Returns deposits to be included for a given state and eth1Data vote.
|
|
51
|
-
* Requires internal caches to be updated regularly to return good results
|
|
52
|
-
*/
|
|
53
|
-
private getDeposits;
|
|
54
|
-
/**
|
|
55
|
-
* Abortable async setInterval that runs its callback once at max between `ms` at minimum
|
|
56
|
-
*/
|
|
57
|
-
private runAutoUpdate;
|
|
58
|
-
/**
|
|
59
|
-
* Update the deposit and block cache, returning an error if either fail
|
|
60
|
-
* @returns true if it has catched up to the remote follow block
|
|
61
|
-
*/
|
|
62
|
-
private update;
|
|
63
|
-
/**
|
|
64
|
-
* Fetch deposit events from remote eth1 node up to follow-distance block
|
|
65
|
-
* @returns true if it has catched up to the remote follow block
|
|
66
|
-
*/
|
|
67
|
-
private updateDepositCache;
|
|
68
|
-
/**
|
|
69
|
-
* Fetch block headers from a remote eth1 node up to follow-distance block
|
|
70
|
-
*
|
|
71
|
-
* depositRoot and depositCount are inferred from already fetched deposits.
|
|
72
|
-
* Calling get_deposit_root() and the smart contract for a non-latest block requires an
|
|
73
|
-
* archive node, something most users don't have access too.
|
|
74
|
-
* @returns true if it has catched up to the remote follow timestamp
|
|
75
|
-
*/
|
|
76
|
-
private updateBlockCache;
|
|
77
|
-
private getFromBlockToFetch;
|
|
78
|
-
private getLastProcessedDepositBlockNumber;
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=eth1DepositDataTracker.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"eth1DepositDataTracker.d.ts","sourceRoot":"","sources":["../../src/eth1/eth1DepositDataTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAEL,yBAAyB,EAG1B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAe,MAAM,EAA+C,MAAM,iBAAiB,CAAC;AACnG,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAG5C,OAAO,EAAC,mBAAmB,EAAsB,aAAa,EAAC,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AA6BzC,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,eAAe,CAAC;IACxB,EAAE,EAAE,SAAS,CAAC;IACd,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,qBAAa,sBAAsB;IAwB/B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAvB/B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IAGzC,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,+BAA+B,CAAuB;IAE9D,2CAA2C;IAC3C,OAAO,CAAC,kBAAkB,CAAS;IACnC,4DAA4D;IAC5D,OAAO,CAAC,6BAA6B,CAA8B;IACnE,4DAA4D;IAC5D,OAAO,CAAC,2BAA2B,CAA4B;IAC/D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAyB;IAC5D,2DAA2D;IAC3D,OAAO,CAAC,WAAW,CAAU;gBAG3B,IAAI,EAAE,WAAW,EACjB,EAAC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAC,EAAE,6BAA6B,EACnD,YAAY,EAAE,aAAa;IAuC9C,iBAAiB,IAAI,OAAO;IAI5B,mBAAmB,IAAI,IAAI;IAI3B;;OAEG;IACG,sBAAsB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAa5F;;;OAGG;YACW,WAAW;IAezB;;;OAGG;YACW,WAAW;IAkBzB;;OAEG;YACW,aAAa;IA8B3B;;;OAGG;YACW,MAAM;IAepB;;;OAGG;YACW,kBAAkB;IAoChC;;;;;;;OAOG;YACW,gBAAgB;IAiH9B,OAAO,CAAC,mBAAmB;YAOb,kCAAkC;CAMjD"}
|
|
@@ -1,317 +0,0 @@
|
|
|
1
|
-
import { becomesNewEth1Data, } from "@lodestar/state-transition";
|
|
2
|
-
import { ssz } from "@lodestar/types";
|
|
3
|
-
import { ErrorAborted, TimeoutError, fromHex, isErrorAborted, sleep } from "@lodestar/utils";
|
|
4
|
-
import { Eth1DataCache } from "./eth1DataCache.js";
|
|
5
|
-
import { Eth1DepositsCache } from "./eth1DepositsCache.js";
|
|
6
|
-
import { parseEth1Block } from "./provider/eth1Provider.js";
|
|
7
|
-
import { HttpRpcError } from "./provider/jsonRpcHttpClient.js";
|
|
8
|
-
import { isJsonRpcTruncatedError } from "./provider/utils.js";
|
|
9
|
-
import { getDeposits } from "./utils/deposits.js";
|
|
10
|
-
import { getEth1VotesToConsider, pickEth1Vote } from "./utils/eth1Vote.js";
|
|
11
|
-
const MAX_BLOCKS_PER_BLOCK_QUERY = 1000;
|
|
12
|
-
const MIN_BLOCKS_PER_BLOCK_QUERY = 10;
|
|
13
|
-
const MAX_BLOCKS_PER_LOG_QUERY = 1000;
|
|
14
|
-
const MIN_BLOCKS_PER_LOG_QUERY = 10;
|
|
15
|
-
/** Eth1 blocks happen every 14s approx, not need to update too often once synced */
|
|
16
|
-
const AUTO_UPDATE_PERIOD_MS = 60 * 1000;
|
|
17
|
-
/** Prevent infinite loops */
|
|
18
|
-
const MIN_UPDATE_PERIOD_MS = 1 * 1000;
|
|
19
|
-
/** Milliseconds to wait after getting 429 Too Many Requests */
|
|
20
|
-
const RATE_LIMITED_WAIT_MS = 30 * 1000;
|
|
21
|
-
/** Min time to wait on auto update loop on unknown error */
|
|
22
|
-
const MIN_WAIT_ON_ERROR_MS = 1 * 1000;
|
|
23
|
-
/** Number of blocks to download if the node detects it is lagging behind due to an inaccurate
|
|
24
|
-
relationship between block-number-based follow distance and time-based follow distance. */
|
|
25
|
-
const ETH1_FOLLOW_DISTANCE_DELTA_IF_SLOW = 32;
|
|
26
|
-
/** The absolute minimum follow distance to enforce when downloading catchup batches, from LH */
|
|
27
|
-
const ETH_MIN_FOLLOW_DISTANCE = 64;
|
|
28
|
-
/**
|
|
29
|
-
* Main class handling eth1 data fetching, processing and storing
|
|
30
|
-
* Upon instantiation, starts fetching deposits and blocks at regular intervals
|
|
31
|
-
*/
|
|
32
|
-
export class Eth1DepositDataTracker {
|
|
33
|
-
eth1Provider;
|
|
34
|
-
config;
|
|
35
|
-
logger;
|
|
36
|
-
signal;
|
|
37
|
-
metrics;
|
|
38
|
-
// Internal modules, state
|
|
39
|
-
depositsCache;
|
|
40
|
-
eth1DataCache;
|
|
41
|
-
lastProcessedDepositBlockNumber = null;
|
|
42
|
-
/** Dynamically adjusted follow distance */
|
|
43
|
-
eth1FollowDistance;
|
|
44
|
-
/** Dynamically adjusted batch size to fetch deposit logs */
|
|
45
|
-
eth1GetBlocksBatchSizeDynamic = MAX_BLOCKS_PER_BLOCK_QUERY;
|
|
46
|
-
/** Dynamically adjusted batch size to fetch deposit logs */
|
|
47
|
-
eth1GetLogsBatchSizeDynamic = MAX_BLOCKS_PER_LOG_QUERY;
|
|
48
|
-
forcedEth1DataVote;
|
|
49
|
-
/** To stop `runAutoUpdate()` in addition to AbortSignal */
|
|
50
|
-
stopPolling;
|
|
51
|
-
constructor(opts, { config, db, metrics, logger, signal }, eth1Provider) {
|
|
52
|
-
this.eth1Provider = eth1Provider;
|
|
53
|
-
this.config = config;
|
|
54
|
-
this.metrics = metrics;
|
|
55
|
-
this.logger = logger;
|
|
56
|
-
this.signal = signal;
|
|
57
|
-
this.eth1Provider = eth1Provider;
|
|
58
|
-
this.depositsCache = new Eth1DepositsCache(opts, config, db);
|
|
59
|
-
this.eth1DataCache = new Eth1DataCache(config, db);
|
|
60
|
-
this.eth1FollowDistance = config.ETH1_FOLLOW_DISTANCE;
|
|
61
|
-
this.stopPolling = false;
|
|
62
|
-
this.forcedEth1DataVote = opts.forcedEth1DataVote
|
|
63
|
-
? ssz.phase0.Eth1Data.deserialize(fromHex(opts.forcedEth1DataVote))
|
|
64
|
-
: null;
|
|
65
|
-
if (opts.depositContractDeployBlock === undefined) {
|
|
66
|
-
this.logger.warn("No depositContractDeployBlock provided");
|
|
67
|
-
}
|
|
68
|
-
if (metrics) {
|
|
69
|
-
// Set constant value once
|
|
70
|
-
metrics?.eth1.eth1FollowDistanceSecondsConfig.set(config.SECONDS_PER_ETH1_BLOCK * config.ETH1_FOLLOW_DISTANCE);
|
|
71
|
-
metrics.eth1.eth1FollowDistanceDynamic.addCollect(() => {
|
|
72
|
-
metrics.eth1.eth1FollowDistanceDynamic.set(this.eth1FollowDistance);
|
|
73
|
-
metrics.eth1.eth1GetBlocksBatchSizeDynamic.set(this.eth1GetBlocksBatchSizeDynamic);
|
|
74
|
-
metrics.eth1.eth1GetLogsBatchSizeDynamic.set(this.eth1GetLogsBatchSizeDynamic);
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
if (opts.enabled) {
|
|
78
|
-
this.runAutoUpdate().catch((e) => {
|
|
79
|
-
if (!(e instanceof ErrorAborted)) {
|
|
80
|
-
this.logger.error("Error on eth1 loop", {}, e);
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
isPollingEth1Data() {
|
|
86
|
-
return !this.stopPolling;
|
|
87
|
-
}
|
|
88
|
-
stopPollingEth1Data() {
|
|
89
|
-
this.stopPolling = true;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Return eth1Data and deposits ready for block production for a given state
|
|
93
|
-
*/
|
|
94
|
-
async getEth1DataAndDeposits(state) {
|
|
95
|
-
if (state.epochCtx.isPostElectra() &&
|
|
96
|
-
state.eth1DepositIndex >= state.depositRequestsStartIndex) {
|
|
97
|
-
// No need to poll eth1Data since Electra deprecates the mechanism after depositRequestsStartIndex is reached
|
|
98
|
-
return { eth1Data: state.eth1Data, deposits: [] };
|
|
99
|
-
}
|
|
100
|
-
const eth1Data = this.forcedEth1DataVote ?? (await this.getEth1Data(state));
|
|
101
|
-
const deposits = await this.getDeposits(state, eth1Data);
|
|
102
|
-
return { eth1Data, deposits };
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Returns an eth1Data vote for a given state.
|
|
106
|
-
* Requires internal caches to be updated regularly to return good results
|
|
107
|
-
*/
|
|
108
|
-
async getEth1Data(state) {
|
|
109
|
-
try {
|
|
110
|
-
const eth1VotesToConsider = await getEth1VotesToConsider(this.config, state, this.eth1DataCache.get.bind(this.eth1DataCache));
|
|
111
|
-
return pickEth1Vote(state, eth1VotesToConsider);
|
|
112
|
-
}
|
|
113
|
-
catch (e) {
|
|
114
|
-
// Note: In case there's a DB issue, don't stop a block proposal. Just vote for current eth1Data
|
|
115
|
-
this.logger.error("CRITICAL: Error reading valid votes, voting for current eth1Data", {}, e);
|
|
116
|
-
return state.eth1Data;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Returns deposits to be included for a given state and eth1Data vote.
|
|
121
|
-
* Requires internal caches to be updated regularly to return good results
|
|
122
|
-
*/
|
|
123
|
-
async getDeposits(state, eth1DataVote) {
|
|
124
|
-
// No new deposits have to be included, continue
|
|
125
|
-
if (eth1DataVote.depositCount === state.eth1DepositIndex) {
|
|
126
|
-
return [];
|
|
127
|
-
}
|
|
128
|
-
// TODO: Review if this is optimal
|
|
129
|
-
// Convert to view first to hash once and compare hashes
|
|
130
|
-
const eth1DataVoteView = ssz.phase0.Eth1Data.toViewDU(eth1DataVote);
|
|
131
|
-
// Eth1 data may change due to the vote included in this block
|
|
132
|
-
const newEth1Data = becomesNewEth1Data(state, eth1DataVoteView) ? eth1DataVoteView : state.eth1Data;
|
|
133
|
-
return getDeposits(state, newEth1Data, this.depositsCache.get.bind(this.depositsCache));
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Abortable async setInterval that runs its callback once at max between `ms` at minimum
|
|
137
|
-
*/
|
|
138
|
-
async runAutoUpdate() {
|
|
139
|
-
let lastRunMs = 0;
|
|
140
|
-
while (!this.signal.aborted && !this.stopPolling) {
|
|
141
|
-
lastRunMs = Date.now();
|
|
142
|
-
try {
|
|
143
|
-
const hasCaughtUp = await this.update();
|
|
144
|
-
this.metrics?.eth1.depositTrackerIsCaughtup.set(hasCaughtUp ? 1 : 0);
|
|
145
|
-
if (hasCaughtUp) {
|
|
146
|
-
const sleepTimeMs = Math.max(AUTO_UPDATE_PERIOD_MS + lastRunMs - Date.now(), MIN_UPDATE_PERIOD_MS);
|
|
147
|
-
await sleep(sleepTimeMs, this.signal);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
catch (e) {
|
|
151
|
-
this.metrics?.eth1.depositTrackerUpdateErrors.inc(1);
|
|
152
|
-
// From Infura: 429 Too Many Requests
|
|
153
|
-
if (e instanceof HttpRpcError && e.status === 429) {
|
|
154
|
-
this.logger.debug("Eth1 provider rate limited", {}, e);
|
|
155
|
-
await sleep(RATE_LIMITED_WAIT_MS, this.signal);
|
|
156
|
-
// only log error if state switched from online to some other state
|
|
157
|
-
}
|
|
158
|
-
else if (!isErrorAborted(e)) {
|
|
159
|
-
await sleep(MIN_WAIT_ON_ERROR_MS, this.signal);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Update the deposit and block cache, returning an error if either fail
|
|
166
|
-
* @returns true if it has catched up to the remote follow block
|
|
167
|
-
*/
|
|
168
|
-
async update() {
|
|
169
|
-
const remoteHighestBlock = await this.eth1Provider.getBlockNumber();
|
|
170
|
-
this.metrics?.eth1.remoteHighestBlock.set(remoteHighestBlock);
|
|
171
|
-
const remoteFollowBlock = remoteHighestBlock - this.eth1FollowDistance;
|
|
172
|
-
// If remoteFollowBlock is not at or beyond deployBlock, there is no need to
|
|
173
|
-
// fetch and track any deposit data yet
|
|
174
|
-
if (remoteFollowBlock < (this.eth1Provider.deployBlock ?? 0))
|
|
175
|
-
return true;
|
|
176
|
-
const hasCaughtUpDeposits = await this.updateDepositCache(remoteFollowBlock);
|
|
177
|
-
const hasCaughtUpBlocks = await this.updateBlockCache(remoteFollowBlock);
|
|
178
|
-
return hasCaughtUpDeposits && hasCaughtUpBlocks;
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Fetch deposit events from remote eth1 node up to follow-distance block
|
|
182
|
-
* @returns true if it has catched up to the remote follow block
|
|
183
|
-
*/
|
|
184
|
-
async updateDepositCache(remoteFollowBlock) {
|
|
185
|
-
const lastProcessedDepositBlockNumber = await this.getLastProcessedDepositBlockNumber();
|
|
186
|
-
// The DB may contain deposits from a different chain making lastProcessedDepositBlockNumber > current chain tip
|
|
187
|
-
// The Math.min() fixes those rare scenarios where fromBlock > toBlock
|
|
188
|
-
const fromBlock = Math.min(remoteFollowBlock, this.getFromBlockToFetch(lastProcessedDepositBlockNumber));
|
|
189
|
-
const toBlock = Math.min(remoteFollowBlock, fromBlock + this.eth1GetLogsBatchSizeDynamic - 1);
|
|
190
|
-
let depositEvents;
|
|
191
|
-
try {
|
|
192
|
-
depositEvents = await this.eth1Provider.getDepositEvents(fromBlock, toBlock);
|
|
193
|
-
// Increase the batch size linearly even if we scale down exponentially (half each time)
|
|
194
|
-
this.eth1GetLogsBatchSizeDynamic = Math.min(MAX_BLOCKS_PER_LOG_QUERY, this.eth1GetLogsBatchSizeDynamic + MIN_BLOCKS_PER_LOG_QUERY);
|
|
195
|
-
}
|
|
196
|
-
catch (e) {
|
|
197
|
-
if (isJsonRpcTruncatedError(e) || e instanceof TimeoutError) {
|
|
198
|
-
this.eth1GetLogsBatchSizeDynamic = Math.max(MIN_BLOCKS_PER_LOG_QUERY, Math.floor(this.eth1GetLogsBatchSizeDynamic / 2));
|
|
199
|
-
}
|
|
200
|
-
throw e;
|
|
201
|
-
}
|
|
202
|
-
this.logger.verbose("Fetched deposits", { depositCount: depositEvents.length, fromBlock, toBlock });
|
|
203
|
-
this.metrics?.eth1.depositEventsFetched.inc(depositEvents.length);
|
|
204
|
-
await this.depositsCache.add(depositEvents);
|
|
205
|
-
// Store the `toBlock` since that block may not contain
|
|
206
|
-
this.lastProcessedDepositBlockNumber = toBlock;
|
|
207
|
-
this.metrics?.eth1.lastProcessedDepositBlockNumber.set(toBlock);
|
|
208
|
-
return toBlock >= remoteFollowBlock;
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Fetch block headers from a remote eth1 node up to follow-distance block
|
|
212
|
-
*
|
|
213
|
-
* depositRoot and depositCount are inferred from already fetched deposits.
|
|
214
|
-
* Calling get_deposit_root() and the smart contract for a non-latest block requires an
|
|
215
|
-
* archive node, something most users don't have access too.
|
|
216
|
-
* @returns true if it has catched up to the remote follow timestamp
|
|
217
|
-
*/
|
|
218
|
-
async updateBlockCache(remoteFollowBlock) {
|
|
219
|
-
const lastCachedBlock = await this.eth1DataCache.getHighestCachedBlockNumber();
|
|
220
|
-
// lastProcessedDepositBlockNumber sets the upper bound of the possible block range to fetch in this update
|
|
221
|
-
const lastProcessedDepositBlockNumber = await this.getLastProcessedDepositBlockNumber();
|
|
222
|
-
// lowestEventBlockNumber set a lower bound of possible block range to fetch in this update
|
|
223
|
-
const lowestEventBlockNumber = await this.depositsCache.getLowestDepositEventBlockNumber();
|
|
224
|
-
// We are all caught up if:
|
|
225
|
-
// 1. If lowestEventBlockNumber is null = no deposits have been fetch or found yet.
|
|
226
|
-
// So there's not useful blocks to fetch until at least 1 deposit is found.
|
|
227
|
-
// 2. If the remoteFollowBlock is behind the lowestEventBlockNumber. This can happen
|
|
228
|
-
// if the EL's data was wiped and restarted. Not exiting here would other wise
|
|
229
|
-
// cause a NO_DEPOSITS_FOR_BLOCK_RANGE error
|
|
230
|
-
if (lowestEventBlockNumber === null ||
|
|
231
|
-
lastProcessedDepositBlockNumber === null ||
|
|
232
|
-
remoteFollowBlock < lowestEventBlockNumber) {
|
|
233
|
-
return true;
|
|
234
|
-
}
|
|
235
|
-
// Cap the upper limit of fromBlock with remoteFollowBlock in case deployBlock is set to a different network value
|
|
236
|
-
const fromBlock = Math.min(remoteFollowBlock,
|
|
237
|
-
// Fetch from the last cached block or the lowest known deposit block number
|
|
238
|
-
Math.max(this.getFromBlockToFetch(lastCachedBlock), lowestEventBlockNumber));
|
|
239
|
-
const toBlock = Math.min(remoteFollowBlock, fromBlock + this.eth1GetBlocksBatchSizeDynamic - 1, // Block range is inclusive
|
|
240
|
-
lastProcessedDepositBlockNumber);
|
|
241
|
-
let blocksRaw;
|
|
242
|
-
try {
|
|
243
|
-
blocksRaw = await this.eth1Provider.getBlocksByNumber(fromBlock, toBlock);
|
|
244
|
-
// Increase the batch size linearly even if we scale down exponentially (half each time)
|
|
245
|
-
this.eth1GetBlocksBatchSizeDynamic = Math.min(MAX_BLOCKS_PER_BLOCK_QUERY, this.eth1GetBlocksBatchSizeDynamic + MIN_BLOCKS_PER_BLOCK_QUERY);
|
|
246
|
-
}
|
|
247
|
-
catch (e) {
|
|
248
|
-
if (isJsonRpcTruncatedError(e) || e instanceof TimeoutError) {
|
|
249
|
-
this.eth1GetBlocksBatchSizeDynamic = Math.max(MIN_BLOCKS_PER_BLOCK_QUERY, Math.floor(this.eth1GetBlocksBatchSizeDynamic / 2));
|
|
250
|
-
}
|
|
251
|
-
throw e;
|
|
252
|
-
}
|
|
253
|
-
const blocks = blocksRaw.map(parseEth1Block);
|
|
254
|
-
this.logger.verbose("Fetched eth1 blocks", { blockCount: blocks.length, fromBlock, toBlock });
|
|
255
|
-
this.metrics?.eth1.blocksFetched.inc(blocks.length);
|
|
256
|
-
this.metrics?.eth1.lastFetchedBlockBlockNumber.set(toBlock);
|
|
257
|
-
const lastBlock = blocks.at(-1);
|
|
258
|
-
if (lastBlock) {
|
|
259
|
-
this.metrics?.eth1.lastFetchedBlockTimestamp.set(lastBlock.timestamp);
|
|
260
|
-
}
|
|
261
|
-
const eth1Datas = await this.depositsCache.getEth1DataForBlocks(blocks, lastProcessedDepositBlockNumber);
|
|
262
|
-
await this.eth1DataCache.add(eth1Datas);
|
|
263
|
-
// Note: ETH1_FOLLOW_DISTANCE_SECONDS = ETH1_FOLLOW_DISTANCE * SECONDS_PER_ETH1_BLOCK
|
|
264
|
-
// Deposit tracker must fetch blocks and deposits up to ETH1_FOLLOW_DISTANCE_SECONDS,
|
|
265
|
-
// measured in time not blocks. To vote on valid votes it must populate up to the time based follow distance.
|
|
266
|
-
// If it assumes SECONDS_PER_ETH1_BLOCK but block times are:
|
|
267
|
-
// - slower: Cache will not contain all blocks
|
|
268
|
-
// - faster: Cache will contain all required blocks + some ahead of timed follow distance
|
|
269
|
-
//
|
|
270
|
-
// For mainnet we must fetch blocks up until block.timestamp < now - 28672 sec. Based on follow distance:
|
|
271
|
-
// Block times | actual follow distance
|
|
272
|
-
// 14 | 2048
|
|
273
|
-
// 20 | 1434
|
|
274
|
-
// 30 | 956
|
|
275
|
-
// 60 | 478
|
|
276
|
-
//
|
|
277
|
-
// So if after fetching the block at ETH1_FOLLOW_DISTANCE, but it's timestamp is not greater than
|
|
278
|
-
// ETH1_FOLLOW_DISTANCE_SECONDS, reduce the ETH1_FOLLOW_DISTANCE by a small delta and fetch more blocks.
|
|
279
|
-
// Otherwise if the last fetched block if above ETH1_FOLLOW_DISTANCE_SECONDS, reduce ETH1_FOLLOW_DISTANCE.
|
|
280
|
-
if (toBlock < remoteFollowBlock) {
|
|
281
|
-
return false;
|
|
282
|
-
}
|
|
283
|
-
if (!lastBlock) {
|
|
284
|
-
return true;
|
|
285
|
-
}
|
|
286
|
-
const remoteFollowBlockTimestamp = Math.round(Date.now() / 1000) - this.config.SECONDS_PER_ETH1_BLOCK * this.config.ETH1_FOLLOW_DISTANCE;
|
|
287
|
-
const blockAfterTargetTimestamp = blocks.find((block) => block.timestamp >= remoteFollowBlockTimestamp);
|
|
288
|
-
if (blockAfterTargetTimestamp) {
|
|
289
|
-
// Catched up to target timestamp, increase eth1FollowDistance. Limit max config.ETH1_FOLLOW_DISTANCE.
|
|
290
|
-
// If the block that's right above the timestamp has been fetched now, use it to compute the precise delta.
|
|
291
|
-
const delta = Math.max(lastBlock.blockNumber - blockAfterTargetTimestamp.blockNumber, 1);
|
|
292
|
-
this.eth1FollowDistance = Math.min(this.eth1FollowDistance + delta, this.config.ETH1_FOLLOW_DISTANCE);
|
|
293
|
-
return true;
|
|
294
|
-
}
|
|
295
|
-
// Blocks are slower than expected, reduce eth1FollowDistance. Limit min CATCHUP_MIN_FOLLOW_DISTANCE
|
|
296
|
-
const delta = this.eth1FollowDistance -
|
|
297
|
-
Math.max(this.eth1FollowDistance - ETH1_FOLLOW_DISTANCE_DELTA_IF_SLOW, ETH_MIN_FOLLOW_DISTANCE);
|
|
298
|
-
this.eth1FollowDistance = this.eth1FollowDistance - delta;
|
|
299
|
-
// Even if the blocks are slow, when we are all caught up as there is no
|
|
300
|
-
// further possibility to reduce follow distance, we need to call it quits
|
|
301
|
-
// for now, else it leads to an incessant poll on the EL
|
|
302
|
-
return delta === 0;
|
|
303
|
-
}
|
|
304
|
-
getFromBlockToFetch(lastCachedBlock) {
|
|
305
|
-
if (lastCachedBlock === null) {
|
|
306
|
-
return this.eth1Provider.deployBlock ?? 0;
|
|
307
|
-
}
|
|
308
|
-
return lastCachedBlock + 1;
|
|
309
|
-
}
|
|
310
|
-
async getLastProcessedDepositBlockNumber() {
|
|
311
|
-
if (this.lastProcessedDepositBlockNumber === null) {
|
|
312
|
-
this.lastProcessedDepositBlockNumber = await this.depositsCache.getHighestDepositEventBlockNumber();
|
|
313
|
-
}
|
|
314
|
-
return this.lastProcessedDepositBlockNumber;
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
//# sourceMappingURL=eth1DepositDataTracker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"eth1DepositDataTracker.js","sourceRoot":"","sources":["../../src/eth1/eth1DepositDataTracker.ts"],"names":[],"mappings":"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"}
|