@lodestar/beacon-node 1.50.1 → 1.51.0-dev.09763aa8d2
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 +4 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.js +57 -4
- 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 +5 -5
- package/lib/chain/blocks/payloadEnvelopeProcessor.js +7 -7
- 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 +13 -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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +24 -145
- 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/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 +23 -0
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +56 -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/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 +2 -1
- package/lib/network/interface.d.ts.map +1 -1
- package/lib/network/network.d.ts +2 -1
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +8 -1
- package/lib/network/network.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 +73 -24
- 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/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/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 -31
- 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 +80 -4
- package/src/chain/blocks/index.ts +6 -2
- package/src/chain/blocks/payloadEnvelopeProcessor.ts +7 -7
- 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 +16 -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 +1 -1
- package/src/chain/opPools/attestationPool.ts +1 -1
- package/src/chain/opPools/inclusionListStore.ts +208 -0
- package/src/chain/opPools/index.ts +1 -0
- package/src/chain/opPools/payloadAttestationPool.ts +1 -1
- package/src/chain/opPools/syncCommitteeMessagePool.ts +1 -1
- package/src/chain/opPools/syncContributionAndProofPool.ts +1 -1
- 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 +40 -170
- 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/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 +58 -1
- package/src/monitoring/service.ts +1 -1
- 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 +2 -0
- package/src/network/network.ts +14 -1
- package/src/network/peers/utils/enrSubnetsDeserialize.ts +5 -2
- package/src/network/processor/gossipHandlers.ts +93 -26
- 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/unknownBlock.ts +50 -30
- package/src/util/clock.ts +3 -4
- package/src/util/queue/itemQueue.ts +1 -1
- package/src/util/sszBytes.ts +27 -14
|
@@ -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
|
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import {SerializedList, Type} from "@chainsafe/ssz";
|
|
1
2
|
import {
|
|
2
3
|
BUILDER_DEPOSIT_REQUEST_TYPE,
|
|
3
4
|
BUILDER_EXIT_REQUEST_TYPE,
|
|
@@ -8,6 +9,7 @@ import {
|
|
|
8
9
|
DEPOSIT_REQUEST_TYPE,
|
|
9
10
|
FIELD_ELEMENTS_PER_BLOB,
|
|
10
11
|
ForkName,
|
|
12
|
+
ForkPostElectra,
|
|
11
13
|
ForkSeq,
|
|
12
14
|
WITHDRAWAL_REQUEST_TYPE,
|
|
13
15
|
} from "@lodestar/params";
|
|
@@ -22,6 +24,7 @@ import {
|
|
|
22
24
|
deneb,
|
|
23
25
|
gloas,
|
|
24
26
|
ssz,
|
|
27
|
+
sszTypesFor,
|
|
25
28
|
} from "@lodestar/types";
|
|
26
29
|
import {BlobAndProof} from "@lodestar/types/deneb";
|
|
27
30
|
import {BlobAndProofV2} from "@lodestar/types/fulu";
|
|
@@ -53,6 +56,7 @@ export type EngineApiRpcParamTypes = {
|
|
|
53
56
|
engine_newPayloadV3: [ExecutionPayloadRpc, VersionedHashesRpc, DATA];
|
|
54
57
|
engine_newPayloadV4: [ExecutionPayloadRpc, VersionedHashesRpc, DATA, ExecutionRequestsRpc];
|
|
55
58
|
engine_newPayloadV5: [ExecutionPayloadRpc, VersionedHashesRpc, DATA, ExecutionRequestsRpc];
|
|
59
|
+
engine_newPayloadV6: [ExecutionPayloadRpc, VersionedHashesRpc, DATA, ExecutionRequestsRpc, InclusionListRpc];
|
|
56
60
|
/**
|
|
57
61
|
* 1. Object - Payload validity status with respect to the consensus rules:
|
|
58
62
|
* - blockHash: DATA, 32 Bytes - block hash value of the payload
|
|
@@ -74,6 +78,10 @@ export type EngineApiRpcParamTypes = {
|
|
|
74
78
|
forkChoiceData: {headBlockHash: DATA; safeBlockHash: DATA; finalizedBlockHash: DATA},
|
|
75
79
|
payloadAttributes?: PayloadAttributesRpc,
|
|
76
80
|
];
|
|
81
|
+
engine_forkchoiceUpdatedV5: [
|
|
82
|
+
forkChoiceData: {headBlockHash: DATA; safeBlockHash: DATA; finalizedBlockHash: DATA},
|
|
83
|
+
payloadAttributes?: PayloadAttributesRpc,
|
|
84
|
+
];
|
|
77
85
|
/**
|
|
78
86
|
* 1. payloadId: QUANTITY, 64 Bits - Identifier of the payload building process
|
|
79
87
|
*/
|
|
@@ -96,12 +104,16 @@ export type EngineApiRpcParamTypes = {
|
|
|
96
104
|
|
|
97
105
|
engine_getBlobsV1: [DATA[]];
|
|
98
106
|
engine_getBlobsV2: [DATA[]];
|
|
107
|
+
|
|
108
|
+
engine_getInclusionListV1: [];
|
|
99
109
|
};
|
|
100
110
|
|
|
101
111
|
export type PayloadStatus = {
|
|
102
112
|
status: ExecutionPayloadStatus;
|
|
103
113
|
latestValidHash: DATA | null;
|
|
104
114
|
validationError: string | null;
|
|
115
|
+
/** PayloadStatusV2: whether a VALID payload satisfied the inclusion list constraints, null otherwise */
|
|
116
|
+
inclusionListSatisfied?: boolean | null;
|
|
105
117
|
};
|
|
106
118
|
|
|
107
119
|
export type EngineApiRpcReturnTypes = {
|
|
@@ -114,6 +126,7 @@ export type EngineApiRpcReturnTypes = {
|
|
|
114
126
|
engine_newPayloadV3: PayloadStatus;
|
|
115
127
|
engine_newPayloadV4: PayloadStatus;
|
|
116
128
|
engine_newPayloadV5: PayloadStatus;
|
|
129
|
+
engine_newPayloadV6: PayloadStatus;
|
|
117
130
|
engine_forkchoiceUpdatedV1: {
|
|
118
131
|
payloadStatus: PayloadStatus;
|
|
119
132
|
payloadId: QUANTITY | null;
|
|
@@ -130,6 +143,10 @@ export type EngineApiRpcReturnTypes = {
|
|
|
130
143
|
payloadStatus: PayloadStatus;
|
|
131
144
|
payloadId: QUANTITY | null;
|
|
132
145
|
};
|
|
146
|
+
engine_forkchoiceUpdatedV5: {
|
|
147
|
+
payloadStatus: PayloadStatus;
|
|
148
|
+
payloadId: QUANTITY | null;
|
|
149
|
+
};
|
|
133
150
|
/**
|
|
134
151
|
* payloadId | Error: QUANTITY, 64 Bits - Identifier of the payload building process
|
|
135
152
|
*/
|
|
@@ -146,6 +163,8 @@ export type EngineApiRpcReturnTypes = {
|
|
|
146
163
|
|
|
147
164
|
engine_getBlobsV1: (BlobAndProofRpc | null)[];
|
|
148
165
|
engine_getBlobsV2: BlobAndProofV2Rpc[] | null;
|
|
166
|
+
|
|
167
|
+
engine_getInclusionListV1: InclusionListRpc;
|
|
149
168
|
};
|
|
150
169
|
|
|
151
170
|
type ExecutionPayloadRpcWithValue = {
|
|
@@ -164,7 +183,7 @@ export type ExecutionPayloadBodyRpc = {
|
|
|
164
183
|
};
|
|
165
184
|
|
|
166
185
|
export type ExecutionPayloadBody = {
|
|
167
|
-
transactions: bellatrix.
|
|
186
|
+
transactions: bellatrix.Transactions;
|
|
168
187
|
withdrawals: capella.Withdrawals | null;
|
|
169
188
|
};
|
|
170
189
|
|
|
@@ -260,8 +279,13 @@ export type PayloadAttributesRpc = {
|
|
|
260
279
|
slotNumber?: QUANTITY;
|
|
261
280
|
/** QUANTITY, 64 Bits - target value for the gasLimit field of the new payload (GLOAS, execution-apis#796) */
|
|
262
281
|
targetGasLimit?: QUANTITY;
|
|
282
|
+
/** Array of DATA - transactions that the built payload must include (PayloadAttributesV5, HEZE) */
|
|
283
|
+
inclusionListTransactions?: InclusionListRpc;
|
|
263
284
|
};
|
|
264
285
|
|
|
286
|
+
/** Array of DATA - array of transaction objects */
|
|
287
|
+
export type InclusionListRpc = DATA[];
|
|
288
|
+
|
|
265
289
|
export type ClientVersionRpc = {
|
|
266
290
|
/** ClientCode */
|
|
267
291
|
code: string;
|
|
@@ -294,7 +318,7 @@ export function serializeExecutionPayload(fork: ForkName, data: ExecutionPayload
|
|
|
294
318
|
extraData: bytesToData(data.extraData),
|
|
295
319
|
baseFeePerGas: numToQuantity(data.baseFeePerGas),
|
|
296
320
|
blockHash: bytesToData(data.blockHash),
|
|
297
|
-
transactions: data.transactions
|
|
321
|
+
transactions: Array.from(data.transactions, (tran) => bytesToData(tran)),
|
|
298
322
|
};
|
|
299
323
|
|
|
300
324
|
// Capella adds withdrawals to the ExecutionPayload
|
|
@@ -378,7 +402,7 @@ export function parseExecutionPayload(
|
|
|
378
402
|
extraData: dataToBytes(data.extraData, null),
|
|
379
403
|
baseFeePerGas: quantityToBigint(data.baseFeePerGas),
|
|
380
404
|
blockHash: dataToBytes(data.blockHash, 32),
|
|
381
|
-
transactions: data.transactions.map((tran) => dataToBytes(tran, null)),
|
|
405
|
+
transactions: SerializedList.fromArray(data.transactions.map((tran) => dataToBytes(tran, null))),
|
|
382
406
|
};
|
|
383
407
|
|
|
384
408
|
if (ForkSeq[fork] >= ForkSeq.capella) {
|
|
@@ -441,6 +465,9 @@ export function serializePayloadAttributes(data: PayloadAttributes): PayloadAttr
|
|
|
441
465
|
parentBeaconBlockRoot: data.parentBeaconBlockRoot ? bytesToData(data.parentBeaconBlockRoot) : undefined,
|
|
442
466
|
slotNumber: data.slotNumber !== undefined ? numToQuantity(data.slotNumber) : undefined,
|
|
443
467
|
targetGasLimit: data.targetGasLimit !== undefined ? numToQuantity(data.targetGasLimit) : undefined,
|
|
468
|
+
inclusionListTransactions: data.inclusionListTransactions
|
|
469
|
+
? serializeInclusionList(data.inclusionListTransactions)
|
|
470
|
+
: undefined,
|
|
444
471
|
};
|
|
445
472
|
}
|
|
446
473
|
|
|
@@ -448,6 +475,14 @@ export function serializeBeaconBlockRoot(data: Root): DATA {
|
|
|
448
475
|
return bytesToData(data);
|
|
449
476
|
}
|
|
450
477
|
|
|
478
|
+
export function serializeInclusionList(data: bellatrix.Transactions): InclusionListRpc {
|
|
479
|
+
return Array.from(data, (transaction) => bytesToData(transaction));
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
export function deserializeInclusionList(data: InclusionListRpc): bellatrix.Transactions {
|
|
483
|
+
return SerializedList.fromArray(data.map((transaction) => dataToBytes(transaction, null)));
|
|
484
|
+
}
|
|
485
|
+
|
|
451
486
|
export function deserializePayloadAttributes(data: PayloadAttributesRpc): PayloadAttributes {
|
|
452
487
|
return {
|
|
453
488
|
timestamp: quantityToNum(data.timestamp),
|
|
@@ -459,6 +494,9 @@ export function deserializePayloadAttributes(data: PayloadAttributesRpc): Payloa
|
|
|
459
494
|
parentBeaconBlockRoot: data.parentBeaconBlockRoot ? dataToBytes(data.parentBeaconBlockRoot, 32) : undefined,
|
|
460
495
|
slotNumber: data.slotNumber !== undefined ? quantityToNum(data.slotNumber) : undefined,
|
|
461
496
|
targetGasLimit: data.targetGasLimit !== undefined ? quantityToBigint(data.targetGasLimit) : undefined,
|
|
497
|
+
inclusionListTransactions: data.inclusionListTransactions
|
|
498
|
+
? deserializeInclusionList(data.inclusionListTransactions)
|
|
499
|
+
: undefined,
|
|
462
500
|
};
|
|
463
501
|
}
|
|
464
502
|
|
|
@@ -500,14 +538,15 @@ export function deserializeWithdrawal(serialized: WithdrawalRpc): capella.Withdr
|
|
|
500
538
|
}
|
|
501
539
|
|
|
502
540
|
/**
|
|
503
|
-
*
|
|
541
|
+
* Serialize requests prefixed with a single-byte requestType in one allocation
|
|
504
542
|
*/
|
|
505
|
-
function
|
|
506
|
-
const
|
|
507
|
-
|
|
508
|
-
|
|
543
|
+
function serializePrefixedRequests<T>(type: Type<T>, requests: T, requestType: ExecutionRequestType): Uint8Array {
|
|
544
|
+
const uint8Array = new Uint8Array(1 + type.value_serializedSize(requests));
|
|
545
|
+
const dataView = new DataView(uint8Array.buffer, uint8Array.byteOffset, uint8Array.byteLength);
|
|
546
|
+
uint8Array[0] = requestType;
|
|
547
|
+
type.value_serializeToBytes({uint8Array, dataView}, 1, requests);
|
|
509
548
|
|
|
510
|
-
return
|
|
549
|
+
return uint8Array;
|
|
511
550
|
}
|
|
512
551
|
|
|
513
552
|
/**
|
|
@@ -522,16 +561,16 @@ export function serializeExecutionRequestsToBytes(fork: ForkName, executionReque
|
|
|
522
561
|
const result: Uint8Array[] = [];
|
|
523
562
|
|
|
524
563
|
if (deposits.length !== 0) {
|
|
525
|
-
result.push(
|
|
564
|
+
result.push(serializePrefixedRequests(ssz.electra.DepositRequests, deposits, DEPOSIT_REQUEST_TYPE));
|
|
526
565
|
}
|
|
527
566
|
|
|
528
567
|
if (withdrawals.length !== 0) {
|
|
529
|
-
result.push(
|
|
568
|
+
result.push(serializePrefixedRequests(ssz.electra.WithdrawalRequests, withdrawals, WITHDRAWAL_REQUEST_TYPE));
|
|
530
569
|
}
|
|
531
570
|
|
|
532
571
|
if (consolidations.length !== 0) {
|
|
533
572
|
result.push(
|
|
534
|
-
|
|
573
|
+
serializePrefixedRequests(ssz.electra.ConsolidationRequests, consolidations, CONSOLIDATION_REQUEST_TYPE)
|
|
535
574
|
);
|
|
536
575
|
}
|
|
537
576
|
|
|
@@ -540,12 +579,12 @@ export function serializeExecutionRequestsToBytes(fork: ForkName, executionReque
|
|
|
540
579
|
|
|
541
580
|
if (builderDeposits.length !== 0) {
|
|
542
581
|
result.push(
|
|
543
|
-
|
|
582
|
+
serializePrefixedRequests(ssz.gloas.BuilderDepositRequests, builderDeposits, BUILDER_DEPOSIT_REQUEST_TYPE)
|
|
544
583
|
);
|
|
545
584
|
}
|
|
546
585
|
|
|
547
586
|
if (builderExits.length !== 0) {
|
|
548
|
-
result.push(
|
|
587
|
+
result.push(serializePrefixedRequests(ssz.gloas.BuilderExitRequests, builderExits, BUILDER_EXIT_REQUEST_TYPE));
|
|
549
588
|
}
|
|
550
589
|
}
|
|
551
590
|
|
|
@@ -591,7 +630,7 @@ export function deserializeExecutionRequestsFromBytes(fork: ForkName, serialized
|
|
|
591
630
|
|
|
592
631
|
switch (currentRequestType) {
|
|
593
632
|
case DEPOSIT_REQUEST_TYPE: {
|
|
594
|
-
result.deposits =
|
|
633
|
+
result.deposits = sszTypesFor(fork as ForkPostElectra).DepositRequests.deserialize(requests);
|
|
595
634
|
break;
|
|
596
635
|
}
|
|
597
636
|
case WITHDRAWAL_REQUEST_TYPE: {
|
|
@@ -633,7 +672,7 @@ export function deserializeExecutionRequests(fork: ForkName, serialized: Executi
|
|
|
633
672
|
export function deserializeExecutionPayloadBody(data: ExecutionPayloadBodyRpc | null): ExecutionPayloadBody | null {
|
|
634
673
|
return data
|
|
635
674
|
? {
|
|
636
|
-
transactions: data.transactions.map((tran) => dataToBytes(tran, null)),
|
|
675
|
+
transactions: SerializedList.fromArray(data.transactions.map((tran) => dataToBytes(tran, null))),
|
|
637
676
|
withdrawals: data.withdrawals ? data.withdrawals.map(deserializeWithdrawal) : null,
|
|
638
677
|
}
|
|
639
678
|
: null;
|
|
@@ -656,7 +695,7 @@ export function serializeExecutionPayloadBodyV2(data: ExecutionPayloadBodyV2 | n
|
|
|
656
695
|
export function serializeExecutionPayloadBody(data: ExecutionPayloadBody | null): ExecutionPayloadBodyRpc | null {
|
|
657
696
|
return data
|
|
658
697
|
? {
|
|
659
|
-
transactions: data.transactions
|
|
698
|
+
transactions: Array.from(data.transactions, (tran) => bytesToData(tran)),
|
|
660
699
|
withdrawals: data.withdrawals ? data.withdrawals.map(serializeWithdrawal) : null,
|
|
661
700
|
}
|
|
662
701
|
: null;
|
package/src/index.ts
CHANGED
|
@@ -6,6 +6,8 @@ export {persistAnchorState} from "./chain/index.js";
|
|
|
6
6
|
export {DbCPStateDatastore} from "./chain/stateCache/datastore/db.js";
|
|
7
7
|
export {FileCPStateDatastore} from "./chain/stateCache/datastore/file.js";
|
|
8
8
|
export {BeaconDb, type IBeaconDb} from "./db/index.js";
|
|
9
|
+
// Export execution engine to make it usable by builder
|
|
10
|
+
export {initializeExecutionEngine} from "./execution/index.js";
|
|
9
11
|
// Export metrics utilities to de-duplicate validator metrics
|
|
10
12
|
export {
|
|
11
13
|
type HttpMetricsServer,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {ProducedBlockSource} from "@lodestar/types";
|
|
2
2
|
import {BlockSelectionResult} from "../../api/impl/validator/index.js";
|
|
3
|
+
import {InclusionListSource} from "../../chain/blocks/types.js";
|
|
3
4
|
import {BlockProductionStep, PayloadPreparationType} from "../../chain/produceBlock/index.js";
|
|
4
5
|
import {RegistryMetricCreator} from "../utils/registryMetricCreator.js";
|
|
5
6
|
|
|
@@ -432,5 +433,41 @@ export function createBeaconMetrics(register: RegistryMetricCreator) {
|
|
|
432
433
|
name: "beacon_weak_head_detected_total",
|
|
433
434
|
help: "Detected current head block is weak. May reorg it out when proposing next slot. See proposer boost reorg for more",
|
|
434
435
|
}),
|
|
436
|
+
|
|
437
|
+
// HEZE:EIP-7805
|
|
438
|
+
inclusionListsReceived: register.counter<{source: InclusionListSource}>({
|
|
439
|
+
name: "beacon_inclusion_lists_received_total",
|
|
440
|
+
help: "Total number of received inclusion lists",
|
|
441
|
+
labelNames: ["source"],
|
|
442
|
+
}),
|
|
443
|
+
inclusionListsValid: register.counter<{source: InclusionListSource}>({
|
|
444
|
+
name: "beacon_inclusion_lists_valid_total",
|
|
445
|
+
help: "Total number of valid inclusion lists",
|
|
446
|
+
labelNames: ["source"],
|
|
447
|
+
}),
|
|
448
|
+
inclusionListsValidSize: register.counter({
|
|
449
|
+
name: "beacon_inclusion_lists_valid_size_bytes_total",
|
|
450
|
+
help: "Total size of valid inclusion lists in bytes",
|
|
451
|
+
}),
|
|
452
|
+
inclusionListTransactionsReceived: register.counter<{source: InclusionListSource}>({
|
|
453
|
+
name: "beacon_inclusion_list_transactions_received_total",
|
|
454
|
+
help: "Total number of transactions in received inclusion lists",
|
|
455
|
+
labelNames: ["source"],
|
|
456
|
+
}),
|
|
457
|
+
inclusionListsPublished: register.counter({
|
|
458
|
+
name: "beacon_inclusion_lists_published_total",
|
|
459
|
+
help: "Total number of published inclusion lists",
|
|
460
|
+
}),
|
|
461
|
+
inclusionListsValidationTime: register.histogram<{source: InclusionListSource}>({
|
|
462
|
+
name: "beacon_inclusion_lists_validation_time_seconds",
|
|
463
|
+
help: "Time taken to validate inclusion lists",
|
|
464
|
+
buckets: [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5],
|
|
465
|
+
labelNames: ["source"],
|
|
466
|
+
}),
|
|
467
|
+
inclusionListArrivalTime: register.histogram({
|
|
468
|
+
name: "beacon_inclusion_lists_arrival_time_seconds",
|
|
469
|
+
help: "Inclusion list arrival time since the beginning of slot",
|
|
470
|
+
buckets: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
|
|
471
|
+
}),
|
|
435
472
|
};
|
|
436
473
|
}
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
type InvalidAttestationData,
|
|
17
17
|
ScannedSlotsTerminationReason,
|
|
18
18
|
} from "../../chain/opPools/aggregatedAttestationPool.js";
|
|
19
|
+
import {InclusionListInsertOutcome} from "../../chain/opPools/inclusionListStore.js";
|
|
19
20
|
import {InsertOutcome} from "../../chain/opPools/types.js";
|
|
20
21
|
import {RegenCaller, RegenFnName} from "../../chain/regen/interface.js";
|
|
21
22
|
import {ReprocessStatus} from "../../chain/reprocess.js";
|
|
@@ -330,6 +331,31 @@ export function createLodestarMetrics(
|
|
|
330
331
|
}),
|
|
331
332
|
},
|
|
332
333
|
|
|
334
|
+
columnReconstructionQueue: {
|
|
335
|
+
length: register.gauge({
|
|
336
|
+
name: "lodestar_column_reconstruction_queue_length",
|
|
337
|
+
help: "Count of total column reconstruction queue length",
|
|
338
|
+
}),
|
|
339
|
+
droppedJobs: register.gauge({
|
|
340
|
+
name: "lodestar_column_reconstruction_queue_dropped_jobs_total",
|
|
341
|
+
help: "Count of total column reconstruction queue dropped jobs",
|
|
342
|
+
}),
|
|
343
|
+
jobTime: register.histogram({
|
|
344
|
+
name: "lodestar_column_reconstruction_queue_job_time_seconds",
|
|
345
|
+
help: "Time to process column reconstruction queue job in seconds",
|
|
346
|
+
buckets: [0.01, 0.1, 1, 4, 12],
|
|
347
|
+
}),
|
|
348
|
+
jobWaitTime: register.histogram({
|
|
349
|
+
name: "lodestar_column_reconstruction_queue_job_wait_time_seconds",
|
|
350
|
+
help: "Time from job added to the column reconstruction queue to starting in seconds",
|
|
351
|
+
buckets: [0.01, 0.1, 1, 4, 12],
|
|
352
|
+
}),
|
|
353
|
+
concurrency: register.gauge({
|
|
354
|
+
name: "lodestar_column_reconstruction_queue_concurrency",
|
|
355
|
+
help: "Current concurrency of column reconstruction queue",
|
|
356
|
+
}),
|
|
357
|
+
},
|
|
358
|
+
|
|
333
359
|
engineHttpProcessorQueue: {
|
|
334
360
|
length: register.gauge({
|
|
335
361
|
name: "lodestar_engine_http_processor_queue_length",
|
|
@@ -1177,11 +1203,31 @@ export function createLodestarMetrics(
|
|
|
1177
1203
|
help: "The total result of calling notifyForkchoiceUpdate execution engine api",
|
|
1178
1204
|
labelNames: ["result"],
|
|
1179
1205
|
}),
|
|
1206
|
+
getInclusionListV1Requests: register.counter({
|
|
1207
|
+
name: "lodestar_execution_engine_get_inclusion_list_v1_requests_total",
|
|
1208
|
+
help: "Total number of engine_getInclusionListV1 requests",
|
|
1209
|
+
}),
|
|
1210
|
+
getInclusionListV1RequestsDuration: register.histogram({
|
|
1211
|
+
name: "lodestar_execution_engine_get_inclusion_list_v1_duration_seconds",
|
|
1212
|
+
help: "Duration of engine_getInclusionListV1 requests",
|
|
1213
|
+
buckets: [0.05, 0.1, 0.25, 0.5, 1],
|
|
1214
|
+
}),
|
|
1180
1215
|
engineApiRequests: register.counter<{transport: string}>({
|
|
1181
1216
|
name: "lodestar_execution_engine_api_requests_total",
|
|
1182
1217
|
help: "Total engine API requests by transport",
|
|
1183
1218
|
labelNames: ["transport"],
|
|
1184
1219
|
}),
|
|
1220
|
+
inclusionListStore: {
|
|
1221
|
+
size: register.gauge({
|
|
1222
|
+
name: "lodestar_inclusion_list_store_size",
|
|
1223
|
+
help: "Current number of inclusion lists retained in the InclusionListStore",
|
|
1224
|
+
}),
|
|
1225
|
+
insertOutcome: register.counter<{insertOutcome: InclusionListInsertOutcome}>({
|
|
1226
|
+
name: "lodestar_inclusion_list_store_insert_outcome_total",
|
|
1227
|
+
help: "Total number of InclusionListStore insertions by outcome",
|
|
1228
|
+
labelNames: ["insertOutcome"],
|
|
1229
|
+
}),
|
|
1230
|
+
},
|
|
1185
1231
|
opPool: {
|
|
1186
1232
|
aggregatedAttestationPool: {
|
|
1187
1233
|
size: register.gauge({
|
|
@@ -1428,6 +1474,11 @@ export function createLodestarMetrics(
|
|
|
1428
1474
|
help: "Total number of InsertOutcome as a result of adding an execution payload bid from gossip to the pool",
|
|
1429
1475
|
labelNames: ["insertOutcome"],
|
|
1430
1476
|
}),
|
|
1477
|
+
apiInsertOutcome: register.counter<{insertOutcome: InsertOutcome}>({
|
|
1478
|
+
name: "lodestar_oppool_execution_payload_bid_pool_api_insert_outcome_total",
|
|
1479
|
+
help: "Total number of InsertOutcome as a result of adding an execution payload bid from api to the pool",
|
|
1480
|
+
labelNames: ["insertOutcome"],
|
|
1481
|
+
}),
|
|
1431
1482
|
apiValidationTime: register.histogram({
|
|
1432
1483
|
name: "lodestar_api_execution_payload_bid_validation_time_seconds",
|
|
1433
1484
|
help: "Time elapsed for signed execution payload bid validation - api path",
|
|
@@ -2061,11 +2112,17 @@ export function createLodestarMetrics(
|
|
|
2061
2112
|
}),
|
|
2062
2113
|
streamTime: register.histogram<{routeId: string}>({
|
|
2063
2114
|
name: "lodestar_execution_engine_http_client_stream_time_seconds",
|
|
2064
|
-
help: "ExecutionEngineHttp client -
|
|
2115
|
+
help: "ExecutionEngineHttp client - response body consumption time, including failures and excluding parsing",
|
|
2065
2116
|
labelNames: ["routeId"],
|
|
2066
2117
|
// Provide max resolution on problematic values around 1 second
|
|
2067
2118
|
buckets: [0.1, 0.5, 1, 2, 5, 15],
|
|
2068
2119
|
}),
|
|
2120
|
+
responseParseTime: register.histogram<{routeId: string; encoding: "json" | "ssz"}>({
|
|
2121
|
+
name: "lodestar_execution_engine_http_client_response_parse_time_seconds",
|
|
2122
|
+
help: "ExecutionEngineHttp client - JSON.parse or SSZ deserialize time, including failures, excluding body reads and subsequent value conversion",
|
|
2123
|
+
labelNames: ["routeId", "encoding"],
|
|
2124
|
+
buckets: [0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1],
|
|
2125
|
+
}),
|
|
2069
2126
|
requestErrors: register.gauge<{routeId: string}>({
|
|
2070
2127
|
name: "lodestar_execution_engine_http_client_request_errors_total",
|
|
2071
2128
|
help: "ExecutionEngineHttp client - total count of request errors",
|