@lodestar/beacon-node 1.50.1 → 1.51.0-dev.0586e6e617
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/api.js +1 -1
- package/lib/api/impl/api.js.map +1 -1
- package/lib/api/impl/beacon/blocks/index.d.ts +2 -1
- package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/blocks/index.js +36 -36
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/index.d.ts +2 -1
- package/lib/api/impl/beacon/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/index.js +2 -2
- package/lib/api/impl/beacon/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 +5 -2
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/state/index.js +8 -2
- package/lib/api/impl/beacon/state/index.js.map +1 -1
- package/lib/api/impl/beacon/state/utils.d.ts +3 -2
- package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
- package/lib/api/impl/beacon/state/utils.js +17 -9
- package/lib/api/impl/beacon/state/utils.js.map +1 -1
- package/lib/api/impl/debug/index.d.ts.map +1 -1
- package/lib/api/impl/debug/index.js +3 -0
- package/lib/api/impl/debug/index.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts.map +1 -1
- package/lib/api/impl/validator/index.js +136 -27
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/api/options.d.ts +2 -0
- package/lib/api/options.d.ts.map +1 -1
- package/lib/api/options.js +1 -0
- package/lib/api/options.js.map +1 -1
- package/lib/chain/ColumnReconstructionTracker.d.ts +11 -13
- package/lib/chain/ColumnReconstructionTracker.d.ts.map +1 -1
- package/lib/chain/ColumnReconstructionTracker.js +49 -44
- package/lib/chain/ColumnReconstructionTracker.js.map +1 -1
- package/lib/chain/GetBlobsTracker.d.ts +11 -0
- package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
- package/lib/chain/GetBlobsTracker.js +85 -27
- package/lib/chain/GetBlobsTracker.js.map +1 -1
- package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
- package/lib/chain/archiveStore/archiveStore.js +1 -0
- package/lib/chain/archiveStore/archiveStore.js.map +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +4 -0
- package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
- package/lib/chain/archiveStore/utils/archiveBlocks.js +63 -100
- package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts +1 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
- package/lib/chain/blocks/blockInput/utils.js +2 -2
- package/lib/chain/blocks/blockInput/utils.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +16 -11
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts +6 -11
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.js +58 -17
- package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
- package/lib/chain/blocks/index.js +2 -2
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +12 -9
- package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeProcessor.js +24 -19
- package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +4 -0
- package/lib/chain/blocks/types.d.ts.map +1 -1
- package/lib/chain/blocks/types.js +5 -0
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +1 -1
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.js +8 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
- package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +3 -3
- package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
- package/lib/chain/blocks/verifyPayloadsDataAvailability.js +11 -6
- package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
- package/lib/chain/bls/multithread/index.js +5 -5
- package/lib/chain/bls/multithread/index.js.map +1 -1
- package/lib/chain/bls/multithread/types.d.ts +1 -1
- package/lib/chain/bls/multithread/types.d.ts.map +1 -1
- package/lib/chain/bls/multithread/worker.js +1 -1
- package/lib/chain/bls/multithread/worker.js.map +1 -1
- package/lib/chain/bls/singleThread.js +1 -1
- package/lib/chain/bls/singleThread.js.map +1 -1
- package/lib/chain/bls/utils.js +1 -1
- package/lib/chain/bls/utils.js.map +1 -1
- package/lib/chain/chain.d.ts +3 -2
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +12 -7
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/errors/blockError.d.ts +1 -1
- package/lib/chain/errors/blockError.d.ts.map +1 -1
- package/lib/chain/errors/blockError.js +1 -1
- package/lib/chain/errors/blockError.js.map +1 -1
- package/lib/chain/errors/executionPayloadBid.d.ts +11 -1
- 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/inclusionList.d.ts +60 -0
- package/lib/chain/errors/inclusionList.d.ts.map +1 -0
- package/lib/chain/errors/inclusionList.js +19 -0
- package/lib/chain/errors/inclusionList.js.map +1 -0
- 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/interface.d.ts +5 -5
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +23 -10
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/attestationPool.d.ts +1 -1
- package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/attestationPool.js +15 -4
- package/lib/chain/opPools/attestationPool.js.map +1 -1
- package/lib/chain/opPools/inclusionListStore.d.ts +63 -0
- package/lib/chain/opPools/inclusionListStore.d.ts.map +1 -0
- package/lib/chain/opPools/inclusionListStore.js +171 -0
- package/lib/chain/opPools/inclusionListStore.js.map +1 -0
- package/lib/chain/opPools/index.d.ts +1 -0
- package/lib/chain/opPools/index.d.ts.map +1 -1
- package/lib/chain/opPools/index.js +1 -0
- package/lib/chain/opPools/index.js.map +1 -1
- package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/payloadAttestationPool.js +17 -7
- package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
- package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -1
- package/lib/chain/opPools/syncCommitteeMessagePool.js +9 -3
- package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
- package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -1
- package/lib/chain/opPools/syncContributionAndProofPool.js +11 -3
- package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
- package/lib/chain/opPools/utils.d.ts +1 -1
- package/lib/chain/opPools/utils.d.ts.map +1 -1
- package/lib/chain/opPools/utils.js +1 -1
- package/lib/chain/opPools/utils.js.map +1 -1
- package/lib/chain/options.d.ts +0 -1
- package/lib/chain/options.d.ts.map +1 -1
- package/lib/chain/options.js +0 -1
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/prepareNextSlot.d.ts.map +1 -1
- package/lib/chain/prepareNextSlot.js +4 -3
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
- package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +37 -15
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/regen/interface.d.ts +1 -1
- package/lib/chain/regen/interface.d.ts.map +1 -1
- package/lib/chain/regen/interface.js +1 -1
- package/lib/chain/regen/interface.js.map +1 -1
- package/lib/chain/reprocess.d.ts +2 -1
- package/lib/chain/reprocess.d.ts.map +1 -1
- package/lib/chain/reprocess.js +2 -1
- package/lib/chain/reprocess.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.js +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/validation/executionPayloadBid.d.ts +0 -15
- package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
- package/lib/chain/validation/executionPayloadBid.js +37 -158
- package/lib/chain/validation/executionPayloadBid.js.map +1 -1
- package/lib/chain/validation/inclusionList.d.ts +14 -0
- package/lib/chain/validation/inclusionList.d.ts.map +1 -0
- package/lib/chain/validation/inclusionList.js +150 -0
- package/lib/chain/validation/inclusionList.js.map +1 -0
- package/lib/chain/validation/index.d.ts +1 -0
- package/lib/chain/validation/index.d.ts.map +1 -1
- package/lib/chain/validation/index.js +1 -0
- package/lib/chain/validation/index.js.map +1 -1
- package/lib/chain/validatorMonitor.d.ts.map +1 -1
- package/lib/chain/validatorMonitor.js +6 -4
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/constants/constants.d.ts +1 -0
- package/lib/constants/constants.d.ts.map +1 -1
- package/lib/constants/constants.js +1 -0
- package/lib/constants/constants.js.map +1 -1
- package/lib/db/beacon.d.ts +7 -0
- package/lib/db/beacon.d.ts.map +1 -1
- package/lib/db/beacon.js +34 -0
- package/lib/db/beacon.js.map +1 -1
- package/lib/db/dataColumnStore.d.ts +1 -1
- package/lib/db/dataColumnStore.d.ts.map +1 -1
- package/lib/db/dataColumnStore.js +1 -4
- package/lib/db/dataColumnStore.js.map +1 -1
- package/lib/db/flatFileStore/flatFileStore.js +5 -5
- package/lib/db/flatFileStore/flatFileStore.js.map +1 -1
- package/lib/db/flatFileStore/slotIndex.d.ts.map +1 -1
- package/lib/db/flatFileStore/slotIndex.js +2 -2
- package/lib/db/flatFileStore/slotIndex.js.map +1 -1
- package/lib/db/interface.d.ts +1 -0
- package/lib/db/interface.d.ts.map +1 -1
- package/lib/db/repositories/blockArchive.js +2 -2
- package/lib/db/repositories/blockArchive.js.map +1 -1
- package/lib/db/repositories/blockArchiveIndex.d.ts +1 -1
- package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
- package/lib/db/repositories/blockArchiveIndex.js +1 -2
- package/lib/db/repositories/blockArchiveIndex.js.map +1 -1
- package/lib/db/repositories/dataColumnSidecarArchive.d.ts +6 -0
- package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
- package/lib/db/repositories/dataColumnSidecarArchive.js +19 -0
- package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
- package/lib/execution/builder/validateBid.d.ts.map +1 -1
- package/lib/execution/builder/validateBid.js +14 -1
- package/lib/execution/builder/validateBid.js.map +1 -1
- package/lib/execution/engine/blobVersionedHashes.d.ts +1 -1
- package/lib/execution/engine/blobVersionedHashes.d.ts.map +1 -1
- package/lib/execution/engine/blobVersionedHashes.js.map +1 -1
- package/lib/execution/engine/disabled.d.ts +1 -0
- package/lib/execution/engine/disabled.d.ts.map +1 -1
- package/lib/execution/engine/disabled.js +3 -0
- package/lib/execution/engine/disabled.js.map +1 -1
- package/lib/execution/engine/http.d.ts +8 -2
- package/lib/execution/engine/http.d.ts.map +1 -1
- package/lib/execution/engine/http.js +27 -4
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/index.d.ts +1 -1
- package/lib/execution/engine/index.d.ts.map +1 -1
- package/lib/execution/engine/index.js +2 -2
- package/lib/execution/engine/index.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +12 -3
- package/lib/execution/engine/interface.d.ts.map +1 -1
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/execution/engine/jsonRpcHttpClient.d.ts.map +1 -1
- package/lib/execution/engine/jsonRpcHttpClient.js +14 -4
- package/lib/execution/engine/jsonRpcHttpClient.js.map +1 -1
- package/lib/execution/engine/jsonRpcTransport.d.ts +3 -2
- package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
- package/lib/execution/engine/jsonRpcTransport.js +33 -9
- package/lib/execution/engine/jsonRpcTransport.js.map +1 -1
- package/lib/execution/engine/mock.d.ts +1 -0
- package/lib/execution/engine/mock.d.ts.map +1 -1
- package/lib/execution/engine/mock.js +31 -7
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/payloadIdCache.d.ts +5 -3
- package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
- package/lib/execution/engine/payloadIdCache.js +15 -4
- package/lib/execution/engine/payloadIdCache.js.map +1 -1
- package/lib/execution/engine/restTransport.d.ts +5 -2
- package/lib/execution/engine/restTransport.d.ts.map +1 -1
- package/lib/execution/engine/restTransport.js +36 -21
- package/lib/execution/engine/restTransport.js.map +1 -1
- package/lib/execution/engine/sszTypes.d.ts +38 -38
- package/lib/execution/engine/transport.d.ts +5 -2
- package/lib/execution/engine/transport.d.ts.map +1 -1
- package/lib/execution/engine/transportMetrics.d.ts +5 -1
- package/lib/execution/engine/transportMetrics.d.ts.map +1 -1
- package/lib/execution/engine/types.d.ts +25 -1
- package/lib/execution/engine/types.d.ts.map +1 -1
- package/lib/execution/engine/types.js +31 -17
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +16 -0
- package/lib/metrics/metrics/beacon.d.ts.map +1 -1
- package/lib/metrics/metrics/beacon.js +35 -0
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +26 -0
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +61 -1
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/monitoring/service.js +1 -1
- package/lib/monitoring/service.js.map +1 -1
- package/lib/network/core/networkCore.d.ts +2 -0
- package/lib/network/core/networkCore.d.ts.map +1 -1
- package/lib/network/core/networkCore.js +3 -0
- package/lib/network/core/networkCore.js.map +1 -1
- package/lib/network/core/networkCoreWorker.js +1 -0
- package/lib/network/core/networkCoreWorker.js.map +1 -1
- package/lib/network/core/networkCoreWorkerHandler.d.ts +2 -0
- package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
- package/lib/network/core/networkCoreWorkerHandler.js +3 -0
- package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
- package/lib/network/core/types.d.ts +2 -0
- package/lib/network/core/types.d.ts.map +1 -1
- package/lib/network/gossip/gossipsub.d.ts.map +1 -1
- package/lib/network/gossip/gossipsub.js +3 -1
- package/lib/network/gossip/gossipsub.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +8 -2
- 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/topic.d.ts +13 -19
- package/lib/network/gossip/topic.d.ts.map +1 -1
- package/lib/network/gossip/topic.js +13 -1
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +4 -1
- package/lib/network/interface.d.ts.map +1 -1
- package/lib/network/network.d.ts +4 -1
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +11 -1
- package/lib/network/network.js.map +1 -1
- package/lib/network/peers/peerManager.d.ts +2 -1
- package/lib/network/peers/peerManager.d.ts.map +1 -1
- package/lib/network/peers/peerManager.js.map +1 -1
- package/lib/network/peers/utils/assertPeerRelevance.d.ts +9 -1
- package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -1
- package/lib/network/peers/utils/assertPeerRelevance.js +32 -21
- package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
- package/lib/network/peers/utils/enrSubnetsDeserialize.d.ts.map +1 -1
- package/lib/network/peers/utils/enrSubnetsDeserialize.js +5 -2
- package/lib/network/peers/utils/enrSubnetsDeserialize.js.map +1 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +76 -27
- 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 +6 -0
- package/lib/network/processor/gossipQueues/index.js.map +1 -1
- package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -1
- package/lib/network/processor/gossipValidatorFn.js +5 -1
- package/lib/network/processor/gossipValidatorFn.js.map +1 -1
- package/lib/network/processor/index.d.ts +5 -0
- package/lib/network/processor/index.d.ts.map +1 -1
- package/lib/network/processor/index.js +40 -29
- package/lib/network/processor/index.js.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.d.ts.map +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.js +6 -0
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js +4 -4
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRange.js.map +1 -1
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js +3 -3
- package/lib/network/reqresp/handlers/dataColumnSidecarsByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/inclusionListsByIndices.d.ts +10 -0
- package/lib/network/reqresp/handlers/inclusionListsByIndices.d.ts.map +1 -0
- package/lib/network/reqresp/handlers/inclusionListsByIndices.js +30 -0
- package/lib/network/reqresp/handlers/inclusionListsByIndices.js.map +1 -0
- package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/index.js +5 -0
- package/lib/network/reqresp/handlers/index.js.map +1 -1
- package/lib/network/reqresp/protocols.d.ts +1 -0
- package/lib/network/reqresp/protocols.d.ts.map +1 -1
- package/lib/network/reqresp/protocols.js +5 -0
- package/lib/network/reqresp/protocols.js.map +1 -1
- package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
- package/lib/network/reqresp/rateLimit.js +6 -2
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/reqresp/types.d.ts +5 -2
- package/lib/network/reqresp/types.d.ts.map +1 -1
- package/lib/network/reqresp/types.js +3 -0
- package/lib/network/reqresp/types.js.map +1 -1
- package/lib/network/subnets/attnetsService.d.ts.map +1 -1
- package/lib/network/subnets/attnetsService.js +3 -1
- package/lib/network/subnets/attnetsService.js.map +1 -1
- package/lib/node/nodejs.d.ts +1 -1
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js +10 -2
- package/lib/node/nodejs.js.map +1 -1
- package/lib/node/notifier.d.ts.map +1 -1
- package/lib/node/notifier.js +12 -13
- package/lib/node/notifier.js.map +1 -1
- package/lib/node/options.d.ts +1 -1
- package/lib/node/options.d.ts.map +1 -1
- package/lib/node/options.js +1 -1
- package/lib/node/options.js.map +1 -1
- package/lib/sync/interface.d.ts.map +1 -1
- package/lib/sync/interface.js.map +1 -1
- package/lib/sync/sync.d.ts +7 -0
- package/lib/sync/sync.d.ts.map +1 -1
- package/lib/sync/sync.js +61 -3
- package/lib/sync/sync.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts.map +1 -1
- package/lib/sync/unknownBlock.js +45 -20
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/util/clock.d.ts.map +1 -1
- package/lib/util/clock.js +3 -4
- package/lib/util/clock.js.map +1 -1
- package/lib/util/file.d.ts.map +1 -1
- package/lib/util/file.js +8 -9
- package/lib/util/file.js.map +1 -1
- package/lib/util/queue/itemQueue.js +1 -1
- package/lib/util/queue/itemQueue.js.map +1 -1
- package/lib/util/sszBytes.d.ts +2 -2
- package/lib/util/sszBytes.d.ts.map +1 -1
- package/lib/util/sszBytes.js +24 -16
- package/lib/util/sszBytes.js.map +1 -1
- package/package.json +31 -32
- package/src/api/impl/api.ts +1 -1
- package/src/api/impl/beacon/blocks/index.ts +67 -65
- package/src/api/impl/beacon/index.ts +3 -1
- package/src/api/impl/beacon/pool/index.ts +5 -1
- package/src/api/impl/beacon/state/index.ts +10 -1
- package/src/api/impl/beacon/state/utils.ts +20 -10
- package/src/api/impl/debug/index.ts +4 -0
- package/src/api/impl/validator/index.ts +176 -29
- package/src/api/options.ts +3 -0
- package/src/chain/ColumnReconstructionTracker.ts +63 -46
- package/src/chain/GetBlobsTracker.ts +97 -38
- package/src/chain/archiveStore/archiveStore.ts +1 -0
- package/src/chain/archiveStore/utils/archiveBlocks.ts +78 -133
- package/src/chain/blocks/blockInput/blockInput.ts +1 -1
- package/src/chain/blocks/blockInput/utils.ts +2 -2
- package/src/chain/blocks/importBlock.ts +19 -18
- package/src/chain/blocks/importExecutionPayload.ts +81 -23
- package/src/chain/blocks/index.ts +6 -2
- package/src/chain/blocks/payloadEnvelopeProcessor.ts +35 -24
- package/src/chain/blocks/types.ts +5 -0
- package/src/chain/blocks/verifyBlock.ts +1 -0
- package/src/chain/blocks/verifyBlocksDataAvailability.ts +10 -1
- package/src/chain/blocks/verifyPayloadsDataAvailability.ts +14 -6
- package/src/chain/bls/multithread/index.ts +5 -5
- package/src/chain/bls/multithread/types.ts +1 -1
- package/src/chain/bls/multithread/worker.ts +1 -5
- package/src/chain/bls/singleThread.ts +1 -1
- package/src/chain/bls/utils.ts +1 -1
- package/src/chain/chain.ts +13 -7
- package/src/chain/errors/blockError.ts +1 -1
- package/src/chain/errors/executionPayloadBid.ts +12 -0
- package/src/chain/errors/inclusionList.ts +38 -0
- package/src/chain/errors/index.ts +1 -0
- package/src/chain/interface.ts +6 -4
- package/src/chain/opPools/aggregatedAttestationPool.ts +25 -9
- package/src/chain/opPools/attestationPool.ts +16 -4
- package/src/chain/opPools/inclusionListStore.ts +208 -0
- package/src/chain/opPools/index.ts +1 -0
- package/src/chain/opPools/payloadAttestationPool.ts +18 -7
- package/src/chain/opPools/syncCommitteeMessagePool.ts +10 -3
- package/src/chain/opPools/syncContributionAndProofPool.ts +13 -3
- package/src/chain/opPools/utils.ts +1 -1
- package/src/chain/options.ts +0 -2
- package/src/chain/prepareNextSlot.ts +7 -3
- package/src/chain/produceBlock/computeNewStateRoot.ts +9 -2
- package/src/chain/produceBlock/produceBlockBody.ts +70 -24
- package/src/chain/regen/interface.ts +1 -1
- package/src/chain/reprocess.ts +2 -1
- package/src/chain/seenCache/seenGossipBlockInput.ts +2 -1
- package/src/chain/stateCache/persistentCheckpointsCache.ts +4 -1
- package/src/chain/validation/executionPayloadBid.ts +54 -183
- package/src/chain/validation/inclusionList.ts +192 -0
- package/src/chain/validation/index.ts +1 -0
- package/src/chain/validatorMonitor.ts +7 -4
- package/src/constants/constants.ts +1 -0
- package/src/db/beacon.ts +44 -0
- package/src/db/dataColumnStore.ts +2 -4
- package/src/db/flatFileStore/flatFileStore.ts +7 -7
- package/src/db/flatFileStore/slotIndex.ts +4 -3
- package/src/db/interface.ts +2 -0
- package/src/db/repositories/blockArchive.ts +2 -2
- package/src/db/repositories/blockArchiveIndex.ts +2 -3
- package/src/db/repositories/dataColumnSidecarArchive.ts +20 -0
- package/src/execution/builder/validateBid.ts +23 -2
- package/src/execution/engine/blobVersionedHashes.ts +1 -1
- package/src/execution/engine/disabled.ts +4 -0
- package/src/execution/engine/http.ts +40 -5
- package/src/execution/engine/index.ts +3 -2
- package/src/execution/engine/interface.ts +28 -4
- package/src/execution/engine/jsonRpcHttpClient.ts +12 -5
- package/src/execution/engine/jsonRpcTransport.ts +46 -9
- package/src/execution/engine/mock.ts +32 -7
- package/src/execution/engine/payloadIdCache.ts +24 -6
- package/src/execution/engine/restTransport.ts +68 -23
- package/src/execution/engine/transport.ts +7 -2
- package/src/execution/engine/transportMetrics.ts +2 -1
- package/src/execution/engine/types.ts +56 -17
- package/src/index.ts +2 -0
- package/src/metrics/metrics/beacon.ts +37 -0
- package/src/metrics/metrics/lodestar.ts +63 -1
- package/src/monitoring/service.ts +1 -1
- package/src/network/core/networkCore.ts +5 -0
- package/src/network/core/networkCoreWorker.ts +1 -0
- package/src/network/core/networkCoreWorkerHandler.ts +4 -0
- package/src/network/core/types.ts +2 -0
- package/src/network/gossip/gossipsub.ts +3 -1
- package/src/network/gossip/interface.ts +5 -0
- package/src/network/gossip/topic.ts +14 -0
- package/src/network/interface.ts +4 -0
- package/src/network/network.ts +19 -1
- package/src/network/peers/peerManager.ts +1 -1
- package/src/network/peers/utils/assertPeerRelevance.ts +39 -23
- package/src/network/peers/utils/enrSubnetsDeserialize.ts +5 -2
- package/src/network/processor/gossipHandlers.ts +96 -29
- package/src/network/processor/gossipQueues/index.ts +6 -0
- package/src/network/processor/gossipValidatorFn.ts +5 -0
- package/src/network/processor/index.ts +36 -27
- package/src/network/processor/types.ts +1 -1
- package/src/network/reqresp/ReqRespBeaconNode.ts +7 -0
- package/src/network/reqresp/handlers/dataColumnSidecarsByRange.ts +4 -10
- package/src/network/reqresp/handlers/dataColumnSidecarsByRoot.ts +3 -3
- package/src/network/reqresp/handlers/inclusionListsByIndices.ts +44 -0
- package/src/network/reqresp/handlers/index.ts +5 -0
- package/src/network/reqresp/protocols.ts +6 -0
- package/src/network/reqresp/rateLimit.ts +6 -2
- package/src/network/reqresp/types.ts +6 -0
- package/src/network/subnets/attnetsService.ts +8 -3
- package/src/node/nodejs.ts +24 -7
- package/src/node/notifier.ts +14 -13
- package/src/node/options.ts +4 -5
- package/src/sync/interface.ts +1 -0
- package/src/sync/sync.ts +65 -4
- package/src/sync/unknownBlock.ts +50 -30
- package/src/util/clock.ts +3 -4
- package/src/util/file.ts +8 -9
- package/src/util/queue/itemQueue.ts +1 -1
- package/src/util/sszBytes.ts +27 -14
|
@@ -17,8 +17,8 @@ import {EngineRestHttpClient} from "./restHttpClient.js";
|
|
|
17
17
|
import {RestEngineTransport, formatClientVersionHeader} from "./restTransport.js";
|
|
18
18
|
import {ExecutionEngineMockJsonRpcClient, JsonRpcBackend} from "./utils.js";
|
|
19
19
|
|
|
20
|
-
export {ExecutionEngineHttp, ExecutionEngineDisabled, defaultExecutionEngineHttpOpts, engineApiModes};
|
|
21
20
|
export type {EngineApiMode};
|
|
21
|
+
export {ExecutionEngineDisabled, ExecutionEngineHttp, defaultExecutionEngineHttpOpts, engineApiModes};
|
|
22
22
|
|
|
23
23
|
export type ExecutionEngineOpts =
|
|
24
24
|
| ({mode?: "http"} & ExecutionEngineHttpOpts)
|
|
@@ -70,7 +70,8 @@ export function getExecutionEngineHttp(
|
|
|
70
70
|
jwtId: opts.jwtId,
|
|
71
71
|
clientVersion: formatClientVersionHeader(getLodestarClientVersion(opts)),
|
|
72
72
|
metrics,
|
|
73
|
-
})
|
|
73
|
+
}),
|
|
74
|
+
metrics
|
|
74
75
|
);
|
|
75
76
|
|
|
76
77
|
modules.logger.info("Execution client", {urls: opts.urls.map(toPrintableUrl).toString(), engineApi});
|
|
@@ -9,14 +9,23 @@ import {
|
|
|
9
9
|
ForkPreFulu,
|
|
10
10
|
WITHDRAWAL_REQUEST_TYPE,
|
|
11
11
|
} from "@lodestar/params";
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
BlobsBundle,
|
|
14
|
+
ExecutionPayload,
|
|
15
|
+
ExecutionRequests,
|
|
16
|
+
Root,
|
|
17
|
+
RootHex,
|
|
18
|
+
Wei,
|
|
19
|
+
bellatrix,
|
|
20
|
+
capella,
|
|
21
|
+
} from "@lodestar/types";
|
|
13
22
|
import {BlobAndProof} from "@lodestar/types/deneb";
|
|
14
23
|
import {BlobAndProofV2} from "@lodestar/types/fulu";
|
|
15
24
|
import {PayloadId, PayloadIdCache, WithdrawalV1} from "./payloadIdCache.js";
|
|
16
25
|
import {ExecutionPayloadBodyV2} from "./types.js";
|
|
17
26
|
import {DATA} from "./utils.js";
|
|
18
27
|
|
|
19
|
-
export {
|
|
28
|
+
export {type PayloadId, PayloadIdCache, type WithdrawalV1};
|
|
20
29
|
export type ClientVersion = routes.node.ClientVersion;
|
|
21
30
|
export const ClientCode = routes.node.ClientCode;
|
|
22
31
|
|
|
@@ -73,7 +82,13 @@ export type ExecutePayloadResponse =
|
|
|
73
82
|
latestValidHash: null;
|
|
74
83
|
validationError: null;
|
|
75
84
|
}
|
|
76
|
-
| {
|
|
85
|
+
| {
|
|
86
|
+
status: ExecutionPayloadStatus.VALID;
|
|
87
|
+
latestValidHash: RootHex;
|
|
88
|
+
validationError: null;
|
|
89
|
+
/** PayloadStatusV2: whether the payload satisfied the inclusion list constraints */
|
|
90
|
+
inclusionListSatisfied?: boolean | null;
|
|
91
|
+
}
|
|
77
92
|
| {status: ExecutionPayloadStatus.INVALID; latestValidHash: RootHex | null; validationError: string | null}
|
|
78
93
|
| {
|
|
79
94
|
status:
|
|
@@ -99,6 +114,8 @@ export type PayloadAttributes = {
|
|
|
99
114
|
parentBeaconBlockRoot?: Uint8Array;
|
|
100
115
|
slotNumber?: number; // EIP-7843
|
|
101
116
|
targetGasLimit?: bigint; // GLOAS (PayloadAttributesV4, execution-apis#796)
|
|
117
|
+
/** Transactions the built payload must include (PayloadAttributesV5, HEZE:EIP-7805) */
|
|
118
|
+
inclusionListTransactions?: bellatrix.Transactions;
|
|
102
119
|
};
|
|
103
120
|
|
|
104
121
|
export type VersionedHashes = Uint8Array[];
|
|
@@ -129,9 +146,16 @@ export interface IExecutionEngine {
|
|
|
129
146
|
executionPayload: ExecutionPayload,
|
|
130
147
|
versionedHashes?: VersionedHashes,
|
|
131
148
|
parentBeaconBlockRoot?: Root,
|
|
132
|
-
executionRequests?: ExecutionRequests
|
|
149
|
+
executionRequests?: ExecutionRequests,
|
|
150
|
+
inclusionListTransactions?: bellatrix.Transactions
|
|
133
151
|
): Promise<ExecutePayloadResponse>;
|
|
134
152
|
|
|
153
|
+
/**
|
|
154
|
+
* Transactions the execution layer wants included in the next payload. Parameterless since
|
|
155
|
+
* execution-apis#609: the execution layer builds against its own view of the head.
|
|
156
|
+
*/
|
|
157
|
+
getInclusionList(): Promise<bellatrix.Transactions>;
|
|
158
|
+
|
|
135
159
|
/**
|
|
136
160
|
* Signal fork choice updates
|
|
137
161
|
* This function performs two actions atomically:
|
|
@@ -284,7 +284,12 @@ export class JsonRpcHttpClient implements IJsonRpcHttpClient {
|
|
|
284
284
|
});
|
|
285
285
|
|
|
286
286
|
const streamTimer = this.metrics?.streamTime.startTimer({routeId});
|
|
287
|
-
|
|
287
|
+
let bodyText: string;
|
|
288
|
+
try {
|
|
289
|
+
bodyText = await res.text();
|
|
290
|
+
} finally {
|
|
291
|
+
streamTimer?.();
|
|
292
|
+
}
|
|
288
293
|
this.metrics?.responseBytes.inc({routeId}, bodyText.length);
|
|
289
294
|
if (!res.ok) {
|
|
290
295
|
// Infura errors:
|
|
@@ -292,10 +297,12 @@ export class JsonRpcHttpClient implements IJsonRpcHttpClient {
|
|
|
292
297
|
throw new HttpRpcError(res.status, `${res.statusText}: ${bodyText.slice(0, maxStringLengthToPrint)}`);
|
|
293
298
|
}
|
|
294
299
|
|
|
295
|
-
const
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
300
|
+
const parseTimer = this.metrics?.responseParseTime.startTimer({routeId, encoding: "json"});
|
|
301
|
+
try {
|
|
302
|
+
return parseJson<R>(bodyText);
|
|
303
|
+
} finally {
|
|
304
|
+
parseTimer?.();
|
|
305
|
+
}
|
|
299
306
|
} catch (e) {
|
|
300
307
|
this.metrics?.requestErrors.inc({routeId});
|
|
301
308
|
if (controller.signal.aborted) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {ForkName, ForkSeq} from "@lodestar/params";
|
|
2
|
-
import {ExecutionPayload, ExecutionRequests, Root, RootHex} from "@lodestar/types";
|
|
2
|
+
import {ExecutionPayload, ExecutionRequests, Root, RootHex, bellatrix} from "@lodestar/types";
|
|
3
3
|
import {BlobAndProof} from "@lodestar/types/deneb";
|
|
4
4
|
import {BlobAndProofV2} from "@lodestar/types/fulu";
|
|
5
5
|
import {strip0xPrefix} from "@lodestar/utils";
|
|
@@ -16,10 +16,12 @@ import {
|
|
|
16
16
|
deserializeBlobAndProofsV2,
|
|
17
17
|
deserializeBlobAndProofsV2IntoBytes,
|
|
18
18
|
deserializeExecutionPayloadBodyV2,
|
|
19
|
+
deserializeInclusionList,
|
|
19
20
|
parseExecutionPayload,
|
|
20
21
|
serializeBeaconBlockRoot,
|
|
21
22
|
serializeExecutionPayload,
|
|
22
23
|
serializeExecutionRequests,
|
|
24
|
+
serializeInclusionList,
|
|
23
25
|
serializePayloadAttributes,
|
|
24
26
|
serializeVersionedHashes,
|
|
25
27
|
} from "./types.js";
|
|
@@ -40,6 +42,7 @@ const getPayloadBodiesByHashOpts: ReqOpts = {routeId: "getPayloadBodiesByHash"};
|
|
|
40
42
|
const getBlobsV1Opts: ReqOpts = {routeId: "getBlobsV1"};
|
|
41
43
|
const getBlobsV2Opts: ReqOpts = {routeId: "getBlobsV2"};
|
|
42
44
|
const getClientVersionOpts: ReqOpts = {routeId: "getClientVersion"};
|
|
45
|
+
const getInclusionListOpts: ReqOpts = {routeId: "getInclusionList"};
|
|
43
46
|
|
|
44
47
|
/**
|
|
45
48
|
* Legacy `engine_*` JSON-RPC methods
|
|
@@ -57,7 +60,8 @@ export class JsonRpcEngineTransport implements IEngineTransport {
|
|
|
57
60
|
executionPayload: ExecutionPayload,
|
|
58
61
|
versionedHashes?: VersionedHashes,
|
|
59
62
|
parentBeaconBlockRoot?: Root,
|
|
60
|
-
executionRequests?: ExecutionRequests
|
|
63
|
+
executionRequests?: ExecutionRequests,
|
|
64
|
+
inclusionListTransactions?: bellatrix.Transactions
|
|
61
65
|
): Promise<PayloadStatusResult> {
|
|
62
66
|
const serializedExecutionPayload = serializeExecutionPayload(fork, executionPayload);
|
|
63
67
|
|
|
@@ -76,6 +80,28 @@ export class JsonRpcEngineTransport implements IEngineTransport {
|
|
|
76
80
|
if (executionRequests === undefined) {
|
|
77
81
|
throw Error(`executionRequests required in notifyNewPayload for fork=${fork}`);
|
|
78
82
|
}
|
|
83
|
+
if (ForkSeq[fork] >= ForkSeq.heze) {
|
|
84
|
+
if (inclusionListTransactions === undefined) {
|
|
85
|
+
throw Error(`inclusionListTransactions required in notifyNewPayload for fork=${fork}`);
|
|
86
|
+
}
|
|
87
|
+
const method = "engine_newPayloadV6";
|
|
88
|
+
return this.rpc.fetchWithRetries<
|
|
89
|
+
EngineApiRpcReturnTypes[typeof method],
|
|
90
|
+
EngineApiRpcParamTypes[typeof method]
|
|
91
|
+
>(
|
|
92
|
+
{
|
|
93
|
+
method,
|
|
94
|
+
params: [
|
|
95
|
+
serializedExecutionPayload,
|
|
96
|
+
serializedVersionedHashes,
|
|
97
|
+
serializedParentBeaconBlockRoot,
|
|
98
|
+
serializeExecutionRequests(fork, executionRequests),
|
|
99
|
+
serializeInclusionList(inclusionListTransactions),
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
notifyNewPayloadOpts
|
|
103
|
+
);
|
|
104
|
+
}
|
|
79
105
|
const method = ForkSeq[fork] >= ForkSeq.gloas ? "engine_newPayloadV5" : "engine_newPayloadV4";
|
|
80
106
|
return this.rpc.fetchWithRetries<EngineApiRpcReturnTypes[typeof method], EngineApiRpcParamTypes[typeof method]>(
|
|
81
107
|
{
|
|
@@ -113,13 +139,15 @@ export class JsonRpcEngineTransport implements IEngineTransport {
|
|
|
113
139
|
payloadAttributes?: PayloadAttributes
|
|
114
140
|
): Promise<ForkchoiceUpdatedResult> {
|
|
115
141
|
const method =
|
|
116
|
-
ForkSeq[fork] >= ForkSeq.
|
|
117
|
-
? "
|
|
118
|
-
: ForkSeq[fork] >= ForkSeq.
|
|
119
|
-
? "
|
|
120
|
-
: ForkSeq[fork] >= ForkSeq.
|
|
121
|
-
? "
|
|
122
|
-
:
|
|
142
|
+
ForkSeq[fork] >= ForkSeq.heze
|
|
143
|
+
? "engine_forkchoiceUpdatedV5"
|
|
144
|
+
: ForkSeq[fork] >= ForkSeq.gloas
|
|
145
|
+
? "engine_forkchoiceUpdatedV4"
|
|
146
|
+
: ForkSeq[fork] >= ForkSeq.deneb
|
|
147
|
+
? "engine_forkchoiceUpdatedV3"
|
|
148
|
+
: ForkSeq[fork] >= ForkSeq.capella
|
|
149
|
+
? "engine_forkchoiceUpdatedV2"
|
|
150
|
+
: "engine_forkchoiceUpdatedV1";
|
|
123
151
|
const payloadAttributesRpc = payloadAttributes ? serializePayloadAttributes(payloadAttributes) : undefined;
|
|
124
152
|
// If we are just fcUing and not asking execution for payload, retry is not required
|
|
125
153
|
// and we can move on, as the next fcU will be issued soon on the new slot
|
|
@@ -244,4 +272,13 @@ export class JsonRpcEngineTransport implements IEngineTransport {
|
|
|
244
272
|
return {code, name: cv.name, version: cv.version, commit: strip0xPrefix(cv.commit)};
|
|
245
273
|
});
|
|
246
274
|
}
|
|
275
|
+
|
|
276
|
+
async getInclusionList(): Promise<bellatrix.Transactions> {
|
|
277
|
+
const method = "engine_getInclusionListV1";
|
|
278
|
+
const response = await this.rpc.fetchWithRetries<
|
|
279
|
+
EngineApiRpcReturnTypes[typeof method],
|
|
280
|
+
EngineApiRpcParamTypes[typeof method]
|
|
281
|
+
>({method, params: []}, getInclusionListOpts);
|
|
282
|
+
return deserializeInclusionList(response);
|
|
283
|
+
}
|
|
247
284
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
|
+
import {SerializedList} from "@chainsafe/ssz";
|
|
2
3
|
import {ChainConfig} from "@lodestar/config";
|
|
3
4
|
import {
|
|
4
5
|
BLOB_TX_TYPE,
|
|
@@ -137,10 +138,12 @@ export class ExecutionEngineMockBackend implements JsonRpcBackend {
|
|
|
137
138
|
engine_newPayloadV3: this.notifyNewPayload.bind(this),
|
|
138
139
|
engine_newPayloadV4: this.notifyNewPayload.bind(this),
|
|
139
140
|
engine_newPayloadV5: this.notifyNewPayload.bind(this),
|
|
141
|
+
engine_newPayloadV6: this.notifyNewPayload.bind(this),
|
|
140
142
|
engine_forkchoiceUpdatedV1: this.notifyForkchoiceUpdate.bind(this),
|
|
141
143
|
engine_forkchoiceUpdatedV2: this.notifyForkchoiceUpdate.bind(this),
|
|
142
144
|
engine_forkchoiceUpdatedV3: this.notifyForkchoiceUpdate.bind(this),
|
|
143
145
|
engine_forkchoiceUpdatedV4: this.notifyForkchoiceUpdate.bind(this),
|
|
146
|
+
engine_forkchoiceUpdatedV5: this.notifyForkchoiceUpdate.bind(this),
|
|
144
147
|
engine_getPayloadV1: this.getPayloadV1.bind(this),
|
|
145
148
|
engine_getPayloadV2: this.getPayloadV5.bind(this),
|
|
146
149
|
engine_getPayloadV3: this.getPayloadV5.bind(this),
|
|
@@ -151,6 +154,7 @@ export class ExecutionEngineMockBackend implements JsonRpcBackend {
|
|
|
151
154
|
engine_getClientVersionV1: this.getClientVersionV1.bind(this),
|
|
152
155
|
engine_getBlobsV1: this.getBlobs.bind(this),
|
|
153
156
|
engine_getBlobsV2: this.getBlobsV2.bind(this),
|
|
157
|
+
engine_getInclusionListV1: this.getInclusionList.bind(this),
|
|
154
158
|
};
|
|
155
159
|
}
|
|
156
160
|
|
|
@@ -234,7 +238,13 @@ export class ExecutionEngineMockBackend implements JsonRpcBackend {
|
|
|
234
238
|
// IF the payload has been fully validated while processing the call
|
|
235
239
|
// RETURN payload status from the Payload validation process
|
|
236
240
|
// If validation succeeds, the response MUST contain {status: VALID, latestValidHash: payload.blockHash}
|
|
237
|
-
|
|
241
|
+
// The mock does not check inclusion list constraints, so every payload satisfies them (PayloadStatusV2)
|
|
242
|
+
return {
|
|
243
|
+
status: ExecutionPayloadStatus.VALID,
|
|
244
|
+
latestValidHash: blockHash,
|
|
245
|
+
validationError: null,
|
|
246
|
+
inclusionListSatisfied: true,
|
|
247
|
+
};
|
|
238
248
|
}
|
|
239
249
|
|
|
240
250
|
/**
|
|
@@ -343,14 +353,14 @@ export class ExecutionEngineMockBackend implements JsonRpcBackend {
|
|
|
343
353
|
executionPayload.gasUsed = Math.floor(0.5 * INTEROP_GAS_LIMIT);
|
|
344
354
|
executionPayload.timestamp = payloadAttributes.timestamp;
|
|
345
355
|
executionPayload.blockHash = crypto.randomBytes(32);
|
|
346
|
-
|
|
356
|
+
const transactions: Uint8Array[] = [];
|
|
347
357
|
|
|
348
358
|
// Between 0 and 4 transactions for all forks
|
|
349
359
|
const eip1559TxCount = Math.round(4 * Math.random());
|
|
350
360
|
for (let i = 0; i < eip1559TxCount; i++) {
|
|
351
361
|
const tx = crypto.randomBytes(512);
|
|
352
362
|
tx[0] = TX_TYPE_EIP1559;
|
|
353
|
-
|
|
363
|
+
transactions.push(tx);
|
|
354
364
|
}
|
|
355
365
|
|
|
356
366
|
const commitments: deneb.KZGCommitment[] = [];
|
|
@@ -364,7 +374,7 @@ export class ExecutionEngineMockBackend implements JsonRpcBackend {
|
|
|
364
374
|
const blob = generateRandomBlob();
|
|
365
375
|
const commitment = kzg.blobToKzgCommitment(blob);
|
|
366
376
|
const {proofs: cellProofs} = kzg.computeCellsAndKzgProofs(blob);
|
|
367
|
-
|
|
377
|
+
transactions.push(transactionForKzgCommitment(commitment));
|
|
368
378
|
commitments.push(commitment);
|
|
369
379
|
blobs.push(blob);
|
|
370
380
|
proofs.push(...cellProofs);
|
|
@@ -376,12 +386,13 @@ export class ExecutionEngineMockBackend implements JsonRpcBackend {
|
|
|
376
386
|
const blob = generateRandomBlob();
|
|
377
387
|
const commitment = kzg.blobToKzgCommitment(blob);
|
|
378
388
|
const proof = kzg.computeBlobKzgProof(blob, commitment);
|
|
379
|
-
|
|
389
|
+
transactions.push(transactionForKzgCommitment(commitment));
|
|
380
390
|
commitments.push(commitment);
|
|
381
391
|
blobs.push(blob);
|
|
382
392
|
proofs.push(proof);
|
|
383
393
|
}
|
|
384
394
|
}
|
|
395
|
+
executionPayload.transactions = SerializedList.fromArray(transactions);
|
|
385
396
|
|
|
386
397
|
if (ForkSeq[fork] >= ForkSeq.capella) {
|
|
387
398
|
(executionPayload as ExecutionPayload<ForkPostCapella>).withdrawals = ssz.capella.Withdrawals.defaultValue();
|
|
@@ -409,7 +420,12 @@ export class ExecutionEngineMockBackend implements JsonRpcBackend {
|
|
|
409
420
|
// IF the payload is deemed VALID and the build process has begun
|
|
410
421
|
// {payloadStatus: {status: VALID, latestValidHash: forkchoiceState.headBlockHash, validationError: null}, payloadId: buildProcessId}
|
|
411
422
|
return {
|
|
412
|
-
payloadStatus: {
|
|
423
|
+
payloadStatus: {
|
|
424
|
+
status: ExecutionPayloadStatus.VALID,
|
|
425
|
+
latestValidHash: null,
|
|
426
|
+
validationError: null,
|
|
427
|
+
inclusionListSatisfied: true,
|
|
428
|
+
},
|
|
413
429
|
payloadId: String(payloadId as number),
|
|
414
430
|
};
|
|
415
431
|
}
|
|
@@ -418,7 +434,12 @@ export class ExecutionEngineMockBackend implements JsonRpcBackend {
|
|
|
418
434
|
// IF the payload is deemed VALID and a build process hasn't been started
|
|
419
435
|
// {payloadStatus: {status: VALID, latestValidHash: forkchoiceState.headBlockHash, validationError: null}, payloadId: null}
|
|
420
436
|
return {
|
|
421
|
-
payloadStatus: {
|
|
437
|
+
payloadStatus: {
|
|
438
|
+
status: ExecutionPayloadStatus.VALID,
|
|
439
|
+
latestValidHash: null,
|
|
440
|
+
validationError: null,
|
|
441
|
+
inclusionListSatisfied: true,
|
|
442
|
+
},
|
|
422
443
|
payloadId: null,
|
|
423
444
|
};
|
|
424
445
|
}
|
|
@@ -487,6 +508,10 @@ export class ExecutionEngineMockBackend implements JsonRpcBackend {
|
|
|
487
508
|
return null;
|
|
488
509
|
}
|
|
489
510
|
|
|
511
|
+
private getInclusionList(): EngineApiRpcReturnTypes["engine_getInclusionListV1"] {
|
|
512
|
+
return [];
|
|
513
|
+
}
|
|
514
|
+
|
|
490
515
|
private timestampToFork(timestamp: number): ForkPostBellatrix {
|
|
491
516
|
if (timestamp >= this.gloasForkTimestamp) return ForkName.gloas;
|
|
492
517
|
if (timestamp >= this.fuluForkTimestamp) return ForkName.fulu;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import {byteArrayEquals} from "@chainsafe/ssz";
|
|
1
2
|
import {SLOTS_PER_EPOCH} from "@lodestar/params";
|
|
3
|
+
import {bellatrix} from "@lodestar/types";
|
|
2
4
|
import {pruneSetToMax} from "@lodestar/utils";
|
|
3
5
|
import {PayloadAttributesRpc} from "./types.js";
|
|
4
6
|
import {DATA, QUANTITY} from "./utils.js";
|
|
@@ -17,13 +19,18 @@ export type WithdrawalV1 = {
|
|
|
17
19
|
amount: QUANTITY;
|
|
18
20
|
};
|
|
19
21
|
|
|
20
|
-
type FcuAttributes = {headBlockHash: DATA
|
|
22
|
+
type FcuAttributes = {headBlockHash: DATA} & Omit<PayloadAttributesRpc, "withdrawals" | "inclusionListTransactions"> & {
|
|
23
|
+
inclusionListTransactions?: bellatrix.Transactions;
|
|
24
|
+
};
|
|
21
25
|
|
|
22
26
|
export class PayloadIdCache {
|
|
23
|
-
private readonly payloadIdByFcuAttributes = new Map<
|
|
27
|
+
private readonly payloadIdByFcuAttributes = new Map<
|
|
28
|
+
string,
|
|
29
|
+
{payloadId: PayloadId; fullKey: string; inclusionListTransactions?: bellatrix.Transactions}
|
|
30
|
+
>();
|
|
24
31
|
|
|
25
|
-
getFullKey({headBlockHash,
|
|
26
|
-
return `${headBlockHash}-${
|
|
32
|
+
getFullKey({headBlockHash, timestamp, prevRandao, suggestedFeeRecipient}: FcuAttributes): string {
|
|
33
|
+
return `${headBlockHash}-${timestamp}-${prevRandao}-${suggestedFeeRecipient}`;
|
|
27
34
|
}
|
|
28
35
|
getKey({timestamp}: Pick<FcuAttributes, "timestamp">): string {
|
|
29
36
|
return timestamp;
|
|
@@ -37,7 +44,8 @@ export class PayloadIdCache {
|
|
|
37
44
|
add(fcuAttributes: FcuAttributes, payloadId: PayloadId): void {
|
|
38
45
|
const key = this.getKey(fcuAttributes);
|
|
39
46
|
const fullKey = this.getFullKey(fcuAttributes);
|
|
40
|
-
|
|
47
|
+
const {inclusionListTransactions} = fcuAttributes;
|
|
48
|
+
this.payloadIdByFcuAttributes.set(key, {payloadId, fullKey, inclusionListTransactions});
|
|
41
49
|
}
|
|
42
50
|
|
|
43
51
|
prune(): void {
|
|
@@ -49,6 +57,16 @@ export class PayloadIdCache {
|
|
|
49
57
|
const key = this.getKey(fcuAttributes);
|
|
50
58
|
const fullKey = this.getFullKey(fcuAttributes);
|
|
51
59
|
const payloadInfo = this.payloadIdByFcuAttributes.get(key);
|
|
52
|
-
return payloadInfo?.fullKey === fullKey
|
|
60
|
+
return payloadInfo?.fullKey === fullKey &&
|
|
61
|
+
isSameInclusionList(payloadInfo.inclusionListTransactions, fcuAttributes.inclusionListTransactions)
|
|
62
|
+
? payloadInfo.payloadId
|
|
63
|
+
: undefined;
|
|
53
64
|
}
|
|
54
65
|
}
|
|
66
|
+
|
|
67
|
+
function isSameInclusionList(a?: bellatrix.Transactions, b?: bellatrix.Transactions): boolean {
|
|
68
|
+
if (a === undefined || b === undefined) {
|
|
69
|
+
return a === b;
|
|
70
|
+
}
|
|
71
|
+
return byteArrayEquals(a.bytes, b.bytes);
|
|
72
|
+
}
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import {Type} from "@chainsafe/ssz";
|
|
2
2
|
import {CELLS_PER_EXT_BLOB, ForkName, ForkSeq, isForkPostBellatrix} from "@lodestar/params";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
ExecutionPayload,
|
|
5
|
+
ExecutionRequests,
|
|
6
|
+
Root,
|
|
7
|
+
RootHex,
|
|
8
|
+
bellatrix,
|
|
9
|
+
capella,
|
|
10
|
+
deneb,
|
|
11
|
+
electra,
|
|
12
|
+
gloas,
|
|
13
|
+
} from "@lodestar/types";
|
|
4
14
|
import {BlobAndProof} from "@lodestar/types/deneb";
|
|
5
15
|
import {BlobAndProofV2} from "@lodestar/types/fulu";
|
|
6
|
-
import {LodestarError, fromHex, strip0xPrefix, toHex, toRootHex} from "@lodestar/utils";
|
|
16
|
+
import {EndTimer, LodestarError, fromHex, strip0xPrefix, toHex, toRootHex} from "@lodestar/utils";
|
|
7
17
|
import {isValidBlobVersionedHashes} from "./blobVersionedHashes.js";
|
|
8
18
|
import {
|
|
9
19
|
ClientCode,
|
|
@@ -48,6 +58,7 @@ import {
|
|
|
48
58
|
executionForkName,
|
|
49
59
|
} from "./sszTypes.js";
|
|
50
60
|
import {ForkchoiceUpdatedResult, GetPayloadResult, IEngineTransport, PayloadStatusResult} from "./transport.js";
|
|
61
|
+
import {EngineTransportMetrics} from "./transportMetrics.js";
|
|
51
62
|
import {
|
|
52
63
|
ExecutionPayloadBodyV2,
|
|
53
64
|
assertReqSizeLimit,
|
|
@@ -102,7 +113,10 @@ export function formatClientVersionHeader(clientVersion: ClientVersion): string
|
|
|
102
113
|
export class RestEngineTransport implements IEngineTransport {
|
|
103
114
|
private limits = DEFAULT_LIMITS;
|
|
104
115
|
|
|
105
|
-
constructor(
|
|
116
|
+
constructor(
|
|
117
|
+
private readonly client: EngineRestHttpClient,
|
|
118
|
+
private readonly metrics?: EngineTransportMetrics | null
|
|
119
|
+
) {}
|
|
106
120
|
|
|
107
121
|
get emitter(): JsonRpcHttpClientEventEmitter {
|
|
108
122
|
return this.client.emitter;
|
|
@@ -114,7 +128,7 @@ export class RestEngineTransport implements IEngineTransport {
|
|
|
114
128
|
{method: "GET", path: "/capabilities", responseType: "json"},
|
|
115
129
|
getCapabilitiesOpts
|
|
116
130
|
);
|
|
117
|
-
const capabilities = parseJson(body, "getCapabilities");
|
|
131
|
+
const capabilities = parseJson(body, "getCapabilities", this.metrics);
|
|
118
132
|
if (
|
|
119
133
|
!isRecord(capabilities) ||
|
|
120
134
|
!Array.isArray(capabilities.supported_forks) ||
|
|
@@ -220,7 +234,7 @@ export class RestEngineTransport implements IEngineTransport {
|
|
|
220
234
|
{method: "POST", path: "/payloads", executionFork: toExecutionForkName(fork), body, responseType: "ssz"},
|
|
221
235
|
notifyNewPayloadOpts
|
|
222
236
|
);
|
|
223
|
-
return toPayloadStatusResult(deserializeResponse(PayloadStatus, res.body, "notifyNewPayload"));
|
|
237
|
+
return toPayloadStatusResult(deserializeResponse(PayloadStatus, res.body, "notifyNewPayload", this.metrics));
|
|
224
238
|
}
|
|
225
239
|
|
|
226
240
|
async forkchoiceUpdated(
|
|
@@ -268,7 +282,12 @@ export class RestEngineTransport implements IEngineTransport {
|
|
|
268
282
|
{method: "POST", path: "/forkchoice", executionFork: toExecutionForkName(fork), body, responseType: "ssz"},
|
|
269
283
|
fcUReqOpts
|
|
270
284
|
);
|
|
271
|
-
const {payloadStatus, payloadId} = deserializeResponse(
|
|
285
|
+
const {payloadStatus, payloadId} = deserializeResponse(
|
|
286
|
+
ForkchoiceUpdateResponse,
|
|
287
|
+
res.body,
|
|
288
|
+
"forkchoiceUpdated",
|
|
289
|
+
this.metrics
|
|
290
|
+
);
|
|
272
291
|
return {
|
|
273
292
|
payloadStatus: toPayloadStatusResult(payloadStatus),
|
|
274
293
|
payloadId: payloadId.length > 0 ? toHex(payloadId[0]) : null,
|
|
@@ -289,7 +308,8 @@ export class RestEngineTransport implements IEngineTransport {
|
|
|
289
308
|
const {payload, blockValue, blobsBundle, executionRequests, shouldOverrideBuilder} = deserializeResponse(
|
|
290
309
|
BuiltPayloadGloas,
|
|
291
310
|
res.body,
|
|
292
|
-
"getPayload"
|
|
311
|
+
"getPayload",
|
|
312
|
+
this.metrics
|
|
293
313
|
);
|
|
294
314
|
return {
|
|
295
315
|
executionPayload: payload,
|
|
@@ -303,7 +323,8 @@ export class RestEngineTransport implements IEngineTransport {
|
|
|
303
323
|
const {payload, blockValue, blobsBundle, executionRequests, shouldOverrideBuilder} = deserializeResponse(
|
|
304
324
|
BuiltPayloadFulu,
|
|
305
325
|
res.body,
|
|
306
|
-
"getPayload"
|
|
326
|
+
"getPayload",
|
|
327
|
+
this.metrics
|
|
307
328
|
);
|
|
308
329
|
return {
|
|
309
330
|
executionPayload: payload,
|
|
@@ -317,7 +338,8 @@ export class RestEngineTransport implements IEngineTransport {
|
|
|
317
338
|
const {payload, blockValue, blobsBundle, executionRequests, shouldOverrideBuilder} = deserializeResponse(
|
|
318
339
|
BuiltPayloadElectra,
|
|
319
340
|
res.body,
|
|
320
|
-
"getPayload"
|
|
341
|
+
"getPayload",
|
|
342
|
+
this.metrics
|
|
321
343
|
);
|
|
322
344
|
return {
|
|
323
345
|
executionPayload: payload,
|
|
@@ -331,15 +353,16 @@ export class RestEngineTransport implements IEngineTransport {
|
|
|
331
353
|
const {payload, blockValue, blobsBundle, shouldOverrideBuilder} = deserializeResponse(
|
|
332
354
|
BuiltPayloadDeneb,
|
|
333
355
|
res.body,
|
|
334
|
-
"getPayload"
|
|
356
|
+
"getPayload",
|
|
357
|
+
this.metrics
|
|
335
358
|
);
|
|
336
359
|
return {executionPayload: payload, executionPayloadValue: blockValue, blobsBundle, shouldOverrideBuilder};
|
|
337
360
|
}
|
|
338
361
|
if (ForkSeq[fork] >= ForkSeq.capella) {
|
|
339
|
-
const {payload, blockValue} = deserializeResponse(BuiltPayloadCapella, res.body, "getPayload");
|
|
362
|
+
const {payload, blockValue} = deserializeResponse(BuiltPayloadCapella, res.body, "getPayload", this.metrics);
|
|
340
363
|
return {executionPayload: payload, executionPayloadValue: blockValue, shouldOverrideBuilder: false};
|
|
341
364
|
}
|
|
342
|
-
const {payload, blockValue} = deserializeResponse(BuiltPayloadBellatrix, res.body, "getPayload");
|
|
365
|
+
const {payload, blockValue} = deserializeResponse(BuiltPayloadBellatrix, res.body, "getPayload", this.metrics);
|
|
343
366
|
return {executionPayload: payload, executionPayloadValue: blockValue, shouldOverrideBuilder: false};
|
|
344
367
|
}
|
|
345
368
|
|
|
@@ -356,7 +379,7 @@ export class RestEngineTransport implements IEngineTransport {
|
|
|
356
379
|
},
|
|
357
380
|
getPayloadBodiesByHashOpts
|
|
358
381
|
);
|
|
359
|
-
const bodies = deserializeBodiesResponse(ForkName.gloas, res.body);
|
|
382
|
+
const bodies = deserializeBodiesResponse(ForkName.gloas, res.body, this.metrics);
|
|
360
383
|
if (bodies.length !== blockHashes.length) {
|
|
361
384
|
throw Error(`Invalid bodies response length=${bodies.length} blockHashes=${blockHashes.length}`);
|
|
362
385
|
}
|
|
@@ -374,7 +397,7 @@ export class RestEngineTransport implements IEngineTransport {
|
|
|
374
397
|
return versionedHashes.map(() => null);
|
|
375
398
|
}
|
|
376
399
|
|
|
377
|
-
const {entries} = deserializeResponse(BlobsV1Response, res.body, "getBlobsV1");
|
|
400
|
+
const {entries} = deserializeResponse(BlobsV1Response, res.body, "getBlobsV1", this.metrics);
|
|
378
401
|
if (entries.length !== versionedHashes.length) {
|
|
379
402
|
throw Error(`Invalid blobs/v1 response length=${entries.length} versionedHashes=${versionedHashes.length}`);
|
|
380
403
|
}
|
|
@@ -397,7 +420,7 @@ export class RestEngineTransport implements IEngineTransport {
|
|
|
397
420
|
return null;
|
|
398
421
|
}
|
|
399
422
|
|
|
400
|
-
const {entries} = deserializeResponse(BlobsV2Response, res.body, "getBlobsV2", {reuseBytes: true});
|
|
423
|
+
const {entries} = deserializeResponse(BlobsV2Response, res.body, "getBlobsV2", this.metrics, {reuseBytes: true});
|
|
401
424
|
if (entries.length !== versionedHashes.length) {
|
|
402
425
|
throw Error(`Invalid blobs/v2 response length=${entries.length} versionedHashes=${versionedHashes.length}`);
|
|
403
426
|
}
|
|
@@ -418,7 +441,7 @@ export class RestEngineTransport implements IEngineTransport {
|
|
|
418
441
|
{method: "GET", path: "/identity", responseType: "json"},
|
|
419
442
|
getClientVersionOpts
|
|
420
443
|
);
|
|
421
|
-
const versions = parseJson(body, "getClientVersion");
|
|
444
|
+
const versions = parseJson(body, "getClientVersion", this.metrics);
|
|
422
445
|
if (!Array.isArray(versions)) {
|
|
423
446
|
throw new EngineRestResponseError("getClientVersion", "Expected an array of client versions");
|
|
424
447
|
}
|
|
@@ -441,6 +464,10 @@ export class RestEngineTransport implements IEngineTransport {
|
|
|
441
464
|
};
|
|
442
465
|
});
|
|
443
466
|
}
|
|
467
|
+
|
|
468
|
+
getInclusionList(): Promise<bellatrix.Transactions> {
|
|
469
|
+
throw Error("engine_getInclusionListV1 is not available over the REST engine API");
|
|
470
|
+
}
|
|
444
471
|
}
|
|
445
472
|
|
|
446
473
|
function toPayloadAttributesBellatrix(attributes: PayloadAttributes) {
|
|
@@ -502,36 +529,54 @@ function toPayloadStatusResult(payloadStatus: PayloadStatusSsz): PayloadStatusRe
|
|
|
502
529
|
}
|
|
503
530
|
}
|
|
504
531
|
|
|
505
|
-
function deserializeBodiesResponse(
|
|
532
|
+
function deserializeBodiesResponse(
|
|
533
|
+
fork: ForkName,
|
|
534
|
+
data: Uint8Array,
|
|
535
|
+
metrics?: EngineTransportMetrics | null
|
|
536
|
+
): (ExecutionPayloadBodyV2 | null)[] {
|
|
506
537
|
if (ForkSeq[fork] >= ForkSeq.gloas) {
|
|
507
|
-
return deserializeResponse(BodiesResponseGloas, data, "getPayloadBodiesByHash").entries.map((entry) =>
|
|
538
|
+
return deserializeResponse(BodiesResponseGloas, data, "getPayloadBodiesByHash", metrics).entries.map((entry) =>
|
|
508
539
|
entry.available ? entry.body : null
|
|
509
540
|
);
|
|
510
541
|
}
|
|
511
542
|
if (ForkSeq[fork] >= ForkSeq.capella) {
|
|
512
|
-
return deserializeResponse(BodiesResponseCapella, data, "getPayloadBodiesByHash").entries.map((entry) =>
|
|
543
|
+
return deserializeResponse(BodiesResponseCapella, data, "getPayloadBodiesByHash", metrics).entries.map((entry) =>
|
|
513
544
|
entry.available ? {...entry.body, blockAccessList: null} : null
|
|
514
545
|
);
|
|
515
546
|
}
|
|
516
|
-
return deserializeResponse(BodiesResponseBellatrix, data, "getPayloadBodiesByHash").entries.map((entry) =>
|
|
547
|
+
return deserializeResponse(BodiesResponseBellatrix, data, "getPayloadBodiesByHash", metrics).entries.map((entry) =>
|
|
517
548
|
entry.available ? {transactions: entry.body.transactions, withdrawals: null, blockAccessList: null} : null
|
|
518
549
|
);
|
|
519
550
|
}
|
|
520
551
|
|
|
521
552
|
/** A 2xx response that does not decode is an execution client error, not an unreachable client */
|
|
522
|
-
function deserializeResponse<T>(
|
|
553
|
+
function deserializeResponse<T>(
|
|
554
|
+
type: Type<T>,
|
|
555
|
+
body: Uint8Array,
|
|
556
|
+
routeId: string,
|
|
557
|
+
metrics?: EngineTransportMetrics | null,
|
|
558
|
+
opts?: {reuseBytes?: boolean}
|
|
559
|
+
): T {
|
|
560
|
+
const timer = metrics?.responseParseTime.startTimer({routeId, encoding: "ssz"});
|
|
523
561
|
try {
|
|
524
562
|
return type.deserialize(body, opts);
|
|
525
563
|
} catch (e) {
|
|
526
564
|
throw new EngineRestResponseError(routeId, `Invalid SSZ: ${(e as Error).message}`);
|
|
565
|
+
} finally {
|
|
566
|
+
timer?.();
|
|
527
567
|
}
|
|
528
568
|
}
|
|
529
569
|
|
|
530
|
-
function parseJson(body: Uint8Array, routeId: string): unknown {
|
|
570
|
+
function parseJson(body: Uint8Array, routeId: string, metrics?: EngineTransportMetrics | null): unknown {
|
|
571
|
+
let timer: EndTimer | undefined;
|
|
531
572
|
try {
|
|
532
|
-
|
|
573
|
+
const text = textDecoder.decode(body);
|
|
574
|
+
timer = metrics?.responseParseTime.startTimer({routeId, encoding: "json"});
|
|
575
|
+
return JSON.parse(text);
|
|
533
576
|
} catch (e) {
|
|
534
577
|
throw new EngineRestResponseError(routeId, `Invalid JSON: ${(e as Error).message}`);
|
|
578
|
+
} finally {
|
|
579
|
+
timer?.();
|
|
535
580
|
}
|
|
536
581
|
}
|
|
537
582
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {ForkName} from "@lodestar/params";
|
|
2
|
-
import {BlobsBundle, ExecutionPayload, ExecutionRequests, Root, RootHex, Wei} from "@lodestar/types";
|
|
2
|
+
import {BlobsBundle, ExecutionPayload, ExecutionRequests, Root, RootHex, Wei, bellatrix} from "@lodestar/types";
|
|
3
3
|
import {BlobAndProof} from "@lodestar/types/deneb";
|
|
4
4
|
import {BlobAndProofV2} from "@lodestar/types/fulu";
|
|
5
5
|
import {ClientVersion, ExecutionPayloadStatus, PayloadAttributes, PayloadId, VersionedHashes} from "./interface.js";
|
|
@@ -10,6 +10,8 @@ export type PayloadStatusResult = {
|
|
|
10
10
|
status: ExecutionPayloadStatus;
|
|
11
11
|
latestValidHash: RootHex | null;
|
|
12
12
|
validationError: string | null;
|
|
13
|
+
/** PayloadStatusV2: whether a VALID payload satisfied the inclusion list constraints, null otherwise */
|
|
14
|
+
inclusionListSatisfied?: boolean | null;
|
|
13
15
|
};
|
|
14
16
|
|
|
15
17
|
export type ForkchoiceUpdatedResult = {
|
|
@@ -38,7 +40,8 @@ export interface IEngineTransport {
|
|
|
38
40
|
executionPayload: ExecutionPayload,
|
|
39
41
|
versionedHashes?: VersionedHashes,
|
|
40
42
|
parentBeaconBlockRoot?: Root,
|
|
41
|
-
executionRequests?: ExecutionRequests
|
|
43
|
+
executionRequests?: ExecutionRequests,
|
|
44
|
+
inclusionListTransactions?: bellatrix.Transactions
|
|
42
45
|
): Promise<PayloadStatusResult>;
|
|
43
46
|
|
|
44
47
|
forkchoiceUpdated(
|
|
@@ -58,4 +61,6 @@ export interface IEngineTransport {
|
|
|
58
61
|
getBlobsV2(versionedHashes: VersionedHashes, buffers?: Uint8Array[]): Promise<BlobAndProofV2[] | null>;
|
|
59
62
|
|
|
60
63
|
getClientVersion(clientVersion: ClientVersion): Promise<ClientVersion[]>;
|
|
64
|
+
|
|
65
|
+
getInclusionList(): Promise<bellatrix.Transactions>;
|
|
61
66
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {Counter} from "@lodestar/utils";
|
|
1
|
+
import {Counter, Histogram} from "@lodestar/utils";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Common metrics type for both json rpc and ssz transport.
|
|
@@ -6,4 +6,5 @@ import {Counter} from "@lodestar/utils";
|
|
|
6
6
|
export type EngineTransportMetrics = {
|
|
7
7
|
requestBytes: Counter<{routeId: string}>;
|
|
8
8
|
responseBytes: Counter<{routeId: string}>;
|
|
9
|
+
responseParseTime: Histogram<{routeId: string; encoding: "json" | "ssz"}>;
|
|
9
10
|
};
|