@aztec/p2p 0.74.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2
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/dest/bootstrap/bootstrap.js +41 -29
- package/dest/client/factory.js +8 -10
- package/dest/client/index.js +0 -1
- package/dest/client/p2p_client.js +513 -507
- package/dest/config.js +44 -39
- package/dest/errors/reqresp.error.js +6 -10
- package/dest/index.js +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +6 -2
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +64 -32
- package/dest/mem_pools/attestation_pool/index.js +0 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +22 -19
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +22 -26
- package/dest/mem_pools/attestation_pool/mocks.js +10 -6
- package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.js +1 -2
- package/dest/mem_pools/epoch_proof_quote_pool/index.js +0 -1
- package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.js +5 -4
- package/dest/mem_pools/epoch_proof_quote_pool/test_utils.js +2 -3
- package/dest/mem_pools/index.js +1 -2
- package/dest/mem_pools/instrumentation.js +37 -42
- package/dest/mem_pools/interface.js +3 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +127 -134
- package/dest/mem_pools/tx_pool/index.js +0 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +45 -43
- package/dest/mem_pools/tx_pool/priority.js +1 -3
- package/dest/mem_pools/tx_pool/tx_pool.js +3 -2
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +107 -37
- package/dest/mocks/index.js +47 -38
- package/dest/msg_validators/attestation_validator/attestation_validator.js +3 -3
- package/dest/msg_validators/attestation_validator/index.js +0 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +2 -2
- package/dest/msg_validators/block_proposal_validator/index.js +0 -1
- package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.js +2 -2
- package/dest/msg_validators/epoch_proof_quote_validator/index.js +0 -1
- package/dest/msg_validators/index.js +0 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +9 -11
- package/dest/msg_validators/tx_validator/block_header_validator.js +17 -12
- package/dest/msg_validators/tx_validator/data_validator.js +41 -32
- package/dest/msg_validators/tx_validator/double_spend_validator.js +22 -14
- package/dest/msg_validators/tx_validator/index.js +0 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +29 -26
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +17 -12
- package/dest/services/data_store.js +57 -57
- package/dest/services/discv5/discV5_service.js +31 -23
- package/dest/services/dummy_service.js +40 -58
- package/dest/services/encoding.js +10 -9
- package/dest/services/index.js +0 -1
- package/dest/services/libp2p/libp2p_service.js +709 -695
- package/dest/services/peer-manager/metrics.js +14 -7
- package/dest/services/peer-manager/peer_manager.js +340 -342
- package/dest/services/peer-manager/peer_scoring.js +20 -18
- package/dest/services/reqresp/config.js +4 -5
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +35 -28
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +60 -59
- package/dest/services/reqresp/index.js +1 -3
- package/dest/services/reqresp/interface.js +25 -30
- package/dest/services/reqresp/metrics.js +23 -10
- package/dest/services/reqresp/protocols/block.js +1 -2
- package/dest/services/reqresp/protocols/goodbye.js +35 -40
- package/dest/services/reqresp/protocols/index.js +1 -3
- package/dest/services/reqresp/protocols/ping.js +1 -3
- package/dest/services/reqresp/protocols/status.js +1 -3
- package/dest/services/reqresp/protocols/tx.js +5 -8
- package/dest/services/reqresp/rate-limiter/index.js +0 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +42 -36
- package/dest/services/reqresp/rate-limiter/rate_limits.js +16 -17
- package/dest/services/reqresp/reqresp.js +461 -395
- package/dest/services/reqresp/status.js +51 -0
- package/dest/services/service.js +3 -4
- package/dest/services/types.js +16 -23
- package/dest/util.js +23 -34
- package/package.json +8 -8
- package/src/client/p2p_client.ts +159 -125
- package/src/mem_pools/index.ts +3 -3
- package/src/mem_pools/instrumentation.ts +3 -2
- package/src/services/reqresp/interface.ts +11 -0
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +3 -1
- package/src/services/reqresp/rate-limiter/rate_limits.ts +2 -2
- package/src/services/reqresp/reqresp.ts +111 -24
- package/src/services/reqresp/status.ts +59 -0
- package/dest/bootstrap/bootstrap.d.ts +0 -38
- package/dest/bootstrap/bootstrap.d.ts.map +0 -1
- package/dest/client/factory.d.ts +0 -19
- package/dest/client/factory.d.ts.map +0 -1
- package/dest/client/index.d.ts +0 -3
- package/dest/client/index.d.ts.map +0 -1
- package/dest/client/p2p_client.d.ts +0 -321
- package/dest/client/p2p_client.d.ts.map +0 -1
- package/dest/config.d.ts +0 -171
- package/dest/config.d.ts.map +0 -1
- package/dest/errors/reqresp.error.d.ts +0 -28
- package/dest/errors/reqresp.error.d.ts.map +0 -1
- package/dest/index.d.ts +0 -9
- package/dest/index.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +0 -57
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +0 -3
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/index.d.ts +0 -3
- package/dest/mem_pools/attestation_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -22
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -17
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/mocks.d.ts +0 -18
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +0 -1
- package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.d.ts +0 -7
- package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.d.ts.map +0 -1
- package/dest/mem_pools/epoch_proof_quote_pool/index.d.ts +0 -4
- package/dest/mem_pools/epoch_proof_quote_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.d.ts +0 -12
- package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.d.ts.map +0 -1
- package/dest/mem_pools/epoch_proof_quote_pool/test_utils.d.ts +0 -8
- package/dest/mem_pools/epoch_proof_quote_pool/test_utils.d.ts.map +0 -1
- package/dest/mem_pools/index.d.ts +0 -5
- package/dest/mem_pools/index.d.ts.map +0 -1
- package/dest/mem_pools/instrumentation.d.ts +0 -31
- package/dest/mem_pools/instrumentation.d.ts.map +0 -1
- package/dest/mem_pools/interface.d.ts +0 -13
- package/dest/mem_pools/interface.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -66
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.d.ts +0 -4
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -56
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.d.ts +0 -8
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -66
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
- package/dest/mocks/index.d.ts +0 -54
- package/dest/mocks/index.d.ts.map +0 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +0 -8
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +0 -1
- package/dest/msg_validators/attestation_validator/index.d.ts +0 -2
- package/dest/msg_validators/attestation_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -8
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
- package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.d.ts +0 -8
- package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.d.ts.map +0 -1
- package/dest/msg_validators/epoch_proof_quote_validator/index.d.ts +0 -2
- package/dest/msg_validators/epoch_proof_quote_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/index.d.ts +0 -4
- package/dest/msg_validators/index.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +0 -7
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +0 -11
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts +0 -6
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +0 -12
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/index.d.ts +0 -7
- package/dest/msg_validators/tx_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +0 -10
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +0 -8
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +0 -1
- package/dest/services/data_store.d.ts +0 -27
- package/dest/services/data_store.d.ts.map +0 -1
- package/dest/services/discv5/discV5_service.d.ts +0 -36
- package/dest/services/discv5/discV5_service.d.ts.map +0 -1
- package/dest/services/dummy_service.d.ts +0 -82
- package/dest/services/dummy_service.d.ts.map +0 -1
- package/dest/services/encoding.d.ts +0 -31
- package/dest/services/encoding.d.ts.map +0 -1
- package/dest/services/index.d.ts +0 -3
- package/dest/services/index.d.ts.map +0 -1
- package/dest/services/libp2p/libp2p_service.d.ts +0 -225
- package/dest/services/libp2p/libp2p_service.d.ts.map +0 -1
- package/dest/services/peer-manager/metrics.d.ts +0 -12
- package/dest/services/peer-manager/metrics.d.ts.map +0 -1
- package/dest/services/peer-manager/peer_manager.d.ts +0 -76
- package/dest/services/peer-manager/peer_manager.d.ts.map +0 -1
- package/dest/services/peer-manager/peer_scoring.d.ts +0 -28
- package/dest/services/peer-manager/peer_scoring.d.ts.map +0 -1
- package/dest/services/reqresp/config.d.ts +0 -16
- package/dest/services/reqresp/config.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -45
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +0 -61
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/index.d.ts +0 -6
- package/dest/services/reqresp/index.d.ts.map +0 -1
- package/dest/services/reqresp/interface.d.ts +0 -107
- package/dest/services/reqresp/interface.d.ts.map +0 -1
- package/dest/services/reqresp/metrics.d.ts +0 -15
- package/dest/services/reqresp/metrics.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/block.d.ts +0 -4
- package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/goodbye.d.ts +0 -51
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/index.d.ts +0 -9
- package/dest/services/reqresp/protocols/index.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/ping.d.ts +0 -9
- package/dest/services/reqresp/protocols/ping.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/status.d.ts +0 -9
- package/dest/services/reqresp/protocols/status.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/tx.d.ts +0 -13
- package/dest/services/reqresp/protocols/tx.d.ts.map +0 -1
- package/dest/services/reqresp/rate-limiter/index.d.ts +0 -2
- package/dest/services/reqresp/rate-limiter/index.d.ts.map +0 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +0 -102
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +0 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +0 -3
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +0 -1
- package/dest/services/reqresp/reqresp.d.ts +0 -161
- package/dest/services/reqresp/reqresp.d.ts.map +0 -1
- package/dest/services/service.d.ts +0 -85
- package/dest/services/service.d.ts.map +0 -1
- package/dest/services/types.d.ts +0 -38
- package/dest/services/types.d.ts.map +0 -1
- package/dest/util.d.ts +0 -53
- package/dest/util.d.ts.map +0 -1
|
@@ -4,29 +4,30 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
4
4
|
const DefaultPeerPenalties = {
|
|
5
5
|
[PeerErrorSeverity.LowToleranceError]: 50,
|
|
6
6
|
[PeerErrorSeverity.MidToleranceError]: 10,
|
|
7
|
-
[PeerErrorSeverity.HighToleranceError]: 2
|
|
7
|
+
[PeerErrorSeverity.HighToleranceError]: 2
|
|
8
8
|
};
|
|
9
|
-
export var PeerScoreState
|
|
10
|
-
(function (PeerScoreState) {
|
|
9
|
+
export var PeerScoreState = /*#__PURE__*/ function(PeerScoreState) {
|
|
11
10
|
PeerScoreState[PeerScoreState["Banned"] = 0] = "Banned";
|
|
12
11
|
PeerScoreState[PeerScoreState["Disconnect"] = 1] = "Disconnect";
|
|
13
12
|
PeerScoreState[PeerScoreState["Healthy"] = 2] = "Healthy";
|
|
14
|
-
|
|
13
|
+
return PeerScoreState;
|
|
14
|
+
}({});
|
|
15
15
|
// TODO: move into config / constants
|
|
16
16
|
const MIN_SCORE_BEFORE_BAN = -100;
|
|
17
17
|
const MIN_SCORE_BEFORE_DISCONNECT = -50;
|
|
18
18
|
export class PeerScoring {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
logger = createLogger('p2p:peer-scoring');
|
|
20
|
+
scores = new Map();
|
|
21
|
+
lastUpdateTime = new Map();
|
|
22
|
+
decayInterval = 1000 * 60;
|
|
23
|
+
decayFactor = 0.9;
|
|
24
|
+
peerPenalties;
|
|
25
|
+
constructor(config){
|
|
26
|
+
const orderedValues = config.peerPenaltyValues?.sort((a, b)=>a - b);
|
|
26
27
|
this.peerPenalties = {
|
|
27
28
|
[PeerErrorSeverity.HighToleranceError]: orderedValues?.[0] ?? DefaultPeerPenalties[PeerErrorSeverity.HighToleranceError],
|
|
28
29
|
[PeerErrorSeverity.MidToleranceError]: orderedValues?.[1] ?? DefaultPeerPenalties[PeerErrorSeverity.MidToleranceError],
|
|
29
|
-
[PeerErrorSeverity.LowToleranceError]: orderedValues?.[2] ?? DefaultPeerPenalties[PeerErrorSeverity.LowToleranceError]
|
|
30
|
+
[PeerErrorSeverity.LowToleranceError]: orderedValues?.[2] ?? DefaultPeerPenalties[PeerErrorSeverity.LowToleranceError]
|
|
30
31
|
};
|
|
31
32
|
}
|
|
32
33
|
penalizePeer(peerId, penalty) {
|
|
@@ -52,7 +53,7 @@ export class PeerScoring {
|
|
|
52
53
|
}
|
|
53
54
|
decayAllScores() {
|
|
54
55
|
const currentTime = Date.now();
|
|
55
|
-
for (const [peerId, lastUpdate] of this.lastUpdateTime.entries())
|
|
56
|
+
for (const [peerId, lastUpdate] of this.lastUpdateTime.entries()){
|
|
56
57
|
const timePassed = currentTime - lastUpdate;
|
|
57
58
|
const decayPeriods = Math.floor(timePassed / this.decayInterval);
|
|
58
59
|
if (decayPeriods > 0) {
|
|
@@ -70,15 +71,16 @@ export class PeerScoring {
|
|
|
70
71
|
// TODO(#11329): permanently store banned peers?
|
|
71
72
|
const score = this.getScore(peerId);
|
|
72
73
|
if (score < MIN_SCORE_BEFORE_BAN) {
|
|
73
|
-
return
|
|
74
|
+
return 0;
|
|
74
75
|
}
|
|
75
76
|
if (score < MIN_SCORE_BEFORE_DISCONNECT) {
|
|
76
|
-
return
|
|
77
|
+
return 1;
|
|
77
78
|
}
|
|
78
|
-
return
|
|
79
|
+
return 2;
|
|
79
80
|
}
|
|
80
81
|
getStats() {
|
|
81
|
-
return {
|
|
82
|
+
return {
|
|
83
|
+
medianScore: median(Array.from(this.scores.values())) ?? 0
|
|
84
|
+
};
|
|
82
85
|
}
|
|
83
86
|
}
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9zY29yaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3BlZXItbWFuYWdlci9wZWVyX3Njb3JpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU1yRCxNQUFNLG9CQUFvQixHQUFHO0lBQzNCLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFO0lBQ3pDLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFO0lBQ3pDLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO0NBQzFDLENBQUM7QUFFRixNQUFNLENBQU4sSUFBWSxjQUlYO0FBSkQsV0FBWSxjQUFjO0lBQ3hCLHVEQUFNLENBQUE7SUFDTiwrREFBVSxDQUFBO0lBQ1YseURBQU8sQ0FBQTtBQUNULENBQUMsRUFKVyxjQUFjLEtBQWQsY0FBYyxRQUl6QjtBQUVELHFDQUFxQztBQUNyQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxDQUFDO0FBQ2xDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFFeEMsTUFBTSxPQUFPLFdBQVc7SUFRdEIsWUFBWSxNQUFpQjtRQVByQixXQUFNLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDMUMsV0FBTSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3hDLG1CQUFjLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDaEQsa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsV0FBVztRQUN0QyxnQkFBVyxHQUFHLEdBQUcsQ0FBQztRQUl4QixNQUFNLGFBQWEs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
|
|
@@ -4,18 +4,17 @@ export const DEFAULT_OVERALL_REQUEST_TIMEOUT_MS = 4000;
|
|
|
4
4
|
// For use in tests.
|
|
5
5
|
export const DEFAULT_P2P_REQRESP_CONFIG = {
|
|
6
6
|
overallRequestTimeoutMs: DEFAULT_OVERALL_REQUEST_TIMEOUT_MS,
|
|
7
|
-
individualRequestTimeoutMs: DEFAULT_INDIVIDUAL_REQUEST_TIMEOUT_MS
|
|
7
|
+
individualRequestTimeoutMs: DEFAULT_INDIVIDUAL_REQUEST_TIMEOUT_MS
|
|
8
8
|
};
|
|
9
9
|
export const p2pReqRespConfigMappings = {
|
|
10
10
|
overallRequestTimeoutMs: {
|
|
11
11
|
env: 'P2P_REQRESP_OVERALL_REQUEST_TIMEOUT_MS',
|
|
12
12
|
description: 'The overall timeout for a request response operation.',
|
|
13
|
-
...numberConfigHelper(DEFAULT_OVERALL_REQUEST_TIMEOUT_MS)
|
|
13
|
+
...numberConfigHelper(DEFAULT_OVERALL_REQUEST_TIMEOUT_MS)
|
|
14
14
|
},
|
|
15
15
|
individualRequestTimeoutMs: {
|
|
16
16
|
env: 'P2P_REQRESP_INDIVIDUAL_REQUEST_TIMEOUT_MS',
|
|
17
17
|
description: 'The timeout for an individual request response peer interaction.',
|
|
18
|
-
...numberConfigHelper(DEFAULT_INDIVIDUAL_REQUEST_TIMEOUT_MS)
|
|
19
|
-
}
|
|
18
|
+
...numberConfigHelper(DEFAULT_INDIVIDUAL_REQUEST_TIMEOUT_MS)
|
|
19
|
+
}
|
|
20
20
|
};
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3JlcXJlc3AvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0Isa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVsRixNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxJQUFJLENBQUM7QUFDMUQsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsSUFBSSxDQUFDO0FBRXZELG9CQUFvQjtBQUNwQixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBcUI7SUFDMUQsdUJBQXVCLEVBQUUsa0NBQWtDO0lBQzNELDBCQUEwQixFQUFFLHFDQUFxQztDQUNsRSxDQUFDO0FBY0YsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQWtEO0lBQ3JGLHVCQUF1QixFQUFFO1FBQ3ZCLEdBQUcsRUFBRSx3Q0FBd0M7UUFDN0MsV0FBVyxFQUFFLHVEQUF1RDtRQUNwRSxHQUFHLGtCQUFrQixDQUFDLGtDQUFrQyxDQUFDO0tBQzFEO0lBQ0QsMEJBQTBCLEVBQUU7UUFDMUIsR0FBRyxFQUFFLDJDQUEyQztRQUNoRCxXQUFXLEVBQUUsa0VBQWtFO1FBQy9FLEdBQUcsa0JBQWtCLENBQUMscUNBQXFDLENBQUM7S0FDN0Q7Q0FDRixDQUFDIn0=
|
|
@@ -11,9 +11,12 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
11
11
|
*
|
|
12
12
|
* Each peer handles a bucket of consecutive requests.
|
|
13
13
|
* If a peer fails, it is replaced while maintaining the same bucket.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
*/ export class BatchConnectionSampler {
|
|
15
|
+
connectionSampler;
|
|
16
|
+
logger;
|
|
17
|
+
batch;
|
|
18
|
+
requestsPerPeer;
|
|
19
|
+
constructor(connectionSampler, batchSize, maxPeers){
|
|
17
20
|
this.connectionSampler = connectionSampler;
|
|
18
21
|
this.logger = createLogger('p2p:reqresp:batch-connection-sampler');
|
|
19
22
|
this.batch = [];
|
|
@@ -29,12 +32,11 @@ export class BatchConnectionSampler {
|
|
|
29
32
|
this.batch = this.connectionSampler.samplePeersBatch(maxPeers);
|
|
30
33
|
}
|
|
31
34
|
/**
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
getPeerForRequest(index) {
|
|
35
|
+
* Gets the peer responsible for handling a specific request index
|
|
36
|
+
*
|
|
37
|
+
* @param index - The request index
|
|
38
|
+
* @returns The peer assigned to handle this request
|
|
39
|
+
*/ getPeerForRequest(index) {
|
|
38
40
|
if (this.batch.length === 0) {
|
|
39
41
|
return undefined;
|
|
40
42
|
}
|
|
@@ -43,39 +45,44 @@ export class BatchConnectionSampler {
|
|
|
43
45
|
return this.batch[peerIndex];
|
|
44
46
|
}
|
|
45
47
|
/**
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const index = this.batch.findIndex(p => p === peerId);
|
|
48
|
+
* Removes a peer and replaces it with a new one, maintaining the same position
|
|
49
|
+
* in the batch array to keep request distribution consistent
|
|
50
|
+
*
|
|
51
|
+
* @param peerId - The peer to remove and replace
|
|
52
|
+
*/ removePeerAndReplace(peerId) {
|
|
53
|
+
const index = this.batch.findIndex((p)=>p === peerId);
|
|
53
54
|
if (index === -1) {
|
|
54
55
|
return;
|
|
55
56
|
}
|
|
56
|
-
const excluding = new Map([
|
|
57
|
+
const excluding = new Map([
|
|
58
|
+
[
|
|
59
|
+
peerId.toString(),
|
|
60
|
+
true
|
|
61
|
+
]
|
|
62
|
+
]);
|
|
57
63
|
const newPeer = this.connectionSampler.getPeer(excluding);
|
|
58
64
|
if (newPeer) {
|
|
59
65
|
this.batch[index] = newPeer;
|
|
60
|
-
this.logger.trace(`Replaced peer ${peerId} with ${newPeer}`, {
|
|
61
|
-
|
|
62
|
-
|
|
66
|
+
this.logger.trace(`Replaced peer ${peerId} with ${newPeer}`, {
|
|
67
|
+
peerId,
|
|
68
|
+
newPeer
|
|
69
|
+
});
|
|
70
|
+
} else {
|
|
63
71
|
// If we couldn't get a replacement, remove the peer and compact the array
|
|
64
72
|
this.batch.splice(index, 1);
|
|
65
|
-
this.logger.trace(`Removed peer ${peerId}`, {
|
|
73
|
+
this.logger.trace(`Removed peer ${peerId}`, {
|
|
74
|
+
peerId
|
|
75
|
+
});
|
|
66
76
|
}
|
|
67
77
|
}
|
|
68
78
|
/**
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
get activePeerCount() {
|
|
79
|
+
* Gets the number of active peers
|
|
80
|
+
*/ get activePeerCount() {
|
|
72
81
|
return this.batch.length;
|
|
73
82
|
}
|
|
74
83
|
/**
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
get requestsPerBucket() {
|
|
84
|
+
* Gets the number of requests each peer is assigned to handle
|
|
85
|
+
*/ get requestsPerBucket() {
|
|
78
86
|
return this.requestsPerPeer;
|
|
79
87
|
}
|
|
80
88
|
}
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hfY29ubmVjdGlvbl9zYW1wbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3JlcXJlc3AvY29ubmVjdGlvbi1zYW1wbGVyL2JhdGNoX2Nvbm5lY3Rpb25fc2FtcGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFNckQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyxZQUE2QixpQkFBb0MsRUFBRSxTQUFpQixFQUFFLFFBQWdCO1FBQXpFLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFKaEQsV0FBTSxHQUFHLFlBQVksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQzlELFVBQUssR0FBYSxFQUFFLENBQUM7UUFJcEMsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFckUsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlCQUFpQixDQUFDLEtBQWE7UUFDN0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsb0RBQW9EO1FBQ3BELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMvRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsb0JBQW9CLENBQUMsTUFBYztRQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQztRQUN0RCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUxRCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUM7WUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLE1BQU0sU0FBUyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7YUFBTSxDQUFDO1lBQ04sMEVBQTBFO1lBQzFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGIn0=
|
|
@@ -12,10 +12,18 @@ export class RandomSampler {
|
|
|
12
12
|
* We do this MAX_SAMPLE_ATTEMPTS times, if we still don't find a peer we just go for it.
|
|
13
13
|
*
|
|
14
14
|
* @dev Close must always be called on connections, else memory leak
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
sampler
|
|
15
|
+
*/ export class ConnectionSampler {
|
|
16
|
+
libp2p;
|
|
17
|
+
cleanupIntervalMs;
|
|
18
|
+
sampler;
|
|
19
|
+
logger;
|
|
20
|
+
cleanupInterval;
|
|
21
|
+
abortController;
|
|
22
|
+
activeConnectionsCount;
|
|
23
|
+
streams;
|
|
24
|
+
// Serial queue to ensure that we only dial one peer at a time
|
|
25
|
+
dialQueue;
|
|
26
|
+
constructor(libp2p, cleanupIntervalMs = 60000, sampler = new RandomSampler()){
|
|
19
27
|
this.libp2p = libp2p;
|
|
20
28
|
this.cleanupIntervalMs = cleanupIntervalMs;
|
|
21
29
|
this.sampler = sampler;
|
|
@@ -23,31 +31,28 @@ export class ConnectionSampler {
|
|
|
23
31
|
this.abortController = new AbortController();
|
|
24
32
|
this.activeConnectionsCount = new Map();
|
|
25
33
|
this.streams = new Map();
|
|
26
|
-
// Serial queue to ensure that we only dial one peer at a time
|
|
27
34
|
this.dialQueue = new SerialQueue();
|
|
28
|
-
this.cleanupInterval = setInterval(()
|
|
35
|
+
this.cleanupInterval = setInterval(()=>void this.cleanupStaleConnections(), this.cleanupIntervalMs);
|
|
29
36
|
this.dialQueue.start();
|
|
30
37
|
}
|
|
31
38
|
/**
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
async stop() {
|
|
39
|
+
* Stops the cleanup job and closes all active connections
|
|
40
|
+
*/ async stop() {
|
|
35
41
|
this.logger.info('Stopping connection sampler');
|
|
36
42
|
clearInterval(this.cleanupInterval);
|
|
37
43
|
this.abortController.abort();
|
|
38
44
|
await this.dialQueue.end();
|
|
39
45
|
// Close all active streams
|
|
40
|
-
const closePromises = Array.from(this.streams.keys()).map(streamId
|
|
46
|
+
const closePromises = Array.from(this.streams.keys()).map((streamId)=>this.close(streamId));
|
|
41
47
|
await Promise.all(closePromises);
|
|
42
48
|
this.logger.info('Connection sampler stopped');
|
|
43
49
|
}
|
|
44
50
|
/**
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
getPeer(excluding) {
|
|
51
|
+
*
|
|
52
|
+
* @param excluding - The peers to exclude from the sampling
|
|
53
|
+
* This is to prevent sampling with replacement
|
|
54
|
+
* @returns
|
|
55
|
+
*/ getPeer(excluding) {
|
|
51
56
|
// In libp2p getPeers performs a shallow copy, so this array can be sliced from safetly
|
|
52
57
|
const peers = this.libp2p.getPeers();
|
|
53
58
|
if (peers.length === 0) {
|
|
@@ -58,42 +63,38 @@ export class ConnectionSampler {
|
|
|
58
63
|
// Keep sampling while:
|
|
59
64
|
// - we haven't exceeded max attempts AND
|
|
60
65
|
// - either the peer has active connections OR is in the exclusion list
|
|
61
|
-
while
|
|
62
|
-
((this.activeConnectionsCount.get(peers[randomIndex]) ?? 0) > 0 ||
|
|
63
|
-
(excluding?.get(peers[randomIndex]?.toString()) ?? false))) {
|
|
66
|
+
while(attempts < MAX_SAMPLE_ATTEMPTS && ((this.activeConnectionsCount.get(peers[randomIndex]) ?? 0) > 0 || (excluding?.get(peers[randomIndex]?.toString()) ?? false))){
|
|
64
67
|
peers.splice(randomIndex, 1);
|
|
65
68
|
randomIndex = this.sampler.random(peers.length);
|
|
66
69
|
attempts++;
|
|
67
70
|
}
|
|
68
71
|
this.logger.trace(`Sampled peer in ${attempts} attempts`, {
|
|
69
72
|
attempts,
|
|
70
|
-
peer: peers[randomIndex]?.toString()
|
|
73
|
+
peer: peers[randomIndex]?.toString()
|
|
71
74
|
});
|
|
72
75
|
return peers[randomIndex];
|
|
73
76
|
}
|
|
74
77
|
/**
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
samplePeersBatch(numberToSample) {
|
|
78
|
+
* Samples a batch of unique peers from the libp2p node, prioritizing peers without active connections
|
|
79
|
+
*
|
|
80
|
+
* @param numberToSample - The number of peers to sample
|
|
81
|
+
* @returns Array of unique sampled peers, prioritizing those without active connections
|
|
82
|
+
*/ samplePeersBatch(numberToSample) {
|
|
81
83
|
const peers = this.libp2p.getPeers();
|
|
82
84
|
const sampledPeers = [];
|
|
83
85
|
const peersWithConnections = []; // Hold onto peers with active connections incase we need to sample more
|
|
84
|
-
for (const peer of peers)
|
|
86
|
+
for (const peer of peers){
|
|
85
87
|
const activeConnections = this.activeConnectionsCount.get(peer) ?? 0;
|
|
86
88
|
if (activeConnections === 0) {
|
|
87
89
|
if (sampledPeers.push(peer) === numberToSample) {
|
|
88
90
|
return sampledPeers;
|
|
89
91
|
}
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
+
} else {
|
|
92
93
|
peersWithConnections.push(peer);
|
|
93
94
|
}
|
|
94
95
|
}
|
|
95
96
|
// If we still need more peers, sample from those with connections
|
|
96
|
-
while
|
|
97
|
+
while(sampledPeers.length < numberToSample && peersWithConnections.length > 0){
|
|
97
98
|
const randomIndex = this.sampler.random(peersWithConnections.length);
|
|
98
99
|
const [peer] = peersWithConnections.splice(randomIndex, 1);
|
|
99
100
|
sampledPeers.push(peer);
|
|
@@ -101,38 +102,41 @@ export class ConnectionSampler {
|
|
|
101
102
|
this.logger.trace(`Batch sampled ${sampledPeers.length} unique peers`, {
|
|
102
103
|
peers: sampledPeers,
|
|
103
104
|
withoutConnections: sampledPeers.length - peersWithConnections.length,
|
|
104
|
-
withConnections: peersWithConnections.length
|
|
105
|
+
withConnections: peersWithConnections.length
|
|
105
106
|
});
|
|
106
107
|
return sampledPeers;
|
|
107
108
|
}
|
|
108
109
|
// Set of passthrough functions to keep track of active connections
|
|
109
110
|
/**
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
async dialProtocol(peerId, protocol) {
|
|
111
|
+
* Dials a protocol and returns the stream
|
|
112
|
+
*
|
|
113
|
+
* @param peerId - The peer id
|
|
114
|
+
* @param protocol - The protocol
|
|
115
|
+
* @returns The stream
|
|
116
|
+
*/ async dialProtocol(peerId, protocol) {
|
|
117
117
|
// Dialling at the same time can cause race conditions where two different streams
|
|
118
118
|
// end up with the same id, hence a serial queue
|
|
119
|
-
const stream = await this.dialQueue.put(()
|
|
120
|
-
|
|
119
|
+
const stream = await this.dialQueue.put(()=>this.libp2p.dialProtocol(peerId, protocol, {
|
|
120
|
+
signal: this.abortController.signal
|
|
121
|
+
}));
|
|
122
|
+
this.streams.set(stream.id, {
|
|
123
|
+
stream,
|
|
124
|
+
peerId
|
|
125
|
+
});
|
|
121
126
|
const updatedActiveConnectionsCount = (this.activeConnectionsCount.get(peerId) ?? 0) + 1;
|
|
122
127
|
this.activeConnectionsCount.set(peerId, updatedActiveConnectionsCount);
|
|
123
128
|
this.logger.trace(`Dialed protocol ${protocol} with peer ${peerId.toString()}`, {
|
|
124
129
|
streamId: stream.id,
|
|
125
130
|
peerId: peerId.toString(),
|
|
126
|
-
activeConnectionsCount: updatedActiveConnectionsCount
|
|
131
|
+
activeConnectionsCount: updatedActiveConnectionsCount
|
|
127
132
|
});
|
|
128
133
|
return stream;
|
|
129
134
|
}
|
|
130
135
|
/**
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
async close(streamId) {
|
|
136
|
+
* Closes a stream and updates the active connections count
|
|
137
|
+
*
|
|
138
|
+
* @param streamId - The stream id
|
|
139
|
+
*/ async close(streamId) {
|
|
136
140
|
try {
|
|
137
141
|
const { stream, peerId } = this.streams.get(streamId);
|
|
138
142
|
const updatedActiveConnectionsCount = (this.activeConnectionsCount.get(peerId) ?? 1) - 1;
|
|
@@ -141,35 +145,32 @@ export class ConnectionSampler {
|
|
|
141
145
|
streamId,
|
|
142
146
|
peerId: peerId.toString(),
|
|
143
147
|
protocol: stream.protocol,
|
|
144
|
-
activeConnectionsCount: updatedActiveConnectionsCount
|
|
148
|
+
activeConnectionsCount: updatedActiveConnectionsCount
|
|
145
149
|
});
|
|
146
150
|
await stream?.close();
|
|
147
|
-
}
|
|
148
|
-
catch (error) {
|
|
151
|
+
} catch (error) {
|
|
149
152
|
this.logger.warn(`Failed to close connection to peer with stream id ${streamId}`);
|
|
150
|
-
}
|
|
151
|
-
finally {
|
|
153
|
+
} finally{
|
|
152
154
|
this.streams.delete(streamId);
|
|
153
155
|
}
|
|
154
156
|
}
|
|
155
157
|
/**
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
async cleanupStaleConnections() {
|
|
158
|
+
* Cleans up stale connections that we have lost accounting for
|
|
159
|
+
*/ async cleanupStaleConnections() {
|
|
159
160
|
// Look for streams without anything in the activeConnectionsCount
|
|
160
161
|
// If we find anything, close the stream
|
|
161
|
-
for (const [streamId, { peerId }] of this.streams.entries())
|
|
162
|
+
for (const [streamId, { peerId }] of this.streams.entries()){
|
|
162
163
|
try {
|
|
163
164
|
// Check if we have lost track of accounting
|
|
164
165
|
if (this.activeConnectionsCount.get(peerId) === 0) {
|
|
165
166
|
await this.close(streamId);
|
|
166
167
|
this.logger.debug(`Cleaned up stale connection ${streamId} to peer ${peerId.toString()}`);
|
|
167
168
|
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
|
|
169
|
+
} catch (error) {
|
|
170
|
+
this.logger.error(`Error cleaning up stale connection ${streamId}`, {
|
|
171
|
+
error
|
|
172
|
+
});
|
|
171
173
|
}
|
|
172
174
|
}
|
|
173
175
|
}
|
|
174
176
|
}
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbl9zYW1wbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3JlcXJlc3AvY29ubmVjdGlvbi1zYW1wbGVyL2Nvbm5lY3Rpb25fc2FtcGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSXRELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBTzlCLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLE1BQU0sQ0FBQyxHQUFXO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztDQUNGO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQVc1QixZQUNtQixNQUFjLEVBQ2Qsb0JBQTRCLEtBQUssRUFBRSxzQkFBc0I7SUFDekQsVUFBeUIsSUFBSSxhQUFhLEVBQUU7UUFGNUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBZ0I7UUFDakMsWUFBTyxHQUFQLE9BQU8sQ0FBcUM7UUFiOUMsV0FBTSxHQUFHLFlBQVksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBRWpFLG9CQUFlLEdBQW9CLElBQUksZUFBZSxFQUFFLENBQUM7UUFFaEQsMkJBQXNCLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDeEQsWUFBTyxHQUFpQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRW5FLDhEQUE4RDtRQUN0RCxjQUFTLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFPakQsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsRUFB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
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
export {};
|
|
2
1
|
/**
|
|
3
2
|
* Request Response protocol allows nodes to ask their peers for data
|
|
4
3
|
* that they missed via the traditional gossip protocol.
|
|
5
|
-
*/
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHIn0=
|
|
4
|
+
*/
|
|
@@ -2,53 +2,50 @@ import { L2Block, Tx, TxHash } from '@aztec/circuit-types';
|
|
|
2
2
|
import { Fr } from '@aztec/foundation/fields';
|
|
3
3
|
/*
|
|
4
4
|
* Request Response Sub Protocols
|
|
5
|
-
*/
|
|
6
|
-
export const PING_PROTOCOL = '/aztec/req/ping/0.1.0';
|
|
5
|
+
*/ export const PING_PROTOCOL = '/aztec/req/ping/0.1.0';
|
|
7
6
|
export const STATUS_PROTOCOL = '/aztec/req/status/0.1.0';
|
|
8
7
|
export const GOODBYE_PROTOCOL = '/aztec/req/goodbye/0.1.0';
|
|
9
8
|
export const TX_REQ_PROTOCOL = '/aztec/req/tx/0.1.0';
|
|
10
9
|
export const BLOCK_REQ_PROTOCOL = '/aztec/req/block/0.1.0';
|
|
11
|
-
export var ReqRespSubProtocol
|
|
12
|
-
|
|
13
|
-
ReqRespSubProtocol["
|
|
14
|
-
ReqRespSubProtocol["
|
|
15
|
-
ReqRespSubProtocol["
|
|
16
|
-
ReqRespSubProtocol["
|
|
17
|
-
ReqRespSubProtocol
|
|
18
|
-
}
|
|
19
|
-
export const noopValidator = ()
|
|
10
|
+
export var ReqRespSubProtocol = /*#__PURE__*/ function(ReqRespSubProtocol) {
|
|
11
|
+
ReqRespSubProtocol[ReqRespSubProtocol["PING"] = PING_PROTOCOL] = "PING";
|
|
12
|
+
ReqRespSubProtocol[ReqRespSubProtocol["STATUS"] = STATUS_PROTOCOL] = "STATUS";
|
|
13
|
+
ReqRespSubProtocol[ReqRespSubProtocol["GOODBYE"] = GOODBYE_PROTOCOL] = "GOODBYE";
|
|
14
|
+
ReqRespSubProtocol[ReqRespSubProtocol["TX"] = TX_REQ_PROTOCOL] = "TX";
|
|
15
|
+
ReqRespSubProtocol[ReqRespSubProtocol["BLOCK"] = BLOCK_REQ_PROTOCOL] = "BLOCK";
|
|
16
|
+
return ReqRespSubProtocol;
|
|
17
|
+
}({});
|
|
18
|
+
export const noopValidator = ()=>Promise.resolve(true);
|
|
20
19
|
export const DEFAULT_SUB_PROTOCOL_VALIDATORS = {
|
|
21
20
|
[ReqRespSubProtocol.PING]: noopValidator,
|
|
22
21
|
[ReqRespSubProtocol.STATUS]: noopValidator,
|
|
23
22
|
[ReqRespSubProtocol.TX]: noopValidator,
|
|
24
23
|
[ReqRespSubProtocol.GOODBYE]: noopValidator,
|
|
25
|
-
[ReqRespSubProtocol.BLOCK]: noopValidator
|
|
24
|
+
[ReqRespSubProtocol.BLOCK]: noopValidator
|
|
26
25
|
};
|
|
27
26
|
/**
|
|
28
27
|
* Default handler for unimplemented sub protocols, this SHOULD be overwritten
|
|
29
28
|
* by the service, but is provided as a fallback
|
|
30
|
-
*/
|
|
31
|
-
const defaultHandler = (_msg) => {
|
|
29
|
+
*/ const defaultHandler = (_msg)=>{
|
|
32
30
|
return Promise.resolve(Buffer.from('unimplemented'));
|
|
33
31
|
};
|
|
34
32
|
/**
|
|
35
33
|
* Default sub protocol handlers - this SHOULD be overwritten by the service,
|
|
36
|
-
*/
|
|
37
|
-
export const DEFAULT_SUB_PROTOCOL_HANDLERS = {
|
|
34
|
+
*/ export const DEFAULT_SUB_PROTOCOL_HANDLERS = {
|
|
38
35
|
[ReqRespSubProtocol.PING]: defaultHandler,
|
|
39
36
|
[ReqRespSubProtocol.STATUS]: defaultHandler,
|
|
40
37
|
[ReqRespSubProtocol.TX]: defaultHandler,
|
|
41
38
|
[ReqRespSubProtocol.GOODBYE]: defaultHandler,
|
|
42
|
-
[ReqRespSubProtocol.BLOCK]: defaultHandler
|
|
39
|
+
[ReqRespSubProtocol.BLOCK]: defaultHandler
|
|
43
40
|
};
|
|
44
41
|
/**
|
|
45
42
|
* RequestableBuffer is a wrapper around a buffer that allows it to be
|
|
46
43
|
* used in generic request response protocols
|
|
47
44
|
*
|
|
48
45
|
* An instance of the RequestResponsePair defined above
|
|
49
|
-
*/
|
|
50
|
-
|
|
51
|
-
constructor(buffer)
|
|
46
|
+
*/ export class RequestableBuffer {
|
|
47
|
+
buffer;
|
|
48
|
+
constructor(buffer){
|
|
52
49
|
this.buffer = buffer;
|
|
53
50
|
}
|
|
54
51
|
toBuffer() {
|
|
@@ -62,27 +59,25 @@ export class RequestableBuffer {
|
|
|
62
59
|
* A mapping from each protocol to their request and response types
|
|
63
60
|
* This defines the request and response types for each sub protocol, used primarily
|
|
64
61
|
* as a type rather than an object
|
|
65
|
-
*/
|
|
66
|
-
export const subProtocolMap = {
|
|
62
|
+
*/ export const subProtocolMap = {
|
|
67
63
|
[ReqRespSubProtocol.PING]: {
|
|
68
64
|
request: RequestableBuffer,
|
|
69
|
-
response: RequestableBuffer
|
|
65
|
+
response: RequestableBuffer
|
|
70
66
|
},
|
|
71
67
|
[ReqRespSubProtocol.STATUS]: {
|
|
72
68
|
request: RequestableBuffer,
|
|
73
|
-
response: RequestableBuffer
|
|
69
|
+
response: RequestableBuffer
|
|
74
70
|
},
|
|
75
71
|
[ReqRespSubProtocol.TX]: {
|
|
76
72
|
request: TxHash,
|
|
77
|
-
response: Tx
|
|
73
|
+
response: Tx
|
|
78
74
|
},
|
|
79
75
|
[ReqRespSubProtocol.GOODBYE]: {
|
|
80
76
|
request: RequestableBuffer,
|
|
81
|
-
response: RequestableBuffer
|
|
77
|
+
response: RequestableBuffer
|
|
82
78
|
},
|
|
83
79
|
[ReqRespSubProtocol.BLOCK]: {
|
|
84
|
-
request: Fr,
|
|
85
|
-
response: L2Block
|
|
86
|
-
}
|
|
80
|
+
request: Fr,
|
|
81
|
+
response: L2Block
|
|
82
|
+
}
|
|
87
83
|
};
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3JlcXJlc3AvaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUk5Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyx1QkFBdUIsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcseUJBQXlCLENBQUM7QUFDekQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsMEJBQTBCLENBQUM7QUFDM0QsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLHFCQUFxQixDQUFDO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLHdCQUF3QixDQUFDO0FBRTNELE1BQU0sQ0FBTixJQUFZLGtCQU1YO0FBTkQsV0FBWSxrQkFBa0I7SUFDNUIsb0RBQW9CLENBQUE7SUFDcEIsd0RBQXdCLENBQUE7SUFDeEIsMERBQTBCLENBQUE7SUFDMUIsZ0RBQW9CLENBQUE7SUFDcEIsc0RBQTBCLENBQUE7QUFDNUIsQ0FBQyxFQU5XLGtCQUFrQixLQUFsQixrQkFBa0IsUUFNN0I7QUFzQ0QsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFpQnpELE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFpQztJQUMzRSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLGFBQWE7SUFDeEMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxhQUFhO0lBQzFDLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLEVBQUUsYUFBYTtJQUN0QyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLGFBQWE7SUFDM0MsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhO0NBQzFDLENBQUM7QUFVRjs7O0dBR0c7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLElBQVMsRUFBbUIsRUFBRTtJQUNwRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQStCO0lBQ3ZFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsY0FBYztJQUN6QyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFLGNBQWM7SUFDM0MsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxjQUFjO0lBQ3ZDLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsY0FBYztJQUM1QyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLGNBQWM7Q0FDM0MsQ0FBQztBQW9CRjs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFBbUIsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBRyxDQUFDO0lBRXJDLFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBYztRQUM5QixPQUFPLElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBbUI7SUFDNUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN6QixPQUFPLEVBQUUsaUJBQWlCO1FBQzFCLFFBQVEsRUFBRSxpQkFBaUI7S0FDNUI7SUFDRCxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzNCLE9BQU8sRUFBRSxpQkFBaUI7UUFDMUIsUUFBUSxFQUFFLGlCQUFpQjtLQUM1QjtJQUNELENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDdkIsT0FBTyxFQUFFLE1BQU07UUFDZixRQUFRLEVBQUUsRUFBRTtLQUNiO0lBQ0QsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUM1QixPQUFPLEVBQUUsaUJBQWlCO1FBQzFCLFFBQVEsRUFBRSxpQkFBaUI7S0FDNUI7SUFDRCxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzFCLE9BQU8sRUFBRSxFQUFFLEVBQUUsZUFBZTtRQUM1QixRQUFRLEVBQUUsT0FBTztLQUNsQjtDQUNGLENBQUMifQ==
|
|
@@ -1,42 +1,55 @@
|
|
|
1
1
|
// Request response metrics
|
|
2
2
|
import { Attributes, Metrics, ValueType } from '@aztec/telemetry-client';
|
|
3
3
|
export class ReqRespMetrics {
|
|
4
|
-
|
|
4
|
+
telemetryClient;
|
|
5
|
+
tracer;
|
|
6
|
+
sentRequests;
|
|
7
|
+
receivedRequests;
|
|
8
|
+
failedOutboundRequests;
|
|
9
|
+
failedInboundRequests;
|
|
10
|
+
constructor(telemetryClient, name = 'ReqResp'){
|
|
5
11
|
this.telemetryClient = telemetryClient;
|
|
6
12
|
this.tracer = telemetryClient.getTracer(name);
|
|
7
13
|
const meter = telemetryClient.getMeter(name);
|
|
8
14
|
this.sentRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_SENT_REQUESTS, {
|
|
9
15
|
description: 'Number of requests sent to peers',
|
|
10
16
|
unit: 'requests',
|
|
11
|
-
valueType: ValueType.INT
|
|
17
|
+
valueType: ValueType.INT
|
|
12
18
|
});
|
|
13
19
|
this.receivedRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_RECEIVED_REQUESTS, {
|
|
14
20
|
description: 'Number of requests received from peers',
|
|
15
21
|
unit: 'requests',
|
|
16
|
-
valueType: ValueType.INT
|
|
22
|
+
valueType: ValueType.INT
|
|
17
23
|
});
|
|
18
24
|
this.failedOutboundRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_FAILED_OUTBOUND_REQUESTS, {
|
|
19
25
|
description: 'Number of failed outbound requests - nodes not getting valid responses',
|
|
20
26
|
unit: 'requests',
|
|
21
|
-
valueType: ValueType.INT
|
|
27
|
+
valueType: ValueType.INT
|
|
22
28
|
});
|
|
23
29
|
this.failedInboundRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_FAILED_INBOUND_REQUESTS, {
|
|
24
30
|
description: 'Number of failed inbound requests - node failing to respond to requests',
|
|
25
31
|
unit: 'requests',
|
|
26
|
-
valueType: ValueType.INT
|
|
32
|
+
valueType: ValueType.INT
|
|
27
33
|
});
|
|
28
34
|
}
|
|
29
35
|
recordRequestSent(protocol) {
|
|
30
|
-
this.sentRequests.add(1, {
|
|
36
|
+
this.sentRequests.add(1, {
|
|
37
|
+
[Attributes.P2P_REQ_RESP_PROTOCOL]: protocol
|
|
38
|
+
});
|
|
31
39
|
}
|
|
32
40
|
recordRequestReceived(protocol) {
|
|
33
|
-
this.receivedRequests.add(1, {
|
|
41
|
+
this.receivedRequests.add(1, {
|
|
42
|
+
[Attributes.P2P_REQ_RESP_PROTOCOL]: protocol
|
|
43
|
+
});
|
|
34
44
|
}
|
|
35
45
|
recordRequestError(protocol) {
|
|
36
|
-
this.failedOutboundRequests.add(1, {
|
|
46
|
+
this.failedOutboundRequests.add(1, {
|
|
47
|
+
[Attributes.P2P_REQ_RESP_PROTOCOL]: protocol
|
|
48
|
+
});
|
|
37
49
|
}
|
|
38
50
|
recordResponseError(protocol) {
|
|
39
|
-
this.failedInboundRequests.add(1, {
|
|
51
|
+
this.failedInboundRequests.add(1, {
|
|
52
|
+
[Attributes.P2P_REQ_RESP_PROTOCOL]: protocol
|
|
53
|
+
});
|
|
40
54
|
}
|
|
41
55
|
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL21ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkJBQTJCO0FBQzNCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3pFLE1BQU0sT0FBTyxjQUFjO0lBU3pCLFlBQXFCLGVBQWdDLEVBQUUsSUFBSSxHQUFHLFNBQVM7UUFBbEQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ25ELElBQUksQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU5QyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQywwQkFBMEIsRUFBRTtZQUNoRixXQUFXLEVBQUUsa0NBQWtDO1lBQy9DLElBQUksRUFBRSxVQUFVO1lBQ2hCLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRztTQUN6QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRTtZQUN4RixXQUFXLEVBQUUsd0NBQXdDO1lBQ3JELElBQUksRUFBRSxVQUFVO1lBQ2hCLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRztTQUN6QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxxQ0FBcUMsRUFBRTtZQUNyRyxXQUFXLEVBQUUsd0VBQXdFO1lBQ3JGLElBQUksRUFBRSxVQUFVO1lBQ2hCLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRztTQUN6QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsRUFBRTtZQUNuRyxXQUFXLEVBQUUseUVBQXlFO1lBQ3RGLElBQUksRUFBRSxVQUFVO1lBQ2hCLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRztTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0saUJBQWlCLENBQUMsUUFBZ0I7UUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxRQUFnQjtRQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRU0sa0JBQWtCLENBQUMsUUFBZ0I7UUFDeEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVNLG1CQUFtQixDQUFDLFFBQWdCO1FBQ3pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7Q0FDRiJ9
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/fields';
|
|
2
2
|
export function reqRespBlockHandler(l2BlockSource) {
|
|
3
|
-
return async (_peerId, msg)
|
|
3
|
+
return async (_peerId, msg)=>{
|
|
4
4
|
const blockNumber = Fr.fromBuffer(msg);
|
|
5
5
|
const foundBlock = await l2BlockSource.getBlock(Number(blockNumber));
|
|
6
6
|
return foundBlock ? foundBlock.toBuffer() : Buffer.alloc(0);
|
|
7
7
|
};
|
|
8
8
|
}
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9wcm90b2NvbHMvYmxvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBTTlDLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxhQUE0QjtJQUM5RCxPQUFPLEtBQUssRUFBRSxPQUFlLEVBQUUsR0FBVyxFQUFFLEVBQUU7UUFDNUMsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV2QyxNQUFNLFVBQVUsR0FBRyxNQUFNLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDckUsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDLENBQUM7QUFDSixDQUFDIn0=
|