@lodestar/beacon-node 1.51.0-dev.d422f387ac → 1.51.0-dev.dc21d14c20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/blocks/index.js +19 -61
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +17 -0
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts +6 -0
- package/lib/api/impl/validator/index.d.ts.map +1 -1
- package/lib/api/impl/validator/index.js +38 -25
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/GetBlobsTracker.d.ts +2 -2
- package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
- package/lib/chain/GetBlobsTracker.js +7 -31
- package/lib/chain/GetBlobsTracker.js.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts +11 -56
- package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.js +5 -241
- package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
- package/lib/chain/blocks/blockInput/errors.d.ts +2 -4
- package/lib/chain/blocks/blockInput/errors.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/errors.js.map +1 -1
- package/lib/chain/blocks/blockInput/types.d.ts +2 -18
- package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/types.js +0 -1
- package/lib/chain/blocks/blockInput/types.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +36 -53
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts +4 -0
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.js +24 -3
- package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
- package/lib/chain/blocks/index.d.ts.map +1 -1
- package/lib/chain/blocks/index.js +2 -2
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +4 -20
- package/lib/chain/blocks/types.d.ts.map +1 -1
- package/lib/chain/blocks/types.js +0 -24
- 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 +17 -6
- 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 +6 -1
- package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +7 -3
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.js +4 -0
- package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSignatures.js +10 -5
- package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.d.ts +0 -2
- package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.js +6 -24
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/bls/interface.d.ts +2 -0
- package/lib/chain/bls/interface.d.ts.map +1 -1
- package/lib/chain/bls/multithread/index.d.ts +1 -1
- package/lib/chain/bls/multithread/index.d.ts.map +1 -1
- package/lib/chain/bls/multithread/index.js +45 -17
- package/lib/chain/bls/multithread/index.js.map +1 -1
- package/lib/chain/chain.d.ts +24 -3
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +120 -39
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +7 -7
- package/lib/chain/emitter.d.ts.map +1 -1
- package/lib/chain/emitter.js +5 -5
- package/lib/chain/emitter.js.map +1 -1
- package/lib/chain/errors/executionPayloadEnvelope.d.ts +7 -0
- package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
- package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
- package/lib/chain/errors/index.d.ts +0 -1
- package/lib/chain/errors/index.d.ts.map +1 -1
- package/lib/chain/errors/index.js +0 -1
- package/lib/chain/errors/index.js.map +1 -1
- package/lib/chain/forkChoice/index.d.ts +11 -1
- package/lib/chain/forkChoice/index.d.ts.map +1 -1
- package/lib/chain/forkChoice/index.js +11 -0
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/forkChoiceExecutionEngine.d.ts +51 -0
- package/lib/chain/forkChoiceExecutionEngine.d.ts.map +1 -0
- package/lib/chain/forkChoiceExecutionEngine.js +117 -0
- package/lib/chain/forkChoiceExecutionEngine.js.map +1 -0
- package/lib/chain/interface.d.ts +7 -4
- package/lib/chain/interface.d.ts.map +1 -1
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts +17 -4
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.js +177 -37
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- 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/singleAttestationPool.d.ts +77 -0
- package/lib/chain/opPools/singleAttestationPool.d.ts.map +1 -0
- package/lib/chain/opPools/singleAttestationPool.js +209 -0
- package/lib/chain/opPools/singleAttestationPool.js.map +1 -0
- package/lib/chain/options.d.ts +5 -2
- package/lib/chain/options.d.ts.map +1 -1
- package/lib/chain/options.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +3 -2
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +3 -2
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/proposerTracker.d.ts +31 -0
- package/lib/chain/proposerTracker.d.ts.map +1 -0
- package/lib/chain/proposerTracker.js +75 -0
- package/lib/chain/proposerTracker.js.map +1 -0
- package/lib/chain/regen/interface.d.ts +1 -1
- package/lib/chain/regen/interface.d.ts.map +1 -1
- package/lib/chain/regen/queued.d.ts +1 -1
- package/lib/chain/regen/queued.d.ts.map +1 -1
- package/lib/chain/regen/queued.js +5 -3
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -14
- package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js +6 -65
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/validation/executionPayloadEnvelope.d.ts +6 -0
- package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/validation/executionPayloadEnvelope.js +53 -0
- package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
- package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
- package/lib/chain/validation/syncCommittee.js +16 -10
- package/lib/chain/validation/syncCommittee.js.map +1 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
- package/lib/chain/validation/syncCommitteeContributionAndProof.js +11 -0
- package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
- package/lib/chain/validatorMonitor.d.ts +1 -2
- package/lib/chain/validatorMonitor.d.ts.map +1 -1
- package/lib/chain/validatorMonitor.js +0 -3
- package/lib/chain/validatorMonitor.js.map +1 -1
- package/lib/db/repositories/blobSidecars.d.ts +0 -1
- package/lib/db/repositories/blobSidecars.d.ts.map +1 -1
- package/lib/db/repositories/blobSidecars.js +0 -1
- package/lib/db/repositories/blobSidecars.js.map +1 -1
- package/lib/execution/builder/apiClient.d.ts +14 -8
- package/lib/execution/builder/apiClient.d.ts.map +1 -1
- package/lib/execution/builder/apiClient.js +12 -10
- package/lib/execution/builder/apiClient.js.map +1 -1
- package/lib/execution/builder/http.d.ts +2 -0
- package/lib/execution/builder/http.d.ts.map +1 -1
- package/lib/execution/builder/http.js +2 -0
- package/lib/execution/builder/http.js.map +1 -1
- package/lib/execution/engine/http.d.ts +4 -6
- package/lib/execution/engine/http.d.ts.map +1 -1
- package/lib/execution/engine/http.js +8 -10
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +17 -5
- package/lib/execution/engine/interface.d.ts.map +1 -1
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/execution/engine/jsonRpcTransport.d.ts +2 -4
- package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
- package/lib/execution/engine/jsonRpcTransport.js +2 -12
- package/lib/execution/engine/jsonRpcTransport.js.map +1 -1
- package/lib/execution/engine/mock.d.ts +0 -1
- package/lib/execution/engine/mock.d.ts.map +1 -1
- package/lib/execution/engine/mock.js +0 -4
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/restTransport.d.ts +2 -4
- package/lib/execution/engine/restTransport.d.ts.map +1 -1
- package/lib/execution/engine/restTransport.js +1 -15
- package/lib/execution/engine/restTransport.js.map +1 -1
- package/lib/execution/engine/sszTypes.d.ts +0 -9
- package/lib/execution/engine/sszTypes.d.ts.map +1 -1
- package/lib/execution/engine/sszTypes.js +0 -5
- package/lib/execution/engine/sszTypes.js.map +1 -1
- package/lib/execution/engine/transport.d.ts +1 -14
- package/lib/execution/engine/transport.d.ts.map +1 -1
- package/lib/execution/engine/types.d.ts +0 -8
- package/lib/execution/engine/types.d.ts.map +1 -1
- package/lib/execution/engine/types.js +0 -8
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/execution/engine/utils.d.ts.map +1 -1
- package/lib/execution/engine/utils.js +3 -2
- package/lib/execution/engine/utils.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +0 -9
- package/lib/metrics/metrics/beacon.d.ts.map +1 -1
- package/lib/metrics/metrics/beacon.js +0 -30
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +27 -8
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +74 -18
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/metrics/server/http.js +5 -5
- package/lib/metrics/server/http.js.map +1 -1
- package/lib/network/core/networkCore.d.ts +2 -1
- package/lib/network/core/networkCore.d.ts.map +1 -1
- package/lib/network/core/networkCore.js +4 -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 -1
- 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 +4 -1
- package/lib/network/core/types.d.ts.map +1 -1
- package/lib/network/gossip/gossipsub.d.ts +1 -0
- package/lib/network/gossip/gossipsub.d.ts.map +1 -1
- package/lib/network/gossip/gossipsub.js +10 -0
- package/lib/network/gossip/gossipsub.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +1 -8
- package/lib/network/gossip/interface.d.ts.map +1 -1
- package/lib/network/gossip/interface.js +0 -1
- package/lib/network/gossip/interface.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +0 -16
- package/lib/network/gossip/topic.d.ts.map +1 -1
- package/lib/network/gossip/topic.js +0 -23
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +2 -5
- package/lib/network/interface.d.ts.map +1 -1
- package/lib/network/network.d.ts +6 -7
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +50 -37
- package/lib/network/network.js.map +1 -1
- package/lib/network/options.d.ts.map +1 -1
- package/lib/network/options.js +2 -0
- package/lib/network/options.js.map +1 -1
- package/lib/network/peers/peerManager.d.ts.map +1 -1
- package/lib/network/peers/peerManager.js +28 -1
- package/lib/network/peers/peerManager.js.map +1 -1
- package/lib/network/peers/utils/prioritizePeers.d.ts +4 -1
- package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -1
- package/lib/network/peers/utils/prioritizePeers.js +8 -16
- package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
- package/lib/network/peers/utils/subnetMap.d.ts +5 -2
- package/lib/network/peers/utils/subnetMap.d.ts.map +1 -1
- package/lib/network/peers/utils/subnetMap.js +6 -3
- package/lib/network/peers/utils/subnetMap.js.map +1 -1
- package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
- package/lib/network/processor/extractSlotRootFns.js +1 -8
- package/lib/network/processor/extractSlotRootFns.js.map +1 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +43 -123
- 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 +0 -6
- 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 +1 -5
- package/lib/network/processor/gossipValidatorFn.js.map +1 -1
- package/lib/network/processor/index.d.ts +6 -0
- package/lib/network/processor/index.d.ts.map +1 -1
- package/lib/network/processor/index.js +29 -4
- 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 +0 -3
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +2 -2
- package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
- package/lib/network/reqresp/handlers/index.js +1 -12
- package/lib/network/reqresp/handlers/index.js.map +1 -1
- package/lib/network/reqresp/protocols.d.ts +0 -2
- package/lib/network/reqresp/protocols.d.ts.map +1 -1
- package/lib/network/reqresp/protocols.js +0 -10
- 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 +1 -17
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/reqresp/types.d.ts +2 -8
- package/lib/network/reqresp/types.d.ts.map +1 -1
- package/lib/network/reqresp/types.js +1 -7
- package/lib/network/reqresp/types.js.map +1 -1
- package/lib/network/subnets/attnetsService.d.ts +35 -5
- package/lib/network/subnets/attnetsService.d.ts.map +1 -1
- package/lib/network/subnets/attnetsService.js +84 -6
- package/lib/network/subnets/attnetsService.js.map +1 -1
- package/lib/network/subnets/interface.d.ts +7 -0
- package/lib/network/subnets/interface.d.ts.map +1 -1
- package/lib/network/subnets/interface.js.map +1 -1
- package/lib/node/nodejs.d.ts +2 -0
- package/lib/node/nodejs.d.ts.map +1 -1
- package/lib/node/nodejs.js +37 -19
- package/lib/node/nodejs.js.map +1 -1
- package/lib/node/options.d.ts +3 -1
- package/lib/node/options.d.ts.map +1 -1
- package/lib/node/options.js +4 -2
- package/lib/node/options.js.map +1 -1
- package/lib/sync/range/batch.d.ts +2 -3
- package/lib/sync/range/batch.d.ts.map +1 -1
- package/lib/sync/range/batch.js +9 -22
- package/lib/sync/range/batch.js.map +1 -1
- package/lib/sync/range/chain.d.ts.map +1 -1
- package/lib/sync/range/chain.js +2 -15
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/sync.d.ts +8 -0
- package/lib/sync/sync.d.ts.map +1 -1
- package/lib/sync/sync.js +42 -22
- package/lib/sync/sync.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts.map +1 -1
- package/lib/sync/unknownBlock.js +1 -7
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/downloadByRange.d.ts +6 -34
- package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRange.js +24 -128
- package/lib/sync/utils/downloadByRange.js.map +1 -1
- package/lib/sync/utils/downloadByRoot.d.ts +2 -18
- package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRoot.js +14 -99
- package/lib/sync/utils/downloadByRoot.js.map +1 -1
- package/lib/util/blobs.d.ts +1 -7
- package/lib/util/blobs.d.ts.map +1 -1
- package/lib/util/blobs.js +0 -19
- package/lib/util/blobs.js.map +1 -1
- package/lib/util/execution.d.ts +3 -4
- package/lib/util/execution.d.ts.map +1 -1
- package/lib/util/execution.js +1 -73
- package/lib/util/execution.js.map +1 -1
- package/lib/util/sszBytes.d.ts +5 -1
- package/lib/util/sszBytes.d.ts.map +1 -1
- package/lib/util/sszBytes.js +34 -17
- package/lib/util/sszBytes.js.map +1 -1
- package/lib/util/types.d.ts +0 -5
- package/lib/util/types.d.ts.map +1 -1
- package/lib/util/types.js +1 -2
- package/lib/util/types.js.map +1 -1
- package/package.json +16 -16
- package/src/api/impl/beacon/blocks/index.ts +24 -64
- package/src/api/impl/beacon/pool/index.ts +26 -0
- package/src/api/impl/validator/index.ts +43 -29
- package/src/chain/GetBlobsTracker.ts +10 -39
- package/src/chain/blocks/blockInput/blockInput.ts +11 -343
- package/src/chain/blocks/blockInput/errors.ts +1 -2
- package/src/chain/blocks/blockInput/types.ts +2 -20
- package/src/chain/blocks/importBlock.ts +56 -72
- package/src/chain/blocks/importExecutionPayload.ts +42 -13
- package/src/chain/blocks/index.ts +5 -2
- package/src/chain/blocks/types.ts +5 -31
- package/src/chain/blocks/verifyBlock.ts +30 -16
- package/src/chain/blocks/verifyBlocksDataAvailability.ts +6 -1
- package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -6
- package/src/chain/blocks/verifyBlocksSanityChecks.ts +4 -1
- package/src/chain/blocks/verifyBlocksSignatures.ts +10 -5
- package/src/chain/blocks/writeBlockInputToDb.ts +6 -29
- package/src/chain/bls/interface.ts +2 -0
- package/src/chain/bls/multithread/index.ts +43 -19
- package/src/chain/chain.ts +135 -37
- package/src/chain/emitter.ts +8 -8
- package/src/chain/errors/executionPayloadEnvelope.ts +8 -0
- package/src/chain/errors/index.ts +0 -1
- package/src/chain/forkChoice/index.ts +11 -0
- package/src/chain/forkChoiceExecutionEngine.ts +183 -0
- package/src/chain/interface.ts +7 -3
- package/src/chain/opPools/aggregatedAttestationPool.ts +222 -35
- package/src/chain/opPools/index.ts +1 -0
- package/src/chain/opPools/singleAttestationPool.ts +287 -0
- package/src/chain/options.ts +5 -2
- package/src/chain/produceBlock/produceBlockBody.ts +7 -3
- package/src/chain/proposerTracker.ts +94 -0
- package/src/chain/regen/interface.ts +1 -1
- package/src/chain/regen/queued.ts +6 -4
- package/src/chain/seenCache/seenGossipBlockInput.ts +9 -93
- package/src/chain/validation/executionPayloadEnvelope.ts +68 -1
- package/src/chain/validation/syncCommittee.ts +31 -15
- package/src/chain/validation/syncCommitteeContributionAndProof.ts +13 -0
- package/src/chain/validatorMonitor.ts +0 -6
- package/src/db/repositories/blobSidecars.ts +0 -1
- package/src/execution/builder/apiClient.ts +16 -13
- package/src/execution/builder/http.ts +4 -0
- package/src/execution/engine/http.ts +19 -42
- package/src/execution/engine/interface.ts +18 -9
- package/src/execution/engine/jsonRpcTransport.ts +10 -22
- package/src/execution/engine/mock.ts +0 -7
- package/src/execution/engine/restTransport.ts +3 -22
- package/src/execution/engine/sszTypes.ts +0 -9
- package/src/execution/engine/transport.ts +8 -17
- package/src/execution/engine/types.ts +0 -17
- package/src/execution/engine/utils.ts +4 -2
- package/src/index.ts +1 -1
- package/src/metrics/metrics/beacon.ts +0 -30
- package/src/metrics/metrics/lodestar.ts +75 -18
- package/src/metrics/server/http.ts +5 -5
- package/src/network/core/networkCore.ts +6 -1
- package/src/network/core/networkCoreWorker.ts +1 -0
- package/src/network/core/networkCoreWorkerHandler.ts +4 -1
- package/src/network/core/types.ts +4 -1
- package/src/network/gossip/gossipsub.ts +11 -0
- package/src/network/gossip/interface.ts +0 -5
- package/src/network/gossip/topic.ts +0 -25
- package/src/network/interface.ts +0 -5
- package/src/network/network.ts +50 -60
- package/src/network/options.ts +2 -0
- package/src/network/peers/peerManager.ts +27 -2
- package/src/network/peers/utils/prioritizePeers.ts +14 -22
- package/src/network/peers/utils/subnetMap.ts +6 -3
- package/src/network/processor/extractSlotRootFns.ts +0 -9
- package/src/network/processor/gossipHandlers.ts +56 -156
- package/src/network/processor/gossipQueues/index.ts +0 -6
- package/src/network/processor/gossipValidatorFn.ts +0 -5
- package/src/network/processor/index.ts +25 -4
- package/src/network/reqresp/ReqRespBeaconNode.ts +0 -7
- package/src/network/reqresp/handlers/beaconBlocksByRange.ts +2 -2
- package/src/network/reqresp/handlers/index.ts +0 -17
- package/src/network/reqresp/protocols.ts +0 -12
- package/src/network/reqresp/rateLimit.ts +1 -17
- package/src/network/reqresp/types.ts +0 -13
- package/src/network/subnets/attnetsService.ts +94 -6
- package/src/network/subnets/interface.ts +7 -0
- package/src/node/nodejs.ts +34 -15
- package/src/node/options.ts +5 -1
- package/src/sync/range/batch.ts +9 -21
- package/src/sync/range/chain.ts +2 -14
- package/src/sync/sync.ts +43 -22
- package/src/sync/unknownBlock.ts +1 -8
- package/src/sync/utils/downloadByRange.ts +31 -230
- package/src/sync/utils/downloadByRoot.ts +15 -142
- package/src/util/blobs.ts +0 -34
- package/src/util/execution.ts +8 -102
- package/src/util/sszBytes.ts +40 -22
- package/src/util/types.ts +1 -8
- package/lib/chain/errors/blobSidecarError.d.ts +0 -108
- package/lib/chain/errors/blobSidecarError.d.ts.map +0 -1
- package/lib/chain/errors/blobSidecarError.js +0 -38
- package/lib/chain/errors/blobSidecarError.js.map +0 -1
- package/lib/chain/validation/blobSidecar.d.ts +0 -16
- package/lib/chain/validation/blobSidecar.d.ts.map +0 -1
- package/lib/chain/validation/blobSidecar.js +0 -276
- package/lib/chain/validation/blobSidecar.js.map +0 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +0 -9
- package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +0 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRange.js +0 -91
- package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +0 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts +0 -5
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +0 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +0 -46
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +0 -1
- package/src/chain/errors/blobSidecarError.ts +0 -70
- package/src/chain/validation/blobSidecar.ts +0 -357
- package/src/network/reqresp/handlers/blobSidecarsByRange.ts +0 -133
- package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +0 -69
package/src/network/network.ts
CHANGED
|
@@ -19,18 +19,18 @@ import {
|
|
|
19
19
|
SignedAggregateAndProof,
|
|
20
20
|
SignedBeaconBlock,
|
|
21
21
|
SingleAttestation,
|
|
22
|
+
Slot,
|
|
22
23
|
SlotRootHex,
|
|
23
24
|
SubnetID,
|
|
24
25
|
altair,
|
|
25
26
|
capella,
|
|
26
|
-
deneb,
|
|
27
27
|
fulu,
|
|
28
28
|
gloas,
|
|
29
29
|
heze,
|
|
30
30
|
isGloasDataColumnSidecar,
|
|
31
31
|
phase0,
|
|
32
32
|
} from "@lodestar/types";
|
|
33
|
-
import {prettyPrintIndices, sleep} from "@lodestar/utils";
|
|
33
|
+
import {defer, prettyPrintIndices, sleep} from "@lodestar/utils";
|
|
34
34
|
import {BlockInputSource} from "../chain/blocks/blockInput/types.js";
|
|
35
35
|
import {ChainEvent, IBeaconChain} from "../chain/index.js";
|
|
36
36
|
import {computeSubnetForDataColumnSidecar} from "../chain/validation/dataColumnSidecar.js";
|
|
@@ -43,7 +43,6 @@ import {PeerIdStr, peerIdToString} from "../util/peerId.js";
|
|
|
43
43
|
import {promiseAllMaybeAsync} from "../util/promises.js";
|
|
44
44
|
import {
|
|
45
45
|
BeaconBlocksByRootRequest,
|
|
46
|
-
BlobSidecarsByRootRequest,
|
|
47
46
|
DataColumnSidecarsByRootRequest,
|
|
48
47
|
ExecutionPayloadEnvelopesByRootRequest,
|
|
49
48
|
} from "../util/types.js";
|
|
@@ -128,6 +127,7 @@ export class Network implements INetwork {
|
|
|
128
127
|
|
|
129
128
|
private subscribedToCoreTopics = false;
|
|
130
129
|
private connectedPeersSyncMeta = new Map<PeerIdStr, Omit<PeerSyncMeta, "peerId">>();
|
|
130
|
+
private closePromise: Promise<void> | undefined;
|
|
131
131
|
|
|
132
132
|
constructor(modules: NetworkModules) {
|
|
133
133
|
this.peerId = peerIdFromPrivateKey(modules.privateKey);
|
|
@@ -145,17 +145,13 @@ export class Network implements INetwork {
|
|
|
145
145
|
this.events.on(NetworkEvent.peerConnected, this.onPeerConnected);
|
|
146
146
|
this.events.on(NetworkEvent.peerDisconnected, this.onPeerDisconnected);
|
|
147
147
|
this.chain.emitter.on(routes.events.EventType.head, this.onHead);
|
|
148
|
-
this.chain.emitter.on(routes.events.EventType.lightClientFinalityUpdate,
|
|
149
|
-
|
|
150
|
-
);
|
|
151
|
-
this.chain.emitter.on(routes.events.EventType.lightClientOptimisticUpdate, ({data}) =>
|
|
152
|
-
this.onLightClientOptimisticUpdate(data)
|
|
153
|
-
);
|
|
148
|
+
this.chain.emitter.on(routes.events.EventType.lightClientFinalityUpdate, this.onLightClientFinalityUpdate);
|
|
149
|
+
this.chain.emitter.on(routes.events.EventType.lightClientOptimisticUpdate, this.onLightClientOptimisticUpdate);
|
|
154
150
|
this.chain.emitter.on(ChainEvent.updateTargetCustodyGroupCount, this.onTargetGroupCountUpdated);
|
|
155
151
|
this.chain.emitter.on(ChainEvent.publishDataColumns, this.onPublishDataColumns);
|
|
156
|
-
this.chain.emitter.on(ChainEvent.publishBlobSidecars, this.onPublishBlobSidecars);
|
|
157
152
|
this.chain.emitter.on(ChainEvent.publishProposerSlashing, this.onPublishProposerSlashing);
|
|
158
153
|
this.chain.emitter.on(ChainEvent.updateStatus, this.onUpdateStatus);
|
|
154
|
+
this.chain.emitter.on(ChainEvent.localProposalSlots, this.onLocalProposalSlots);
|
|
159
155
|
}
|
|
160
156
|
|
|
161
157
|
static async init({
|
|
@@ -240,9 +236,16 @@ export class Network implements INetwork {
|
|
|
240
236
|
return this.controller.signal.aborted;
|
|
241
237
|
}
|
|
242
238
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
239
|
+
close(): Promise<void> {
|
|
240
|
+
if (this.closePromise !== undefined) return this.closePromise;
|
|
241
|
+
const completion = defer<void>();
|
|
242
|
+
this.closePromise = completion.promise;
|
|
243
|
+
void this.closeInternal().then(completion.resolve, completion.reject);
|
|
244
|
+
return this.closePromise;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
private async closeInternal(): Promise<void> {
|
|
248
|
+
this.controller.abort();
|
|
246
249
|
|
|
247
250
|
this.events.off(NetworkEvent.peerConnected, this.onPeerConnected);
|
|
248
251
|
this.events.off(NetworkEvent.peerDisconnected, this.onPeerDisconnected);
|
|
@@ -251,13 +254,15 @@ export class Network implements INetwork {
|
|
|
251
254
|
this.chain.emitter.off(routes.events.EventType.lightClientOptimisticUpdate, this.onLightClientOptimisticUpdate);
|
|
252
255
|
this.chain.emitter.off(ChainEvent.updateTargetCustodyGroupCount, this.onTargetGroupCountUpdated);
|
|
253
256
|
this.chain.emitter.off(ChainEvent.publishDataColumns, this.onPublishDataColumns);
|
|
254
|
-
this.chain.emitter.off(ChainEvent.publishBlobSidecars, this.onPublishBlobSidecars);
|
|
255
257
|
this.chain.emitter.off(ChainEvent.publishProposerSlashing, this.onPublishProposerSlashing);
|
|
256
258
|
this.chain.emitter.off(ChainEvent.updateStatus, this.onUpdateStatus);
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
this.
|
|
259
|
+
this.chain.emitter.off(ChainEvent.localProposalSlots, this.onLocalProposalSlots);
|
|
260
|
+
this.connectedPeersSyncMeta.clear();
|
|
261
|
+
this.subscribedToCoreTopics = false;
|
|
262
|
+
const results = await Promise.allSettled([this.networkProcessor.stop(), this.core.close()]);
|
|
263
|
+
for (const result of results) {
|
|
264
|
+
if (result.status === "rejected") throw result.reason;
|
|
265
|
+
}
|
|
261
266
|
this.logger.debug("network core closed");
|
|
262
267
|
}
|
|
263
268
|
|
|
@@ -279,6 +284,13 @@ export class Network implements INetwork {
|
|
|
279
284
|
return this.core.prepareBeaconCommitteeSubnets(subscriptions);
|
|
280
285
|
}
|
|
281
286
|
|
|
287
|
+
/** The core subscribes to all attestation subnets before these proposals, see `slotsToSubscribeBeforeProposalDuty` */
|
|
288
|
+
private onLocalProposalSlots = (proposalSlots: Slot[]): void => {
|
|
289
|
+
this.core.addLocalProposalSlots(proposalSlots).catch((e) => {
|
|
290
|
+
this.logger.debug("Error adding local proposal slots", {slots: proposalSlots.join(",")}, e as Error);
|
|
291
|
+
});
|
|
292
|
+
};
|
|
293
|
+
|
|
282
294
|
async prepareSyncCommitteeSubnets(subscriptions: CommitteeSubscription[]): Promise<void> {
|
|
283
295
|
return this.core.prepareSyncCommitteeSubnets(subscriptions);
|
|
284
296
|
}
|
|
@@ -333,6 +345,7 @@ export class Network implements INetwork {
|
|
|
333
345
|
async subscribeGossipCoreTopics(): Promise<void> {
|
|
334
346
|
if (!this.subscribedToCoreTopics) {
|
|
335
347
|
await this.core.subscribeGossipCoreTopics();
|
|
348
|
+
if (this.closed) return;
|
|
336
349
|
// Only mark subscribedToCoreTopics if worker resolved this call
|
|
337
350
|
this.subscribedToCoreTopics = true;
|
|
338
351
|
}
|
|
@@ -366,15 +379,6 @@ export class Network implements INetwork {
|
|
|
366
379
|
return this.publishGossip<GossipType.beacon_block>({type: GossipType.beacon_block, boundary}, signedBlock);
|
|
367
380
|
}
|
|
368
381
|
|
|
369
|
-
async publishBlobSidecar(blobSidecar: deneb.BlobSidecar): Promise<number> {
|
|
370
|
-
const epoch = computeEpochAtSlot(blobSidecar.signedBlockHeader.message.slot);
|
|
371
|
-
const boundary = this.config.getForkBoundaryAtEpoch(epoch);
|
|
372
|
-
|
|
373
|
-
const subnet = blobSidecar.index;
|
|
374
|
-
|
|
375
|
-
return this.publishGossip<GossipType.blob_sidecar>({type: GossipType.blob_sidecar, boundary, subnet}, blobSidecar);
|
|
376
|
-
}
|
|
377
|
-
|
|
378
382
|
async publishDataColumnSidecar(
|
|
379
383
|
dataColumnSidecar: DataColumnSidecar
|
|
380
384
|
): Promise<{sentPeers: number; alreadyPublished: boolean}> {
|
|
@@ -655,28 +659,6 @@ export class Network implements INetwork {
|
|
|
655
659
|
);
|
|
656
660
|
}
|
|
657
661
|
|
|
658
|
-
async sendBlobSidecarsByRange(
|
|
659
|
-
peerId: PeerIdStr,
|
|
660
|
-
request: deneb.BlobSidecarsByRangeRequest
|
|
661
|
-
): Promise<deneb.BlobSidecar[]> {
|
|
662
|
-
const epoch = computeEpochAtSlot(request.startSlot);
|
|
663
|
-
return collectMaxResponseTyped(
|
|
664
|
-
this.sendReqRespRequest(peerId, ReqRespMethod.BlobSidecarsByRange, [Version.V1], request),
|
|
665
|
-
// request's count represent the slots, so the actual max count received could be slots * blobs per slot
|
|
666
|
-
request.count * this.config.getMaxBlobsPerBlock(epoch),
|
|
667
|
-
responseSszTypeByMethod[ReqRespMethod.BlobSidecarsByRange]
|
|
668
|
-
);
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
async sendBlobSidecarsByRoot(peerId: PeerIdStr, request: BlobSidecarsByRootRequest): Promise<deneb.BlobSidecar[]> {
|
|
672
|
-
return collectMaxResponseTyped(
|
|
673
|
-
this.sendReqRespRequest(peerId, ReqRespMethod.BlobSidecarsByRoot, [Version.V1], request),
|
|
674
|
-
request.length,
|
|
675
|
-
responseSszTypeByMethod[ReqRespMethod.BlobSidecarsByRoot],
|
|
676
|
-
this.chain.serializedCache
|
|
677
|
-
);
|
|
678
|
-
}
|
|
679
|
-
|
|
680
662
|
async sendDataColumnSidecarsByRange(
|
|
681
663
|
peerId: PeerIdStr,
|
|
682
664
|
request: fulu.DataColumnSidecarsByRangeRequest
|
|
@@ -803,26 +785,32 @@ export class Network implements INetwork {
|
|
|
803
785
|
return this.core.writeDiscv5HeapSnapshot(prefix, dirpath);
|
|
804
786
|
}
|
|
805
787
|
|
|
806
|
-
private onLightClientFinalityUpdate = async (
|
|
788
|
+
private onLightClientFinalityUpdate = async ({
|
|
789
|
+
data: finalityUpdate,
|
|
790
|
+
}: routes.events.EventData[routes.events.EventType.lightClientFinalityUpdate]): Promise<void> => {
|
|
807
791
|
// TODO: Review is OK to remove if (this.hasAttachedSyncCommitteeMember())
|
|
808
792
|
|
|
809
793
|
try {
|
|
810
794
|
// messages SHOULD be broadcast after SYNC_MESSAGE_DUE_BPS of slot has transpired
|
|
811
795
|
// https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/altair/light-client/p2p-interface.md#sync-committee
|
|
812
796
|
await this.waitForSyncMessageCutoff(finalityUpdate.signatureSlot);
|
|
797
|
+
if (this.closed) return;
|
|
813
798
|
await this.publishLightClientFinalityUpdate(finalityUpdate);
|
|
814
799
|
} catch (e) {
|
|
815
800
|
this.logger.debug("Error on BeaconGossipHandler.onLightclientFinalityUpdate", {}, e as Error);
|
|
816
801
|
}
|
|
817
802
|
};
|
|
818
803
|
|
|
819
|
-
private onLightClientOptimisticUpdate = async (
|
|
804
|
+
private onLightClientOptimisticUpdate = async ({
|
|
805
|
+
data: optimisticUpdate,
|
|
806
|
+
}: routes.events.EventData[routes.events.EventType.lightClientOptimisticUpdate]): Promise<void> => {
|
|
820
807
|
// TODO: Review is OK to remove if (this.hasAttachedSyncCommitteeMember())
|
|
821
808
|
|
|
822
809
|
try {
|
|
823
810
|
// messages SHOULD be broadcast after SYNC_MESSAGE_DUE_BPS of slot has transpired
|
|
824
811
|
// https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/altair/light-client/p2p-interface.md#sync-committee
|
|
825
812
|
await this.waitForSyncMessageCutoff(optimisticUpdate.signatureSlot);
|
|
813
|
+
if (this.closed) return;
|
|
826
814
|
await this.publishLightClientOptimisticUpdate(optimisticUpdate);
|
|
827
815
|
} catch (e) {
|
|
828
816
|
this.logger.debug("Error on BeaconGossipHandler.onLightclientOptimisticUpdate", {}, e as Error);
|
|
@@ -859,20 +847,18 @@ export class Network implements INetwork {
|
|
|
859
847
|
this.connectedPeersSyncMeta.delete(data.peer);
|
|
860
848
|
};
|
|
861
849
|
|
|
862
|
-
private onTargetGroupCountUpdated = (count: number): void => {
|
|
863
|
-
|
|
864
|
-
this.
|
|
865
|
-
})
|
|
850
|
+
private onTargetGroupCountUpdated = async (count: number): Promise<void> => {
|
|
851
|
+
try {
|
|
852
|
+
await this.core.setTargetGroupCount(count);
|
|
853
|
+
} catch (error) {
|
|
854
|
+
this.logger.error("Error updating network custody group count", {count}, error as Error);
|
|
855
|
+
}
|
|
866
856
|
};
|
|
867
857
|
|
|
868
858
|
private onPublishDataColumns = async (sidecars: DataColumnSidecar[]): Promise<void> => {
|
|
869
859
|
await promiseAllMaybeAsync(sidecars.map((sidecar) => () => this.publishDataColumnSidecar(sidecar)));
|
|
870
860
|
};
|
|
871
861
|
|
|
872
|
-
private onPublishBlobSidecars = (sidecars: deneb.BlobSidecar[]): Promise<number[]> => {
|
|
873
|
-
return promiseAllMaybeAsync(sidecars.map((sidecar) => () => this.publishBlobSidecar(sidecar)));
|
|
874
|
-
};
|
|
875
|
-
|
|
876
862
|
private onPublishProposerSlashing = async (proposerSlashing: phase0.ProposerSlashing): Promise<void> => {
|
|
877
863
|
try {
|
|
878
864
|
await this.publishProposerSlashing(proposerSlashing);
|
|
@@ -886,6 +872,10 @@ export class Network implements INetwork {
|
|
|
886
872
|
};
|
|
887
873
|
|
|
888
874
|
private onUpdateStatus = async (): Promise<void> => {
|
|
889
|
-
|
|
875
|
+
try {
|
|
876
|
+
await this.core.updateStatus(this.chain.getStatus());
|
|
877
|
+
} catch (error) {
|
|
878
|
+
this.logger.error("Error updating network status", {}, error as Error);
|
|
879
|
+
}
|
|
890
880
|
};
|
|
891
881
|
}
|
package/src/network/options.ts
CHANGED
|
@@ -74,6 +74,8 @@ export const defaultNetworkOptions: NetworkOptions = {
|
|
|
74
74
|
maxYoungGenerationSizeMb: 152,
|
|
75
75
|
// subscribe 2 slots before aggregator dutied slot to get stable mesh peers as monitored on goerli
|
|
76
76
|
slotsToSubscribeBeforeAggregatorDuty: 2,
|
|
77
|
+
// up to the max number of attestations per block
|
|
78
|
+
slotsToSubscribeBeforeProposalDuty: 8,
|
|
77
79
|
// This will enable the light client server by default
|
|
78
80
|
disableLightClientServer: false,
|
|
79
81
|
quic: true,
|
|
@@ -14,6 +14,7 @@ import {NetworkCoreMetrics} from "../core/metrics.js";
|
|
|
14
14
|
import {LodestarDiscv5Opts} from "../discv5/types.js";
|
|
15
15
|
import {INetworkEventBus, NetworkEvent, NetworkEventData} from "../events.js";
|
|
16
16
|
import {Eth2Gossipsub} from "../gossip/gossipsub.js";
|
|
17
|
+
import {GossipType} from "../gossip/interface.js";
|
|
17
18
|
import {Libp2p} from "../interface.js";
|
|
18
19
|
import {SubnetType} from "../metadata.js";
|
|
19
20
|
import {NetworkConfig} from "../networkConfig.js";
|
|
@@ -577,6 +578,8 @@ export class PeerManager {
|
|
|
577
578
|
this.lastStatus = status;
|
|
578
579
|
this.metrics?.peerManager.starved.set(starved ? 1 : 0);
|
|
579
580
|
const forkSeq = this.config.getForkSeq(this.clock.currentSlot);
|
|
581
|
+
const boundary = this.config.getForkBoundaryAtEpoch(this.clock.currentEpoch);
|
|
582
|
+
const connectedHealthyPeerIds = new Set(connectedHealthyPeers.map((peer) => peer.toString()));
|
|
580
583
|
|
|
581
584
|
const prioritizeTimer = this.metrics?.peerManager.prioritizePeersDuration.startTimer();
|
|
582
585
|
const {peersToDisconnect, peersToConnect, attnetQueries, syncnetQueries, custodyGroupQueries} = prioritizePeers(
|
|
@@ -594,8 +597,30 @@ export class PeerManager {
|
|
|
594
597
|
};
|
|
595
598
|
}),
|
|
596
599
|
// Collect subnets which we need peers for in the current slot
|
|
597
|
-
this.attnetsService.getActiveSubnets()
|
|
598
|
-
|
|
600
|
+
this.attnetsService.getActiveSubnets().map((request) => {
|
|
601
|
+
const subscribers = this.gossipsub.getSubscribersWithOutboundStream({
|
|
602
|
+
type: GossipType.beacon_attestation,
|
|
603
|
+
boundary,
|
|
604
|
+
subnet: request.subnet,
|
|
605
|
+
});
|
|
606
|
+
let peerCount = 0;
|
|
607
|
+
for (const peer of subscribers) {
|
|
608
|
+
if (connectedHealthyPeerIds.has(peer)) peerCount++;
|
|
609
|
+
}
|
|
610
|
+
return {...request, peerCount};
|
|
611
|
+
}),
|
|
612
|
+
this.syncnetsService.getActiveSubnets().map((request) => {
|
|
613
|
+
const subscribers = this.gossipsub.getSubscribersWithOutboundStream({
|
|
614
|
+
type: GossipType.sync_committee,
|
|
615
|
+
boundary,
|
|
616
|
+
subnet: request.subnet,
|
|
617
|
+
});
|
|
618
|
+
let peerCount = 0;
|
|
619
|
+
for (const peer of subscribers) {
|
|
620
|
+
if (connectedHealthyPeerIds.has(peer)) peerCount++;
|
|
621
|
+
}
|
|
622
|
+
return {...request, peerCount};
|
|
623
|
+
}),
|
|
599
624
|
// ignore samplingGroups for pre-fulu forks
|
|
600
625
|
forkSeq >= ForkSeq.fulu ? this.networkConfig.custodyConfig.sampleGroups : undefined,
|
|
601
626
|
{
|
|
@@ -49,6 +49,8 @@ const syncnetsZero = BitArray.fromBitLen(SYNC_COMMITTEE_SUBNET_COUNT);
|
|
|
49
49
|
|
|
50
50
|
type SubnetDiscvQuery = {subnet: SubnetID; toSlot: number; maxPeersToDiscover: number};
|
|
51
51
|
|
|
52
|
+
export type RequestedSubnetWithPeerCount = RequestedSubnet & {peerCount: number};
|
|
53
|
+
|
|
52
54
|
/**
|
|
53
55
|
* A map of das custody group index to maxPeersToDiscover
|
|
54
56
|
*/
|
|
@@ -145,8 +147,8 @@ export function prioritizePeers(
|
|
|
145
147
|
samplingGroups: CustodyIndex[] | null;
|
|
146
148
|
score: number;
|
|
147
149
|
}[],
|
|
148
|
-
activeAttnets:
|
|
149
|
-
activeSyncnets:
|
|
150
|
+
activeAttnets: RequestedSubnetWithPeerCount[],
|
|
151
|
+
activeSyncnets: RequestedSubnetWithPeerCount[],
|
|
150
152
|
samplingGroups: CustodyIndex[] | undefined,
|
|
151
153
|
opts: PrioritizePeersOpts,
|
|
152
154
|
config: ChainConfig,
|
|
@@ -231,8 +233,8 @@ export function prioritizePeers(
|
|
|
231
233
|
*/
|
|
232
234
|
function requestSubnetPeers(
|
|
233
235
|
connectedPeers: PeerInfo[],
|
|
234
|
-
activeAttnets:
|
|
235
|
-
activeSyncnets:
|
|
236
|
+
activeAttnets: RequestedSubnetWithPeerCount[],
|
|
237
|
+
activeSyncnets: RequestedSubnetWithPeerCount[],
|
|
236
238
|
ourSamplingGroups: CustodyIndex[] | undefined,
|
|
237
239
|
opts: PrioritizePeersOpts,
|
|
238
240
|
config: ChainConfig,
|
|
@@ -252,54 +254,44 @@ function requestSubnetPeers(
|
|
|
252
254
|
|
|
253
255
|
// attnets, do we need queries for more peers
|
|
254
256
|
if (activeAttnets.length > 0) {
|
|
255
|
-
/** Map of peers per subnet, peer may be in multiple arrays */
|
|
256
|
-
const peersPerSubnet = new Map<number, number>();
|
|
257
|
-
|
|
258
257
|
for (const peer of connectedPeers) {
|
|
259
258
|
const trueBitIndices = peer.attnetsTrueBitIndices;
|
|
260
259
|
let dutyCount = 0;
|
|
261
260
|
for (const {subnet} of activeAttnets) {
|
|
262
261
|
if (trueBitIndices.includes(subnet)) {
|
|
263
262
|
dutyCount += 1;
|
|
264
|
-
peersPerSubnet.set(subnet, 1 + (peersPerSubnet.get(subnet) ?? 0));
|
|
265
263
|
}
|
|
266
264
|
}
|
|
267
265
|
dutiesByPeer.set(peer, dutyCount);
|
|
268
266
|
}
|
|
269
267
|
|
|
270
|
-
for (const {subnet, toSlot} of activeAttnets) {
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
if (peersInSubnet < targetSubnetPeers) {
|
|
268
|
+
for (const {subnet, toSlot, peerCount} of activeAttnets) {
|
|
269
|
+
metrics?.peerManager.peersPerActiveSubnet.observe({type: SubnetType.attnets}, peerCount);
|
|
270
|
+
if (peerCount < targetSubnetPeers) {
|
|
274
271
|
// We need more peers
|
|
275
|
-
attnetQueries.push({subnet, toSlot, maxPeersToDiscover: targetSubnetPeers -
|
|
272
|
+
attnetQueries.push({subnet, toSlot, maxPeersToDiscover: targetSubnetPeers - peerCount});
|
|
276
273
|
}
|
|
277
274
|
}
|
|
278
275
|
}
|
|
279
276
|
|
|
280
277
|
// syncnets, do we need queries for more peers
|
|
281
278
|
if (activeSyncnets.length > 0) {
|
|
282
|
-
/** Map of peers per subnet, peer may be in multiple arrays */
|
|
283
|
-
const peersPerSubnet = new Map<number, number>();
|
|
284
|
-
|
|
285
279
|
for (const peer of connectedPeers) {
|
|
286
280
|
const trueBitIndices = peer.syncnetsTrueBitIndices;
|
|
287
281
|
let dutyCount = dutiesByPeer.get(peer) ?? 0;
|
|
288
282
|
for (const {subnet} of activeSyncnets) {
|
|
289
283
|
if (trueBitIndices.includes(subnet)) {
|
|
290
284
|
dutyCount += 1;
|
|
291
|
-
peersPerSubnet.set(subnet, 1 + (peersPerSubnet.get(subnet) ?? 0));
|
|
292
285
|
}
|
|
293
286
|
}
|
|
294
287
|
dutiesByPeer.set(peer, dutyCount);
|
|
295
288
|
}
|
|
296
289
|
|
|
297
|
-
for (const {subnet, toSlot} of activeSyncnets) {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
if (peersInSubnet < targetSubnetPeers) {
|
|
290
|
+
for (const {subnet, toSlot, peerCount} of activeSyncnets) {
|
|
291
|
+
metrics?.peerManager.peersPerActiveSubnet.observe({type: SubnetType.syncnets}, peerCount);
|
|
292
|
+
if (peerCount < targetSubnetPeers) {
|
|
301
293
|
// We need more peers
|
|
302
|
-
syncnetQueries.push({subnet, toSlot, maxPeersToDiscover: targetSubnetPeers -
|
|
294
|
+
syncnetQueries.push({subnet, toSlot, maxPeersToDiscover: targetSubnetPeers - peerCount});
|
|
303
295
|
}
|
|
304
296
|
}
|
|
305
297
|
}
|
|
@@ -66,11 +66,14 @@ export class SubnetMap {
|
|
|
66
66
|
return subnets;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
/**
|
|
70
|
-
|
|
69
|
+
/**
|
|
70
|
+
* Return subnetIds with a `toSlot` less than `currentSlot`. Also deletes expired entries
|
|
71
|
+
* @param keep expired subnets for which it returns true are neither returned nor deleted
|
|
72
|
+
*/
|
|
73
|
+
getExpired(currentSlot: Slot, keep?: (subnet: SubnetID) => boolean): SubnetID[] {
|
|
71
74
|
const subnetIds: SubnetID[] = [];
|
|
72
75
|
for (const [subnet, toSlot] of this.subnets.entries()) {
|
|
73
|
-
if (toSlot < currentSlot) {
|
|
76
|
+
if (toSlot < currentSlot && keep?.(subnet) !== true) {
|
|
74
77
|
subnetIds.push(subnet);
|
|
75
78
|
this.subnets.delete(subnet);
|
|
76
79
|
}
|
|
@@ -6,7 +6,6 @@ import {
|
|
|
6
6
|
getBlockRootFromPayloadAttestationMessageSerialized,
|
|
7
7
|
getBlockRootFromSignedAggregateAndProofSerialized,
|
|
8
8
|
getSlotFromBeaconAttestationSerialized,
|
|
9
|
-
getSlotFromBlobSidecarSerialized,
|
|
10
9
|
getSlotFromDataColumnSidecarSerialized,
|
|
11
10
|
getSlotFromExecutionPayloadEnvelopeSerialized,
|
|
12
11
|
getSlotFromPayloadAttestationMessageSerialized,
|
|
@@ -49,14 +48,6 @@ export function createExtractBlockSlotRootFns(): ExtractSlotRootFns {
|
|
|
49
48
|
}
|
|
50
49
|
return {slot};
|
|
51
50
|
},
|
|
52
|
-
[GossipType.blob_sidecar]: (data: Uint8Array): SlotOptionalRoot | null => {
|
|
53
|
-
const slot = getSlotFromBlobSidecarSerialized(data);
|
|
54
|
-
|
|
55
|
-
if (slot === null) {
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
return {slot};
|
|
59
|
-
},
|
|
60
51
|
[GossipType.data_column_sidecar]: (data: Uint8Array, fork: ForkName): SlotOptionalRoot | null => {
|
|
61
52
|
const slot = getSlotFromDataColumnSidecarSerialized(data, fork);
|
|
62
53
|
|