@lodestar/beacon-node 1.47.0 → 1.48.0-dev.042c96183c
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.d.ts.map +1 -1
- package/lib/api/impl/beacon/blocks/index.js +8 -11
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
- package/lib/api/impl/beacon/state/utils.js +14 -0
- package/lib/api/impl/beacon/state/utils.js.map +1 -1
- package/lib/api/impl/config/index.d.ts.map +1 -1
- package/lib/api/impl/config/index.js +4 -1
- package/lib/api/impl/config/index.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts.map +1 -1
- package/lib/api/impl/validator/index.js +44 -39
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.d.ts +1 -0
- package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
- package/lib/chain/archiveStore/archiveStore.js +5 -1
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.d.ts.map +1 -1
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +1 -0
- package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/metrics.d.ts.map +1 -1
- package/lib/chain/archiveStore/historicalState/metrics.js +12 -1
- package/lib/chain/archiveStore/historicalState/metrics.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/types.d.ts +2 -0
- package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -1
- package/lib/chain/archiveStore/historicalState/types.js.map +1 -1
- package/lib/chain/archiveStore/historicalState/worker.js +4 -1
- package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +9 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.js +68 -38
- package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts +5 -1
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +12 -18
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/index.d.ts +8 -4
- package/lib/chain/blocks/index.d.ts.map +1 -1
- package/lib/chain/blocks/index.js +89 -23
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +8 -0
- package/lib/chain/blocks/types.d.ts.map +1 -1
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/blocks/utils/chainSegment.d.ts +1 -1
- package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
- package/lib/chain/blocks/utils/chainSegment.js +26 -11
- package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +5 -2
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.js +9 -16
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/chain.d.ts +12 -6
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +131 -76
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +1 -1
- package/lib/chain/emitter.js +1 -1
- package/lib/chain/errors/blockError.d.ts +19 -7
- package/lib/chain/errors/blockError.d.ts.map +1 -1
- package/lib/chain/errors/blockError.js +2 -2
- package/lib/chain/errors/blockError.js.map +1 -1
- package/lib/chain/errors/dataColumnSidecarError.d.ts +15 -2
- package/lib/chain/errors/dataColumnSidecarError.d.ts.map +1 -1
- package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
- package/lib/chain/errors/executionPayloadBid.d.ts +9 -0
- package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/errors/executionPayloadBid.js +2 -0
- package/lib/chain/errors/executionPayloadBid.js.map +1 -1
- package/lib/chain/errors/executionPayloadEnvelope.d.ts +10 -11
- package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/errors/executionPayloadEnvelope.js +0 -2
- package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
- package/lib/chain/errors/gossipValidation.d.ts +2 -1
- package/lib/chain/errors/gossipValidation.d.ts.map +1 -1
- package/lib/chain/errors/gossipValidation.js +1 -0
- package/lib/chain/errors/gossipValidation.js.map +1 -1
- package/lib/chain/forkChoice/index.d.ts.map +1 -1
- package/lib/chain/forkChoice/index.js +2 -0
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/interface.d.ts +6 -6
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/lightClient/index.d.ts +3 -3
- package/lib/chain/lightClient/index.d.ts.map +1 -1
- package/lib/chain/lightClient/index.js +21 -23
- package/lib/chain/lightClient/index.js.map +1 -1
- package/lib/chain/lightClient/proofs.d.ts +2 -1
- package/lib/chain/lightClient/proofs.d.ts.map +1 -1
- package/lib/chain/lightClient/proofs.js +5 -1
- package/lib/chain/lightClient/proofs.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/prepareNextSlot.d.ts +5 -0
- package/lib/chain/prepareNextSlot.d.ts.map +1 -1
- package/lib/chain/prepareNextSlot.js +40 -15
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.js +3 -25
- package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +4 -2
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +57 -72
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/regen/interface.d.ts +1 -0
- package/lib/chain/regen/interface.d.ts.map +1 -1
- package/lib/chain/regen/interface.js +1 -0
- package/lib/chain/regen/interface.js.map +1 -1
- package/lib/chain/validation/block.d.ts.map +1 -1
- package/lib/chain/validation/block.js +74 -63
- package/lib/chain/validation/block.js.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
- package/lib/chain/validation/dataColumnSidecar.js +38 -13
- package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
- package/lib/chain/validation/executionPayloadBid.d.ts +15 -3
- package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/validation/executionPayloadBid.js +199 -28
- package/lib/chain/validation/executionPayloadBid.js.map +1 -1
- package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/validation/executionPayloadEnvelope.js +10 -29
- package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.js +5 -6
- package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
- package/lib/chain/validatorMonitor.d.ts +7 -1
- package/lib/chain/validatorMonitor.d.ts.map +1 -1
- package/lib/chain/validatorMonitor.js +22 -5
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/db/beacon.d.ts +14 -5
- package/lib/db/beacon.d.ts.map +1 -1
- package/lib/db/beacon.js +17 -3
- package/lib/db/beacon.js.map +1 -1
- package/lib/db/dataColumnStore.d.ts +39 -0
- package/lib/db/dataColumnStore.d.ts.map +1 -0
- package/lib/db/dataColumnStore.js +81 -0
- package/lib/db/dataColumnStore.js.map +1 -0
- package/lib/db/flatFileStore/atomicWrite.d.ts +8 -0
- package/lib/db/flatFileStore/atomicWrite.d.ts.map +1 -0
- package/lib/db/flatFileStore/atomicWrite.js +61 -0
- package/lib/db/flatFileStore/atomicWrite.js.map +1 -0
- package/lib/db/flatFileStore/dcolFormat.d.ts +90 -0
- package/lib/db/flatFileStore/dcolFormat.d.ts.map +1 -0
- package/lib/db/flatFileStore/dcolFormat.js +286 -0
- package/lib/db/flatFileStore/dcolFormat.js.map +1 -0
- package/lib/db/flatFileStore/errors.d.ts +82 -0
- package/lib/db/flatFileStore/errors.d.ts.map +1 -0
- package/lib/db/flatFileStore/errors.js +32 -0
- package/lib/db/flatFileStore/errors.js.map +1 -0
- package/lib/db/flatFileStore/flatFileStore.d.ts +41 -0
- package/lib/db/flatFileStore/flatFileStore.d.ts.map +1 -0
- package/lib/db/flatFileStore/flatFileStore.js +251 -0
- package/lib/db/flatFileStore/flatFileStore.js.map +1 -0
- package/lib/db/flatFileStore/index.d.ts +4 -0
- package/lib/db/flatFileStore/index.d.ts.map +1 -0
- package/lib/db/flatFileStore/index.js +2 -0
- package/lib/db/flatFileStore/index.js.map +1 -0
- package/lib/db/flatFileStore/interface.d.ts +25 -0
- package/lib/db/flatFileStore/interface.d.ts.map +1 -0
- package/lib/db/flatFileStore/interface.js +2 -0
- package/lib/db/flatFileStore/interface.js.map +1 -0
- package/lib/db/flatFileStore/metrics.d.ts +24 -0
- package/lib/db/flatFileStore/metrics.d.ts.map +1 -0
- package/lib/db/flatFileStore/metrics.js +25 -0
- package/lib/db/flatFileStore/metrics.js.map +1 -0
- package/lib/db/flatFileStore/path.d.ts +9 -0
- package/lib/db/flatFileStore/path.d.ts.map +1 -0
- package/lib/db/flatFileStore/path.js +21 -0
- package/lib/db/flatFileStore/path.js.map +1 -0
- package/lib/db/flatFileStore/slotIndex.d.ts +14 -0
- package/lib/db/flatFileStore/slotIndex.d.ts.map +1 -0
- package/lib/db/flatFileStore/slotIndex.js +46 -0
- package/lib/db/flatFileStore/slotIndex.js.map +1 -0
- package/lib/db/flatFileStore/snappy.d.ts +3 -0
- package/lib/db/flatFileStore/snappy.d.ts.map +1 -0
- package/lib/db/flatFileStore/snappy.js +12 -0
- package/lib/db/flatFileStore/snappy.js.map +1 -0
- package/lib/db/index.d.ts +1 -0
- package/lib/db/index.d.ts.map +1 -1
- package/lib/db/interface.d.ts +8 -1
- package/lib/db/interface.d.ts.map +1 -1
- package/lib/db/repositories/blockArchive.d.ts +8 -1
- package/lib/db/repositories/blockArchive.d.ts.map +1 -1
- package/lib/db/repositories/blockArchive.js +65 -28
- package/lib/db/repositories/blockArchive.js.map +1 -1
- package/lib/db/repositories/blockArchiveIndex.d.ts +1 -2
- package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
- package/lib/db/repositories/blockArchiveIndex.js +3 -7
- package/lib/db/repositories/blockArchiveIndex.js.map +1 -1
- package/lib/execution/builder/apiClient.d.ts +6 -0
- package/lib/execution/builder/apiClient.d.ts.map +1 -1
- package/lib/execution/builder/apiClient.js +19 -1
- package/lib/execution/builder/apiClient.js.map +1 -1
- package/lib/execution/builder/validateBid.d.ts +1 -0
- package/lib/execution/builder/validateBid.d.ts.map +1 -1
- package/lib/execution/builder/validateBid.js +17 -6
- package/lib/execution/builder/validateBid.js.map +1 -1
- package/lib/execution/engine/mock.d.ts.map +1 -1
- package/lib/execution/engine/mock.js +4 -1
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +32 -4
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +78 -8
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/monitoring/clientStats.js +1 -1
- package/lib/monitoring/clientStats.js.map +1 -1
- package/lib/network/gossip/encoding.d.ts.map +1 -1
- package/lib/network/gossip/encoding.js +0 -7
- package/lib/network/gossip/encoding.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +2 -1
- package/lib/network/gossip/topic.d.ts.map +1 -1
- package/lib/network/gossip/topic.js +4 -20
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +7 -6
- package/lib/network/network.js.map +1 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +388 -285
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/indexed.d.ts.map +1 -1
- package/lib/network/processor/gossipQueues/indexed.js +0 -1
- package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
- package/lib/network/processor/index.d.ts +49 -3
- package/lib/network/processor/index.d.ts.map +1 -1
- package/lib/network/processor/index.js +270 -122
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +112 -91
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +2 -0
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
- package/lib/network/reqresp/protocols.d.ts.map +1 -1
- package/lib/network/reqresp/protocols.js +6 -22
- package/lib/network/reqresp/protocols.js.map +1 -1
- package/lib/network/reqresp/rateLimit.js +2 -1
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts +2 -1
- package/lib/network/reqresp/utils/dataColumnResponseValidation.d.ts.map +1 -1
- package/lib/network/reqresp/utils/dataColumnResponseValidation.js +14 -9
- package/lib/network/reqresp/utils/dataColumnResponseValidation.js.map +1 -1
- package/lib/node/nodejs.d.ts +2 -1
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js +4 -2
- package/lib/node/nodejs.js.map +1 -1
- package/lib/sync/range/chain.d.ts.map +1 -1
- package/lib/sync/range/chain.js +9 -2
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/range/range.d.ts.map +1 -1
- package/lib/sync/range/range.js +25 -2
- package/lib/sync/range/range.js.map +1 -1
- package/lib/util/sszBytes.d.ts +6 -0
- package/lib/util/sszBytes.d.ts.map +1 -1
- package/lib/util/sszBytes.js +1 -1
- package/lib/util/sszBytes.js.map +1 -1
- package/package.json +19 -20
- package/src/api/impl/beacon/blocks/index.ts +12 -14
- package/src/api/impl/beacon/state/utils.ts +15 -0
- package/src/api/impl/config/index.ts +4 -1
- package/src/api/impl/validator/index.ts +49 -43
- package/src/chain/archiveStore/archiveStore.ts +12 -1
- package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +1 -0
- package/src/chain/archiveStore/historicalState/metrics.ts +14 -1
- package/src/chain/archiveStore/historicalState/types.ts +2 -0
- package/src/chain/archiveStore/historicalState/worker.ts +4 -1
- package/src/chain/archiveStore/utils/archiveBlocks.ts +73 -42
- package/src/chain/blocks/importBlock.ts +25 -20
- package/src/chain/blocks/index.ts +126 -29
- package/src/chain/blocks/types.ts +9 -0
- package/src/chain/blocks/utils/chainSegment.ts +26 -12
- package/src/chain/blocks/verifyBlock.ts +5 -2
- package/src/chain/blocks/writeBlockInputToDb.ts +10 -17
- package/src/chain/chain.ts +155 -85
- package/src/chain/emitter.ts +1 -1
- package/src/chain/errors/blockError.ts +22 -10
- package/src/chain/errors/dataColumnSidecarError.ts +24 -8
- package/src/chain/errors/executionPayloadBid.ts +8 -0
- package/src/chain/errors/executionPayloadEnvelope.ts +14 -11
- package/src/chain/errors/gossipValidation.ts +1 -0
- package/src/chain/forkChoice/index.ts +2 -0
- package/src/chain/interface.ts +6 -6
- package/src/chain/lightClient/index.ts +32 -36
- package/src/chain/lightClient/proofs.ts +10 -0
- package/src/chain/opPools/aggregatedAttestationPool.ts +1 -1
- package/src/chain/prepareNextSlot.ts +47 -18
- package/src/chain/produceBlock/computeNewStateRoot.ts +3 -38
- package/src/chain/produceBlock/produceBlockBody.ts +62 -79
- package/src/chain/regen/interface.ts +1 -0
- package/src/chain/validation/block.ts +77 -79
- package/src/chain/validation/dataColumnSidecar.ts +47 -14
- package/src/chain/validation/executionPayloadBid.ts +230 -32
- package/src/chain/validation/executionPayloadEnvelope.ts +10 -37
- package/src/chain/validation/payloadAttestationMessage.ts +8 -9
- package/src/chain/validatorMonitor.ts +24 -7
- package/src/db/beacon.ts +33 -6
- package/src/db/dataColumnStore.ts +113 -0
- package/src/db/flatFileStore/atomicWrite.ts +65 -0
- package/src/db/flatFileStore/dcolFormat.ts +389 -0
- package/src/db/flatFileStore/errors.ts +53 -0
- package/src/db/flatFileStore/flatFileStore.ts +310 -0
- package/src/db/flatFileStore/index.ts +3 -0
- package/src/db/flatFileStore/interface.ts +21 -0
- package/src/db/flatFileStore/metrics.ts +48 -0
- package/src/db/flatFileStore/path.ts +32 -0
- package/src/db/flatFileStore/slotIndex.ts +56 -0
- package/src/db/flatFileStore/snappy.ts +14 -0
- package/src/db/index.ts +1 -0
- package/src/db/interface.ts +9 -1
- package/src/db/repositories/blockArchive.ts +89 -30
- package/src/db/repositories/blockArchiveIndex.ts +4 -9
- package/src/execution/builder/apiClient.ts +21 -1
- package/src/execution/builder/validateBid.ts +26 -7
- package/src/execution/engine/mock.ts +4 -1
- package/src/metrics/metrics/lodestar.ts +83 -9
- package/src/monitoring/clientStats.ts +1 -1
- package/src/network/gossip/encoding.ts +0 -7
- package/src/network/gossip/topic.ts +3 -25
- package/src/network/network.ts +9 -6
- package/src/network/processor/gossipHandlers.ts +500 -355
- package/src/network/processor/gossipQueues/indexed.ts +0 -1
- package/src/network/processor/index.ts +312 -176
- package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +139 -105
- package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +2 -0
- package/src/network/reqresp/protocols.ts +7 -24
- package/src/network/reqresp/rateLimit.ts +2 -1
- package/src/network/reqresp/utils/dataColumnResponseValidation.ts +15 -7
- package/src/node/nodejs.ts +6 -1
- package/src/sync/range/chain.ts +9 -2
- package/src/sync/range/range.ts +24 -2
- package/src/util/sszBytes.ts +1 -1
|
@@ -1,12 +1,16 @@
|
|
|
1
|
+
import { PayloadStatus } from "@lodestar/fork-choice";
|
|
2
|
+
import { computeEpochAtSlot } from "@lodestar/state-transition";
|
|
1
3
|
import { isErrorAborted, toRootHex } from "@lodestar/utils";
|
|
2
4
|
import { nextEventLoop } from "../../util/eventLoop.js";
|
|
3
5
|
import { JobItemQueue, isQueueErrorAborted } from "../../util/queue/index.js";
|
|
4
6
|
import { BlockError, BlockErrorCode, isBlockErrorAborted } from "../errors/index.js";
|
|
5
|
-
import {
|
|
7
|
+
import { ForkchoiceCaller } from "../forkChoice/index.js";
|
|
8
|
+
import { importBlock, importsBlockAttestations } from "./importBlock.js";
|
|
6
9
|
import { PayloadError, importExecutionPayload } from "./importExecutionPayload.js";
|
|
7
10
|
import { assertLinearChainSegment } from "./utils/chainSegment.js";
|
|
8
11
|
import { verifyBlocksInEpoch } from "./verifyBlock.js";
|
|
9
12
|
import { verifyBlocksSanityChecks } from "./verifyBlocksSanityChecks.js";
|
|
13
|
+
import { verifyPayloadsDataAvailability } from "./verifyPayloadsDataAvailability.js";
|
|
10
14
|
export { AttestationImportOpt } from "./types.js";
|
|
11
15
|
const QUEUE_MAX_LENGTH = 256;
|
|
12
16
|
/**
|
|
@@ -20,7 +24,7 @@ export class BlockProcessor {
|
|
|
20
24
|
}, { maxLength: QUEUE_MAX_LENGTH, noYieldIfOneItem: true, signal }, metrics?.blockProcessorQueue ?? undefined);
|
|
21
25
|
}
|
|
22
26
|
async processBlocksJob(job, payloadEnvelopes, opts = {}) {
|
|
23
|
-
|
|
27
|
+
return this.jobQueue.push(job, payloadEnvelopes, opts);
|
|
24
28
|
}
|
|
25
29
|
}
|
|
26
30
|
/**
|
|
@@ -34,28 +38,38 @@ export class BlockProcessor {
|
|
|
34
38
|
* All other effects are provided by downstream event handlers
|
|
35
39
|
*/
|
|
36
40
|
export async function processBlocks(blocks, payloadEnvelopes, opts) {
|
|
41
|
+
const emptyResult = { orphaned: [], skipped: false };
|
|
37
42
|
if (blocks.length === 0) {
|
|
38
|
-
return; // TODO: or throw?
|
|
43
|
+
return emptyResult; // TODO: or throw?
|
|
39
44
|
}
|
|
40
45
|
try {
|
|
41
46
|
const { relevantBlocks, parentSlots, parentBlock } = verifyBlocksSanityChecks(this, blocks, payloadEnvelopes, opts);
|
|
42
47
|
// No relevant blocks, skip verifyBlocksInEpoch()
|
|
43
48
|
if (relevantBlocks.length === 0 || parentBlock === null) {
|
|
44
49
|
// parentBlock can only be null if relevantBlocks are empty
|
|
45
|
-
return;
|
|
50
|
+
return await importPayloadEnvelopesOfKnownBlocks.call(this, payloadEnvelopes, opts);
|
|
46
51
|
}
|
|
47
52
|
const { warnings: orphanedPayloads } = assertLinearChainSegment(this.config, relevantBlocks, payloadEnvelopes, parentBlock);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
// Orphaned payloads of recent blocks are still imported, a reorg of the child could make the payload canonical
|
|
54
|
+
// again and later blocks build on it. Older ones are skipped: without the block attestations the orphaned FULL
|
|
55
|
+
// variant has no descendants and ties at zero weight with the EMPTY variant carrying the chain, the payload
|
|
56
|
+
// status tiebreaker then picks FULL and parks the head there.
|
|
57
|
+
const blockEpoch = computeEpochAtSlot(relevantBlocks[0].getBlock().message.slot);
|
|
58
|
+
const importsAttestations = importsBlockAttestations(opts, blockEpoch, this.clock.currentEpoch);
|
|
59
|
+
const skipped = orphanedPayloads != null && payloadEnvelopes !== null && !importsAttestations;
|
|
60
|
+
let payloadEnvelopesToImport = payloadEnvelopes;
|
|
61
|
+
if (skipped) {
|
|
62
|
+
payloadEnvelopesToImport = new Map(payloadEnvelopes);
|
|
63
|
+
for (const orphaned of orphanedPayloads ?? []) {
|
|
64
|
+
payloadEnvelopesToImport.delete(orphaned.slot);
|
|
65
|
+
// never validated, drop it from the shared cache so it is not served to peers, by-root sync reloads the
|
|
66
|
+
// entry from db if the payload is ever needed
|
|
67
|
+
this.seenPayloadEnvelopeInputCache.prune(orphaned.payloadEnvelopeInput.blockRootHex);
|
|
54
68
|
}
|
|
55
69
|
}
|
|
56
70
|
// Fully verify a block to be imported immediately after. Does not produce any side-effects besides adding intermediate
|
|
57
71
|
// states in the state cache through regen.
|
|
58
|
-
const { postStates, blockDAStatuses, payloadDAStatuses, proposerBalanceDeltas, segmentExecStatus, indexedAttestationsByBlock, } = await verifyBlocksInEpoch.call(this, parentBlock, relevantBlocks,
|
|
72
|
+
const { postStates, blockDAStatuses, payloadDAStatuses, proposerBalanceDeltas, segmentExecStatus, indexedAttestationsByBlock, } = await verifyBlocksInEpoch.call(this, parentBlock, relevantBlocks, payloadEnvelopesToImport, opts);
|
|
59
73
|
// If segmentExecStatus has lvhForkchoice then, the entire segment should be invalid
|
|
60
74
|
// and we need to further propagate
|
|
61
75
|
if (segmentExecStatus.execAborted !== null) {
|
|
@@ -86,8 +100,8 @@ export async function processBlocks(blocks, payloadEnvelopes, opts) {
|
|
|
86
100
|
});
|
|
87
101
|
}
|
|
88
102
|
const slotSet = new Set(blocks.map((b) => b.getBlock().message.slot));
|
|
89
|
-
if (
|
|
90
|
-
for (const slot of
|
|
103
|
+
if (payloadEnvelopesToImport) {
|
|
104
|
+
for (const slot of payloadEnvelopesToImport.keys())
|
|
91
105
|
slotSet.add(slot);
|
|
92
106
|
}
|
|
93
107
|
const slots = Array.from(slotSet).sort((a, b) => a - b);
|
|
@@ -97,25 +111,26 @@ export async function processBlocks(blocks, payloadEnvelopes, opts) {
|
|
|
97
111
|
// TODO: Consider batching importBlock too if it takes significant time
|
|
98
112
|
await importBlock.call(this, fullyVerifiedBlock, opts);
|
|
99
113
|
}
|
|
100
|
-
|
|
101
|
-
|
|
114
|
+
// PayloadEnvelopeInput is shared and may receive an envelope after the DA snapshot was taken.
|
|
115
|
+
const payloadDA = payloadDAStatuses.get(slot);
|
|
116
|
+
if (payloadDA !== undefined) {
|
|
117
|
+
const payloadInput = payloadEnvelopesToImport?.get(slot);
|
|
118
|
+
if (payloadInput === undefined) {
|
|
119
|
+
throw new Error(`Missing payload input for slot ${slot} after DA verification`);
|
|
120
|
+
}
|
|
102
121
|
if (!payloadInput.isComplete()) {
|
|
103
122
|
// we validated DA before reaching this
|
|
104
123
|
throw new Error(`Payload envelope for slot ${slot} not complete after DA verification`);
|
|
105
124
|
}
|
|
106
|
-
// we already awaited DA in verifyBlocksInEpoch for this segment
|
|
107
|
-
const payloadDA = payloadDAStatuses.get(slot);
|
|
108
|
-
if (payloadDA === undefined) {
|
|
109
|
-
throw new Error(`Missing payload DA status for slot ${slot}`);
|
|
110
|
-
}
|
|
111
125
|
await importExecutionPayload.call(this, payloadInput, payloadDA, { validSignature: false });
|
|
112
126
|
}
|
|
113
127
|
await nextEventLoop();
|
|
114
128
|
}
|
|
129
|
+
return { orphaned: orphanedPayloads ?? [], skipped };
|
|
115
130
|
}
|
|
116
131
|
catch (e) {
|
|
117
132
|
if (isErrorAborted(e) || isQueueErrorAborted(e) || isBlockErrorAborted(e)) {
|
|
118
|
-
return; // Ignore
|
|
133
|
+
return emptyResult; // Ignore
|
|
119
134
|
}
|
|
120
135
|
// above functions should only throw BlockError, or PayloadError from the gloas payload import
|
|
121
136
|
const err = getBlockOrPayloadError(e, blocks[0].getBlock());
|
|
@@ -136,8 +151,9 @@ export async function processBlocks(blocks, payloadEnvelopes, opts) {
|
|
|
136
151
|
const blockSlot = signedBlock.message.slot;
|
|
137
152
|
const { state } = err.type;
|
|
138
153
|
const forkTypes = this.config.getForkTypes(blockSlot);
|
|
139
|
-
|
|
140
|
-
this.
|
|
154
|
+
const blockRootHex = toRootHex(forkTypes.BeaconBlock.hashTreeRoot(signedBlock.message));
|
|
155
|
+
this.persistInvalidSszValue(forkTypes.SignedBeaconBlock, signedBlock, `${blockSlot}_invalid_signature`, blockRootHex);
|
|
156
|
+
this.persistInvalidSszBytes("BeaconState", state.serialize(), toRootHex(state.hashTreeRoot()), `${state.slot}_invalid_signature`);
|
|
141
157
|
}
|
|
142
158
|
else if (err.type.code === BlockErrorCode.INVALID_STATE_ROOT) {
|
|
143
159
|
const { signedBlock } = err;
|
|
@@ -153,6 +169,56 @@ export async function processBlocks(blocks, payloadEnvelopes, opts) {
|
|
|
153
169
|
throw err;
|
|
154
170
|
}
|
|
155
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* A peer can serve a block without its envelope, the block is then imported with a PENDING payload. Later batches
|
|
174
|
+
* carry the envelope but all their blocks are known, without importing it here every child building on the FULL
|
|
175
|
+
* variant fails with PARENT_PAYLOAD_UNKNOWN and range sync never progresses. If our head already descends from the
|
|
176
|
+
* block's EMPTY variant the chain did not build on the payload, importing it would only add a dead FULL leaf. As for
|
|
177
|
+
* orphaned payloads in a segment this only applies while the block attestations are not imported, a recent payload
|
|
178
|
+
* is imported anyway so a reorg building on it does not have to fetch it through unknown block sync.
|
|
179
|
+
*/
|
|
180
|
+
async function importPayloadEnvelopesOfKnownBlocks(payloadEnvelopes, opts) {
|
|
181
|
+
if (payloadEnvelopes === null) {
|
|
182
|
+
return { orphaned: [], skipped: false };
|
|
183
|
+
}
|
|
184
|
+
const head = this.forkChoice.getHead();
|
|
185
|
+
const currentEpoch = this.clock.currentEpoch;
|
|
186
|
+
const payloadInputs = [];
|
|
187
|
+
const orphaned = [];
|
|
188
|
+
for (const payloadInput of payloadEnvelopes.values()) {
|
|
189
|
+
const { blockRootHex, slot } = payloadInput;
|
|
190
|
+
if (!payloadInput.hasPayloadEnvelope() ||
|
|
191
|
+
!this.forkChoice.hasBlockHex(blockRootHex) ||
|
|
192
|
+
this.forkChoice.getBlockHexAndBlockHash(blockRootHex, payloadInput.getBlockHashHex()) !== null) {
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
if (head.blockRoot !== blockRootHex &&
|
|
196
|
+
!importsBlockAttestations(opts, computeEpochAtSlot(slot), currentEpoch) &&
|
|
197
|
+
this.forkChoice.isDescendant(blockRootHex, PayloadStatus.EMPTY, head.blockRoot, head.payloadStatus)) {
|
|
198
|
+
// never validated, see processBlocks()
|
|
199
|
+
this.seenPayloadEnvelopeInputCache.prune(blockRootHex);
|
|
200
|
+
orphaned.push({ slot, payloadEnvelopeInput: payloadInput });
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
payloadInputs.push(payloadInput);
|
|
204
|
+
}
|
|
205
|
+
// orphaned envelopes on this path are always skipped, range sync logs them with peer/client context
|
|
206
|
+
const result = { orphaned, skipped: orphaned.length > 0 };
|
|
207
|
+
if (payloadInputs.length === 0) {
|
|
208
|
+
return result;
|
|
209
|
+
}
|
|
210
|
+
const { dataAvailabilityStatuses } = await verifyPayloadsDataAvailability(payloadInputs, new AbortController().signal);
|
|
211
|
+
for (let i = 0; i < payloadInputs.length; i++) {
|
|
212
|
+
this.logger.debug("Importing payload envelope of known block", {
|
|
213
|
+
slot: payloadInputs[i].slot,
|
|
214
|
+
blockRoot: payloadInputs[i].blockRootHex,
|
|
215
|
+
});
|
|
216
|
+
await importExecutionPayload.call(this, payloadInputs[i], dataAvailabilityStatuses[i], { validSignature: false });
|
|
217
|
+
}
|
|
218
|
+
// the new FULL variants are not seen by the head cached from the last block import
|
|
219
|
+
this.recomputeForkChoiceHead(ForkchoiceCaller.importBlock);
|
|
220
|
+
return result;
|
|
221
|
+
}
|
|
156
222
|
function getBlockOrPayloadError(e, block) {
|
|
157
223
|
if (e instanceof BlockError) {
|
|
158
224
|
return e;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chain/blocks/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chain/blocks/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import type { BlockExecutionStatus, PayloadExecutionStatus } from "@lodestar/for
|
|
|
3
3
|
import { DataAvailabilityStatus, IBeaconStateView } from "@lodestar/state-transition";
|
|
4
4
|
import type { IndexedAttestation, Slot, fulu } from "@lodestar/types";
|
|
5
5
|
import { IBlockInput } from "./blockInput/types.js";
|
|
6
|
+
import { OrphanedPayloadEnvelope } from "./utils/chainSegment.js";
|
|
6
7
|
export declare enum GossipedInputType {
|
|
7
8
|
block = "block",
|
|
8
9
|
blob = "blob",
|
|
@@ -95,5 +96,12 @@ export type FullyVerifiedBlock = {
|
|
|
95
96
|
/** If the execution payload couldn't be verified because of EL syncing status, used in optimistic sync */
|
|
96
97
|
executionStatus: BlockExecutionStatus | PayloadExecutionStatus;
|
|
97
98
|
};
|
|
99
|
+
/**
|
|
100
|
+
* Result of processing a chain segment.
|
|
101
|
+
*/
|
|
102
|
+
export type ProcessBlocksResult = {
|
|
103
|
+
orphaned: OrphanedPayloadEnvelope[];
|
|
104
|
+
skipped: boolean;
|
|
105
|
+
};
|
|
98
106
|
export {};
|
|
99
107
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAC,oBAAoB,EAAE,sBAAsB,EAAC,MAAM,uBAAuB,CAAC;AAExF,OAAO,EAAC,sBAAsB,EAAE,gBAAgB,EAAqB,MAAM,4BAA4B,CAAC;AACxG,OAAO,KAAK,EAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAC,oBAAoB,EAAE,sBAAsB,EAAC,MAAM,uBAAuB,CAAC;AAExF,OAAO,EAAC,sBAAsB,EAAE,gBAAgB,EAAqB,MAAM,4BAA4B,CAAC;AACxG,OAAO,KAAK,EAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAC,uBAAuB,EAAC,MAAM,yBAAyB,CAAC;AAEhE,oBAAY,iBAAiB;IAC3B,KAAK,UAAU;IACf,IAAI,SAAS;IACb,UAAU,gBAAgB;CAC3B;AAED,KAAK,cAAc,GAAG;IACpB,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC;IACnC,eAAe,EAAE,UAAU,GAAG,IAAI,CAAC;CACpC,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAE9D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAMrG;AAED,oBAAY,oBAAoB;IAC9B,IAAI,IAAA;IACJ,KAAK,IAAA;CACN;AAED,oBAAY,qBAAqB;IAC/B,gFAAgF;IAChF,UAAU,IAAA;IACV;;;;OAIG;IACH,IAAI,IAAA;CACL;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,kBAAkB,CAAC,EAAE,oBAAoB,CAAC;IAC1C;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;IAC1C,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,WAAW,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,eAAe,EAAE,IAAI,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,4FAA4F;IAC5F,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC1C,6BAA6B;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,0GAA0G;IAC1G,eAAe,EAAE,oBAAoB,GAAG,sBAAsB,CAAC;CAChE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/chain/blocks/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAA2C,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/chain/blocks/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAA2C,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAKxG,MAAM,CAAN,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,oCAAe,CAAA;IACf,kCAAa,CAAA;IACb,+CAA0B,CAAA;AAC5B,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,QAI5B;AAQD,MAAM,UAAU,kBAAkB,CAAC,MAAuB,EAAE,SAAe,EAAE,SAAe;IAC1F,OAAO,CACL,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,KAAK;QAC7C,+CAA+C;QAC/C,kBAAkB,CAAC,SAAS,CAAC,IAAI,kBAAkB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,qCAAqC,CAC9G,CAAC;AACJ,CAAC;AAED,MAAM,CAAN,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,+DAAI,CAAA;IACJ,iEAAK,CAAA;AACP,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,QAG/B;AAED,MAAM,CAAN,IAAY,qBASX;AATD,WAAY,qBAAqB;IAC/B,gFAAgF;IAChF,6EAAU,CAAA;IACV;;;;OAIG;IACH,iEAAI,CAAA;AACN,CAAC,EATW,qBAAqB,KAArB,qBAAqB,QAShC"}
|
|
@@ -19,7 +19,7 @@ export type ChainSegmentResult = {
|
|
|
19
19
|
* - Verifies parent root + slot linearity
|
|
20
20
|
* - For gloas: verifies bid.parentBlockHash matches the tracked execution hash; if not, the
|
|
21
21
|
* previous FULL envelope is treated as orphaned (segment continues as if previous slot was EMPTY)
|
|
22
|
-
* - If an envelope exists for this slot: verifies it references this block's root
|
|
22
|
+
* - If an envelope exists for this slot (or the parent's slot): verifies it references this block's root
|
|
23
23
|
* - Advances the tracked execution hash (FULL if envelope present, EMPTY if not)
|
|
24
24
|
*/
|
|
25
25
|
export declare function assertLinearChainSegment(config: ChainForkConfig, blocks: IBlockInput[], payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null, parentBlock: ProtoBlock | null): ChainSegmentResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chainSegment.d.ts","sourceRoot":"","sources":["../../../../src/chain/blocks/utils/chainSegment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAC,IAAI,EAA0B,MAAM,iBAAiB,CAAC;AAG9D,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAC,oBAAoB,EAAC,MAAM,iDAAiD,CAAC;AAErF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,IAAI,CAAC;IACX,oBAAoB,EAAE,oBAAoB,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAAC,QAAQ,EAAE,uBAAuB,EAAE,GAAG,IAAI,CAAA;CAAC,CAAC;AAE9E;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,WAAW,EAAE,EACrB,gBAAgB,EAAE,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,IAAI,EACxD,WAAW,EAAE,UAAU,GAAG,IAAI,GAC7B,kBAAkB,
|
|
1
|
+
{"version":3,"file":"chainSegment.d.ts","sourceRoot":"","sources":["../../../../src/chain/blocks/utils/chainSegment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAC,IAAI,EAA0B,MAAM,iBAAiB,CAAC;AAG9D,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAC,oBAAoB,EAAC,MAAM,iDAAiD,CAAC;AAErF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,IAAI,CAAC;IACX,oBAAoB,EAAE,oBAAoB,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAAC,QAAQ,EAAE,uBAAuB,EAAE,GAAG,IAAI,CAAA;CAAC,CAAC;AAE9E;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,WAAW,EAAE,EACrB,gBAAgB,EAAE,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,IAAI,EACxD,WAAW,EAAE,UAAU,GAAG,IAAI,GAC7B,kBAAkB,CAgIpB"}
|
|
@@ -10,7 +10,7 @@ import { BlockError, BlockErrorCode } from "../../errors/index.js";
|
|
|
10
10
|
* - Verifies parent root + slot linearity
|
|
11
11
|
* - For gloas: verifies bid.parentBlockHash matches the tracked execution hash; if not, the
|
|
12
12
|
* previous FULL envelope is treated as orphaned (segment continues as if previous slot was EMPTY)
|
|
13
|
-
* - If an envelope exists for this slot: verifies it references this block's root
|
|
13
|
+
* - If an envelope exists for this slot (or the parent's slot): verifies it references this block's root
|
|
14
14
|
* - Advances the tracked execution hash (FULL if envelope present, EMPTY if not)
|
|
15
15
|
*/
|
|
16
16
|
export function assertLinearChainSegment(config, blocks, payloadEnvelopes, parentBlock) {
|
|
@@ -18,22 +18,37 @@ export function assertLinearChainSegment(config, blocks, payloadEnvelopes, paren
|
|
|
18
18
|
return { warnings: null };
|
|
19
19
|
}
|
|
20
20
|
const warnings = [];
|
|
21
|
-
let parentExecHash = parentBlock?.executionPayloadBlockHash ?? null;
|
|
22
|
-
if (parentBlock !== null) {
|
|
23
|
-
const parentPayloadInput = payloadEnvelopes?.get(parentBlock.slot);
|
|
24
|
-
if (parentPayloadInput?.hasPayloadEnvelope()) {
|
|
25
|
-
// Checkpoint-sync first batch: the anchor is stored PENDING with the inherited (grandparent)
|
|
26
|
-
// hash, not its own payload. Its payload envelope is in this batch, so use that blockHash as
|
|
27
|
-
// the real parent EL head.
|
|
28
|
-
parentExecHash = parentPayloadInput.getBlockHashHex();
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
21
|
// Track the expected execution payload block hash through the segment, seeded from the FIRST
|
|
32
22
|
// block's own bid
|
|
33
23
|
const firstBlockMessage = blocks[0].getBlock().message;
|
|
34
24
|
let currentExecHash = isGloasBeaconBlock(firstBlockMessage)
|
|
35
25
|
? toRootHex(firstBlockMessage.body.signedExecutionPayloadBid.message.parentBlockHash)
|
|
36
26
|
: null;
|
|
27
|
+
let parentExecHash = parentBlock?.executionPayloadBlockHash ?? null;
|
|
28
|
+
if (parentBlock !== null) {
|
|
29
|
+
const parentPayloadInput = payloadEnvelopes?.get(parentBlock.slot);
|
|
30
|
+
if (parentPayloadInput?.hasPayloadEnvelope()) {
|
|
31
|
+
// Envelopes are served by slot, the one at the parent's slot must reference the parent block. Without this
|
|
32
|
+
// check an envelope of a sibling block is taken as orphaned and only fails downstream in the payload import
|
|
33
|
+
if (parentPayloadInput.blockRootHex !== parentBlock.blockRoot) {
|
|
34
|
+
throw new BlockError(blocks[0].getBlock(), {
|
|
35
|
+
code: BlockErrorCode.ENVELOPE_BLOCK_ROOT_MISMATCH,
|
|
36
|
+
envelopeBlockRoot: parentPayloadInput.blockRootHex,
|
|
37
|
+
blockRoot: parentBlock.blockRoot,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const parentPayloadBlockHash = parentPayloadInput.getBlockHashHex();
|
|
41
|
+
if (currentExecHash === parentPayloadBlockHash) {
|
|
42
|
+
// Checkpoint-sync first batch: the anchor is stored PENDING with the inherited (grandparent)
|
|
43
|
+
// hash, its own payload is in this batch and is the real parent EL head
|
|
44
|
+
parentExecHash = parentPayloadBlockHash;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// First block builds on the parent's EMPTY variant, the parent's payload in this batch is orphaned
|
|
48
|
+
warnings.push({ slot: parentBlock.slot, payloadEnvelopeInput: parentPayloadInput });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
37
52
|
// First block must build on the parent's EL head. PARENT_PAYLOAD_UNKNOWN (vs the in-segment
|
|
38
53
|
// NON_LINEAR_PAYLOAD_ROOTS below) tells range sync this is a parent-link problem, not an in-batch one.
|
|
39
54
|
if (parentExecHash !== null && currentExecHash !== null && currentExecHash !== parentExecHash) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chainSegment.js","sourceRoot":"","sources":["../../../../src/chain/blocks/utils/chainSegment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAO,kBAAkB,EAAE,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAWjE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAuB,EACvB,MAAqB,EACrB,gBAAwD,EACxD,WAA8B;IAE9B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;IAC1B,CAAC;IAED,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAE/C,IAAI,cAAc,GAAkB,WAAW,EAAE,yBAAyB,IAAI,IAAI,CAAC;IACnF,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,MAAM,kBAAkB,GAAG,gBAAgB,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,kBAAkB,EAAE,kBAAkB,EAAE,EAAE,CAAC;YAC7C,
|
|
1
|
+
{"version":3,"file":"chainSegment.js","sourceRoot":"","sources":["../../../../src/chain/blocks/utils/chainSegment.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlock.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,UAAU,EAAC,MAAM,uBAAuB,CAAC;AAElE,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAGjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAC,kBAAkB,EAAE,IAAI,EAAQ,MAAM,iBAAiB,CAAC;AAGhE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAS,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAC,oBAAoB,EAAC,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAO3C,OAAO,EAAC,iBAAiB,EAA+B,MAAM,oCAAoC,CAAC;AAKnG;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,WAAW,EACjB,WAAW,EAAE,UAAU,EACvB,WAAW,EAAE,WAAW,EAAE,EAC1B,gBAAgB,EAAE,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,IAAI,EACxD,IAAI,EAAE,gBAAgB,GAAG,eAAe,GACvC,OAAO,CAAC;IACT,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,eAAe,EAAE,sBAAsB,EAAE,CAAC;IAC1C,iBAAiB,EAAE,GAAG,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;IACrD,0BAA0B,EAAE,kBAAkB,EAAE,EAAE,CAAC;CACpD,CAAC,
|
|
1
|
+
{"version":3,"file":"verifyBlock.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,UAAU,EAAC,MAAM,uBAAuB,CAAC;AAElE,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAGjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAC,kBAAkB,EAAE,IAAI,EAAQ,MAAM,iBAAiB,CAAC;AAGhE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAS,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAC,oBAAoB,EAAC,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAO3C,OAAO,EAAC,iBAAiB,EAA+B,MAAM,oCAAoC,CAAC;AAKnG;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,WAAW,EACjB,WAAW,EAAE,UAAU,EACvB,WAAW,EAAE,WAAW,EAAE,EAC1B,gBAAgB,EAAE,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,IAAI,EACxD,IAAI,EAAE,gBAAgB,GAAG,eAAe,GACvC,OAAO,CAAC;IACT,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,eAAe,EAAE,sBAAsB,EAAE,CAAC;IAC1C,iBAAiB,EAAE,GAAG,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;IACrD,0BAA0B,EAAE,kBAAkB,EAAE,EAAE,CAAC;CACpD,CAAC,CA4QD"}
|
|
@@ -91,11 +91,14 @@ export async function verifyBlocksInEpoch(parentBlock, blockInputs, payloadEnvel
|
|
|
91
91
|
// - Post-Gloas: verifyPayloadsDataAvailability (payload-level DA, keyed by slot).
|
|
92
92
|
const daAvailabilityPromise = fork >= ForkSeq.gloas
|
|
93
93
|
? (async () => {
|
|
94
|
-
//
|
|
94
|
+
// Range sync creates a PayloadEnvelopeInput for every Gloas block, but an entry without
|
|
95
|
+
// an envelope represents a valid EMPTY slot and has no payload DA to verify.
|
|
95
96
|
// A checkpoint-sync batch may include a payload for a slot whose block was filtered
|
|
96
97
|
// out of relevantBlocks (e.g., the anchor at the finalized slot); that payload still
|
|
97
98
|
// needs DA validation so it can be imported in processBlocks.
|
|
98
|
-
const payloadInputsForDa = payloadEnvelopes !== null
|
|
99
|
+
const payloadInputsForDa = payloadEnvelopes !== null
|
|
100
|
+
? Array.from(payloadEnvelopes.values()).filter((payloadInput) => payloadInput.hasPayloadEnvelope())
|
|
101
|
+
: [];
|
|
99
102
|
const { dataAvailabilityStatuses, availableTime } = await verifyPayloadsDataAvailability(payloadInputsForDa, abortController.signal);
|
|
100
103
|
const payloadDAStatuses = new Map();
|
|
101
104
|
for (let i = 0; i < payloadInputsForDa.length; i++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlock.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlock.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"verifyBlock.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writeBlockInputToDb.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/writeBlockInputToDb.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAAC,WAAW,EAAE,iBAAiB,EAAyC,MAAM,uBAAuB,CAAC;AAG7G;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CASnG;AA4CD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"writeBlockInputToDb.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/writeBlockInputToDb.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAAC,WAAW,EAAE,iBAAiB,EAAyC,MAAM,uBAAuB,CAAC;AAG7G;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CASnG;AA4CD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC1G;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBjG"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isForkPostDeneb } from "@lodestar/params";
|
|
2
|
-
import {
|
|
2
|
+
import { toRootHex } from "@lodestar/utils";
|
|
3
3
|
import { getBlobKzgCommitments } from "../../util/dataColumns.js";
|
|
4
4
|
import { isBlockInputBlobs, isBlockInputColumns } from "./blockInput/index.js";
|
|
5
5
|
import { BLOB_AVAILABILITY_TIMEOUT } from "./verifyBlocksDataAvailability.js";
|
|
@@ -64,7 +64,6 @@ async function writeBlockAndBlobsToDb(blockInput) {
|
|
|
64
64
|
*/
|
|
65
65
|
export async function writeDataColumnsToDb(blockInput) {
|
|
66
66
|
const { slot, blockRootHex } = blockInput;
|
|
67
|
-
const blockRoot = fromHex(blockRootHex);
|
|
68
67
|
if (!blockInput.hasComputedAllData()) {
|
|
69
68
|
// Supernodes may only have a subset of the data columns by the time the block begins to be imported
|
|
70
69
|
// because full data availability can be assumed after NUMBER_OF_COLUMNS / 2 columns are available.
|
|
@@ -75,23 +74,17 @@ export async function writeDataColumnsToDb(blockInput) {
|
|
|
75
74
|
}
|
|
76
75
|
const { custodyColumns } = this.custodyConfig;
|
|
77
76
|
const dataColumnSidecars = blockInput.getCustodyColumns();
|
|
78
|
-
const
|
|
79
|
-
const
|
|
77
|
+
const dataColumnSidecarType = this.config.getForkTypes(slot).DataColumnSidecar;
|
|
78
|
+
const binaryColumns = [];
|
|
80
79
|
for (const dataColumnSidecar of dataColumnSidecars) {
|
|
81
|
-
// skip reserializing column if we already have it
|
|
82
80
|
const serialized = this.serializedCache.get(dataColumnSidecar);
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
nonbinaryPuts.push(dataColumnSidecar);
|
|
88
|
-
}
|
|
81
|
+
binaryColumns.push({
|
|
82
|
+
index: dataColumnSidecar.index,
|
|
83
|
+
data: serialized ?? dataColumnSidecarType.serialize(dataColumnSidecar),
|
|
84
|
+
});
|
|
89
85
|
}
|
|
90
|
-
await
|
|
91
|
-
|
|
92
|
-
this.db.dataColumnSidecar.putMany(blockRoot, nonbinaryPuts),
|
|
93
|
-
]);
|
|
94
|
-
this.logger.debug("Persisted dataColumnSidecars to hot DB", {
|
|
86
|
+
await this.db.dataColumns.putManyBinary({ slot, blockRoot: blockRootHex }, binaryColumns);
|
|
87
|
+
this.logger.debug("Persisted dataColumnSidecars", {
|
|
95
88
|
slot,
|
|
96
89
|
root: blockRootHex,
|
|
97
90
|
dataColumnSidecars: dataColumnSidecars.length,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writeBlockInputToDb.js","sourceRoot":"","sources":["../../../src/chain/blocks/writeBlockInputToDb.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"writeBlockInputToDb.js","sourceRoot":"","sources":["../../../src/chain/blocks/writeBlockInputToDb.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAE9E,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EAAiC,iBAAiB,EAAE,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAC7G,OAAO,EAAC,yBAAyB,EAAC,MAAM,mCAAmC,CAAC;AAE5E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAoB,UAAuB;IAClF,MAAM,QAAQ,GAAoB,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAElF,IAAI,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,YAAY,EAAC,CAAC,CAAC;AAC1G,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAoB,UAAuB;IAC9E,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzF,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC;QACnD,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAyC,CAAC,CAAC,MAAM;QAC9F,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,UAAU,GAAoB,EAAE,CAAC;IAEvC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnD,IAAI,UAAU,EAAE,CAAC;QACf,8CAA8C;QAC9C,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,mCAAmC,CAAC,GAAG,EAAE,CAAC;QACpE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IACnF,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,iCAAiC,CAAC,GAAG,EAAE,CAAC;QAClE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAC,CAAC,CAAC;IAE/G,IAAI,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,UAAU,CAAC,IAAI,CACb,CAAC,KAAK,IAAI,EAAE;YACV,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC;gBAC7B,MAAM,UAAU,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC3C,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,EAAC,SAAS,EAAE,IAAI,EAAE,YAAY,EAAC,CAAC,CAAC;YAChE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE;gBACpD,IAAI;gBACJ,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,YAAY,CAAC,MAAM;aAC9B,CAAC,CAAC;QACL,CAAC,CAAC,EAAE,CACL,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAoB,UAA6B;IACzF,MAAM,EAAC,IAAI,EAAE,YAAY,EAAC,GAAG,UAAU,CAAC;IAExC,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,EAAE,CAAC;QACrC,oGAAoG;QACpG,mGAAmG;QACnG,qGAAqG;QACrG,MAAM,UAAU,CAAC,sBAAsB,CAAC,yBAAyB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC5E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,EAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAC,CAAC,CAAC;QAC7F,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,EAAC,cAAc,EAAC,GAAG,IAAI,CAAC,aAAa,CAAC;IAC5C,MAAM,kBAAkB,GAAG,UAAU,CAAC,iBAAiB,EAAE,CAAC;IAC1D,MAAM,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAe,IAAI,CAAC,CAAC,iBAAiB,CAAC;IAE7F,MAAM,aAAa,GAAwC,EAAE,CAAC;IAC9D,KAAK,MAAM,iBAAiB,IAAI,kBAAkB,EAAE,CAAC;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/D,aAAa,CAAC,IAAI,CAAC;YACjB,KAAK,EAAE,iBAAiB,CAAC,KAAK;YAC9B,IAAI,EAAE,UAAU,IAAI,qBAAqB,CAAC,SAAS,CAAC,iBAAiB,CAAC;SACvE,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,EAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAC,EAAE,aAAa,CAAC,CAAC;IAExF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;QAChD,IAAI;QACJ,IAAI,EAAE,YAAY;QAClB,kBAAkB,EAAE,kBAAkB,CAAC,MAAM;QAC7C,cAAc,EAAE,cAAc,CAAC,MAAM;QACrC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM;KAC/C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAoB,UAAuB;IAChF,MAAM,mBAAmB;SACtB,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;SACtB,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACX,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,wCAAwC,EACxC;YACE,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAE,UAAU,CAAC,YAAY;SAC9B,EACD,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;SACD,OAAO,CAAC,GAAG,EAAE;QACZ,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;YACtC,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAE,UAAU,CAAC,YAAY;SAC9B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/lib/chain/chain.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ import { BeaconProposerCache } from "./beaconProposerCache.js";
|
|
|
22
22
|
import { IBlockInput } from "./blocks/blockInput/index.js";
|
|
23
23
|
import { BlockProcessor, ImportBlockOpts } from "./blocks/index.js";
|
|
24
24
|
import { PayloadEnvelopeProcessor } from "./blocks/payloadEnvelopeProcessor.js";
|
|
25
|
-
import { ImportPayloadOpts } from "./blocks/types.js";
|
|
25
|
+
import { ImportPayloadOpts, ProcessBlocksResult } from "./blocks/types.js";
|
|
26
26
|
import { IBlsVerifier } from "./bls/index.js";
|
|
27
27
|
import { BuilderCircuitBreaker } from "./builderCircuitBreaker.js";
|
|
28
28
|
import { ColumnReconstructionTracker } from "./ColumnReconstructionTracker.js";
|
|
@@ -115,13 +115,14 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
115
115
|
private _earliestAvailableSlot;
|
|
116
116
|
get earliestAvailableSlot(): Slot;
|
|
117
117
|
set earliestAvailableSlot(slot: Slot);
|
|
118
|
-
constructor(opts: IChainOptions, { privateKey, config, pubkeyCache, db, dbName, dataDir, logger, processShutdownCallback, clock, metrics, validatorMonitor, anchorState, isAnchorStateFinalized, executionEngine, executionBuilder, builderApiClientOpts, }: {
|
|
118
|
+
constructor(opts: IChainOptions, { privateKey, config, pubkeyCache, db, dbName, dataDir, dataColumnDir, logger, processShutdownCallback, clock, metrics, validatorMonitor, anchorState, isAnchorStateFinalized, executionEngine, executionBuilder, builderApiClientOpts, }: {
|
|
119
119
|
privateKey: PrivateKey;
|
|
120
120
|
config: BeaconConfig;
|
|
121
121
|
pubkeyCache: PubkeyCache;
|
|
122
122
|
db: IBeaconDb;
|
|
123
123
|
dbName: string;
|
|
124
124
|
dataDir: string;
|
|
125
|
+
dataColumnDir?: string;
|
|
125
126
|
logger: Logger;
|
|
126
127
|
processShutdownCallback: ProcessShutdownCallback;
|
|
127
128
|
/** Used for testing to supply fake clock */
|
|
@@ -222,14 +223,19 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
222
223
|
shouldOverrideBuilder?: boolean;
|
|
223
224
|
}>;
|
|
224
225
|
processBlock(block: IBlockInput, opts?: ImportBlockOpts): Promise<void>;
|
|
225
|
-
processChainSegment(blocks: IBlockInput[], payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null, opts?: ImportBlockOpts): Promise<
|
|
226
|
+
processChainSegment(blocks: IBlockInput[], payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null, opts?: ImportBlockOpts): Promise<ProcessBlocksResult>;
|
|
226
227
|
processExecutionPayload(payloadInput: PayloadEnvelopeInput, opts?: ImportPayloadOpts): Promise<void>;
|
|
227
228
|
processProposerEquivocation(blockSlot: Slot, proposerIndex: ValidatorIndex): void;
|
|
228
229
|
/** Produce a proposer slashing from two conflicting signed block headers observed for the same slot and proposer */
|
|
229
230
|
private produceProposerSlashing;
|
|
230
231
|
getStatus(): Status;
|
|
231
232
|
recomputeForkChoiceHead(caller: ForkchoiceCaller): ProtoBlock;
|
|
232
|
-
|
|
233
|
+
/**
|
|
234
|
+
* Emit `head` and `head_v2` when the fork choice head differs between two observations. Every caller that
|
|
235
|
+
* can move the head, `updateAndGetHead()` and `updateTime()`, must capture the head before and pass both.
|
|
236
|
+
*/
|
|
237
|
+
private emitHeadEvents;
|
|
238
|
+
predictProposerHead(): ProtoBlock;
|
|
233
239
|
getProposerHead(slot: Slot): ProtoBlock;
|
|
234
240
|
/**
|
|
235
241
|
* Returns Promise that resolves either on block found or once 1 slot passes.
|
|
@@ -243,8 +249,8 @@ export declare class BeaconChain implements IBeaconChain {
|
|
|
243
249
|
* persist preState, postState and block for further investigation.
|
|
244
250
|
*/
|
|
245
251
|
persistInvalidStateRoot(preState: IBeaconStateView, postState: IBeaconStateView, block: SignedBeaconBlock): Promise<void>;
|
|
246
|
-
persistInvalidSszValue<T>(type: Type<T>, sszObject: T, suffix?: string): void;
|
|
247
|
-
persistInvalidSszBytes(typeName: string, sszBytes: Uint8Array, suffix?: string): void;
|
|
252
|
+
persistInvalidSszValue<T>(type: Type<T>, sszObject: T, suffix?: string, rootHex?: RootHex): void;
|
|
253
|
+
persistInvalidSszBytes(typeName: string, sszBytes: Uint8Array, rootHex: RootHex, suffix?: string): void;
|
|
248
254
|
/**
|
|
249
255
|
* Regenerate state for attestation verification, this does not happen with default chain option of maxSkipSlots = 32 .
|
|
250
256
|
* However, need to handle just in case. Lodestar doesn't support multiple regen state requests for attestation verification
|