@aztec/p2p 0.76.4 → 0.77.0-testnet-ignition.21
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.d.ts +2 -2
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +55 -41
- package/dest/client/factory.d.ts +8 -6
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +8 -10
- package/dest/client/index.js +0 -1
- package/dest/client/p2p_client.d.ts +7 -4
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +492 -514
- package/dest/config.d.ts +8 -10
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +54 -47
- package/dest/enr/generate-enr.d.ts +9 -0
- package/dest/enr/generate-enr.d.ts.map +1 -0
- package/dest/enr/generate-enr.js +30 -0
- package/dest/enr/index.d.ts +2 -0
- package/dest/enr/index.d.ts.map +1 -0
- package/dest/enr/index.js +1 -0
- package/dest/errors/reqresp.error.js +6 -10
- package/dest/index.js +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +6 -2
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +65 -33
- package/dest/mem_pools/attestation_pool/index.js +0 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +3 -3
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +23 -20
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +2 -2
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +22 -26
- package/dest/mem_pools/attestation_pool/mocks.d.ts +3 -2
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +12 -7
- package/dest/mem_pools/index.d.ts +2 -2
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/index.js +1 -2
- package/dest/mem_pools/instrumentation.d.ts +1 -1
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +35 -39
- package/dest/mem_pools/interface.d.ts +3 -3
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/interface.js +3 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +2 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +129 -136
- package/dest/mem_pools/tx_pool/index.js +0 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +2 -2
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +46 -44
- package/dest/mem_pools/tx_pool/priority.d.ts +1 -1
- package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/priority.js +1 -3
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +1 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool.js +3 -2
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +109 -39
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +2 -2
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +4 -4
- package/dest/msg_validators/attestation_validator/index.js +0 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +2 -2
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +3 -3
- package/dest/msg_validators/block_proposal_validator/index.js +0 -1
- package/dest/msg_validators/index.js +0 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +9 -11
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +2 -2
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +18 -13
- package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +102 -33
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +34 -20
- package/dest/msg_validators/tx_validator/index.js +0 -1
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +2 -2
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +30 -27
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- 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.d.ts +2 -0
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +64 -36
- package/dest/services/dummy_service.d.ts +4 -2
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +41 -59
- package/dest/services/encoding.d.ts +3 -3
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +10 -9
- package/dest/services/gossipsub/scoring.d.ts +7 -0
- package/dest/services/gossipsub/scoring.d.ts.map +1 -0
- package/dest/services/gossipsub/scoring.js +10 -0
- package/dest/services/index.js +0 -1
- package/dest/services/libp2p/libp2p_service.d.ts +10 -33
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +682 -673
- package/dest/services/peer-manager/metrics.js +14 -7
- package/dest/services/peer-manager/peer_manager.d.ts +24 -6
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +390 -340
- package/dest/services/peer-manager/peer_scoring.d.ts +3 -3
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +21 -19
- package/dest/services/reqresp/config.js +4 -5
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +2 -2
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +35 -28
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +67 -61
- package/dest/services/reqresp/index.js +1 -3
- package/dest/services/reqresp/interface.d.ts +2 -2
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +27 -31
- package/dest/services/reqresp/metrics.d.ts +1 -1
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.js +23 -10
- package/dest/services/reqresp/protocols/block.d.ts +2 -2
- package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block.js +1 -2
- package/dest/services/reqresp/protocols/goodbye.d.ts +5 -5
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/goodbye.js +36 -41
- 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.d.ts +3 -3
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +6 -9
- package/dest/services/reqresp/rate-limiter/index.js +0 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +9 -9
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +53 -46
- package/dest/services/reqresp/rate-limiter/rate_limits.js +16 -17
- package/dest/services/reqresp/reqresp.d.ts +4 -4
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +467 -464
- package/dest/services/reqresp/status.js +16 -17
- package/dest/services/service.d.ts +3 -2
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/service.js +3 -4
- package/dest/test-helpers/generate-peer-id-private-keys.js +2 -4
- package/dest/test-helpers/get-ports.js +3 -3
- package/dest/test-helpers/index.js +0 -1
- package/dest/test-helpers/make-enrs.d.ts +1 -1
- package/dest/test-helpers/make-enrs.d.ts.map +1 -1
- package/dest/test-helpers/make-enrs.js +3 -6
- package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -6
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +10 -12
- package/dest/test-helpers/reqresp-nodes.d.ts +18 -7
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +64 -40
- package/dest/testbench/p2p_client_testbench_worker.js +61 -45
- package/dest/testbench/parse_log_file.d.ts +2 -0
- package/dest/testbench/parse_log_file.d.ts.map +1 -0
- package/dest/testbench/parse_log_file.js +131 -0
- package/dest/testbench/testbench.d.ts +2 -0
- package/dest/testbench/testbench.d.ts.map +1 -0
- package/dest/testbench/testbench.js +141 -0
- package/dest/{services/types.d.ts → types/index.d.ts} +1 -1
- package/dest/types/index.d.ts.map +1 -0
- package/dest/types/index.js +28 -0
- package/dest/util.d.ts +5 -5
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +23 -34
- package/dest/versioning.d.ts +3 -3
- package/dest/versioning.d.ts.map +1 -1
- package/dest/versioning.js +7 -12
- package/package.json +15 -13
- package/src/bootstrap/bootstrap.ts +30 -17
- package/src/client/factory.ts +9 -12
- package/src/client/p2p_client.ts +13 -24
- package/src/config.ts +14 -15
- package/src/enr/generate-enr.ts +39 -0
- package/src/enr/index.ts +1 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +1 -1
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +4 -3
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +3 -3
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +2 -2
- package/src/mem_pools/attestation_pool/mocks.ts +5 -5
- package/src/mem_pools/index.ts +2 -2
- package/src/mem_pools/instrumentation.ts +4 -3
- package/src/mem_pools/interface.ts +3 -3
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +4 -4
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +3 -3
- package/src/mem_pools/tx_pool/priority.ts +1 -1
- package/src/mem_pools/tx_pool/tx_pool.ts +1 -1
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +4 -3
- package/src/msg_validators/attestation_validator/attestation_validator.ts +2 -2
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +2 -2
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +1 -1
- package/src/msg_validators/tx_validator/block_header_validator.ts +2 -2
- package/src/msg_validators/tx_validator/data_validator.ts +57 -4
- package/src/msg_validators/tx_validator/double_spend_validator.ts +17 -12
- package/src/msg_validators/tx_validator/metadata_validator.ts +2 -2
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -6
- package/src/services/discv5/discV5_service.ts +33 -8
- package/src/services/dummy_service.ts +4 -2
- package/src/services/encoding.ts +3 -3
- package/src/services/gossipsub/scoring.ts +13 -0
- package/src/services/libp2p/libp2p_service.ts +124 -146
- package/src/services/peer-manager/peer_manager.ts +71 -13
- package/src/services/peer-manager/peer_scoring.ts +3 -3
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +2 -2
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +9 -3
- package/src/services/reqresp/interface.ts +4 -3
- package/src/services/reqresp/metrics.ts +1 -1
- package/src/services/reqresp/protocols/block.ts +3 -3
- package/src/services/reqresp/protocols/goodbye.ts +7 -7
- package/src/services/reqresp/protocols/tx.ts +5 -5
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +22 -18
- package/src/services/reqresp/reqresp.ts +18 -11
- package/src/services/service.ts +3 -2
- package/src/test-helpers/make-enrs.ts +1 -1
- package/src/test-helpers/make-test-p2p-clients.ts +9 -7
- package/src/test-helpers/reqresp-nodes.ts +32 -18
- package/src/testbench/p2p_client_testbench_worker.ts +16 -9
- package/src/testbench/parse_log_file.ts +175 -0
- package/src/testbench/testbench.ts +157 -0
- package/src/util.ts +5 -5
- package/src/versioning.ts +7 -7
- package/dest/services/libp2p/libp2p_logger.d.ts +0 -7
- package/dest/services/libp2p/libp2p_logger.d.ts.map +0 -1
- package/dest/services/libp2p/libp2p_logger.js +0 -67
- package/dest/services/types.d.ts.map +0 -1
- package/dest/services/types.js +0 -35
- package/src/services/libp2p/libp2p_logger.ts +0 -78
- package/src/testbench/scripts/run_testbench.sh +0 -7
- /package/src/{services/types.ts → types/index.ts} +0 -0
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
* @attribution Rate limiter approach implemented in the lodestar ethereum 2 client.
|
|
3
3
|
* Rationale is that if it was good enough for them, then it should be good enough for us.
|
|
4
4
|
* https://github.com/ChainSafe/lodestar
|
|
5
|
-
*/
|
|
6
|
-
import { PeerErrorSeverity } from '@aztec/circuit-types';
|
|
5
|
+
*/ import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
7
6
|
import { DEFAULT_RATE_LIMITS } from './rate_limits.js';
|
|
8
7
|
// Check for disconnected peers every 10 minutes
|
|
9
8
|
const CHECK_DISCONNECTED_PEERS_INTERVAL_MS = 10 * 60 * 1000;
|
|
@@ -26,13 +25,17 @@ const CHECK_DISCONNECTED_PEERS_INTERVAL_MS = 10 * 60 * 1000;
|
|
|
26
25
|
* ```
|
|
27
26
|
* const limiter = new GCRARateLimiter(100, 60000); // 100 operations per minute
|
|
28
27
|
* ```
|
|
29
|
-
*/
|
|
30
|
-
|
|
28
|
+
*/ export class GCRARateLimiter {
|
|
29
|
+
// Virtual scheduling time: i.e. the time at which we should allow the next request
|
|
30
|
+
vst;
|
|
31
|
+
// The interval at which we emit a new token
|
|
32
|
+
emissionInterval;
|
|
33
|
+
// The interval over which we limit the number of requests
|
|
34
|
+
limitInterval;
|
|
31
35
|
/**
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
constructor(quotaCount, quotaTimeMs) {
|
|
36
|
+
* @param quotaCount - The number of requests to allow over the limit interval
|
|
37
|
+
* @param quotaTimeMs - The time interval over which the quotaCount applies
|
|
38
|
+
*/ constructor(quotaCount, quotaTimeMs){
|
|
36
39
|
this.emissionInterval = quotaTimeMs / quotaCount;
|
|
37
40
|
this.limitInterval = quotaTimeMs;
|
|
38
41
|
this.vst = Date.now();
|
|
@@ -47,12 +50,22 @@ export class GCRARateLimiter {
|
|
|
47
50
|
return false;
|
|
48
51
|
}
|
|
49
52
|
}
|
|
50
|
-
var RateLimitStatus
|
|
51
|
-
|
|
52
|
-
RateLimitStatus[RateLimitStatus["
|
|
53
|
-
RateLimitStatus[RateLimitStatus["
|
|
54
|
-
RateLimitStatus
|
|
55
|
-
}
|
|
53
|
+
export var RateLimitStatus = /*#__PURE__*/ function(RateLimitStatus) {
|
|
54
|
+
RateLimitStatus[RateLimitStatus["DeniedGlobal"] = 0] = "DeniedGlobal";
|
|
55
|
+
RateLimitStatus[RateLimitStatus["DeniedPeer"] = 1] = "DeniedPeer";
|
|
56
|
+
RateLimitStatus[RateLimitStatus["Allowed"] = 2] = "Allowed";
|
|
57
|
+
return RateLimitStatus;
|
|
58
|
+
}({});
|
|
59
|
+
export function prettyPrintRateLimitStatus(status) {
|
|
60
|
+
switch(status){
|
|
61
|
+
case 0:
|
|
62
|
+
return 'DeniedGlobal';
|
|
63
|
+
case 1:
|
|
64
|
+
return 'DeniedPeer';
|
|
65
|
+
case 2:
|
|
66
|
+
return 'Allowed';
|
|
67
|
+
}
|
|
68
|
+
}
|
|
56
69
|
/**
|
|
57
70
|
* SubProtocolRateLimiter: A rate limiter for managing request rates on a per-peer and global basis for a specific subprotocol.
|
|
58
71
|
*
|
|
@@ -68,10 +81,12 @@ var RateLimitStatus;
|
|
|
68
81
|
* - It periodically cleans up rate limiters for inactive peers to conserve memory.
|
|
69
82
|
*
|
|
70
83
|
* Note: Remember to call `start()` to begin the cleanup process and `stop()` when shutting down to clear the cleanup interval.
|
|
71
|
-
*/
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
84
|
+
*/ export class SubProtocolRateLimiter {
|
|
85
|
+
peerLimiters = new Map();
|
|
86
|
+
globalLimiter;
|
|
87
|
+
peerQuotaCount;
|
|
88
|
+
peerQuotaTimeMs;
|
|
89
|
+
constructor(peerQuotaCount, peerQuotaTimeMs, globalQuotaCount, globalQuotaTimeMs){
|
|
75
90
|
this.peerLimiters = new Map();
|
|
76
91
|
this.globalLimiter = new GCRARateLimiter(globalQuotaCount, globalQuotaTimeMs);
|
|
77
92
|
this.peerQuotaCount = peerQuotaCount;
|
|
@@ -79,7 +94,7 @@ export class SubProtocolRateLimiter {
|
|
|
79
94
|
}
|
|
80
95
|
allow(peerId) {
|
|
81
96
|
if (!this.globalLimiter.allow()) {
|
|
82
|
-
return
|
|
97
|
+
return 0;
|
|
83
98
|
}
|
|
84
99
|
const peerIdStr = peerId.toString();
|
|
85
100
|
let peerLimiter = this.peerLimiters.get(peerIdStr);
|
|
@@ -87,22 +102,21 @@ export class SubProtocolRateLimiter {
|
|
|
87
102
|
// Create a limiter for this peer
|
|
88
103
|
peerLimiter = {
|
|
89
104
|
limiter: new GCRARateLimiter(this.peerQuotaCount, this.peerQuotaTimeMs),
|
|
90
|
-
lastAccess: Date.now()
|
|
105
|
+
lastAccess: Date.now()
|
|
91
106
|
};
|
|
92
107
|
this.peerLimiters.set(peerIdStr, peerLimiter);
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
108
|
+
} else {
|
|
95
109
|
peerLimiter.lastAccess = Date.now();
|
|
96
110
|
}
|
|
97
111
|
const peerLimitAllowed = peerLimiter.limiter.allow();
|
|
98
112
|
if (!peerLimitAllowed) {
|
|
99
|
-
return
|
|
113
|
+
return 1;
|
|
100
114
|
}
|
|
101
|
-
return
|
|
115
|
+
return 2;
|
|
102
116
|
}
|
|
103
117
|
cleanupInactivePeers() {
|
|
104
118
|
const now = Date.now();
|
|
105
|
-
this.peerLimiters.forEach((peerLimiter, peerId)
|
|
119
|
+
this.peerLimiters.forEach((peerLimiter, peerId)=>{
|
|
106
120
|
if (now - peerLimiter.lastAccess > CHECK_DISCONNECTED_PEERS_INTERVAL_MS) {
|
|
107
121
|
this.peerLimiters.delete(peerId);
|
|
108
122
|
}
|
|
@@ -131,47 +145,40 @@ export class SubProtocolRateLimiter {
|
|
|
131
145
|
* const limiter = new RequestResponseRateLimiter(peerManager, rateLimits);
|
|
132
146
|
*
|
|
133
147
|
* Note: Ensure to call `stop()` when shutting down to properly clean up all subprotocol limiters.
|
|
134
|
-
*/
|
|
135
|
-
|
|
136
|
-
|
|
148
|
+
*/ export class RequestResponseRateLimiter {
|
|
149
|
+
peerScoring;
|
|
150
|
+
subProtocolRateLimiters;
|
|
151
|
+
cleanupInterval;
|
|
152
|
+
constructor(peerScoring, rateLimits = DEFAULT_RATE_LIMITS){
|
|
137
153
|
this.peerScoring = peerScoring;
|
|
138
154
|
this.cleanupInterval = undefined;
|
|
139
155
|
this.subProtocolRateLimiters = new Map();
|
|
140
|
-
for (const [subProtocol, protocolLimits] of Object.entries(rateLimits))
|
|
156
|
+
for (const [subProtocol, protocolLimits] of Object.entries(rateLimits)){
|
|
141
157
|
this.subProtocolRateLimiters.set(subProtocol, new SubProtocolRateLimiter(protocolLimits.peerLimit.quotaCount, protocolLimits.peerLimit.quotaTimeMs, protocolLimits.globalLimit.quotaCount, protocolLimits.globalLimit.quotaTimeMs));
|
|
142
158
|
}
|
|
143
159
|
}
|
|
144
160
|
start() {
|
|
145
|
-
this.cleanupInterval = setInterval(()
|
|
161
|
+
this.cleanupInterval = setInterval(()=>{
|
|
146
162
|
this.cleanupInactivePeers();
|
|
147
163
|
}, CHECK_DISCONNECTED_PEERS_INTERVAL_MS);
|
|
148
164
|
}
|
|
149
165
|
allow(subProtocol, peerId) {
|
|
150
166
|
const limiter = this.subProtocolRateLimiters.get(subProtocol);
|
|
151
167
|
if (!limiter) {
|
|
152
|
-
return
|
|
168
|
+
return 2;
|
|
153
169
|
}
|
|
154
170
|
const rateLimitStatus = limiter.allow(peerId);
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
// Hitting a peer specific limit, we should lightly penalise the peer
|
|
158
|
-
this.peerScoring.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
|
|
159
|
-
return false;
|
|
160
|
-
case RateLimitStatus.DeniedGlobal:
|
|
161
|
-
// Hitting a global limit, we should not penalise the peer
|
|
162
|
-
return false;
|
|
163
|
-
default:
|
|
164
|
-
return true;
|
|
171
|
+
if (rateLimitStatus === 1) {
|
|
172
|
+
this.peerScoring.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
|
|
165
173
|
}
|
|
174
|
+
return rateLimitStatus;
|
|
166
175
|
}
|
|
167
176
|
cleanupInactivePeers() {
|
|
168
|
-
this.subProtocolRateLimiters.forEach(limiter
|
|
177
|
+
this.subProtocolRateLimiters.forEach((limiter)=>limiter.cleanupInactivePeers());
|
|
169
178
|
}
|
|
170
179
|
/**
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
stop() {
|
|
180
|
+
* Make sure to call destroy on each of the sub protocol rate limiters when cleaning up
|
|
181
|
+
*/ stop() {
|
|
174
182
|
clearInterval(this.cleanupInterval);
|
|
175
183
|
}
|
|
176
184
|
}
|
|
177
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZV9saW1pdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3JlcXJlc3AvcmF0ZS1saW1pdGVyL3JhdGVfbGltaXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFNekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdkQsZ0RBQWdEO0FBQ2hELE1BQU0sb0NBQW9DLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFNUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQVExQjs7O09BR0c7SUFDSCxZQUFZLFVBQWtCLEVBQUUsV0FBbUI7UUFDakQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUM7UUFDakMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELEtBQUs7UUFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvRCxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBU0QsSUFBSyxlQUlKO0FBSkQsV0FBSyxlQUFlO0lB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
|
|
@@ -4,52 +4,51 @@ export const DEFAULT_RATE_LIMITS = {
|
|
|
4
4
|
[ReqRespSubProtocol.PING]: {
|
|
5
5
|
peerLimit: {
|
|
6
6
|
quotaTimeMs: 1000,
|
|
7
|
-
quotaCount: 5
|
|
7
|
+
quotaCount: 5
|
|
8
8
|
},
|
|
9
9
|
globalLimit: {
|
|
10
10
|
quotaTimeMs: 1000,
|
|
11
|
-
quotaCount: 10
|
|
12
|
-
}
|
|
11
|
+
quotaCount: 10
|
|
12
|
+
}
|
|
13
13
|
},
|
|
14
14
|
[ReqRespSubProtocol.STATUS]: {
|
|
15
15
|
peerLimit: {
|
|
16
16
|
quotaTimeMs: 1000,
|
|
17
|
-
quotaCount: 5
|
|
17
|
+
quotaCount: 5
|
|
18
18
|
},
|
|
19
19
|
globalLimit: {
|
|
20
20
|
quotaTimeMs: 1000,
|
|
21
|
-
quotaCount: 10
|
|
22
|
-
}
|
|
21
|
+
quotaCount: 10
|
|
22
|
+
}
|
|
23
23
|
},
|
|
24
24
|
[ReqRespSubProtocol.TX]: {
|
|
25
25
|
peerLimit: {
|
|
26
26
|
quotaTimeMs: 1000,
|
|
27
|
-
quotaCount: 10
|
|
27
|
+
quotaCount: 10
|
|
28
28
|
},
|
|
29
29
|
globalLimit: {
|
|
30
30
|
quotaTimeMs: 1000,
|
|
31
|
-
quotaCount: 20
|
|
32
|
-
}
|
|
31
|
+
quotaCount: 20
|
|
32
|
+
}
|
|
33
33
|
},
|
|
34
34
|
[ReqRespSubProtocol.BLOCK]: {
|
|
35
35
|
peerLimit: {
|
|
36
36
|
quotaTimeMs: 1000,
|
|
37
|
-
quotaCount: 2
|
|
37
|
+
quotaCount: 2
|
|
38
38
|
},
|
|
39
39
|
globalLimit: {
|
|
40
40
|
quotaTimeMs: 1000,
|
|
41
|
-
quotaCount: 5
|
|
42
|
-
}
|
|
41
|
+
quotaCount: 5
|
|
42
|
+
}
|
|
43
43
|
},
|
|
44
44
|
[ReqRespSubProtocol.GOODBYE]: {
|
|
45
45
|
peerLimit: {
|
|
46
46
|
quotaTimeMs: 1000,
|
|
47
|
-
quotaCount: 5
|
|
47
|
+
quotaCount: 5
|
|
48
48
|
},
|
|
49
49
|
globalLimit: {
|
|
50
50
|
quotaTimeMs: 1000,
|
|
51
|
-
quotaCount: 10
|
|
52
|
-
}
|
|
53
|
-
}
|
|
51
|
+
quotaCount: 10
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
54
|
};
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZV9saW1pdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9yYXRlLWxpbWl0ZXIvcmF0ZV9saW1pdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFxQyxNQUFNLGlCQUFpQixDQUFDO0FBRXhGLDRDQUE0QztBQUM1QyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBaUM7SUFDL0QsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN6QixTQUFTLEVBQUU7WUFDVCxXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsQ0FBQztTQUNkO1FBQ0QsV0FBVyxFQUFFO1lBQ1gsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLEVBQUU7U0FDZjtLQUNGO0lBQ0QsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMzQixTQUFTLEVBQUU7WUFDVCxXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsQ0FBQztTQUNkO1FBQ0QsV0FBVyxFQUFFO1lBQ1gsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLEVBQUU7U0FDZjtLQUNGO0lBQ0QsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUN2QixTQUFTLEVBQUU7WUFDVCxXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsRUFBRTtTQUNmO1FBQ0QsV0FBVyxFQUFFO1lBQ1gsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLEVBQUU7U0FDZjtLQUNGO0lBQ0QsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUMxQixTQUFTLEVBQUU7WUFDVCxXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsQ0FBQztTQUNkO1FBQ0QsV0FBVyxFQUFFO1lBQ1gsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLENBQUM7U0FDZDtLQUNGO0lBQ0QsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUM1QixTQUFTLEVBQUU7WUFDVCxXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsQ0FBQztTQUNkO1FBQ0QsV0FBVyxFQUFFO1lBQ1gsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLEVBQUU7U0FDZjtLQUNGO0NBQ0YsQ0FBQyJ9
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
/// <reference types="node" resolution-mode="require"/>
|
|
3
3
|
import { type Logger } from '@aztec/foundation/log';
|
|
4
4
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
5
|
+
import type { PeerId } from '@libp2p/interface';
|
|
6
|
+
import type { Libp2p } from 'libp2p';
|
|
7
|
+
import type { PeerScoring } from '../peer-manager/peer_scoring.js';
|
|
8
|
+
import type { P2PReqRespConfig } from './config.js';
|
|
9
9
|
import { type ReqRespResponse, ReqRespSubProtocol, type ReqRespSubProtocolHandlers, type ReqRespSubProtocolValidators, type SubProtocolMap } from './interface.js';
|
|
10
10
|
/**
|
|
11
11
|
* The Request Response Service
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reqresp.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/reqresp.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"reqresp.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/reqresp.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAc,KAAK,eAAe,EAAiC,MAAM,yBAAyB,CAAC;AAE1G,OAAO,KAAK,EAAsB,MAAM,EAAU,MAAM,mBAAmB,CAAC;AAE5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AASrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,OAAO,EAGL,KAAK,eAAe,EACpB,kBAAkB,EAClB,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,cAAc,EAEpB,MAAM,gBAAgB,CAAC;AASxB;;;;;;;;;;;;;GAaG;AACH,qBAAa,OAAO;IAmBhB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW;IAnBrB,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAElC,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,0BAA0B,CAAS;IAG3C,OAAO,CAAC,mBAAmB,CAA6D;IACxF,OAAO,CAAC,qBAAqB,CAAiE;IAE9F,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,WAAW,CAA6B;IAEhD,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO,CAAC,OAAO,CAAiB;gBAG9B,MAAM,EAAE,gBAAgB,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EAChC,eAAe,GAAE,eAAsC;IAgBzD,IAAI,MAAM,6CAET;IAED;;OAEG;IACG,KAAK,CAAC,mBAAmB,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,4BAA4B;IAiBhH;;OAEG;IACG,IAAI;IAoBV;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,WAAW,CAAC,WAAW,SAAS,kBAAkB,EACtD,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,GAC5D,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IA8D7E;;;;;;;;;;;;;;;;;;;;;OAqBG;IAQG,gBAAgB,CAAC,WAAW,SAAS,kBAAkB,EAC3D,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAChE,SAAS,SAAQ,EACjB,QAAQ,SAAgC,EACxC,gBAAgB,SAAI,GACnB,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;IA6HnE;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IAKU,iBAAiB,CAC5B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAgCvC;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAoDvB;;;;;;OAMG;YACW,WAAW;IAoCzB;;;;;;;;;;;;;;;OAeG;YAKW,aAAa;YAkEZ,cAAc;CAI9B"}
|