@lodestar/beacon-node 1.43.0-dev.6b7eebbf6d → 1.43.0-dev.6f485b1b61
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 +16 -5
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +45 -2
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/api/impl/debug/index.d.ts.map +1 -1
- package/lib/api/impl/debug/index.js +0 -1
- package/lib/api/impl/debug/index.js.map +1 -1
- package/lib/api/impl/lodestar/index.js +1 -1
- package/lib/api/impl/lodestar/index.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts.map +1 -1
- package/lib/api/impl/validator/index.js +68 -2
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts +3 -0
- package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.js +4 -1
- package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +16 -28
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts +23 -6
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.js +57 -24
- package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
- package/lib/chain/blocks/index.d.ts +5 -3
- package/lib/chain/blocks/index.d.ts.map +1 -1
- package/lib/chain/blocks/index.js +58 -25
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +12 -1
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +28 -2
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +17 -0
- package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeProcessor.js +2 -2
- package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +4 -3
- package/lib/chain/blocks/types.d.ts.map +1 -1
- package/lib/chain/blocks/utils/chainSegment.d.ts +23 -2
- package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
- package/lib/chain/blocks/utils/chainSegment.js +89 -12
- package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.d.ts +5 -3
- package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +50 -7
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +0 -4
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -2
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts +2 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.js +25 -5
- package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts +2 -2
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +12 -8
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -1
- package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
- package/lib/chain/blocks/verifyPayloadsDataAvailability.js +8 -3
- package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.d.ts.map +1 -1
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js +1 -10
- package/lib/chain/blocks/writePayloadEnvelopeInputToDb.js.map +1 -1
- package/lib/chain/chain.d.ts +5 -3
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +42 -12
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +0 -11
- package/lib/chain/emitter.d.ts.map +1 -1
- package/lib/chain/emitter.js +0 -4
- package/lib/chain/emitter.js.map +1 -1
- package/lib/chain/errors/blockError.d.ts +8 -1
- package/lib/chain/errors/blockError.d.ts.map +1 -1
- package/lib/chain/errors/blockError.js +2 -0
- package/lib/chain/errors/blockError.js.map +1 -1
- package/lib/chain/errors/executionPayloadBid.d.ts +5 -0
- package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/errors/executionPayloadBid.js +1 -0
- package/lib/chain/errors/executionPayloadBid.js.map +1 -1
- package/lib/chain/errors/index.d.ts +1 -0
- package/lib/chain/errors/index.d.ts.map +1 -1
- package/lib/chain/errors/index.js +1 -0
- package/lib/chain/errors/index.js.map +1 -1
- package/lib/chain/errors/proposerPreferences.d.ts +40 -0
- package/lib/chain/errors/proposerPreferences.d.ts.map +1 -0
- package/lib/chain/errors/proposerPreferences.js +14 -0
- package/lib/chain/errors/proposerPreferences.js.map +1 -0
- package/lib/chain/initState.d.ts.map +1 -1
- package/lib/chain/initState.js +6 -1
- package/lib/chain/initState.js.map +1 -1
- package/lib/chain/interface.d.ts +5 -3
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/opPools/payloadAttestationPool.d.ts +3 -2
- package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/payloadAttestationPool.js +26 -4
- package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
- package/lib/chain/prepareNextSlot.d.ts.map +1 -1
- package/lib/chain/prepareNextSlot.js +31 -13
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +11 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +47 -15
- 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/regen/queued.d.ts.map +1 -1
- package/lib/chain/regen/queued.js +1 -4
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/regen/regen.d.ts.map +1 -1
- package/lib/chain/regen/regen.js +1 -4
- package/lib/chain/regen/regen.js.map +1 -1
- package/lib/chain/seenCache/index.d.ts +1 -0
- package/lib/chain/seenCache/index.d.ts.map +1 -1
- package/lib/chain/seenCache/index.js +1 -0
- package/lib/chain/seenCache/index.js.map +1 -1
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +24 -7
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +69 -17
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
- package/lib/chain/seenCache/seenProposerPreferences.d.ts +16 -0
- package/lib/chain/seenCache/seenProposerPreferences.d.ts.map +1 -0
- package/lib/chain/seenCache/seenProposerPreferences.js +26 -0
- package/lib/chain/seenCache/seenProposerPreferences.js.map +1 -0
- package/lib/chain/validation/block.d.ts.map +1 -1
- package/lib/chain/validation/block.js +1 -0
- package/lib/chain/validation/block.js.map +1 -1
- package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/validation/executionPayloadBid.js +24 -9
- package/lib/chain/validation/executionPayloadBid.js.map +1 -1
- package/lib/chain/validation/proposerPreferences.d.ts +8 -0
- package/lib/chain/validation/proposerPreferences.d.ts.map +1 -0
- package/lib/chain/validation/proposerPreferences.js +91 -0
- package/lib/chain/validation/proposerPreferences.js.map +1 -0
- package/lib/metrics/metrics/lodestar.d.ts +1 -0
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +4 -0
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +7 -1
- package/lib/network/gossip/interface.d.ts.map +1 -1
- package/lib/network/gossip/interface.js +1 -0
- package/lib/network/gossip/interface.js.map +1 -1
- package/lib/network/gossip/scoringParameters.d.ts.map +1 -1
- package/lib/network/gossip/scoringParameters.js +12 -1
- package/lib/network/gossip/scoringParameters.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +10 -0
- package/lib/network/gossip/topic.d.ts.map +1 -1
- package/lib/network/gossip/topic.js +6 -0
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +1 -0
- package/lib/network/interface.d.ts.map +1 -1
- package/lib/network/network.d.ts +1 -0
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +5 -0
- package/lib/network/network.js.map +1 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +38 -16
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/index.d.ts.map +1 -1
- package/lib/network/processor/gossipQueues/index.js +5 -0
- package/lib/network/processor/gossipQueues/index.js.map +1 -1
- package/lib/network/processor/index.d.ts.map +1 -1
- package/lib/network/processor/index.js +6 -5
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRange.js +14 -6
- package/lib/network/reqresp/handlers/beaconBlocksByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRange.js +11 -5
- package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +17 -5
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js +7 -4
- package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRange.js.map +1 -1
- package/lib/node/nodejs.js +2 -2
- package/lib/node/nodejs.js.map +1 -1
- package/lib/sync/constants.d.ts +3 -1
- package/lib/sync/constants.d.ts.map +1 -1
- package/lib/sync/constants.js +3 -4
- package/lib/sync/constants.js.map +1 -1
- package/lib/sync/range/batch.d.ts +35 -5
- package/lib/sync/range/batch.d.ts.map +1 -1
- package/lib/sync/range/batch.js +240 -59
- package/lib/sync/range/batch.js.map +1 -1
- package/lib/sync/range/chain.d.ts +19 -4
- package/lib/sync/range/chain.d.ts.map +1 -1
- package/lib/sync/range/chain.js +64 -11
- 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 +31 -9
- package/lib/sync/range/range.js.map +1 -1
- package/lib/sync/sync.d.ts.map +1 -1
- package/lib/sync/sync.js +13 -0
- package/lib/sync/sync.js.map +1 -1
- package/lib/sync/types.d.ts +34 -0
- package/lib/sync/types.d.ts.map +1 -1
- package/lib/sync/types.js +34 -0
- package/lib/sync/types.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts +29 -1
- package/lib/sync/unknownBlock.d.ts.map +1 -1
- package/lib/sync/unknownBlock.js +738 -61
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/downloadByRange.d.ts +67 -10
- package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRange.js +211 -26
- package/lib/sync/utils/downloadByRange.js.map +1 -1
- package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRoot.js +16 -2
- package/lib/sync/utils/downloadByRoot.js.map +1 -1
- package/lib/sync/utils/pendingBlocksTree.d.ts +0 -1
- package/lib/sync/utils/pendingBlocksTree.d.ts.map +1 -1
- package/lib/sync/utils/pendingBlocksTree.js +0 -9
- package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
- package/lib/util/sszBytes.d.ts.map +1 -1
- package/lib/util/sszBytes.js +8 -6
- package/lib/util/sszBytes.js.map +1 -1
- package/package.json +16 -15
- package/src/api/impl/beacon/blocks/index.ts +21 -5
- package/src/api/impl/beacon/pool/index.ts +83 -1
- package/src/api/impl/debug/index.ts +0 -1
- package/src/api/impl/lodestar/index.ts +1 -1
- package/src/api/impl/validator/index.ts +82 -1
- package/src/chain/blocks/blockInput/blockInput.ts +4 -1
- package/src/chain/blocks/importBlock.ts +16 -48
- package/src/chain/blocks/importExecutionPayload.ts +76 -30
- package/src/chain/blocks/index.ts +71 -22
- package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +37 -3
- package/src/chain/blocks/payloadEnvelopeInput/types.ts +18 -0
- package/src/chain/blocks/payloadEnvelopeProcessor.ts +2 -2
- package/src/chain/blocks/types.ts +4 -3
- package/src/chain/blocks/utils/chainSegment.ts +114 -17
- package/src/chain/blocks/verifyBlock.ts +70 -9
- package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +6 -4
- package/src/chain/blocks/verifyBlocksSanityChecks.ts +26 -7
- package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +16 -8
- package/src/chain/blocks/verifyPayloadsDataAvailability.ts +7 -4
- package/src/chain/blocks/writePayloadEnvelopeInputToDb.ts +8 -17
- package/src/chain/chain.ts +55 -10
- package/src/chain/emitter.ts +0 -11
- package/src/chain/errors/blockError.ts +4 -1
- package/src/chain/errors/executionPayloadBid.ts +6 -0
- package/src/chain/errors/index.ts +1 -0
- package/src/chain/errors/proposerPreferences.ts +47 -0
- package/src/chain/initState.ts +9 -1
- package/src/chain/interface.ts +9 -1
- package/src/chain/opPools/payloadAttestationPool.ts +29 -8
- package/src/chain/prepareNextSlot.ts +36 -14
- package/src/chain/produceBlock/produceBlockBody.ts +57 -14
- package/src/chain/regen/interface.ts +1 -0
- package/src/chain/regen/queued.ts +2 -7
- package/src/chain/regen/regen.ts +2 -7
- package/src/chain/seenCache/index.ts +1 -0
- package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +89 -21
- package/src/chain/seenCache/seenProposerPreferences.ts +32 -0
- package/src/chain/validation/block.ts +1 -0
- package/src/chain/validation/executionPayloadBid.ts +25 -8
- package/src/chain/validation/proposerPreferences.ts +110 -0
- package/src/metrics/metrics/lodestar.ts +4 -0
- package/src/network/gossip/interface.ts +6 -0
- package/src/network/gossip/scoringParameters.ts +14 -1
- package/src/network/gossip/topic.ts +6 -0
- package/src/network/interface.ts +1 -0
- package/src/network/network.ts +11 -0
- package/src/network/processor/gossipHandlers.ts +53 -17
- package/src/network/processor/gossipQueues/index.ts +5 -0
- package/src/network/processor/index.ts +6 -5
- package/src/network/reqresp/handlers/beaconBlocksByRange.ts +14 -6
- package/src/network/reqresp/handlers/blobSidecarsByRange.ts +11 -5
- package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +17 -5
- package/src/network/reqresp/handlers/executionPayloadEnvelopesByRange.ts +7 -4
- package/src/node/nodejs.ts +2 -2
- package/src/sync/constants.ts +4 -4
- package/src/sync/range/batch.ts +320 -67
- package/src/sync/range/chain.ts +89 -14
- package/src/sync/range/range.ts +34 -9
- package/src/sync/sync.ts +13 -1
- package/src/sync/types.ts +72 -0
- package/src/sync/unknownBlock.ts +928 -65
- package/src/sync/utils/downloadByRange.ts +378 -39
- package/src/sync/utils/downloadByRoot.ts +24 -2
- package/src/sync/utils/pendingBlocksTree.ts +0 -15
- package/src/util/sszBytes.ts +8 -6
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { JobItemQueue } from "../../util/queue/index.js";
|
|
2
|
-
import {
|
|
2
|
+
import { processExecutionPayload } from "./importExecutionPayload.js";
|
|
3
3
|
// TODO GLOAS: Set to be equal to DEFAULT_MAX_PENDING_UNFINALIZED_PAYLOAD_ENVELOPE_WRITES for now
|
|
4
4
|
const QUEUE_MAX_LENGTH = 16;
|
|
5
5
|
var PayloadEnvelopeImportStatus;
|
|
@@ -22,7 +22,7 @@ export class PayloadEnvelopeProcessor {
|
|
|
22
22
|
constructor(chain, metrics, signal) {
|
|
23
23
|
this.jobQueue = new JobItemQueue((payloadInput, opts) => {
|
|
24
24
|
this.importStatus.set(payloadInput, PayloadEnvelopeImportStatus.importing);
|
|
25
|
-
return
|
|
25
|
+
return processExecutionPayload.call(chain, payloadInput, signal, opts);
|
|
26
26
|
}, { maxLength: QUEUE_MAX_LENGTH, noYieldIfOneItem: true, signal }, metrics?.payloadEnvelopeProcessorQueue ?? undefined);
|
|
27
27
|
}
|
|
28
28
|
async processPayloadEnvelopeJob(payloadInput, opts = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payloadEnvelopeProcessor.js","sourceRoot":"","sources":["../../../src/chain/blocks/payloadEnvelopeProcessor.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AAGvD,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"payloadEnvelopeProcessor.js","sourceRoot":"","sources":["../../../src/chain/blocks/payloadEnvelopeProcessor.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AAGvD,OAAO,EAAC,uBAAuB,EAAC,MAAM,6BAA6B,CAAC;AAGpE,iGAAiG;AACjG,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B,IAAK,2BAIJ;AAJD,WAAK,2BAA2B;IAC9B,gDAAiB,CAAA;IACjB,sDAAuB,CAAA;IACvB,oDAAqB,CAAA;AAAC,CACxB,EAJK,2BAA2B,KAA3B,2BAA2B,QAI/B;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,wBAAwB;IAC1B,QAAQ,CAAgE;IAChE,YAAY,GAAG,IAAI,OAAO,EAAqD,CAAC;IAEjG,YAAY,KAAkB,EAAE,OAAuB,EAAE,MAAmB,EAAE;QAC5E,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAC9B,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;YAC3E,OAAO,uBAAuB,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAAA,CACxE,EACD,EAAC,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAC,EAC7D,OAAO,EAAE,6BAA6B,IAAI,SAAS,CACpD,CAAC;IAAA,CACH;IAED,KAAK,CAAC,yBAAyB,CAAC,YAAkC,EAAE,IAAI,GAAsB,EAAE,EAAiB;QAC/G,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE,CAAC;YACtD,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAEnC,sEAAsE;QACtE,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE,CAAC;YACtD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC;QAExE,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACvC,MAAM,CAAC,CAAC;QACV,CAAC;IAAA,CACF;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ChainForkConfig } from "@lodestar/config";
|
|
2
|
-
import { BlockExecutionStatus } from "@lodestar/fork-choice";
|
|
2
|
+
import type { BlockExecutionStatus, PayloadExecutionStatus } from "@lodestar/fork-choice";
|
|
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";
|
|
@@ -79,7 +79,8 @@ export type ImportBlockOpts = {
|
|
|
79
79
|
*
|
|
80
80
|
* `executionStatus` reflects the outcome of execution payload verification at block-import time:
|
|
81
81
|
* - pre-gloas: Valid | Syncing | PreMerge (from EL notifyNewPayload against the in-block payload)
|
|
82
|
-
* - post-gloas:
|
|
82
|
+
* - post-gloas: inherited from parent's chain (Valid/Syncing) by importBlock; payload arrives
|
|
83
|
+
* separately as an envelope and creates the FULL variant later via onExecutionPayload
|
|
83
84
|
*/
|
|
84
85
|
export type FullyVerifiedBlock = {
|
|
85
86
|
blockInput: IBlockInput;
|
|
@@ -92,7 +93,7 @@ export type FullyVerifiedBlock = {
|
|
|
92
93
|
/** Seen timestamp seconds */
|
|
93
94
|
seenTimestampSec: number;
|
|
94
95
|
/** If the execution payload couldn't be verified because of EL syncing status, used in optimistic sync */
|
|
95
|
-
executionStatus: BlockExecutionStatus;
|
|
96
|
+
executionStatus: BlockExecutionStatus | PayloadExecutionStatus;
|
|
96
97
|
};
|
|
97
98
|
export {};
|
|
98
99
|
//# 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,EAAC,oBAAoB,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;AAElD,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"}
|
|
@@ -1,7 +1,28 @@
|
|
|
1
1
|
import { ChainForkConfig } from "@lodestar/config";
|
|
2
|
+
import { ProtoBlock } from "@lodestar/fork-choice";
|
|
3
|
+
import { Slot } from "@lodestar/types";
|
|
2
4
|
import { IBlockInput } from "../blockInput/types.js";
|
|
5
|
+
import { PayloadEnvelopeInput } from "../payloadEnvelopeInput/payloadEnvelopeInput.js";
|
|
6
|
+
export type OrphanedPayloadEnvelope = {
|
|
7
|
+
slot: Slot;
|
|
8
|
+
payloadEnvelopeInput: PayloadEnvelopeInput;
|
|
9
|
+
};
|
|
10
|
+
export type ChainSegmentResult = {
|
|
11
|
+
warnings: OrphanedPayloadEnvelope[] | null;
|
|
12
|
+
};
|
|
3
13
|
/**
|
|
4
|
-
* Assert this chain segment of blocks is linear with slot numbers and hashes
|
|
14
|
+
* Assert this chain segment of blocks is linear with slot numbers and hashes,
|
|
15
|
+
* and that the provided envelopes are consistent with their respective blocks.
|
|
16
|
+
*
|
|
17
|
+
* Must be called after verifyBlocksSanityChecks so that parentBlock (from forkchoice)
|
|
18
|
+
* is available to seed the execution hash chain.
|
|
19
|
+
*
|
|
20
|
+
* For each block:
|
|
21
|
+
* - Verifies parent root + slot linearity
|
|
22
|
+
* - For gloas: verifies bid.parentBlockHash matches the tracked execution hash; if not, the
|
|
23
|
+
* previous FULL envelope is treated as orphaned (segment continues as if previous slot was EMPTY)
|
|
24
|
+
* - If an envelope exists for this slot: verifies it references this block's root
|
|
25
|
+
* - Advances the tracked execution hash (FULL if envelope present, EMPTY if not)
|
|
5
26
|
*/
|
|
6
|
-
export declare function assertLinearChainSegment(config: ChainForkConfig, blocks: IBlockInput[]):
|
|
27
|
+
export declare function assertLinearChainSegment(config: ChainForkConfig, blocks: IBlockInput[], payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null, parentBlock: ProtoBlock): ChainSegmentResult;
|
|
7
28
|
//# sourceMappingURL=chainSegment.d.ts.map
|
|
@@ -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;
|
|
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;;;;;;;;;;;;;GAaG;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,GACtB,kBAAkB,CA2FpB"}
|
|
@@ -1,21 +1,98 @@
|
|
|
1
|
-
import { ssz } from "@lodestar/types";
|
|
1
|
+
import { isGloasBeaconBlock, ssz } from "@lodestar/types";
|
|
2
|
+
import { toRootHex } from "@lodestar/utils";
|
|
2
3
|
import { BlockError, BlockErrorCode } from "../../errors/index.js";
|
|
3
4
|
/**
|
|
4
|
-
* Assert this chain segment of blocks is linear with slot numbers and hashes
|
|
5
|
+
* Assert this chain segment of blocks is linear with slot numbers and hashes,
|
|
6
|
+
* and that the provided envelopes are consistent with their respective blocks.
|
|
7
|
+
*
|
|
8
|
+
* Must be called after verifyBlocksSanityChecks so that parentBlock (from forkchoice)
|
|
9
|
+
* is available to seed the execution hash chain.
|
|
10
|
+
*
|
|
11
|
+
* For each block:
|
|
12
|
+
* - Verifies parent root + slot linearity
|
|
13
|
+
* - For gloas: verifies bid.parentBlockHash matches the tracked execution hash; if not, the
|
|
14
|
+
* previous FULL envelope is treated as orphaned (segment continues as if previous slot was EMPTY)
|
|
15
|
+
* - If an envelope exists for this slot: verifies it references this block's root
|
|
16
|
+
* - Advances the tracked execution hash (FULL if envelope present, EMPTY if not)
|
|
5
17
|
*/
|
|
6
|
-
export function assertLinearChainSegment(config, blocks) {
|
|
7
|
-
|
|
18
|
+
export function assertLinearChainSegment(config, blocks, payloadEnvelopes, parentBlock) {
|
|
19
|
+
const warnings = [];
|
|
20
|
+
// Track the expected execution payload block hash through the segment.
|
|
21
|
+
// Starts from the known forkchoice parent's execution hash.
|
|
22
|
+
// - FULL variant (envelope present for slot): advances to envelope.payload.blockHash
|
|
23
|
+
// - EMPTY variant (no envelope for slot): execution hash is unchanged
|
|
24
|
+
// null only for pre-merge parents, which cannot precede gloas blocks.
|
|
25
|
+
let currentExecHash = parentBlock.executionPayloadBlockHash;
|
|
26
|
+
// Checkpoint sync first batch: parent is the anchor PENDING whose executionPayloadBlockHash
|
|
27
|
+
// is the inherited parentBlockHash semantic (= grandparent's payload), not its own payload.
|
|
28
|
+
// If parent's own payload envelope arrives in this batch, advance currentExecHash to that
|
|
29
|
+
// payload's blockHash so the segment validation sees the true EL chain head.
|
|
30
|
+
const parentPayloadInput = payloadEnvelopes?.get(parentBlock.slot);
|
|
31
|
+
if (parentPayloadInput?.hasPayloadEnvelope()) {
|
|
32
|
+
currentExecHash = parentPayloadInput.getBlockHashHex();
|
|
33
|
+
}
|
|
34
|
+
// Track the execution hash before the last FULL advancement so we can recover
|
|
35
|
+
// if the next block reveals that envelope was orphaned.
|
|
36
|
+
let prevExecHash = currentExecHash;
|
|
37
|
+
// The slot whose envelope last advanced currentExecHash (for warning context).
|
|
38
|
+
let lastFullSlot = null;
|
|
39
|
+
for (let i = 0; i < blocks.length; i++) {
|
|
8
40
|
const block = blocks[i].getBlock();
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
41
|
+
const slot = block.message.slot;
|
|
42
|
+
if (i > 0) {
|
|
43
|
+
const prevBlock = blocks[i - 1].getBlock();
|
|
44
|
+
// Ensure parent root matches the previous block's root
|
|
45
|
+
if (!ssz.Root.equals(config.getForkTypes(prevBlock.message.slot).BeaconBlock.hashTreeRoot(prevBlock.message), block.message.parentRoot)) {
|
|
46
|
+
throw new BlockError(block, { code: BlockErrorCode.NON_LINEAR_PARENT_ROOTS });
|
|
47
|
+
}
|
|
48
|
+
// Ensure slots are strictly increasing
|
|
49
|
+
if (slot <= prevBlock.message.slot) {
|
|
50
|
+
throw new BlockError(block, { code: BlockErrorCode.NON_LINEAR_SLOTS });
|
|
51
|
+
}
|
|
14
52
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
53
|
+
if (isGloasBeaconBlock(block.message) && currentExecHash !== null) {
|
|
54
|
+
// Verify the bid's parentBlockHash matches the tracked execution hash.
|
|
55
|
+
// This ensures the block was built on the correct FULL or EMPTY variant of its parent.
|
|
56
|
+
const bidParentHash = toRootHex(block.message.body.signedExecutionPayloadBid.message.parentBlockHash);
|
|
57
|
+
if (bidParentHash !== currentExecHash) {
|
|
58
|
+
// Maybe the previous slot's FULL envelope was orphaned — try falling back.
|
|
59
|
+
// If even prevExecHash doesn't match, the segment is non-linear.
|
|
60
|
+
if (bidParentHash !== prevExecHash) {
|
|
61
|
+
throw new BlockError(block, {
|
|
62
|
+
code: BlockErrorCode.PARENT_PAYLOAD_UNKNOWN,
|
|
63
|
+
parentRoot: toRootHex(block.message.parentRoot),
|
|
64
|
+
parentBlockHash: bidParentHash,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (lastFullSlot !== null && payloadEnvelopes !== null) {
|
|
68
|
+
const orphanedInput = payloadEnvelopes.get(lastFullSlot);
|
|
69
|
+
if (orphanedInput != null) {
|
|
70
|
+
warnings.push({ slot: lastFullSlot, payloadEnvelopeInput: orphanedInput });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
currentExecHash = prevExecHash;
|
|
74
|
+
}
|
|
75
|
+
const payloadInput = payloadEnvelopes?.get(slot) ?? null;
|
|
76
|
+
const payloadEnvelope = payloadInput?.hasPayloadEnvelope() ? payloadInput.getPayloadEnvelope() : null;
|
|
77
|
+
if (payloadEnvelope !== null) {
|
|
78
|
+
// Verify the envelope references this block's root
|
|
79
|
+
const blockRoot = toRootHex(config.getForkTypes(slot).BeaconBlock.hashTreeRoot(block.message));
|
|
80
|
+
const envelopeBlockRoot = toRootHex(payloadEnvelope.message.beaconBlockRoot);
|
|
81
|
+
if (blockRoot !== envelopeBlockRoot) {
|
|
82
|
+
throw new BlockError(block, {
|
|
83
|
+
code: BlockErrorCode.ENVELOPE_BLOCK_ROOT_MISMATCH,
|
|
84
|
+
envelopeBlockRoot,
|
|
85
|
+
blockRoot,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
// FULL variant: save state before advancing, then advance
|
|
89
|
+
prevExecHash = currentExecHash;
|
|
90
|
+
lastFullSlot = slot;
|
|
91
|
+
currentExecHash = toRootHex(payloadEnvelope.message.payload.blockHash);
|
|
92
|
+
}
|
|
93
|
+
// EMPTY variant: currentExecHash unchanged
|
|
18
94
|
}
|
|
19
95
|
}
|
|
96
|
+
return { warnings: warnings.length > 0 ? warnings : null };
|
|
20
97
|
}
|
|
21
98
|
//# sourceMappingURL=chainSegment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chainSegment.js","sourceRoot":"","sources":["../../../../src/chain/blocks/utils/chainSegment.ts"],"names":[],"mappings":"
|
|
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;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAuB,EACvB,MAAqB,EACrB,gBAAwD,EACxD,WAAuB,EACH;IACpB,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAE/C,uEAAuE;IACvE,4DAA4D;IAC5D,qFAAqF;IACrF,sEAAsE;IACtE,sEAAsE;IACtE,IAAI,eAAe,GAAkB,WAAW,CAAC,yBAAyB,CAAC;IAC3E,4FAA4F;IAC5F,4FAA4F;IAC5F,0FAA0F;IAC1F,6EAA6E;IAC7E,MAAM,kBAAkB,GAAG,gBAAgB,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACnE,IAAI,kBAAkB,EAAE,kBAAkB,EAAE,EAAE,CAAC;QAC7C,eAAe,GAAG,kBAAkB,CAAC,eAAe,EAAE,CAAC;IACzD,CAAC;IACD,8EAA8E;IAC9E,wDAAwD;IACxD,IAAI,YAAY,GAAkB,eAAe,CAAC;IAClD,+EAA+E;IAC/E,IAAI,YAAY,GAAgB,IAAI,CAAC;IAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAEhC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC3C,uDAAuD;YACvD,IACE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CACd,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,EACvF,KAAK,CAAC,OAAO,CAAC,UAAU,CACzB,EACD,CAAC;gBACD,MAAM,IAAI,UAAU,CAAC,KAAK,EAAE,EAAC,IAAI,EAAE,cAAc,CAAC,uBAAuB,EAAC,CAAC,CAAC;YAC9E,CAAC;YACD,uCAAuC;YACvC,IAAI,IAAI,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACnC,MAAM,IAAI,UAAU,CAAC,KAAK,EAAE,EAAC,IAAI,EAAE,cAAc,CAAC,gBAAgB,EAAC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QAED,IAAI,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAClE,uEAAuE;YACvE,uFAAuF;YACvF,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACtG,IAAI,aAAa,KAAK,eAAe,EAAE,CAAC;gBACtC,2EAA2E;gBAC3E,iEAAiE;gBACjE,IAAI,aAAa,KAAK,YAAY,EAAE,CAAC;oBACnC,MAAM,IAAI,UAAU,CAAC,KAAK,EAAE;wBAC1B,IAAI,EAAE,cAAc,CAAC,sBAAsB;wBAC3C,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;wBAC/C,eAAe,EAAE,aAAa;qBAC/B,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,YAAY,KAAK,IAAI,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;oBACvD,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBACzD,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;wBAC1B,QAAQ,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAC,CAAC,CAAC;oBAC3E,CAAC;gBACH,CAAC;gBACD,eAAe,GAAG,YAAY,CAAC;YACjC,CAAC;YAED,MAAM,YAAY,GAAG,gBAAgB,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;YACzD,MAAM,eAAe,GAAG,YAAY,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACtG,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;gBAC7B,mDAAmD;gBACnD,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC/F,MAAM,iBAAiB,GAAG,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;gBAC7E,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;oBACpC,MAAM,IAAI,UAAU,CAAC,KAAK,EAAE;wBAC1B,IAAI,EAAE,cAAc,CAAC,4BAA4B;wBACjD,iBAAiB;wBACjB,SAAS;qBACV,CAAC,CAAC;gBACL,CAAC;gBAED,0DAA0D;gBAC1D,YAAY,GAAG,eAAe,CAAC;gBAC/B,YAAY,GAAG,IAAI,CAAC;gBACpB,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACzE,CAAC;YACD,2CAA2C;QAC7C,CAAC;IACH,CAAC;IAED,OAAO,EAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAC,CAAC;AAAA,CAC1D"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { ProtoBlock } from "@lodestar/fork-choice";
|
|
2
2
|
import { DataAvailabilityStatus, IBeaconStateView } from "@lodestar/state-transition";
|
|
3
|
-
import { IndexedAttestation } from "@lodestar/types";
|
|
3
|
+
import { IndexedAttestation, Slot } from "@lodestar/types";
|
|
4
4
|
import type { BeaconChain } from "../chain.js";
|
|
5
5
|
import { BlockProcessOpts } from "../options.js";
|
|
6
6
|
import { IBlockInput } from "./blockInput/index.js";
|
|
7
|
+
import { PayloadEnvelopeInput } from "./payloadEnvelopeInput/payloadEnvelopeInput.js";
|
|
7
8
|
import { ImportBlockOpts } from "./types.js";
|
|
8
9
|
import { SegmentExecStatus } from "./verifyBlocksExecutionPayloads.js";
|
|
9
10
|
/**
|
|
@@ -17,11 +18,12 @@ import { SegmentExecStatus } from "./verifyBlocksExecutionPayloads.js";
|
|
|
17
18
|
*
|
|
18
19
|
* If there's an error during one of the steps, the rest are aborted with an AbortController.
|
|
19
20
|
*/
|
|
20
|
-
export declare function verifyBlocksInEpoch(this: BeaconChain, parentBlock: ProtoBlock, blockInputs: IBlockInput[], opts: BlockProcessOpts & ImportBlockOpts): Promise<{
|
|
21
|
+
export declare function verifyBlocksInEpoch(this: BeaconChain, parentBlock: ProtoBlock, blockInputs: IBlockInput[], payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null, opts: BlockProcessOpts & ImportBlockOpts): Promise<{
|
|
21
22
|
postStates: IBeaconStateView[];
|
|
22
23
|
proposerBalanceDeltas: number[];
|
|
23
24
|
segmentExecStatus: SegmentExecStatus;
|
|
24
|
-
|
|
25
|
+
blockDAStatuses: DataAvailabilityStatus[];
|
|
26
|
+
payloadDAStatuses: Map<Slot, DataAvailabilityStatus>;
|
|
25
27
|
indexedAttestationsByBlock: IndexedAttestation[][];
|
|
26
28
|
}>;
|
|
27
29
|
//# sourceMappingURL=verifyBlock.d.ts.map
|
|
@@ -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,EAAC,sBAAsB,EAAE,gBAAgB,EAAqB,MAAM,4BAA4B,CAAC;AACxG,OAAO,EAAC,kBAAkB,EAAQ,MAAM,iBAAiB,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,EAAC,sBAAsB,EAAE,gBAAgB,EAAqB,MAAM,4BAA4B,CAAC;AACxG,OAAO,EAAC,kBAAkB,EAAE,IAAI,EAAQ,MAAM,iBAAiB,CAAC;AAEhE,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;AAM3C,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,CA0PD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ExecutionStatus } from "@lodestar/fork-choice";
|
|
2
|
-
import { ForkName, isForkPostFulu } from "@lodestar/params";
|
|
2
|
+
import { ForkName, ForkSeq, isForkPostFulu } from "@lodestar/params";
|
|
3
3
|
import { DataAvailabilityStatus, computeEpochAtSlot } from "@lodestar/state-transition";
|
|
4
|
+
import { getBlobKzgCommitments } from "../../util/dataColumns.js";
|
|
4
5
|
import { BlockError, BlockErrorCode } from "../errors/index.js";
|
|
5
6
|
import { RegenCaller } from "../regen/index.js";
|
|
6
7
|
import { DAType } from "./blockInput/index.js";
|
|
@@ -12,6 +13,7 @@ import { verifyBlocksDataAvailability } from "./verifyBlocksDataAvailability.js"
|
|
|
12
13
|
import { verifyBlocksExecutionPayload } from "./verifyBlocksExecutionPayloads.js";
|
|
13
14
|
import { verifyBlocksSignatures } from "./verifyBlocksSignatures.js";
|
|
14
15
|
import { verifyBlocksStateTransitionOnly } from "./verifyBlocksStateTransitionOnly.js";
|
|
16
|
+
import { verifyPayloadsDataAvailability } from "./verifyPayloadsDataAvailability.js";
|
|
15
17
|
/**
|
|
16
18
|
* Verifies 1 or more blocks are fully valid; from a linear sequence of blocks.
|
|
17
19
|
*
|
|
@@ -23,7 +25,7 @@ import { verifyBlocksStateTransitionOnly } from "./verifyBlocksStateTransitionOn
|
|
|
23
25
|
*
|
|
24
26
|
* If there's an error during one of the steps, the rest are aborted with an AbortController.
|
|
25
27
|
*/
|
|
26
|
-
export async function verifyBlocksInEpoch(parentBlock, blockInputs, opts) {
|
|
28
|
+
export async function verifyBlocksInEpoch(parentBlock, blockInputs, payloadEnvelopes, opts) {
|
|
27
29
|
const blocks = blockInputs.map((blockInput) => blockInput.getBlock());
|
|
28
30
|
const lastBlock = blocks.at(-1);
|
|
29
31
|
if (!lastBlock) {
|
|
@@ -82,11 +84,41 @@ export async function verifyBlocksInEpoch(parentBlock, blockInputs, opts) {
|
|
|
82
84
|
return this.shufflingCache.getIndexedAttestation(attEpoch, decisionRoot, fork, attestation);
|
|
83
85
|
});
|
|
84
86
|
}
|
|
87
|
+
// Pick the data-availability source by fork:
|
|
88
|
+
// - Pre-Gloas: blob/Fulu-column data lives in IBlockInput → verifyBlocksDataAvailability.
|
|
89
|
+
// - Post-Gloas: verifyPayloadsDataAvailability (payload-level DA, keyed by slot).
|
|
90
|
+
const daAvailabilityPromise = fork >= ForkSeq.gloas
|
|
91
|
+
? (async () => {
|
|
92
|
+
// Validate DA for ALL payloads in the Map, not just those paired with blockInputs.
|
|
93
|
+
// A checkpoint-sync batch may include a payload for a slot whose block was filtered
|
|
94
|
+
// out of relevantBlocks (e.g., the anchor at the finalized slot); that payload still
|
|
95
|
+
// needs DA validation so it can be imported in processBlocks.
|
|
96
|
+
const payloadInputsForDa = payloadEnvelopes !== null ? Array.from(payloadEnvelopes.values()) : [];
|
|
97
|
+
const { dataAvailabilityStatuses, availableTime } = await verifyPayloadsDataAvailability(payloadInputsForDa, abortController.signal);
|
|
98
|
+
const payloadDAStatuses = new Map();
|
|
99
|
+
for (let i = 0; i < payloadInputsForDa.length; i++) {
|
|
100
|
+
payloadDAStatuses.set(payloadInputsForDa[i].slot, dataAvailabilityStatuses[i]);
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
// post-gloas, DataAvailabilityStatus is NotRequired for forkChoice.onBlock() ProtoBlock
|
|
104
|
+
blockDAStatuses: blockInputs.map(() => DataAvailabilityStatus.NotRequired),
|
|
105
|
+
payloadDAStatuses,
|
|
106
|
+
availableTime,
|
|
107
|
+
};
|
|
108
|
+
})()
|
|
109
|
+
: (async () => {
|
|
110
|
+
const { dataAvailabilityStatuses, availableTime } = await verifyBlocksDataAvailability(blockInputs, abortController.signal);
|
|
111
|
+
return {
|
|
112
|
+
blockDAStatuses: dataAvailabilityStatuses,
|
|
113
|
+
payloadDAStatuses: new Map(),
|
|
114
|
+
availableTime,
|
|
115
|
+
};
|
|
116
|
+
})();
|
|
85
117
|
// batch all I/O operations to reduce overhead
|
|
86
|
-
const [segmentExecStatus, {
|
|
118
|
+
const [segmentExecStatus, { blockDAStatuses, payloadDAStatuses, availableTime }, { postStates, proposerBalanceDeltas, verifyStateTime }, { verifySignaturesTime },] = await Promise.all([
|
|
87
119
|
verifyExecutionPayloadsPromise,
|
|
88
|
-
// data availability
|
|
89
|
-
|
|
120
|
+
// data availability (fork-specific; see daAvailabilityPromise above)
|
|
121
|
+
daAvailabilityPromise,
|
|
90
122
|
// Run state transition only
|
|
91
123
|
// TODO: Ensure it yields to allow flushing to workers and engine API
|
|
92
124
|
verifyBlocksStateTransitionOnly(preState0, blockInputs,
|
|
@@ -96,6 +128,8 @@ export async function verifyBlocksInEpoch(parentBlock, blockInputs, opts) {
|
|
|
96
128
|
opts.skipVerifyBlockSignatures !== true
|
|
97
129
|
? verifyBlocksSignatures(this.config, this.bls, this.logger, this.metrics, preState0, blocks, indexedAttestationsByBlock, opts)
|
|
98
130
|
: Promise.resolve({ verifySignaturesTime: Date.now() }),
|
|
131
|
+
// TODO GLOAS: can verify payload signatures in batch too
|
|
132
|
+
// maybe chain with the above verifyBlocksSignatures()
|
|
99
133
|
]);
|
|
100
134
|
if (opts.verifyOnly !== true) {
|
|
101
135
|
const fromForkBoundary = this.config.getForkBoundaryAtEpoch(computeEpochAtSlot(parentBlock.slot));
|
|
@@ -136,7 +170,9 @@ export async function verifyBlocksInEpoch(parentBlock, blockInputs, opts) {
|
|
|
136
170
|
if (blockInputs.length === 1 &&
|
|
137
171
|
// gossip blocks have seenTimestampSec
|
|
138
172
|
opts.seenTimestampSec !== undefined &&
|
|
173
|
+
// PreData (pre-deneb) and NoData (gloas) carry no blob data on the block — skip metric
|
|
139
174
|
blockInputs[0].type !== DAType.PreData &&
|
|
175
|
+
blockInputs[0].type !== DAType.NoData &&
|
|
140
176
|
executionStatuses[0] === ExecutionStatus.Valid) {
|
|
141
177
|
// Find the max time when the block was actually verified
|
|
142
178
|
const fullyVerifiedTime = Math.max(executionTime, verifyStateTime, verifySignaturesTime);
|
|
@@ -144,7 +180,7 @@ export async function verifyBlocksInEpoch(parentBlock, blockInputs, opts) {
|
|
|
144
180
|
this.metrics?.gossipBlock.receivedToFullyVerifiedTime.observe(recvTofullyVerifedTime);
|
|
145
181
|
const verifiedToBlobsAvailabiltyTime = Math.max(availableTime - fullyVerifiedTime, 0) / 1000;
|
|
146
182
|
const block = blockInputs[0].getBlock();
|
|
147
|
-
const numBlobs = block.
|
|
183
|
+
const numBlobs = getBlobKzgCommitments(blockInputs[0].forkName, block).length;
|
|
148
184
|
this.metrics?.gossipBlock.verifiedToBlobsAvailabiltyTime.observe({ numBlobs }, verifiedToBlobsAvailabiltyTime);
|
|
149
185
|
this.logger.verbose("Verified blockInput fully with blobs availability", {
|
|
150
186
|
slot: block.message.slot,
|
|
@@ -158,7 +194,14 @@ export async function verifyBlocksInEpoch(parentBlock, blockInputs, opts) {
|
|
|
158
194
|
else {
|
|
159
195
|
this.logger.verbose("Block verification aborted due to execution payload", {}, segmentExecStatus.execAborted.execError);
|
|
160
196
|
}
|
|
161
|
-
return {
|
|
197
|
+
return {
|
|
198
|
+
postStates,
|
|
199
|
+
blockDAStatuses,
|
|
200
|
+
payloadDAStatuses,
|
|
201
|
+
proposerBalanceDeltas,
|
|
202
|
+
segmentExecStatus,
|
|
203
|
+
indexedAttestationsByBlock,
|
|
204
|
+
};
|
|
162
205
|
}
|
|
163
206
|
finally {
|
|
164
207
|
abortController.abort();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlock.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAa,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAC,QAAQ,EAAE,cAAc,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"verifyBlock.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlock.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,10 +50,6 @@ type VerifyBlockExecutionResponse = VerifyExecutionErrorResponse | {
|
|
|
50
50
|
executionStatus: ExecutionStatus.PreMerge;
|
|
51
51
|
lvhResponse: undefined;
|
|
52
52
|
execError: null;
|
|
53
|
-
} | {
|
|
54
|
-
executionStatus: ExecutionStatus.PayloadSeparated;
|
|
55
|
-
lvhResponse: undefined;
|
|
56
|
-
execError: null;
|
|
57
53
|
};
|
|
58
54
|
/**
|
|
59
55
|
* Verifies 1 or more execution payloads from a linear sequence of blocks.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlocksExecutionPayloads.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksExecutionPayloads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAC,gBAAgB,EAAiD,MAAM,4BAA4B,CAAC;AAE5G,OAAO,EAAe,MAAM,EAAY,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAyB,gBAAgB,EAAC,MAAM,qCAAqC,CAAC;AAC7F,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAC,MAAM,EAAC,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAC,UAAU,EAAiB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAE3C,MAAM,MAAM,kCAAkC,GAAG;IAC/C,eAAe,EAAE,gBAAgB,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,WAAW,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF,KAAK,aAAa,GAAG;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,UAAU,CAAA;CAAC,CAAC;AACjE,MAAM,MAAM,iBAAiB,GACzB;IACE,WAAW,EAAE,IAAI,CAAC;IAClB,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;IAC1C,aAAa,EAAE,MAAM,CAAC;CACvB,GACD;IAAC,WAAW,EAAE,aAAa,CAAC;IAAC,iBAAiB,CAAC,EAAE,kBAAkB,CAAA;CAAC,CAAC;AAEzE,KAAK,4BAA4B,GAC7B;IAAC,eAAe,EAAE,eAAe,CAAC,OAAO,CAAC;IAAC,WAAW,EAAE,kBAAkB,CAAC;IAAC,SAAS,EAAE,UAAU,CAAA;CAAC,GAClG;IAAC,eAAe,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,UAAU,CAAA;CAAC,CAAC;AAE3E,KAAK,4BAA4B,GAC7B,4BAA4B,GAC5B;IAAC,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC;IAAC,WAAW,EAAE,gBAAgB,CAAC;IAAC,SAAS,EAAE,IAAI,CAAA;CAAC,GACxF;IAAC,eAAe,EAAE,eAAe,CAAC,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAAC,SAAS,EAAE,IAAI,CAAA;CAAC,GAC3F;IAAC,eAAe,EAAE,eAAe,CAAC,QAAQ,CAAC;IAAC,WAAW,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,IAAI,CAAA;CAAC,
|
|
1
|
+
{"version":3,"file":"verifyBlocksExecutionPayloads.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksExecutionPayloads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAC,gBAAgB,EAAiD,MAAM,4BAA4B,CAAC;AAE5G,OAAO,EAAe,MAAM,EAAY,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAyB,gBAAgB,EAAC,MAAM,qCAAqC,CAAC;AAC7F,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAC,MAAM,EAAC,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAC,UAAU,EAAiB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAE3C,MAAM,MAAM,kCAAkC,GAAG;IAC/C,eAAe,EAAE,gBAAgB,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,WAAW,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF,KAAK,aAAa,GAAG;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,UAAU,CAAA;CAAC,CAAC;AACjE,MAAM,MAAM,iBAAiB,GACzB;IACE,WAAW,EAAE,IAAI,CAAC;IAClB,iBAAiB,EAAE,oBAAoB,EAAE,CAAC;IAC1C,aAAa,EAAE,MAAM,CAAC;CACvB,GACD;IAAC,WAAW,EAAE,aAAa,CAAC;IAAC,iBAAiB,CAAC,EAAE,kBAAkB,CAAA;CAAC,CAAC;AAEzE,KAAK,4BAA4B,GAC7B;IAAC,eAAe,EAAE,eAAe,CAAC,OAAO,CAAC;IAAC,WAAW,EAAE,kBAAkB,CAAC;IAAC,SAAS,EAAE,UAAU,CAAA;CAAC,GAClG;IAAC,eAAe,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,UAAU,CAAA;CAAC,CAAC;AAE3E,KAAK,4BAA4B,GAC7B,4BAA4B,GAC5B;IAAC,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC;IAAC,WAAW,EAAE,gBAAgB,CAAC;IAAC,SAAS,EAAE,IAAI,CAAA;CAAC,GACxF;IAAC,eAAe,EAAE,eAAe,CAAC,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAAC,SAAS,EAAE,IAAI,CAAA;CAAC,GAC3F;IAAC,eAAe,EAAE,eAAe,CAAC,QAAQ,CAAC;IAAC,WAAW,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,IAAI,CAAA;CAAC,CAAC;AAEzF;;;;GAIG;AACH,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,kCAAkC,EACzC,WAAW,EAAE,UAAU,EACvB,WAAW,EAAE,WAAW,EAAE,EAC1B,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,gBAAgB,GAAG,eAAe,GACvC,OAAO,CAAC,iBAAiB,CAAC,CAwE5B;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,kCAAkC,EACzC,UAAU,EAAE,WAAW,EACvB,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,4BAA4B,CAAC,CAqGvC"}
|
|
@@ -78,9 +78,10 @@ export async function verifyBlocksExecutionPayload(chain, parentBlock, blockInpu
|
|
|
78
78
|
*/
|
|
79
79
|
export async function verifyBlockExecutionPayload(chain, blockInput, preState0) {
|
|
80
80
|
const block = blockInput.getBlock();
|
|
81
|
-
// Gloas block doesn't have execution payload. Return
|
|
81
|
+
// Gloas block doesn't have execution payload. Return Syncing as a placeholder; the actual
|
|
82
|
+
// status for gloas PENDING/EMPTY is derived from parent's chain in importBlock.
|
|
82
83
|
if (isBlockInputNoData(blockInput)) {
|
|
83
|
-
return { executionStatus: ExecutionStatus.
|
|
84
|
+
return { executionStatus: ExecutionStatus.Syncing, lvhResponse: undefined, execError: null };
|
|
84
85
|
}
|
|
85
86
|
/** Not null if execution is enabled */
|
|
86
87
|
const executionPayloadEnabled = isStatePostBellatrix(preState0) &&
|
|
@@ -115,6 +116,7 @@ export async function verifyBlockExecutionPayload(chain, blockInput, preState0)
|
|
|
115
116
|
executionStatus,
|
|
116
117
|
latestValidExecHash: execResult.latestValidHash,
|
|
117
118
|
invalidateFromParentBlockRoot: blockInput.parentRootHex,
|
|
119
|
+
invalidateFromParentBlockHash: toRootHex(executionPayloadEnabled.parentHash),
|
|
118
120
|
};
|
|
119
121
|
const execError = new BlockError(block, {
|
|
120
122
|
code: BlockErrorCode.EXECUTION_ENGINE_ERROR,
|
|
@@ -182,6 +184,7 @@ function getSegmentErrorResponse({ verifyResponse, blockIndex }, parentBlock, bl
|
|
|
182
184
|
executionStatus: ExecutionStatus.Invalid,
|
|
183
185
|
latestValidExecHash: lvhResponse.latestValidExecHash,
|
|
184
186
|
invalidateFromParentBlockRoot: parentBlock.blockRoot,
|
|
187
|
+
invalidateFromParentBlockHash: parentBlock.executionPayloadBlockHash,
|
|
185
188
|
};
|
|
186
189
|
}
|
|
187
190
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlocksExecutionPayloads.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksExecutionPayloads.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,eAAe,GAKhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAmB,wBAAwB,EAAE,oBAAoB,EAAC,MAAM,4BAA4B,CAAC;AAE5G,OAAO,EAAC,YAAY,EAAU,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAC,sBAAsB,EAAmB,MAAM,qCAAqC,CAAC;AAG7F,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAC,iBAAiB,EAAE,mBAAmB,EAAE,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"verifyBlocksExecutionPayloads.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksExecutionPayloads.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { RootHex, Slot } from "@lodestar/types";
|
|
|
4
4
|
import { IClock } from "../../util/clock.js";
|
|
5
5
|
import { IChainOptions } from "../options.js";
|
|
6
6
|
import { IBlockInput } from "./blockInput/types.js";
|
|
7
|
+
import { PayloadEnvelopeInput } from "./payloadEnvelopeInput/payloadEnvelopeInput.js";
|
|
7
8
|
import { ImportBlockOpts } from "./types.js";
|
|
8
9
|
/**
|
|
9
10
|
* Verifies some early cheap sanity checks on the block before running the full state transition.
|
|
@@ -23,7 +24,7 @@ export declare function verifyBlocksSanityChecks(chain: {
|
|
|
23
24
|
config: ChainForkConfig;
|
|
24
25
|
opts: IChainOptions;
|
|
25
26
|
blacklistedBlocks: Map<RootHex, Slot | null>;
|
|
26
|
-
}, blocks: IBlockInput[], opts: ImportBlockOpts): {
|
|
27
|
+
}, blocks: IBlockInput[], payloadEnvelopes: Map<Slot, PayloadEnvelopeInput> | null, opts: ImportBlockOpts): {
|
|
27
28
|
relevantBlocks: IBlockInput[];
|
|
28
29
|
parentSlots: Slot[];
|
|
29
30
|
parentBlock: ProtoBlock | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlocksSanityChecks.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksSanityChecks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAC,WAAW,EAAE,UAAU,EAAC,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAC,OAAO,EAAE,IAAI,EAAqB,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAC,MAAM,EAAC,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAC,aAAa,EAAC,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAE3C;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE;IACL,UAAU,EAAE,WAAW,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,iBAAiB,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;CAC9C,EACD,MAAM,EAAE,WAAW,EAAE,EACrB,IAAI,EAAE,eAAe,GACpB;IACD,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,WAAW,EAAE,IAAI,EAAE,CAAC;IACpB,WAAW,EAAE,UAAU,GAAG,IAAI,CAAC;CAChC,
|
|
1
|
+
{"version":3,"file":"verifyBlocksSanityChecks.d.ts","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksSanityChecks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAC,WAAW,EAAE,UAAU,EAAC,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAC,OAAO,EAAE,IAAI,EAAqB,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAC,MAAM,EAAC,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAC,aAAa,EAAC,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAC,oBAAoB,EAAC,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAE3C;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE;IACL,UAAU,EAAE,WAAW,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,iBAAiB,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;CAC9C,EACD,MAAM,EAAE,WAAW,EAAE,EACrB,gBAAgB,EAAE,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,GAAG,IAAI,EACxD,IAAI,EAAE,eAAe,GACpB;IACD,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,WAAW,EAAE,IAAI,EAAE,CAAC;IACpB,WAAW,EAAE,UAAU,GAAG,IAAI,CAAC;CAChC,CAiHA"}
|
|
@@ -14,7 +14,7 @@ import { BlockError, BlockErrorCode } from "../errors/index.js";
|
|
|
14
14
|
* - Not finalized slot
|
|
15
15
|
* - Not already known
|
|
16
16
|
*/
|
|
17
|
-
export function verifyBlocksSanityChecks(chain, blocks, opts) {
|
|
17
|
+
export function verifyBlocksSanityChecks(chain, blocks, payloadEnvelopes, opts) {
|
|
18
18
|
if (blocks.length === 0) {
|
|
19
19
|
throw Error("Empty partiallyVerifiedBlocks");
|
|
20
20
|
}
|
|
@@ -62,12 +62,32 @@ export function verifyBlocksSanityChecks(chain, blocks, opts) {
|
|
|
62
62
|
else {
|
|
63
63
|
// When importing a block segment, only the first NON-IGNORED block must be known to the fork-choice.
|
|
64
64
|
const parentRoot = toRootHex(block.message.parentRoot);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
: chain.forkChoice.getBlockHexDefaultStatus(parentRoot);
|
|
68
|
-
if (!parentBlock) {
|
|
65
|
+
const parentBlockDefaultStatus = chain.forkChoice.getBlockHexDefaultStatus(parentRoot);
|
|
66
|
+
if (!parentBlockDefaultStatus) {
|
|
69
67
|
throw new BlockError(block, { code: BlockErrorCode.PARENT_UNKNOWN, parentRoot });
|
|
70
68
|
}
|
|
69
|
+
parentBlock = parentBlockDefaultStatus;
|
|
70
|
+
if (isGloasBeaconBlock(block.message)) {
|
|
71
|
+
const parentBlockHash = toRootHex(block.message.body.signedExecutionPayloadBid.message.parentBlockHash);
|
|
72
|
+
const parentBlockWithPayload = chain.forkChoice.getBlockHexAndBlockHash(parentRoot, parentBlockHash);
|
|
73
|
+
if (!parentBlockWithPayload) {
|
|
74
|
+
// Checkpoint sync: parent's FULL variant may not be in fork-choice yet because the
|
|
75
|
+
// anchor block is initialized with PENDING+EMPTY only. The parent's payload arrives
|
|
76
|
+
// in the same batch via payloadEnvelopes and will be imported by processBlocks. If
|
|
77
|
+
// a matching payload is in the Map, accept the parent as known.
|
|
78
|
+
const parentPayloadInput = payloadEnvelopes?.get(parentBlockDefaultStatus.slot);
|
|
79
|
+
if (parentPayloadInput?.getBlockHashHex() !== parentBlockHash) {
|
|
80
|
+
throw new BlockError(block, {
|
|
81
|
+
code: BlockErrorCode.PARENT_PAYLOAD_UNKNOWN,
|
|
82
|
+
parentRoot,
|
|
83
|
+
parentBlockHash,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
parentBlock = parentBlockWithPayload;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
71
91
|
// Parent is known to the fork-choice
|
|
72
92
|
parentBlockSlot = parentBlock.slot;
|
|
73
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyBlocksSanityChecks.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksSanityChecks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,uBAAuB,EAAC,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAgB,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"verifyBlocksSanityChecks.js","sourceRoot":"","sources":["../../../src/chain/blocks/verifyBlocksSanityChecks.ts"],"names":[],"mappings":"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"}
|