@lodestar/beacon-node 1.43.0-dev.4358217e12 → 1.43.0-dev.4451fec75a
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 +10 -0
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +45 -2
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/api/impl/debug/index.d.ts.map +1 -1
- package/lib/api/impl/debug/index.js +0 -1
- package/lib/api/impl/debug/index.js.map +1 -1
- package/lib/api/impl/validator/index.d.ts.map +1 -1
- package/lib/api/impl/validator/index.js +68 -2
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.d.ts +3 -0
- package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
- package/lib/chain/blocks/blockInput/blockInput.js +4 -1
- package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
- package/lib/chain/blocks/importBlock.d.ts.map +1 -1
- package/lib/chain/blocks/importBlock.js +16 -31
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts +6 -1
- package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
- package/lib/chain/blocks/importExecutionPayload.js +19 -10
- 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 +35 -21
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +12 -1
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +28 -2
- package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
- package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +17 -0
- package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
- package/lib/chain/blocks/types.d.ts +2 -1
- package/lib/chain/blocks/types.d.ts.map +1 -1
- package/lib/chain/blocks/utils/chainSegment.d.ts +1 -3
- package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
- package/lib/chain/blocks/utils/chainSegment.js +34 -23
- package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.d.ts +2 -1
- package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +30 -12
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +0 -4
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -2
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts +2 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.js +16 -7
- package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts +2 -2
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -1
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +10 -6
- package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -1
- package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
- package/lib/chain/blocks/verifyPayloadsDataAvailability.js +8 -3
- package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
- package/lib/chain/chain.d.ts.map +1 -1
- package/lib/chain/chain.js +25 -8
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/emitter.d.ts +0 -11
- package/lib/chain/emitter.d.ts.map +1 -1
- package/lib/chain/emitter.js +0 -4
- package/lib/chain/emitter.js.map +1 -1
- package/lib/chain/errors/proposerPreferences.d.ts +8 -1
- package/lib/chain/errors/proposerPreferences.d.ts.map +1 -1
- package/lib/chain/errors/proposerPreferences.js +1 -0
- package/lib/chain/errors/proposerPreferences.js.map +1 -1
- package/lib/chain/initState.d.ts.map +1 -1
- package/lib/chain/initState.js +6 -1
- package/lib/chain/initState.js.map +1 -1
- package/lib/chain/lightClient/index.d.ts.map +1 -1
- package/lib/chain/lightClient/index.js +1 -1
- package/lib/chain/lightClient/index.js.map +1 -1
- package/lib/chain/opPools/payloadAttestationPool.d.ts +2 -1
- package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
- package/lib/chain/opPools/payloadAttestationPool.js +52 -10
- package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
- package/lib/chain/prepareNextSlot.d.ts.map +1 -1
- package/lib/chain/prepareNextSlot.js +16 -18
- package/lib/chain/prepareNextSlot.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.d.ts +12 -3
- package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +33 -20
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/regen/queued.d.ts.map +1 -1
- package/lib/chain/regen/queued.js +1 -4
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/regen/regen.d.ts.map +1 -1
- package/lib/chain/regen/regen.js +1 -4
- package/lib/chain/regen/regen.js.map +1 -1
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +21 -11
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +70 -20
- package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
- package/lib/chain/seenCache/seenProposerPreferences.d.ts +8 -7
- package/lib/chain/seenCache/seenProposerPreferences.d.ts.map +1 -1
- package/lib/chain/seenCache/seenProposerPreferences.js +11 -10
- package/lib/chain/seenCache/seenProposerPreferences.js.map +1 -1
- package/lib/chain/validation/executionPayloadBid.js +11 -8
- package/lib/chain/validation/executionPayloadBid.js.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.d.ts +1 -1
- package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
- package/lib/chain/validation/payloadAttestationMessage.js +5 -3
- package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
- package/lib/chain/validation/proposerPreferences.d.ts.map +1 -1
- package/lib/chain/validation/proposerPreferences.js +39 -17
- package/lib/chain/validation/proposerPreferences.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +4 -0
- package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
- package/lib/metrics/metrics/lodestar.js +5 -0
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +751 -2
- package/lib/network/gossip/topic.d.ts.map +1 -1
- package/lib/network/interface.d.ts +2 -0
- package/lib/network/interface.d.ts.map +1 -1
- package/lib/network/network.d.ts +2 -0
- package/lib/network/network.d.ts.map +1 -1
- package/lib/network/network.js +8 -0
- package/lib/network/network.js.map +1 -1
- package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
- package/lib/network/processor/gossipHandlers.js +61 -13
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/index.js +5 -5
- 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 +1 -1
- package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByHead.d.ts +9 -0
- package/lib/network/reqresp/handlers/beaconBlocksByHead.d.ts.map +1 -0
- package/lib/network/reqresp/handlers/beaconBlocksByHead.js +61 -0
- package/lib/network/reqresp/handlers/beaconBlocksByHead.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/interface.d.ts +1 -1
- package/lib/network/reqresp/interface.js +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 +4 -0
- package/lib/network/reqresp/rateLimit.js.map +1 -1
- package/lib/network/reqresp/score.d.ts.map +1 -1
- package/lib/network/reqresp/score.js +1 -0
- package/lib/network/reqresp/score.js.map +1 -1
- package/lib/network/reqresp/types.d.ts +3 -0
- 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/node/nodejs.js +2 -2
- package/lib/node/nodejs.js.map +1 -1
- package/lib/node/notifier.js +1 -7
- package/lib/node/notifier.js.map +1 -1
- package/lib/sync/constants.d.ts +7 -1
- package/lib/sync/constants.d.ts.map +1 -1
- package/lib/sync/constants.js +7 -4
- package/lib/sync/constants.js.map +1 -1
- package/lib/sync/range/batch.d.ts +43 -6
- package/lib/sync/range/batch.d.ts.map +1 -1
- package/lib/sync/range/batch.js +243 -44
- package/lib/sync/range/batch.js.map +1 -1
- package/lib/sync/range/chain.d.ts +16 -2
- package/lib/sync/range/chain.d.ts.map +1 -1
- package/lib/sync/range/chain.js +100 -9
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/range/range.d.ts.map +1 -1
- package/lib/sync/range/range.js +54 -5
- package/lib/sync/range/range.js.map +1 -1
- package/lib/sync/range/utils/peerBalancer.d.ts +2 -1
- package/lib/sync/range/utils/peerBalancer.d.ts.map +1 -1
- package/lib/sync/range/utils/peerBalancer.js +8 -4
- package/lib/sync/range/utils/peerBalancer.js.map +1 -1
- package/lib/sync/sync.d.ts.map +1 -1
- package/lib/sync/sync.js +13 -0
- package/lib/sync/sync.js.map +1 -1
- package/lib/sync/unknownBlock.d.ts +7 -2
- package/lib/sync/unknownBlock.d.ts.map +1 -1
- package/lib/sync/unknownBlock.js +127 -57
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/sync/utils/downloadByRange.d.ts +36 -9
- package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRange.js +106 -42
- package/lib/sync/utils/downloadByRange.js.map +1 -1
- package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
- package/lib/sync/utils/downloadByRoot.js +10 -0
- package/lib/sync/utils/downloadByRoot.js.map +1 -1
- package/lib/sync/utils/rateLimit.d.ts +2 -0
- package/lib/sync/utils/rateLimit.d.ts.map +1 -0
- package/lib/sync/utils/rateLimit.js +15 -0
- package/lib/sync/utils/rateLimit.js.map +1 -0
- package/lib/util/sszBytes.d.ts.map +1 -1
- package/lib/util/sszBytes.js +8 -6
- package/lib/util/sszBytes.js.map +1 -1
- package/package.json +15 -16
- package/src/api/impl/beacon/blocks/index.ts +13 -0
- package/src/api/impl/beacon/pool/index.ts +83 -1
- package/src/api/impl/debug/index.ts +0 -1
- package/src/api/impl/validator/index.ts +82 -1
- package/src/chain/blocks/blockInput/blockInput.ts +4 -1
- package/src/chain/blocks/importBlock.ts +16 -50
- package/src/chain/blocks/importExecutionPayload.ts +32 -15
- package/src/chain/blocks/index.ts +32 -15
- package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +37 -3
- package/src/chain/blocks/payloadEnvelopeInput/types.ts +18 -0
- package/src/chain/blocks/types.ts +2 -1
- package/src/chain/blocks/utils/chainSegment.ts +35 -24
- package/src/chain/blocks/verifyBlock.ts +45 -13
- package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +6 -4
- package/src/chain/blocks/verifyBlocksSanityChecks.ts +16 -6
- package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +14 -6
- package/src/chain/blocks/verifyPayloadsDataAvailability.ts +7 -4
- package/src/chain/chain.ts +29 -7
- package/src/chain/emitter.ts +0 -11
- package/src/chain/errors/proposerPreferences.ts +9 -1
- package/src/chain/initState.ts +9 -1
- package/src/chain/lightClient/index.ts +6 -6
- package/src/chain/opPools/payloadAttestationPool.ts +59 -10
- package/src/chain/prepareNextSlot.ts +21 -29
- package/src/chain/produceBlock/produceBlockBody.ts +41 -25
- package/src/chain/regen/queued.ts +2 -7
- package/src/chain/regen/regen.ts +2 -7
- package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +90 -24
- package/src/chain/seenCache/seenProposerPreferences.ts +14 -11
- package/src/chain/validation/executionPayloadBid.ts +11 -8
- package/src/chain/validation/payloadAttestationMessage.ts +6 -4
- package/src/chain/validation/proposerPreferences.ts +37 -18
- package/src/metrics/metrics/lodestar.ts +6 -0
- package/src/network/interface.ts +2 -0
- package/src/network/network.ts +23 -0
- package/src/network/processor/gossipHandlers.ts +75 -14
- package/src/network/processor/index.ts +5 -5
- package/src/network/reqresp/ReqRespBeaconNode.ts +1 -0
- package/src/network/reqresp/handlers/beaconBlocksByHead.ts +91 -0
- package/src/network/reqresp/handlers/index.ts +5 -0
- package/src/network/reqresp/interface.ts +1 -1
- package/src/network/reqresp/protocols.ts +6 -0
- package/src/network/reqresp/rateLimit.ts +4 -0
- package/src/network/reqresp/score.ts +1 -0
- package/src/network/reqresp/types.ts +5 -0
- package/src/node/nodejs.ts +2 -2
- package/src/node/notifier.ts +1 -8
- package/src/sync/constants.ts +8 -4
- package/src/sync/range/batch.ts +309 -51
- package/src/sync/range/chain.ts +119 -10
- package/src/sync/range/range.ts +68 -5
- package/src/sync/range/utils/peerBalancer.ts +9 -3
- package/src/sync/sync.ts +13 -1
- package/src/sync/unknownBlock.ts +157 -60
- package/src/sync/utils/downloadByRange.ts +174 -44
- package/src/sync/utils/downloadByRoot.ts +12 -0
- package/src/sync/utils/rateLimit.ts +16 -0
- package/src/util/sszBytes.ts +8 -6
package/lib/sync/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,6 +54,7 @@ export declare class BlockInputSync {
|
|
|
54
54
|
private readonly maxPendingBlocks;
|
|
55
55
|
private subscribedToNetworkEvents;
|
|
56
56
|
private peerBalancer;
|
|
57
|
+
private rateLimitBackoffTimeout;
|
|
57
58
|
constructor(config: ChainForkConfig, network: INetwork, chain: IBeaconChain, logger: Logger, metrics: Metrics | null, opts?: SyncOptions | undefined);
|
|
58
59
|
subscribeToNetwork(): void;
|
|
59
60
|
unsubscribeFromNetwork(): void;
|
|
@@ -73,13 +74,11 @@ export declare class BlockInputSync {
|
|
|
73
74
|
* Process an unknownBlockParent event and register the block in `pendingBlocks` Map.
|
|
74
75
|
*/
|
|
75
76
|
private onUnknownParent;
|
|
76
|
-
private onEnvelopeUnknownBlock;
|
|
77
77
|
private onBlockImported;
|
|
78
78
|
private onPayloadImported;
|
|
79
79
|
private addByRootHex;
|
|
80
80
|
private addByBlockInput;
|
|
81
81
|
private addByPayloadRootHex;
|
|
82
|
-
private addByPayloadEnvelope;
|
|
83
82
|
private addByPayloadInput;
|
|
84
83
|
private onPeerConnected;
|
|
85
84
|
private onPeerDisconnected;
|
|
@@ -94,6 +93,8 @@ export declare class BlockInputSync {
|
|
|
94
93
|
* Gather tip parent blocks with unknown parent and do a search for all of them
|
|
95
94
|
*/
|
|
96
95
|
private triggerUnknownBlockSearch;
|
|
96
|
+
private scheduleRateLimitBackoffRetry;
|
|
97
|
+
private clearRateLimitBackoffTimer;
|
|
97
98
|
private downloadBlock;
|
|
98
99
|
private processReadyBlock;
|
|
99
100
|
private reconcilePayloadEnvelope;
|
|
@@ -120,10 +121,13 @@ export declare class BlockInputSync {
|
|
|
120
121
|
export declare class UnknownBlockPeerBalancer {
|
|
121
122
|
readonly peersMeta: Map<PeerIdStr, PeerSyncMeta>;
|
|
122
123
|
readonly activeRequests: Map<PeerIdStr, number>;
|
|
124
|
+
readonly rateLimitedUntilByPeer: Map<PeerIdStr, number>;
|
|
123
125
|
constructor();
|
|
124
126
|
/** Trigger on each peer re-status */
|
|
125
127
|
onPeerConnected(peerId: PeerIdStr, syncMeta: PeerSyncMeta): void;
|
|
126
128
|
onPeerDisconnected(peerId: PeerIdStr): void;
|
|
129
|
+
onRateLimited(peerId: PeerIdStr, rateLimitedUntilMs: number): void;
|
|
130
|
+
getNextRateLimitRetryAt(pendingColumns?: Set<number>, excludedPeers?: Set<PeerIdStr>): number | null;
|
|
127
131
|
/**
|
|
128
132
|
* called from fetchBlockInput() where we only have block root and nothing else
|
|
129
133
|
* excludedPeers are the peers that we requested already so we don't want to try again
|
|
@@ -141,5 +145,6 @@ export declare class UnknownBlockPeerBalancer {
|
|
|
141
145
|
onRequestCompleted(peerId: PeerIdStr): void;
|
|
142
146
|
getTotalActiveRequests(): number;
|
|
143
147
|
private filterPeers;
|
|
148
|
+
private peerHasPendingColumns;
|
|
144
149
|
}
|
|
145
150
|
//# sourceMappingURL=unknownBlock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unknownBlock.d.ts","sourceRoot":"","sources":["../../src/sync/unknownBlock.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAKjD,OAAO,EAAC,MAAM,EAA+D,MAAM,iBAAiB,CAAC;AAMrG,OAAO,EAA6B,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAG3E,OAAO,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAC,QAAQ,EAAuD,MAAM,qBAAqB,CAAC;AACnG,OAAO,EAAC,YAAY,EAAC,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAK5C,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"unknownBlock.d.ts","sourceRoot":"","sources":["../../src/sync/unknownBlock.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAKjD,OAAO,EAAC,MAAM,EAA+D,MAAM,iBAAiB,CAAC;AAMrG,OAAO,EAA6B,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAG3E,OAAO,EAAC,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAC,QAAQ,EAAuD,MAAM,qBAAqB,CAAC;AACnG,OAAO,EAAC,YAAY,EAAC,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAK5C,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AAkDzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,cAAc;IAcvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IAlBxB;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+C;IAE7E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4C;IAC5E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAClC,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,uBAAuB,CAA6B;IAE5D,YACmB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,IAAI,CAAC,yBAAa,EAgBpC;IAED,kBAAkB,IAAI,IAAI,CAoBzB;IAED,sBAAsB,IAAI,IAAI,CAa7B;IAED,KAAK,IAAI,IAAI,CAEZ;IAED,qBAAqB,IAAI,OAAO,CAE/B;IAED;;OAEG;IACH,OAAO,CAAC,kBAAkB,CASxB;IAEF;;OAEG;IACH,OAAO,CAAC,sBAAsB,CAS5B;IAEF,OAAO,CAAC,0BAA0B,CAShC;IAEF,OAAO,CAAC,2BAA2B,CASjC;IAEF;;OAEG;IACH,OAAO,CAAC,eAAe,CA+BrB;IAEF,OAAO,CAAC,eAAe,CAIrB;IAEF,OAAO,CAAC,iBAAiB,CAKvB;IAEF,OAAO,CAAC,YAAY,CA8BlB;IAEF,OAAO,CAAC,eAAe,CA4BrB;IAEF,OAAO,CAAC,mBAAmB,CA4BzB;IAEF,OAAO,CAAC,iBAAiB,CAoBvB;IAEF,OAAO,CAAC,eAAe,CASrB;IAEF,OAAO,CAAC,kBAAkB,CAIxB;IAEF;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAyCjC,OAAO,CAAC,mBAAmB;IAuC3B,OAAO,CAAC,qBAAqB;IA0B7B;;OAEG;IACH,OAAO,CAAC,yBAAyB,CAwF/B;IAEF,OAAO,CAAC,6BAA6B;IAuBrC,OAAO,CAAC,0BAA0B;YAOpB,aAAa;YA2Fb,iBAAiB;YAuGjB,wBAAwB;YAgExB,eAAe;YA6Cf,cAAc;YAgFd,iBAAiB;YAsIjB,6BAA6B;YAmB7B,mBAAmB;YAiDnB,eAAe;IAgK7B;;;;;OAKG;IACH,OAAO,CAAC,gCAAgC;IA6BxC,OAAO,CAAC,kCAAkC;IAqB1C,OAAO,CAAC,oBAAoB;IAwB5B,OAAO,CAAC,sBAAsB;CAY/B;AAED;;GAEG;AACH,qBAAa,wBAAwB;IACnC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACjD,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,sBAAsB,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAExD,cAIC;IAED,qCAAqC;IACrC,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAM/D;IAED,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAI1C;IAED,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAEjE;IAED,uBAAuB,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,CA4BnG;IAED;;;;OAIG;IACH,yBAAyB,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,YAAY,GAAG,IAAI,CAezG;IAED;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEjC;IAED;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAE1C;IAED,sBAAsB,IAAI,MAAM,CAM/B;IAED,OAAO,CAAC,WAAW;IA8DnB,OAAO,CAAC,qBAAqB;CAO9B"}
|
package/lib/sync/unknownBlock.js
CHANGED
|
@@ -19,6 +19,7 @@ import { MAX_CONCURRENT_REQUESTS } from "./constants.js";
|
|
|
19
19
|
import { PendingBlockInputStatus, PendingBlockType, PendingPayloadInputStatus, getBlockInputSyncCacheItemRootHex, getBlockInputSyncCacheItemSlot, getPayloadSyncCacheItemRootHex, getPayloadSyncCacheItemSlot, isPendingBlockInput, isPendingPayloadEnvelope, isPendingPayloadInput, } from "./types.js";
|
|
20
20
|
import { DownloadByRootError, downloadByRoot } from "./utils/downloadByRoot.js";
|
|
21
21
|
import { getAllDescendantBlocks, getUnknownAndAncestorBlocks } from "./utils/pendingBlocksTree.js";
|
|
22
|
+
import { getRateLimitedUntilMs } from "./utils/rateLimit.js";
|
|
22
23
|
const MAX_ATTEMPTS_PER_BLOCK = 5;
|
|
23
24
|
const MAX_KNOWN_BAD_BLOCKS = 500;
|
|
24
25
|
const MAX_PENDING_BLOCKS = 100;
|
|
@@ -30,6 +31,12 @@ var FetchResult;
|
|
|
30
31
|
FetchResult["FailureTriedAllPeers"] = "failure_tried_all_peers";
|
|
31
32
|
FetchResult["FailureMaxAttempts"] = "failure_max_attempts";
|
|
32
33
|
})(FetchResult || (FetchResult = {}));
|
|
34
|
+
class UnknownBlockRateLimitedError extends Error {
|
|
35
|
+
constructor(message) {
|
|
36
|
+
super(message);
|
|
37
|
+
this.name = "UnknownBlockRateLimitedError";
|
|
38
|
+
}
|
|
39
|
+
}
|
|
33
40
|
/**
|
|
34
41
|
* BlockInputSync is a class that handles ReqResp to find blocks and data related to a specific blockRoot. The
|
|
35
42
|
* blockRoot may have been found via object gossip, or the API. Gossip objects that can trigger a search are block,
|
|
@@ -79,6 +86,7 @@ export class BlockInputSync {
|
|
|
79
86
|
maxPendingBlocks;
|
|
80
87
|
subscribedToNetworkEvents = false;
|
|
81
88
|
peerBalancer;
|
|
89
|
+
rateLimitBackoffTimeout;
|
|
82
90
|
constructor(config, network, chain, logger, metrics, opts) {
|
|
83
91
|
this.config = config;
|
|
84
92
|
this.network = network;
|
|
@@ -107,7 +115,6 @@ export class BlockInputSync {
|
|
|
107
115
|
this.chain.emitter.on(ChainEvent.incompleteBlockInput, this.onIncompleteBlockInput);
|
|
108
116
|
this.chain.emitter.on(ChainEvent.incompletePayloadEnvelope, this.onIncompletePayloadEnvelope);
|
|
109
117
|
this.chain.emitter.on(ChainEvent.blockUnknownParent, this.onUnknownParent);
|
|
110
|
-
this.chain.emitter.on(ChainEvent.envelopeUnknownBlock, this.onEnvelopeUnknownBlock);
|
|
111
118
|
this.chain.emitter.on(routes.events.EventType.block, this.onBlockImported);
|
|
112
119
|
this.chain.emitter.on(routes.events.EventType.executionPayload, this.onPayloadImported);
|
|
113
120
|
this.network.events.on(NetworkEvent.peerConnected, this.onPeerConnected);
|
|
@@ -117,12 +124,12 @@ export class BlockInputSync {
|
|
|
117
124
|
}
|
|
118
125
|
unsubscribeFromNetwork() {
|
|
119
126
|
this.logger.verbose("BlockInputSync disabled.");
|
|
127
|
+
this.clearRateLimitBackoffTimer();
|
|
120
128
|
this.chain.emitter.off(ChainEvent.unknownBlockRoot, this.onUnknownBlockRoot);
|
|
121
129
|
this.chain.emitter.off(ChainEvent.unknownEnvelopeBlockRoot, this.onUnknownEnvelopeBlockRoot);
|
|
122
130
|
this.chain.emitter.off(ChainEvent.incompleteBlockInput, this.onIncompleteBlockInput);
|
|
123
131
|
this.chain.emitter.off(ChainEvent.incompletePayloadEnvelope, this.onIncompletePayloadEnvelope);
|
|
124
132
|
this.chain.emitter.off(ChainEvent.blockUnknownParent, this.onUnknownParent);
|
|
125
|
-
this.chain.emitter.off(ChainEvent.envelopeUnknownBlock, this.onEnvelopeUnknownBlock);
|
|
126
133
|
this.chain.emitter.off(routes.events.EventType.block, this.onBlockImported);
|
|
127
134
|
this.chain.emitter.off(routes.events.EventType.executionPayload, this.onPayloadImported);
|
|
128
135
|
this.network.events.off(NetworkEvent.peerConnected, this.onPeerConnected);
|
|
@@ -220,19 +227,6 @@ export class BlockInputSync {
|
|
|
220
227
|
this.logger.debug("Error handling unknownParent event", {}, e);
|
|
221
228
|
}
|
|
222
229
|
};
|
|
223
|
-
onEnvelopeUnknownBlock = (data) => {
|
|
224
|
-
try {
|
|
225
|
-
const blockRootHex = toRootHex(data.envelope.message.beaconBlockRoot);
|
|
226
|
-
this.addByRootHex(blockRootHex, data.peer);
|
|
227
|
-
this.addByPayloadEnvelope(data.envelope, data.peer);
|
|
228
|
-
this.triggerUnknownBlockSearch();
|
|
229
|
-
this.metrics?.blockInputSync.requests.inc({ type: PendingBlockType.UNKNOWN_DATA });
|
|
230
|
-
this.metrics?.blockInputSync.source.inc({ source: data.source });
|
|
231
|
-
}
|
|
232
|
-
catch (e) {
|
|
233
|
-
this.logger.debug("Error handling envelopeUnknownBlock event", {}, e);
|
|
234
|
-
}
|
|
235
|
-
};
|
|
236
230
|
onBlockImported = () => {
|
|
237
231
|
if (this.pendingPayloads.size > 0) {
|
|
238
232
|
this.triggerUnknownBlockSearch();
|
|
@@ -322,38 +316,6 @@ export class BlockInputSync {
|
|
|
322
316
|
}
|
|
323
317
|
return added;
|
|
324
318
|
};
|
|
325
|
-
addByPayloadEnvelope = (envelope, peerIdStr) => {
|
|
326
|
-
const rootHex = toRootHex(envelope.message.beaconBlockRoot);
|
|
327
|
-
const existingPendingPayload = this.pendingPayloads.get(rootHex);
|
|
328
|
-
let pendingPayload = this.pendingPayloads.get(rootHex);
|
|
329
|
-
if (!pendingPayload || !isPendingPayloadEnvelope(pendingPayload)) {
|
|
330
|
-
pendingPayload = {
|
|
331
|
-
status: PendingPayloadInputStatus.waitingForBlock,
|
|
332
|
-
envelope,
|
|
333
|
-
peerIdStrings: new Set(existingPendingPayload?.peerIdStrings ?? []),
|
|
334
|
-
timeAddedSec: existingPendingPayload?.timeAddedSec ?? Date.now() / 1000,
|
|
335
|
-
};
|
|
336
|
-
this.pendingPayloads.set(rootHex, pendingPayload);
|
|
337
|
-
this.logger.verbose("Added payload envelope to BlockInputSync.pendingPayloads", {
|
|
338
|
-
slot: envelope.message.payload.slotNumber,
|
|
339
|
-
root: rootHex,
|
|
340
|
-
});
|
|
341
|
-
}
|
|
342
|
-
else {
|
|
343
|
-
this.logger.debug("Overwriting pending payload envelope for root already waiting for block", {
|
|
344
|
-
slot: envelope.message.payload.slotNumber,
|
|
345
|
-
root: rootHex,
|
|
346
|
-
});
|
|
347
|
-
pendingPayload.envelope = envelope;
|
|
348
|
-
}
|
|
349
|
-
if (peerIdStr) {
|
|
350
|
-
pendingPayload.peerIdStrings.add(peerIdStr);
|
|
351
|
-
}
|
|
352
|
-
const prunedItemCount = pruneSetToMax(this.pendingPayloads, this.maxPendingBlocks);
|
|
353
|
-
if (prunedItemCount > 0) {
|
|
354
|
-
this.logger.verbose(`Pruned ${prunedItemCount} items from BlockInputSync.pendingPayloads`);
|
|
355
|
-
}
|
|
356
|
-
};
|
|
357
319
|
addByPayloadInput = (payloadInput, peerIdStr, envelope) => {
|
|
358
320
|
const pendingPayload = this.toPendingPayloadInput(payloadInput, this.pendingPayloads.get(payloadInput.blockRootHex), envelope);
|
|
359
321
|
if (peerIdStr) {
|
|
@@ -379,6 +341,7 @@ export class BlockInputSync {
|
|
|
379
341
|
onPeerDisconnected = (data) => {
|
|
380
342
|
const peerId = data.peer;
|
|
381
343
|
this.peerBalancer.onPeerDisconnected(peerId);
|
|
344
|
+
this.scheduleRateLimitBackoffRetry();
|
|
382
345
|
};
|
|
383
346
|
/**
|
|
384
347
|
* Post-gloas, a locally complete block can still be blocked on its parent's execution payload lineage.
|
|
@@ -469,7 +432,7 @@ export class BlockInputSync {
|
|
|
469
432
|
*/
|
|
470
433
|
triggerUnknownBlockSearch = () => {
|
|
471
434
|
// Cheap early stop to prevent calling the network.getConnectedPeers()
|
|
472
|
-
if (this.pendingBlocks.size === 0 && this.pendingPayloads.size === 0) {
|
|
435
|
+
if (!this.subscribedToNetworkEvents || (this.pendingBlocks.size === 0 && this.pendingPayloads.size === 0)) {
|
|
473
436
|
return;
|
|
474
437
|
}
|
|
475
438
|
// If the node loses all peers with pending unknown blocks or payloads, the sync will stall
|
|
@@ -547,6 +510,28 @@ export class BlockInputSync {
|
|
|
547
510
|
this.triggerUnknownBlockSearch();
|
|
548
511
|
}
|
|
549
512
|
};
|
|
513
|
+
scheduleRateLimitBackoffRetry() {
|
|
514
|
+
this.clearRateLimitBackoffTimer();
|
|
515
|
+
if (!this.subscribedToNetworkEvents || (this.pendingBlocks.size === 0 && this.pendingPayloads.size === 0)) {
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
const now = Date.now();
|
|
519
|
+
const retryAt = this.peerBalancer.getNextRateLimitRetryAt();
|
|
520
|
+
if (retryAt === null) {
|
|
521
|
+
return;
|
|
522
|
+
}
|
|
523
|
+
this.rateLimitBackoffTimeout = setTimeout(() => {
|
|
524
|
+
this.rateLimitBackoffTimeout = undefined;
|
|
525
|
+
this.triggerUnknownBlockSearch();
|
|
526
|
+
this.scheduleRateLimitBackoffRetry();
|
|
527
|
+
}, Math.max(0, retryAt - now));
|
|
528
|
+
}
|
|
529
|
+
clearRateLimitBackoffTimer() {
|
|
530
|
+
if (this.rateLimitBackoffTimeout !== undefined) {
|
|
531
|
+
clearTimeout(this.rateLimitBackoffTimeout);
|
|
532
|
+
this.rateLimitBackoffTimeout = undefined;
|
|
533
|
+
}
|
|
534
|
+
}
|
|
550
535
|
async downloadBlock(block) {
|
|
551
536
|
if (block.status !== PendingBlockInputStatus.pending) {
|
|
552
537
|
return;
|
|
@@ -612,6 +597,15 @@ export class BlockInputSync {
|
|
|
612
597
|
}
|
|
613
598
|
}
|
|
614
599
|
else {
|
|
600
|
+
if (res.err instanceof UnknownBlockRateLimitedError) {
|
|
601
|
+
const pendingBlock = this.pendingBlocks.get(rootHex);
|
|
602
|
+
if (pendingBlock) {
|
|
603
|
+
pendingBlock.status = PendingBlockInputStatus.pending;
|
|
604
|
+
}
|
|
605
|
+
this.logger.debug("Deferring unknown block download due to peer rate limit", logCtx, res.err);
|
|
606
|
+
this.scheduleRateLimitBackoffRetry();
|
|
607
|
+
return;
|
|
608
|
+
}
|
|
615
609
|
this.metrics?.blockInputSync.downloadedBlocksError.inc();
|
|
616
610
|
this.logger.debug("Ignoring unknown block root after many failed downloads", logCtx, res.err);
|
|
617
611
|
this.removeAndDownScoreAllDescendants(block);
|
|
@@ -876,12 +870,16 @@ export class BlockInputSync {
|
|
|
876
870
|
: this.chain.seenPayloadEnvelopeInputCache.get(rootHex);
|
|
877
871
|
let envelope = payloadInput?.hasPayloadEnvelope() ? payloadInput.getPayloadEnvelope() : undefined;
|
|
878
872
|
let i = 0;
|
|
873
|
+
let deferredByRateLimit = false;
|
|
879
874
|
while (i++ < this.getMaxDownloadAttempts()) {
|
|
880
875
|
const pendingColumns = payloadInput?.hasAllData()
|
|
881
876
|
? new Set()
|
|
882
877
|
: new Set(payloadInput?.getMissingSampledColumnMeta().missing ?? []);
|
|
883
878
|
const peerMeta = this.peerBalancer.bestPeerForPendingColumns(pendingColumns, excludedPeers);
|
|
884
879
|
if (peerMeta === null) {
|
|
880
|
+
if (this.peerBalancer.getNextRateLimitRetryAt(pendingColumns, excludedPeers) !== null) {
|
|
881
|
+
throw new UnknownBlockRateLimitedError(`Error fetching payload by root slot=${slot} root=${rootHex} after ${i}: peers with needed columns are rate-limited`);
|
|
882
|
+
}
|
|
885
883
|
throw Error(`Error fetching payload by root slot=${slot} root=${rootHex} after ${i}: cannot find peer with needed columns=${prettyPrintIndices(Array.from(pendingColumns))}`);
|
|
886
884
|
}
|
|
887
885
|
const { peerId, client: peerClient } = peerMeta;
|
|
@@ -943,7 +941,13 @@ export class BlockInputSync {
|
|
|
943
941
|
}
|
|
944
942
|
catch (e) {
|
|
945
943
|
this.logger.debug("Error downloading payload in BlockInputSync.fetchPayloadInput", { slot, rootHex, attempt: i, peer: peerId, peerClient }, e);
|
|
946
|
-
|
|
944
|
+
const rateLimitedUntilMs = getRateLimitedUntilMs(e);
|
|
945
|
+
if (rateLimitedUntilMs !== null) {
|
|
946
|
+
deferredByRateLimit = true;
|
|
947
|
+
this.peerBalancer.onRateLimited(peerId, rateLimitedUntilMs);
|
|
948
|
+
this.scheduleRateLimitBackoffRetry();
|
|
949
|
+
}
|
|
950
|
+
else if (e instanceof RequestError) {
|
|
947
951
|
switch (e.type.code) {
|
|
948
952
|
case RequestErrorCode.REQUEST_RATE_LIMITED:
|
|
949
953
|
case RequestErrorCode.REQUEST_TIMEOUT:
|
|
@@ -961,6 +965,9 @@ export class BlockInputSync {
|
|
|
961
965
|
this.peerBalancer.onRequestCompleted(peerId);
|
|
962
966
|
}
|
|
963
967
|
}
|
|
968
|
+
if (deferredByRateLimit && this.peerBalancer.getNextRateLimitRetryAt() !== null) {
|
|
969
|
+
throw new UnknownBlockRateLimitedError(`Error fetching payload with slot=${slot} root=${rootHex} after ${i - 1} attempts: peers are rate-limited`);
|
|
970
|
+
}
|
|
964
971
|
throw Error(`Error fetching payload with slot=${slot} root=${rootHex} after ${i - 1} attempts.`);
|
|
965
972
|
}
|
|
966
973
|
async fetchExecutionPayloadEnvelope(peerIdStr, blockRoot, rootHex) {
|
|
@@ -1017,12 +1024,16 @@ export class BlockInputSync {
|
|
|
1017
1024
|
this.metrics?.blockInputSync.fetchBegin.observe(this.chain.clock.secFromSlot(slot, fetchStartSec));
|
|
1018
1025
|
}
|
|
1019
1026
|
let i = 0;
|
|
1027
|
+
let deferredByRateLimit = false;
|
|
1020
1028
|
while (i++ < this.getMaxDownloadAttempts()) {
|
|
1021
1029
|
const pendingColumns = isPendingBlockInput(cacheItem) && isBlockInputColumns(cacheItem.blockInput)
|
|
1022
1030
|
? new Set(cacheItem.blockInput.getMissingSampledColumnMeta().missing)
|
|
1023
1031
|
: defaultPendingColumns;
|
|
1024
1032
|
const peerMeta = this.peerBalancer.bestPeerForPendingColumns(pendingColumns, excludedPeers);
|
|
1025
1033
|
if (peerMeta === null) {
|
|
1034
|
+
if (this.peerBalancer.getNextRateLimitRetryAt(pendingColumns, excludedPeers) !== null) {
|
|
1035
|
+
throw new UnknownBlockRateLimitedError(`Error fetching UnknownBlockRoot slot=${slot} root=${rootHex} after ${i}: peers with needed columns are rate-limited`);
|
|
1036
|
+
}
|
|
1026
1037
|
// no more peer with needed columns to try, throw error
|
|
1027
1038
|
const message = `Error fetching UnknownBlockRoot slot=${slot} root=${rootHex} after ${i}: cannot find peer with needed columns=${prettyPrintIndices(Array.from(pendingColumns))}`;
|
|
1028
1039
|
this.metrics?.blockInputSync.fetchTimeSec.observe({ result: FetchResult.FailureTriedAllPeers }, Date.now() / 1000 - fetchStartSec);
|
|
@@ -1070,14 +1081,24 @@ export class BlockInputSync {
|
|
|
1070
1081
|
else if (e instanceof RequestError) {
|
|
1071
1082
|
// should look into req_resp metrics in this case
|
|
1072
1083
|
downloadByRootMetrics?.error.inc({ code: "req_resp", client: peerClient });
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1084
|
+
const rateLimitedUntilMs = getRateLimitedUntilMs(e);
|
|
1085
|
+
if (rateLimitedUntilMs !== null) {
|
|
1086
|
+
deferredByRateLimit = true;
|
|
1087
|
+
this.peerBalancer.onRateLimited(peerId, rateLimitedUntilMs);
|
|
1088
|
+
this.scheduleRateLimitBackoffRetry();
|
|
1089
|
+
}
|
|
1090
|
+
else {
|
|
1091
|
+
switch (e.type.code) {
|
|
1092
|
+
case RequestErrorCode.REQUEST_RATE_LIMITED:
|
|
1093
|
+
case RequestErrorCode.RESP_RATE_LIMITED:
|
|
1094
|
+
case RequestErrorCode.REQUEST_SELF_RATE_LIMITED:
|
|
1095
|
+
case RequestErrorCode.REQUEST_TIMEOUT:
|
|
1096
|
+
// do not exclude peer for these errors
|
|
1097
|
+
break;
|
|
1098
|
+
default:
|
|
1099
|
+
excludedPeers.add(peerId);
|
|
1100
|
+
break;
|
|
1101
|
+
}
|
|
1081
1102
|
}
|
|
1082
1103
|
}
|
|
1083
1104
|
else {
|
|
@@ -1103,6 +1124,9 @@ export class BlockInputSync {
|
|
|
1103
1124
|
}
|
|
1104
1125
|
} // end while loop over peers
|
|
1105
1126
|
const message = `Error fetching BlockInput with slot=${slot} root=${rootHex} after ${i - 1} attempts.`;
|
|
1127
|
+
if (deferredByRateLimit && this.peerBalancer.getNextRateLimitRetryAt() !== null) {
|
|
1128
|
+
throw new UnknownBlockRateLimitedError(`${message} Peers are rate-limited.`);
|
|
1129
|
+
}
|
|
1106
1130
|
if (!isPendingBlockInput(cacheItem)) {
|
|
1107
1131
|
throw Error(`${message} No block and no data was found.`);
|
|
1108
1132
|
}
|
|
@@ -1210,9 +1234,11 @@ export class BlockInputSync {
|
|
|
1210
1234
|
export class UnknownBlockPeerBalancer {
|
|
1211
1235
|
peersMeta;
|
|
1212
1236
|
activeRequests;
|
|
1237
|
+
rateLimitedUntilByPeer;
|
|
1213
1238
|
constructor() {
|
|
1214
1239
|
this.peersMeta = new Map();
|
|
1215
1240
|
this.activeRequests = new Map();
|
|
1241
|
+
this.rateLimitedUntilByPeer = new Map();
|
|
1216
1242
|
}
|
|
1217
1243
|
/** Trigger on each peer re-status */
|
|
1218
1244
|
onPeerConnected(peerId, syncMeta) {
|
|
@@ -1224,6 +1250,33 @@ export class UnknownBlockPeerBalancer {
|
|
|
1224
1250
|
onPeerDisconnected(peerId) {
|
|
1225
1251
|
this.peersMeta.delete(peerId);
|
|
1226
1252
|
this.activeRequests.delete(peerId);
|
|
1253
|
+
this.rateLimitedUntilByPeer.delete(peerId);
|
|
1254
|
+
}
|
|
1255
|
+
onRateLimited(peerId, rateLimitedUntilMs) {
|
|
1256
|
+
this.rateLimitedUntilByPeer.set(peerId, rateLimitedUntilMs);
|
|
1257
|
+
}
|
|
1258
|
+
getNextRateLimitRetryAt(pendingColumns, excludedPeers) {
|
|
1259
|
+
const now = Date.now();
|
|
1260
|
+
let retryAt = null;
|
|
1261
|
+
for (const [peerId, rateLimitedUntil] of this.rateLimitedUntilByPeer.entries()) {
|
|
1262
|
+
if (rateLimitedUntil <= now) {
|
|
1263
|
+
this.rateLimitedUntilByPeer.delete(peerId);
|
|
1264
|
+
continue;
|
|
1265
|
+
}
|
|
1266
|
+
if (excludedPeers?.has(peerId)) {
|
|
1267
|
+
continue;
|
|
1268
|
+
}
|
|
1269
|
+
const syncMeta = this.peersMeta.get(peerId);
|
|
1270
|
+
if (syncMeta === undefined) {
|
|
1271
|
+
this.rateLimitedUntilByPeer.delete(peerId);
|
|
1272
|
+
continue;
|
|
1273
|
+
}
|
|
1274
|
+
if (pendingColumns !== undefined && !this.peerHasPendingColumns(syncMeta, pendingColumns)) {
|
|
1275
|
+
continue;
|
|
1276
|
+
}
|
|
1277
|
+
retryAt = Math.min(retryAt ?? rateLimitedUntil, rateLimitedUntil);
|
|
1278
|
+
}
|
|
1279
|
+
return retryAt;
|
|
1227
1280
|
}
|
|
1228
1281
|
/**
|
|
1229
1282
|
* called from fetchBlockInput() where we only have block root and nothing else
|
|
@@ -1263,6 +1316,7 @@ export class UnknownBlockPeerBalancer {
|
|
|
1263
1316
|
return totalActiveRequests;
|
|
1264
1317
|
}
|
|
1265
1318
|
filterPeers(pendingDataColumns, excludedPeers) {
|
|
1319
|
+
const now = Date.now();
|
|
1266
1320
|
let maxColumnCount = 0;
|
|
1267
1321
|
const considerPeers = [];
|
|
1268
1322
|
for (const [peerId, syncMeta] of this.peersMeta.entries()) {
|
|
@@ -1270,11 +1324,21 @@ export class UnknownBlockPeerBalancer {
|
|
|
1270
1324
|
// made request to this peer already
|
|
1271
1325
|
continue;
|
|
1272
1326
|
}
|
|
1327
|
+
const rateLimitedUntil = this.rateLimitedUntilByPeer.get(peerId);
|
|
1328
|
+
if (rateLimitedUntil !== undefined) {
|
|
1329
|
+
if (now < rateLimitedUntil) {
|
|
1330
|
+
continue;
|
|
1331
|
+
}
|
|
1332
|
+
this.rateLimitedUntilByPeer.delete(peerId);
|
|
1333
|
+
}
|
|
1273
1334
|
const activeRequests = this.activeRequests.get(peerId) ?? 0;
|
|
1274
1335
|
if (activeRequests >= MAX_CONCURRENT_REQUESTS) {
|
|
1275
1336
|
// should return peer with no more than MAX_CONCURRENT_REQUESTS active requests
|
|
1276
1337
|
continue;
|
|
1277
1338
|
}
|
|
1339
|
+
if (!this.peerHasPendingColumns(syncMeta, pendingDataColumns)) {
|
|
1340
|
+
continue;
|
|
1341
|
+
}
|
|
1278
1342
|
if (pendingDataColumns.size === 0) {
|
|
1279
1343
|
considerPeers.push({ peerId, columnCount: 0 });
|
|
1280
1344
|
continue;
|
|
@@ -1304,5 +1368,11 @@ export class UnknownBlockPeerBalancer {
|
|
|
1304
1368
|
}
|
|
1305
1369
|
return eligiblePeers;
|
|
1306
1370
|
}
|
|
1371
|
+
peerHasPendingColumns(syncMeta, pendingDataColumns) {
|
|
1372
|
+
if (pendingDataColumns.size === 0) {
|
|
1373
|
+
return true;
|
|
1374
|
+
}
|
|
1375
|
+
return syncMeta.custodyColumns.some((column) => pendingDataColumns.has(column));
|
|
1376
|
+
}
|
|
1307
1377
|
}
|
|
1308
1378
|
//# sourceMappingURL=unknownBlock.js.map
|