@lodestar/beacon-node 1.22.0-dev.ba80aa345a → 1.22.0-dev.d6e8c057d2
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/index.js +22 -10
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +31 -4
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/api/impl/config/constants.d.ts +5 -1
- package/lib/api/impl/config/constants.js +7 -2
- package/lib/api/impl/config/constants.js.map +1 -1
- package/lib/api/impl/lodestar/index.js +2 -2
- package/lib/api/impl/lodestar/index.js.map +1 -1
- package/lib/api/impl/validator/index.js +37 -14
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/archiver/archiveBlocks.js +6 -7
- package/lib/chain/archiver/archiveBlocks.js.map +1 -1
- package/lib/chain/archiver/archiveStates.d.ts +3 -1
- package/lib/chain/archiver/archiveStates.js +6 -3
- package/lib/chain/archiver/archiveStates.js.map +1 -1
- package/lib/chain/archiver/index.js +1 -1
- package/lib/chain/archiver/index.js.map +1 -1
- package/lib/chain/balancesCache.js +2 -2
- package/lib/chain/balancesCache.js.map +1 -1
- package/lib/chain/blocks/importBlock.js +10 -9
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/index.js +2 -2
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +2 -2
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +4 -4
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -6
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.js +3 -3
- package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.js +3 -3
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/chain.d.ts +42 -0
- package/lib/chain/chain.js +53 -22
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/errors/attestationError.d.ts +13 -1
- package/lib/chain/errors/attestationError.js +10 -2
- package/lib/chain/errors/attestationError.js.map +1 -1
- package/lib/chain/errors/blockError.js +3 -4
- package/lib/chain/errors/blockError.js.map +1 -1
- package/lib/chain/forkChoice/index.js +9 -9
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/historicalState/worker.js +4 -0
- package/lib/chain/historicalState/worker.js.map +1 -1
- package/lib/chain/initState.d.ts +3 -3
- package/lib/chain/initState.js +13 -13
- package/lib/chain/initState.js.map +1 -1
- package/lib/chain/interface.d.ts +2 -0
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/lightClient/index.js +9 -10
- package/lib/chain/lightClient/index.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts +46 -12
- package/lib/chain/opPools/aggregatedAttestationPool.js +229 -63
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/attestationPool.d.ts +22 -6
- package/lib/chain/opPools/attestationPool.js +61 -27
- package/lib/chain/opPools/attestationPool.js.map +1 -1
- package/lib/chain/opPools/opPool.d.ts +2 -2
- package/lib/chain/opPools/opPool.js +8 -6
- package/lib/chain/opPools/opPool.js.map +1 -1
- package/lib/chain/opPools/syncCommitteeMessagePool.js +4 -4
- package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
- package/lib/chain/opPools/syncContributionAndProofPool.js +4 -4
- package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
- package/lib/chain/opPools/utils.d.ts +2 -0
- package/lib/chain/opPools/utils.js +3 -0
- package/lib/chain/opPools/utils.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +7 -6
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/regen/queued.d.ts +6 -1
- package/lib/chain/regen/queued.js +41 -3
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/regen/regen.d.ts +1 -1
- package/lib/chain/regen/regen.js +50 -14
- package/lib/chain/regen/regen.js.map +1 -1
- package/lib/chain/seenCache/seenAttestationData.d.ts +13 -5
- package/lib/chain/seenCache/seenAttestationData.js +5 -3
- package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
- package/lib/chain/seenCache/seenCommitteeContribution.js +2 -3
- package/lib/chain/seenCache/seenCommitteeContribution.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js +3 -4
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/serializeState.d.ts +6 -0
- package/lib/chain/serializeState.js +22 -0
- package/lib/chain/serializeState.js.map +1 -0
- package/lib/chain/shufflingCache.js +2 -3
- package/lib/chain/shufflingCache.js.map +1 -1
- package/lib/chain/stateCache/blockStateCacheImpl.d.ts +1 -0
- package/lib/chain/stateCache/blockStateCacheImpl.js +8 -5
- package/lib/chain/stateCache/blockStateCacheImpl.js.map +1 -1
- package/lib/chain/stateCache/datastore/file.js +5 -5
- package/lib/chain/stateCache/datastore/file.js.map +1 -1
- package/lib/chain/stateCache/fifoBlockStateCache.d.ts +1 -0
- package/lib/chain/stateCache/fifoBlockStateCache.js +6 -3
- package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
- package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts +1 -0
- package/lib/chain/stateCache/inMemoryCheckpointsCache.js +7 -5
- package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +2 -2
- package/lib/chain/stateCache/persistentCheckpointsCache.js +35 -60
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/stateCache/types.d.ts +4 -0
- package/lib/chain/stateCache/types.js.map +1 -1
- package/lib/chain/validation/aggregateAndProof.d.ts +4 -4
- package/lib/chain/validation/aggregateAndProof.js +26 -9
- package/lib/chain/validation/aggregateAndProof.js.map +1 -1
- package/lib/chain/validation/attestation.d.ts +27 -6
- package/lib/chain/validation/attestation.js +115 -37
- package/lib/chain/validation/attestation.js.map +1 -1
- package/lib/chain/validation/attesterSlashing.js +2 -1
- package/lib/chain/validation/attesterSlashing.js.map +1 -1
- package/lib/chain/validation/blobSidecar.js +4 -4
- package/lib/chain/validation/blobSidecar.js.map +1 -1
- package/lib/chain/validation/block.js +3 -4
- package/lib/chain/validation/block.js.map +1 -1
- package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts +4 -3
- package/lib/chain/validation/signatureSets/aggregateAndProof.js +3 -2
- package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
- package/lib/chain/validation/syncCommittee.js +2 -2
- package/lib/chain/validation/syncCommittee.js.map +1 -1
- package/lib/eth1/eth1DepositDataTracker.d.ts +5 -2
- package/lib/eth1/eth1DepositDataTracker.js +13 -2
- package/lib/eth1/eth1DepositDataTracker.js.map +1 -1
- package/lib/eth1/eth1MergeBlockTracker.js +2 -3
- package/lib/eth1/eth1MergeBlockTracker.js.map +1 -1
- package/lib/eth1/index.d.ts +2 -0
- package/lib/eth1/index.js +8 -2
- package/lib/eth1/index.js.map +1 -1
- package/lib/eth1/interface.d.ts +4 -0
- package/lib/eth1/provider/eth1Provider.js +2 -3
- package/lib/eth1/provider/eth1Provider.js.map +1 -1
- package/lib/eth1/provider/utils.js +4 -5
- package/lib/eth1/provider/utils.js.map +1 -1
- package/lib/eth1/utils/depositContract.js +5 -5
- package/lib/eth1/utils/depositContract.js.map +1 -1
- package/lib/eth1/utils/deposits.d.ts +2 -2
- package/lib/eth1/utils/deposits.js +8 -7
- package/lib/eth1/utils/deposits.js.map +1 -1
- package/lib/eth1/utils/eth1Vote.js +2 -3
- package/lib/eth1/utils/eth1Vote.js.map +1 -1
- package/lib/execution/engine/http.d.ts +2 -2
- package/lib/execution/engine/http.js +19 -15
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +4 -4
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/execution/engine/mock.d.ts +1 -0
- package/lib/execution/engine/mock.js +6 -0
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/payloadIdCache.d.ts +17 -0
- package/lib/execution/engine/payloadIdCache.js.map +1 -1
- package/lib/execution/engine/types.d.ts +29 -3
- package/lib/execution/engine/types.js +81 -0
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +3 -0
- package/lib/metrics/metrics/beacon.js +6 -0
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +30 -3
- package/lib/metrics/metrics/lodestar.js +63 -4
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/metrics/validatorMonitor.d.ts +1 -1
- package/lib/metrics/validatorMonitor.js +15 -10
- package/lib/metrics/validatorMonitor.js.map +1 -1
- package/lib/network/core/networkCore.js +2 -3
- package/lib/network/core/networkCore.js.map +1 -1
- package/lib/network/gossip/encoding.js +6 -2
- package/lib/network/gossip/encoding.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +5 -5
- package/lib/network/gossip/interface.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +1720 -129
- package/lib/network/gossip/topic.js +5 -5
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +2 -2
- package/lib/network/network.d.ts +2 -2
- package/lib/network/network.js.map +1 -1
- package/lib/network/peers/utils/assertPeerRelevance.js +3 -3
- package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
- package/lib/network/processor/gossipHandlers.js +10 -11
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/index.js +5 -2
- package/lib/network/processor/gossipQueues/index.js.map +1 -1
- package/lib/network/processor/gossipQueues/indexed.js +1 -0
- package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +2 -2
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRoot.js +2 -2
- package/lib/network/reqresp/handlers/beaconBlocksByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +2 -2
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
- package/lib/sync/backfill/backfill.js +16 -17
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/range/chain.js +2 -3
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/range/range.js +4 -4
- package/lib/sync/range/range.js.map +1 -1
- package/lib/sync/range/utils/chainTarget.js +2 -2
- package/lib/sync/range/utils/chainTarget.js.map +1 -1
- package/lib/sync/range/utils/hashBlocks.js +4 -4
- package/lib/sync/range/utils/hashBlocks.js.map +1 -1
- package/lib/sync/unknownBlock.js +13 -14
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/util/bufferPool.d.ts +7 -2
- package/lib/util/bufferPool.js +13 -7
- package/lib/util/bufferPool.js.map +1 -1
- package/lib/util/sszBytes.d.ts +31 -8
- package/lib/util/sszBytes.js +85 -21
- package/lib/util/sszBytes.js.map +1 -1
- package/package.json +15 -15
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { toHexString } from "@chainsafe/ssz";
|
|
2
1
|
import { computeEpochAtSlot, isStateValidatorsNodesPopulated, DataAvailableStatus, } from "@lodestar/state-transition";
|
|
3
2
|
import { ForkName } from "@lodestar/params";
|
|
4
3
|
import { ExecutionStatus } from "@lodestar/fork-choice";
|
|
4
|
+
import { toRootHex } from "@lodestar/utils";
|
|
5
5
|
import { BlockError, BlockErrorCode } from "../errors/index.js";
|
|
6
6
|
import { RegenCaller } from "../regen/index.js";
|
|
7
7
|
import { BlockInputType } from "./types.js";
|
|
@@ -142,9 +142,9 @@ export async function verifyBlocksInEpoch(parentBlock, blocksInput, opts) {
|
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
144
|
function logOnPowBlock(logger, config, mergeBlock) {
|
|
145
|
-
const mergeBlockHash =
|
|
146
|
-
const mergeExecutionHash =
|
|
147
|
-
const mergePowHash =
|
|
145
|
+
const mergeBlockHash = toRootHex(config.getForkTypes(mergeBlock.slot).BeaconBlock.hashTreeRoot(mergeBlock));
|
|
146
|
+
const mergeExecutionHash = toRootHex(mergeBlock.body.executionPayload.blockHash);
|
|
147
|
+
const mergePowHash = toRootHex(mergeBlock.body.executionPayload.parentHash);
|
|
148
148
|
logger.info(POS_PANDA_MERGE_TRANSITION_BANNER);
|
|
149
149
|
logger.info("Execution transitioning from PoW to PoS!!!");
|
|
150
150
|
logger.info("Importing block referencing terminal PoW block", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlock.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlock.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"verifyBlock.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { toHexString } from "@chainsafe/ssz";
|
|
2
1
|
import { isExecutionStateType, isExecutionBlockBodyType, isMergeTransitionBlock as isMergeTransitionBlockFn, isExecutionEnabled, } from "@lodestar/state-transition";
|
|
3
2
|
import { assertValidTerminalPowBlock, ExecutionStatus, } from "@lodestar/fork-choice";
|
|
4
|
-
import { ErrorAborted } from "@lodestar/utils";
|
|
3
|
+
import { ErrorAborted, toRootHex } from "@lodestar/utils";
|
|
5
4
|
import { ForkSeq, SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY } from "@lodestar/params";
|
|
6
5
|
import { BlockError, BlockErrorCode } from "../errors/index.js";
|
|
7
6
|
import { kzgCommitmentToVersionedHash } from "../../util/blobs.js";
|
|
@@ -128,8 +127,8 @@ export async function verifyBlocksExecutionPayload(chain, parentBlock, blocks, p
|
|
|
128
127
|
// in import block
|
|
129
128
|
if (isMergeTransitionBlock) {
|
|
130
129
|
const mergeBlock = block.message;
|
|
131
|
-
const mergeBlockHash =
|
|
132
|
-
const powBlockRootHex =
|
|
130
|
+
const mergeBlockHash = toRootHex(chain.config.getForkTypes(mergeBlock.slot).BeaconBlock.hashTreeRoot(mergeBlock));
|
|
131
|
+
const powBlockRootHex = toRootHex(mergeBlock.body.executionPayload.parentHash);
|
|
133
132
|
const powBlock = await chain.eth1.getPowBlock(powBlockRootHex).catch((error) => {
|
|
134
133
|
// Lets just warn the user here, errors if any will be reported on
|
|
135
134
|
// `assertValidTerminalPowBlock` checks
|
|
@@ -214,7 +213,7 @@ export async function verifyBlockExecutionPayload(chain, block, preState0, opts,
|
|
|
214
213
|
const lvhResponse = {
|
|
215
214
|
executionStatus,
|
|
216
215
|
latestValidExecHash: execResult.latestValidHash,
|
|
217
|
-
invalidateFromParentBlockRoot:
|
|
216
|
+
invalidateFromParentBlockRoot: toRootHex(block.message.parentRoot),
|
|
218
217
|
};
|
|
219
218
|
const execError = new BlockError(block, {
|
|
220
219
|
code: BlockErrorCode.EXECUTION_ENGINE_ERROR,
|
|
@@ -277,7 +276,7 @@ function getSegmentErrorResponse({ verifyResponse, blockIndex }, parentBlock, bl
|
|
|
277
276
|
let lvhFound = false;
|
|
278
277
|
for (let mayBeLVHIndex = blockIndex - 1; mayBeLVHIndex >= 0; mayBeLVHIndex--) {
|
|
279
278
|
const block = blocks[mayBeLVHIndex];
|
|
280
|
-
if (
|
|
279
|
+
if (toRootHex(block.message.body.executionPayload.blockHash) ===
|
|
281
280
|
lvhResponse.latestValidExecHash) {
|
|
282
281
|
lvhFound = true;
|
|
283
282
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlocksExecutionPayloads.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksExecutionPayloads.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"verifyBlocksExecutionPayloads.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksExecutionPayloads.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { computeStartSlotAtEpoch } from "@lodestar/state-transition";
|
|
2
|
-
import {
|
|
2
|
+
import { toRootHex } from "@lodestar/utils";
|
|
3
3
|
import { BlockError, BlockErrorCode } from "../errors/index.js";
|
|
4
4
|
/**
|
|
5
5
|
* Verifies some early cheap sanity checks on the block before running the full state transition.
|
|
@@ -50,7 +50,7 @@ export function verifyBlocksSanityChecks(chain, blocks, opts) {
|
|
|
50
50
|
}
|
|
51
51
|
else {
|
|
52
52
|
// When importing a block segment, only the first NON-IGNORED block must be known to the fork-choice.
|
|
53
|
-
const parentRoot =
|
|
53
|
+
const parentRoot = toRootHex(block.message.parentRoot);
|
|
54
54
|
parentBlock = chain.forkChoice.getBlockHex(parentRoot);
|
|
55
55
|
if (!parentBlock) {
|
|
56
56
|
throw new BlockError(block, { code: BlockErrorCode.PARENT_UNKNOWN, parentRoot });
|
|
@@ -67,7 +67,7 @@ export function verifyBlocksSanityChecks(chain, blocks, opts) {
|
|
|
67
67
|
}
|
|
68
68
|
// Not already known
|
|
69
69
|
// IGNORE if `partiallyVerifiedBlock.ignoreIfKnown`
|
|
70
|
-
const blockHash =
|
|
70
|
+
const blockHash = toRootHex(chain.config.getForkTypes(block.message.slot).BeaconBlock.hashTreeRoot(block.message));
|
|
71
71
|
if (chain.forkChoice.hasBlockHex(blockHash)) {
|
|
72
72
|
if (opts.ignoreIfKnown) {
|
|
73
73
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlocksSanityChecks.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksSanityChecks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,4BAA4B,CAAC;AAInE,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"verifyBlocksSanityChecks.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksSanityChecks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { toRootHex } from "@lodestar/utils";
|
|
2
2
|
import { BlockInputType } from "./types.js";
|
|
3
3
|
/**
|
|
4
4
|
* Persists block input data to DB. This operation must be eventually completed if a block is imported to the fork-choice.
|
|
@@ -12,7 +12,7 @@ export async function writeBlockInputToDb(blocksInput) {
|
|
|
12
12
|
for (const blockInput of blocksInput) {
|
|
13
13
|
const { block, blockBytes } = blockInput;
|
|
14
14
|
const blockRoot = this.config.getForkTypes(block.message.slot).BeaconBlock.hashTreeRoot(block.message);
|
|
15
|
-
const blockRootHex =
|
|
15
|
+
const blockRootHex = toRootHex(blockRoot);
|
|
16
16
|
if (blockBytes) {
|
|
17
17
|
// skip serializing data if we already have it
|
|
18
18
|
this.metrics?.importBlock.persistBlockWithSerializedDataCount.inc();
|
|
@@ -51,7 +51,7 @@ export async function removeEagerlyPersistedBlockInputs(blockInputs) {
|
|
|
51
51
|
for (const blockInput of blockInputs) {
|
|
52
52
|
const { block, type } = blockInput;
|
|
53
53
|
const blockRoot = this.config.getForkTypes(block.message.slot).BeaconBlock.hashTreeRoot(block.message);
|
|
54
|
-
const blockRootHex =
|
|
54
|
+
const blockRootHex = toRootHex(blockRoot);
|
|
55
55
|
if (!this.forkChoice.hasBlockHex(blockRootHex)) {
|
|
56
56
|
blockToRemove.push(block);
|
|
57
57
|
if (type === BlockInputType.availableData) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writeBlockInputToDb.js","sourceRoot":"","sources":["../../../src/chain/blocks/writeBlockInputToDb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"writeBlockInputToDb.js","sourceRoot":"","sources":["../../../src/chain/blocks/writeBlockInputToDb.ts"],"names":[],"mappings":"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"}
|
package/lib/chain/chain.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { Metrics } from "../metrics/index.js";
|
|
|
10
10
|
import { IEth1ForBlockProduction } from "../eth1/index.js";
|
|
11
11
|
import { IExecutionEngine, IExecutionBuilder } from "../execution/index.js";
|
|
12
12
|
import { IClock } from "../util/clock.js";
|
|
13
|
+
import { BufferPool } from "../util/bufferPool.js";
|
|
13
14
|
import { BlockProcessor, ImportBlockOpts } from "./blocks/index.js";
|
|
14
15
|
import { ChainEventEmitter } from "./emitter.js";
|
|
15
16
|
import { IBeaconChain, ProposerPreparationData, StateGetOpts, CommonBlockBody } from "./interface.js";
|
|
@@ -43,6 +44,7 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
43
44
|
readonly config: BeaconConfig;
|
|
44
45
|
readonly logger: Logger;
|
|
45
46
|
readonly metrics: Metrics | null;
|
|
47
|
+
readonly bufferPool: BufferPool | null;
|
|
46
48
|
readonly anchorStateLatestBlockSlot: Slot;
|
|
47
49
|
readonly bls: IBlsVerifier;
|
|
48
50
|
readonly forkChoice: IForkChoice;
|
|
@@ -132,6 +134,46 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
132
134
|
extraData: import("@chainsafe/ssz").ByteListType;
|
|
133
135
|
baseFeePerGas: import("@chainsafe/ssz").UintBigintType;
|
|
134
136
|
blockHash: import("@chainsafe/ssz").ByteVectorType;
|
|
137
|
+
}> | import("@chainsafe/ssz").ValueOfFields<{
|
|
138
|
+
depositRequests: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ContainerType<{
|
|
139
|
+
pubkey: import("@chainsafe/ssz").ByteVectorType;
|
|
140
|
+
withdrawalCredentials: import("@chainsafe/ssz").ByteVectorType;
|
|
141
|
+
amount: import("@chainsafe/ssz").UintNumberType;
|
|
142
|
+
signature: import("@chainsafe/ssz").ByteVectorType;
|
|
143
|
+
index: import("@chainsafe/ssz").UintNumberType;
|
|
144
|
+
}>>;
|
|
145
|
+
withdrawalRequests: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ContainerType<{
|
|
146
|
+
sourceAddress: import("@lodestar/types/lib/utils/executionAddress.js").ExecutionAddressType;
|
|
147
|
+
validatorPubkey: import("@chainsafe/ssz").ByteVectorType;
|
|
148
|
+
amount: import("@chainsafe/ssz").UintNumberType;
|
|
149
|
+
}>>;
|
|
150
|
+
consolidationRequests: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ContainerType<{
|
|
151
|
+
sourceAddress: import("@lodestar/types/lib/utils/executionAddress.js").ExecutionAddressType;
|
|
152
|
+
sourcePubkey: import("@chainsafe/ssz").ByteVectorType;
|
|
153
|
+
targetPubkey: import("@chainsafe/ssz").ByteVectorType;
|
|
154
|
+
}>>;
|
|
155
|
+
blobGasUsed: import("@chainsafe/ssz").UintBigintType;
|
|
156
|
+
excessBlobGas: import("@chainsafe/ssz").UintBigintType;
|
|
157
|
+
withdrawals: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ContainerType<{
|
|
158
|
+
index: import("@chainsafe/ssz").UintNumberType;
|
|
159
|
+
validatorIndex: import("@chainsafe/ssz").UintNumberType;
|
|
160
|
+
address: import("@lodestar/types/lib/utils/executionAddress.js").ExecutionAddressType;
|
|
161
|
+
amount: import("@chainsafe/ssz").UintBigintType;
|
|
162
|
+
}>>;
|
|
163
|
+
transactions: import("@chainsafe/ssz").ListCompositeType<import("@chainsafe/ssz").ByteListType>;
|
|
164
|
+
parentHash: import("@chainsafe/ssz").ByteVectorType;
|
|
165
|
+
feeRecipient: import("@lodestar/types/lib/utils/executionAddress.js").ExecutionAddressType;
|
|
166
|
+
stateRoot: import("@chainsafe/ssz").ByteVectorType;
|
|
167
|
+
receiptsRoot: import("@chainsafe/ssz").ByteVectorType;
|
|
168
|
+
logsBloom: import("@chainsafe/ssz").ByteVectorType;
|
|
169
|
+
prevRandao: import("@chainsafe/ssz").ByteVectorType;
|
|
170
|
+
blockNumber: import("@chainsafe/ssz").UintNumberType;
|
|
171
|
+
gasLimit: import("@chainsafe/ssz").UintNumberType;
|
|
172
|
+
gasUsed: import("@chainsafe/ssz").UintNumberType;
|
|
173
|
+
timestamp: import("@chainsafe/ssz").UintNumberType;
|
|
174
|
+
extraData: import("@chainsafe/ssz").ByteListType;
|
|
175
|
+
baseFeePerGas: import("@chainsafe/ssz").UintBigintType;
|
|
176
|
+
blockHash: import("@chainsafe/ssz").ByteVectorType;
|
|
135
177
|
}> | null>;
|
|
136
178
|
readonly producedBlindedBlockRoot: Set<string>;
|
|
137
179
|
readonly opts: IChainOptions;
|
package/lib/chain/chain.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
-
import { fromHexString, toHexString } from "@chainsafe/ssz";
|
|
3
2
|
import { computeEpochAtSlot, computeStartSlotAtEpoch, createCachedBeaconState, getEffectiveBalanceIncrementsZeroInactive, isCachedBeaconState, PubkeyIndexMap, computeEndSlotAtEpoch, } from "@lodestar/state-transition";
|
|
4
3
|
import { isBlindedBeaconBlock, } from "@lodestar/types";
|
|
5
4
|
import { ExecutionStatus, UpdateHeadOpt } from "@lodestar/fork-choice";
|
|
6
|
-
import { gweiToWei, isErrorAborted, pruneSetToMax, sleep,
|
|
5
|
+
import { fromHex, gweiToWei, isErrorAborted, pruneSetToMax, sleep, toRootHex } from "@lodestar/utils";
|
|
7
6
|
import { ForkSeq, GENESIS_SLOT, SLOTS_PER_EPOCH } from "@lodestar/params";
|
|
8
7
|
import { GENESIS_EPOCH, ZERO_HASH } from "../constants/index.js";
|
|
9
8
|
import { Clock, ClockEvent } from "../util/clock.js";
|
|
@@ -50,7 +49,6 @@ import { computeAttestationsRewards } from "./rewards/attestationsRewards.js";
|
|
|
50
49
|
const DEFAULT_MAX_CACHED_PRODUCED_ROOTS = 4;
|
|
51
50
|
export class BeaconChain {
|
|
52
51
|
constructor(opts, { config, db, logger, processShutdownCallback, clock, metrics, anchorState, eth1, executionEngine, executionBuilder, historicalStateRegen, }) {
|
|
53
|
-
this.aggregatedAttestationPool = new AggregatedAttestationPool();
|
|
54
52
|
this.syncContributionAndProofPool = new SyncContributionAndProofPool();
|
|
55
53
|
this.opPool = new OpPool();
|
|
56
54
|
// Gossip seen cache
|
|
@@ -91,7 +89,8 @@ export class BeaconChain {
|
|
|
91
89
|
if (!clock)
|
|
92
90
|
clock = new Clock({ config, genesisTime: this.genesisTime, signal });
|
|
93
91
|
const preAggregateCutOffTime = (2 / 3) * this.config.SECONDS_PER_SLOT;
|
|
94
|
-
this.attestationPool = new AttestationPool(clock, preAggregateCutOffTime, this.opts?.preaggregateSlotDistance);
|
|
92
|
+
this.attestationPool = new AttestationPool(config, clock, preAggregateCutOffTime, this.opts?.preaggregateSlotDistance);
|
|
93
|
+
this.aggregatedAttestationPool = new AggregatedAttestationPool(this.config);
|
|
95
94
|
this.syncCommitteeMessagePool = new SyncCommitteeMessagePool(clock, preAggregateCutOffTime, this.opts?.preaggregateSlotDistance);
|
|
96
95
|
this.seenAggregatedAttestations = new SeenAggregatedAttestations(metrics);
|
|
97
96
|
this.seenContributionAndProof = new SeenContributionAndProof(metrics);
|
|
@@ -121,6 +120,9 @@ export class BeaconChain {
|
|
|
121
120
|
const blockStateCache = this.opts.nHistoricalStates
|
|
122
121
|
? new FIFOBlockStateCache(this.opts, { metrics })
|
|
123
122
|
: new BlockStateCacheImpl({ metrics });
|
|
123
|
+
this.bufferPool = this.opts.nHistoricalStates
|
|
124
|
+
? new BufferPool(anchorState.type.tree_serializedSize(anchorState.node), metrics)
|
|
125
|
+
: null;
|
|
124
126
|
const checkpointStateCache = this.opts.nHistoricalStates
|
|
125
127
|
? new PersistentCheckpointStateCache({
|
|
126
128
|
metrics,
|
|
@@ -128,7 +130,7 @@ export class BeaconChain {
|
|
|
128
130
|
clock,
|
|
129
131
|
shufflingCache: this.shufflingCache,
|
|
130
132
|
blockStateCache,
|
|
131
|
-
bufferPool:
|
|
133
|
+
bufferPool: this.bufferPool,
|
|
132
134
|
datastore: fileDataStore
|
|
133
135
|
? // debug option if we want to investigate any issues with the DB
|
|
134
136
|
new FileCPStateDatastore()
|
|
@@ -309,7 +311,7 @@ export class BeaconChain {
|
|
|
309
311
|
finalized: cachedStateCtx.epochCtx.epoch <= finalizedEpoch && finalizedEpoch !== GENESIS_EPOCH,
|
|
310
312
|
};
|
|
311
313
|
}
|
|
312
|
-
const data = await this.db.stateArchive.getByRoot(
|
|
314
|
+
const data = await this.db.stateArchive.getByRoot(fromHex(stateRoot));
|
|
313
315
|
return data && { state: data, executionOptimistic: false, finalized: true };
|
|
314
316
|
}
|
|
315
317
|
getStateByCheckpoint(checkpoint) {
|
|
@@ -345,7 +347,7 @@ export class BeaconChain {
|
|
|
345
347
|
// Unfinalized slot, attempt to find in fork-choice
|
|
346
348
|
const block = this.forkChoice.getCanonicalBlockAtSlot(slot);
|
|
347
349
|
if (block) {
|
|
348
|
-
const data = await this.db.block.get(
|
|
350
|
+
const data = await this.db.block.get(fromHex(block.blockRoot));
|
|
349
351
|
if (data) {
|
|
350
352
|
return { block: data, executionOptimistic: isOptimisticBlock(block), finalized: false };
|
|
351
353
|
}
|
|
@@ -360,19 +362,19 @@ export class BeaconChain {
|
|
|
360
362
|
async getBlockByRoot(root) {
|
|
361
363
|
const block = this.forkChoice.getBlockHex(root);
|
|
362
364
|
if (block) {
|
|
363
|
-
const data = await this.db.block.get(
|
|
365
|
+
const data = await this.db.block.get(fromHex(root));
|
|
364
366
|
if (data) {
|
|
365
367
|
return { block: data, executionOptimistic: isOptimisticBlock(block), finalized: false };
|
|
366
368
|
}
|
|
367
369
|
// If block is not found in hot db, try cold db since there could be an archive cycle happening
|
|
368
370
|
// TODO: Add a lock to the archiver to have deterministic behavior on where are blocks
|
|
369
371
|
}
|
|
370
|
-
const data = await this.db.blockArchive.getByRoot(
|
|
372
|
+
const data = await this.db.blockArchive.getByRoot(fromHex(root));
|
|
371
373
|
return data && { block: data, executionOptimistic: false, finalized: true };
|
|
372
374
|
}
|
|
373
375
|
async produceCommonBlockBody(blockAttributes) {
|
|
374
376
|
const { slot, parentBlockRoot } = blockAttributes;
|
|
375
|
-
const state = await this.regen.getBlockSlotState(
|
|
377
|
+
const state = await this.regen.getBlockSlotState(toRootHex(parentBlockRoot), slot, { dontTransferCache: true }, RegenCaller.produceBlock);
|
|
376
378
|
// TODO: To avoid breaking changes for metric define this attribute
|
|
377
379
|
const blockType = BlockType.Full;
|
|
378
380
|
return produceCommonBlockBody.call(this, blockType, state, {
|
|
@@ -387,7 +389,7 @@ export class BeaconChain {
|
|
|
387
389
|
return this.produceBlockWrapper(BlockType.Blinded, blockAttributes);
|
|
388
390
|
}
|
|
389
391
|
async produceBlockWrapper(blockType, { randaoReveal, graffiti, slot, feeRecipient, commonBlockBody, parentBlockRoot, }) {
|
|
390
|
-
const state = await this.regen.getBlockSlotState(
|
|
392
|
+
const state = await this.regen.getBlockSlotState(toRootHex(parentBlockRoot), slot, { dontTransferCache: true }, RegenCaller.produceBlock);
|
|
391
393
|
const proposerIndex = state.epochCtx.getBeaconProposer(slot);
|
|
392
394
|
const proposerPubKey = state.epochCtx.index2pubkey[proposerIndex].toBytes();
|
|
393
395
|
const { body, blobs, executionPayloadValue, shouldOverrideBuilder } = await produceBlockBody.call(this, blockType, state, {
|
|
@@ -407,7 +409,7 @@ export class BeaconChain {
|
|
|
407
409
|
: this.config.getExecutionForkTypes(slot).BlindedBeaconBlockBody.hashTreeRoot(body);
|
|
408
410
|
this.logger.debug("Computing block post state from the produced body", {
|
|
409
411
|
slot,
|
|
410
|
-
bodyRoot:
|
|
412
|
+
bodyRoot: toRootHex(bodyRoot),
|
|
411
413
|
blockType,
|
|
412
414
|
});
|
|
413
415
|
const block = {
|
|
@@ -422,7 +424,7 @@ export class BeaconChain {
|
|
|
422
424
|
const blockRoot = blockType === BlockType.Full
|
|
423
425
|
? this.config.getForkTypes(slot).BeaconBlock.hashTreeRoot(block)
|
|
424
426
|
: this.config.getExecutionForkTypes(slot).BlindedBeaconBlock.hashTreeRoot(block);
|
|
425
|
-
const blockRootHex =
|
|
427
|
+
const blockRootHex = toRootHex(blockRoot);
|
|
426
428
|
// track the produced block for consensus broadcast validations
|
|
427
429
|
if (blockType === BlockType.Full) {
|
|
428
430
|
this.logger.debug("Setting executionPayload cache for produced block", { blockRootHex, slot, blockType });
|
|
@@ -457,7 +459,7 @@ export class BeaconChain {
|
|
|
457
459
|
* )
|
|
458
460
|
*/
|
|
459
461
|
getContents(beaconBlock) {
|
|
460
|
-
const blockHash =
|
|
462
|
+
const blockHash = toRootHex(beaconBlock.body.executionPayload.blockHash);
|
|
461
463
|
const contents = this.producedContentsCache.get(blockHash);
|
|
462
464
|
if (!contents) {
|
|
463
465
|
throw Error(`No contents for executionPayload.blockHash ${blockHash}`);
|
|
@@ -482,7 +484,7 @@ export class BeaconChain {
|
|
|
482
484
|
finalizedRoot: finalizedCheckpoint.epoch === GENESIS_EPOCH ? ZERO_HASH : finalizedCheckpoint.root,
|
|
483
485
|
finalizedEpoch: finalizedCheckpoint.epoch,
|
|
484
486
|
// TODO: PERFORMANCE: Memoize to prevent re-computing every time
|
|
485
|
-
headRoot:
|
|
487
|
+
headRoot: fromHex(head.blockRoot),
|
|
486
488
|
headSlot: head.slot,
|
|
487
489
|
};
|
|
488
490
|
}
|
|
@@ -629,7 +631,7 @@ export class BeaconChain {
|
|
|
629
631
|
checkpointRoot: checkpoint.rootHex,
|
|
630
632
|
stateId,
|
|
631
633
|
stateSlot: state.slot,
|
|
632
|
-
stateRoot:
|
|
634
|
+
stateRoot: toRootHex(state.hashTreeRoot()),
|
|
633
635
|
});
|
|
634
636
|
}
|
|
635
637
|
return getEffectiveBalanceIncrementsZeroInactive(state);
|
|
@@ -683,7 +685,7 @@ export class BeaconChain {
|
|
|
683
685
|
const dateStr = now.toISOString().split("T")[0];
|
|
684
686
|
// by default store to lodestar_archive of current dir
|
|
685
687
|
const dirpath = path.join(this.opts.persistInvalidSszObjectsDir ?? "invalid_ssz_objects", dateStr);
|
|
686
|
-
const filepath = path.join(dirpath, `${typeName}_${
|
|
688
|
+
const filepath = path.join(dirpath, `${typeName}_${toRootHex(root)}.ssz`);
|
|
687
689
|
await ensureDir(dirpath);
|
|
688
690
|
// as of Feb 17 2022 there are a lot of duplicate files stored with different date suffixes
|
|
689
691
|
// remove date suffixes in file name, and check duplicate to avoid redundant persistence
|
|
@@ -708,6 +710,8 @@ export class BeaconChain {
|
|
|
708
710
|
metrics.forkChoice.balancesLength.set(forkChoiceMetrics.balancesLength);
|
|
709
711
|
metrics.forkChoice.nodes.set(forkChoiceMetrics.nodes);
|
|
710
712
|
metrics.forkChoice.indices.set(forkChoiceMetrics.indices);
|
|
713
|
+
const headState = this.getHeadState();
|
|
714
|
+
metrics.headState.unfinalizedPubkeyCacheSize.set(headState.epochCtx.unfinalizedPubkey2index.size);
|
|
711
715
|
}
|
|
712
716
|
onClockSlot(slot) {
|
|
713
717
|
this.logger.verbose("Clock slot", { slot });
|
|
@@ -774,13 +778,40 @@ export class BeaconChain {
|
|
|
774
778
|
// TODO: Improve using regen here
|
|
775
779
|
const { blockRoot, stateRoot, slot } = this.forkChoice.getHead();
|
|
776
780
|
const headState = this.regen.getStateSync(stateRoot);
|
|
777
|
-
const headBlock = await this.db.block.get(
|
|
781
|
+
const headBlock = await this.db.block.get(fromHex(blockRoot));
|
|
778
782
|
if (headBlock == null) {
|
|
779
783
|
throw Error(`Head block ${slot} ${headBlock} is not available in database`);
|
|
780
784
|
}
|
|
781
785
|
if (headState) {
|
|
782
786
|
this.opPool.pruneAll(headBlock, headState);
|
|
783
787
|
}
|
|
788
|
+
const cpEpoch = cp.epoch;
|
|
789
|
+
if (headState === null) {
|
|
790
|
+
this.logger.verbose("Head state is null");
|
|
791
|
+
}
|
|
792
|
+
else if (cpEpoch >= this.config.ELECTRA_FORK_EPOCH) {
|
|
793
|
+
// Get the validator.length from the state at cpEpoch
|
|
794
|
+
// We are confident the last element in the list is from headEpoch
|
|
795
|
+
// Thus we query from the end of the list. (cpEpoch - headEpoch - 1) is negative number
|
|
796
|
+
const pivotValidatorIndex = headState.epochCtx.getValidatorCountAtEpoch(cpEpoch);
|
|
797
|
+
if (pivotValidatorIndex !== undefined) {
|
|
798
|
+
// Note EIP-6914 will break this logic
|
|
799
|
+
const newFinalizedValidators = headState.epochCtx.unfinalizedPubkey2index.filter((index, _pubkey) => index < pivotValidatorIndex);
|
|
800
|
+
// Populate finalized pubkey cache and remove unfinalized pubkey cache
|
|
801
|
+
if (!newFinalizedValidators.isEmpty()) {
|
|
802
|
+
this.regen.updateUnfinalizedPubkeys(newFinalizedValidators);
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
// TODO-Electra: Deprecating eth1Data poll requires a check on a finalized checkpoint state.
|
|
807
|
+
// Will resolve this later
|
|
808
|
+
// if (cpEpoch >= (this.config.ELECTRA_FORK_EPOCH ?? Infinity)) {
|
|
809
|
+
// // finalizedState can be safely casted to Electra state since cp is already post-Electra
|
|
810
|
+
// if (finalizedState.eth1DepositIndex >= (finalizedState as CachedBeaconStateElectra).depositRequestsStartIndex) {
|
|
811
|
+
// // Signal eth1 to stop polling eth1Data
|
|
812
|
+
// this.eth1.stopPollingEth1Data();
|
|
813
|
+
// }
|
|
814
|
+
// }
|
|
784
815
|
}
|
|
785
816
|
async updateBeaconProposerData(epoch, proposers) {
|
|
786
817
|
for (const proposer of proposers) {
|
|
@@ -814,9 +845,9 @@ export class BeaconChain {
|
|
|
814
845
|
async getBlockRewards(block) {
|
|
815
846
|
const preState = this.regen.getPreStateSync(block);
|
|
816
847
|
if (preState === null) {
|
|
817
|
-
throw Error(`Pre-state is unavailable given block's parent root ${
|
|
848
|
+
throw Error(`Pre-state is unavailable given block's parent root ${toRootHex(block.parentRoot)}`);
|
|
818
849
|
}
|
|
819
|
-
const postState = this.regen.getStateSync(
|
|
850
|
+
const postState = this.regen.getStateSync(toRootHex(block.stateRoot)) ?? undefined;
|
|
820
851
|
return computeBlockRewards(block, preState.clone(), postState?.clone());
|
|
821
852
|
}
|
|
822
853
|
async getAttestationsRewards(epoch, validatorIds) {
|
|
@@ -827,7 +858,7 @@ export class BeaconChain {
|
|
|
827
858
|
throw Error(`State is unavailable for slot ${slot}`);
|
|
828
859
|
}
|
|
829
860
|
const { executionOptimistic, finalized } = stateResult;
|
|
830
|
-
const stateRoot =
|
|
861
|
+
const stateRoot = toRootHex(stateResult.state.hashTreeRoot());
|
|
831
862
|
const cachedState = this.regen.getStateSync(stateRoot);
|
|
832
863
|
if (cachedState === null) {
|
|
833
864
|
throw Error(`State is not in cache for slot ${slot}`);
|
|
@@ -838,7 +869,7 @@ export class BeaconChain {
|
|
|
838
869
|
async getSyncCommitteeRewards(block, validatorIds) {
|
|
839
870
|
const preState = this.regen.getPreStateSync(block);
|
|
840
871
|
if (preState === null) {
|
|
841
|
-
throw Error(`Pre-state is unavailable given block's parent root ${
|
|
872
|
+
throw Error(`Pre-state is unavailable given block's parent root ${toRootHex(block.parentRoot)}`);
|
|
842
873
|
}
|
|
843
874
|
return computeSyncCommitteeRewards(block, preState.clone(), validatorIds);
|
|
844
875
|
}
|