@aztec/p2p 0.0.1-commit.88e6f9396 → 0.0.1-commit.8c0b8ff
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/client/factory.d.ts +2 -2
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +5 -5
- package/dest/client/p2p_client.d.ts +1 -1
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +4 -6
- package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +5 -6
- package/dest/config.d.ts +6 -6
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +6 -6
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +4 -4
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +4 -8
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +6 -6
- package/dest/mem_pools/instrumentation.d.ts +2 -4
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +14 -16
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +5 -7
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.js +0 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +6 -5
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +43 -26
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +0 -3
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -2
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +1 -18
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +4 -5
- package/dest/msg_validators/clock_tolerance.d.ts +1 -1
- package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
- package/dest/msg_validators/clock_tolerance.js +3 -4
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +5 -5
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
- 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 +35 -2
- package/dest/msg_validators/tx_validator/factory.d.ts +1 -1
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +8 -2
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
- package/dest/msg_validators/tx_validator/phases_validator.js +1 -1
- package/dest/services/libp2p/libp2p_service.d.ts +9 -2
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +25 -22
- package/dest/services/peer-manager/metrics.d.ts +1 -3
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +0 -6
- package/dest/services/peer-manager/peer_manager.d.ts +1 -1
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +3 -6
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +8 -11
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +101 -79
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts +2 -3
- package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +4 -5
- package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/missing_txs.js +7 -13
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +11 -19
- package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
- package/dest/services/reqresp/batch-tx-requester/peer_collection.js +15 -52
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
- package/dest/services/reqresp/reqresp.d.ts +1 -1
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +3 -4
- package/dest/services/tx_collection/fast_tx_collection.d.ts +4 -1
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.js +73 -57
- package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/file_store_tx_source.js +39 -29
- package/dest/services/tx_collection/missing_txs_tracker.d.ts +32 -0
- package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +1 -0
- package/dest/services/tx_collection/missing_txs_tracker.js +27 -0
- package/dest/services/tx_collection/proposal_tx_collector.d.ts +7 -6
- package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
- package/dest/services/tx_collection/proposal_tx_collector.js +4 -4
- package/dest/services/tx_collection/slow_tx_collection.js +1 -1
- package/dest/services/tx_collection/tx_collection.d.ts +6 -3
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.d.ts +6 -5
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.js +9 -7
- package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.d.ts +1 -1
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +2 -20
- package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +5 -6
- package/dest/testbench/worker_client_manager.d.ts +1 -1
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +1 -2
- package/dest/util.d.ts +1 -1
- package/package.json +14 -14
- package/src/client/factory.ts +8 -4
- package/src/client/p2p_client.ts +4 -6
- package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +8 -7
- package/src/config.ts +10 -10
- package/src/mem_pools/attestation_pool/attestation_pool.ts +7 -8
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +6 -6
- package/src/mem_pools/instrumentation.ts +13 -17
- package/src/mem_pools/tx_pool_v2/interfaces.ts +4 -7
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +4 -4
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +43 -29
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +0 -3
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1 -19
- package/src/msg_validators/attestation_validator/README.md +1 -1
- package/src/msg_validators/attestation_validator/attestation_validator.ts +4 -5
- package/src/msg_validators/clock_tolerance.ts +3 -4
- package/src/msg_validators/proposal_validator/README.md +3 -3
- package/src/msg_validators/proposal_validator/proposal_validator.ts +5 -6
- package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
- package/src/msg_validators/tx_validator/data_validator.ts +42 -1
- package/src/msg_validators/tx_validator/factory.ts +7 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +4 -12
- package/src/msg_validators/tx_validator/phases_validator.ts +1 -1
- package/src/services/libp2p/libp2p_service.ts +28 -18
- package/src/services/peer-manager/metrics.ts +0 -7
- package/src/services/peer-manager/peer_manager.ts +3 -7
- package/src/services/reqresp/batch-tx-requester/README.md +7 -46
- package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +111 -75
- package/src/services/reqresp/batch-tx-requester/interface.ts +1 -2
- package/src/services/reqresp/batch-tx-requester/missing_txs.ts +6 -13
- package/src/services/reqresp/batch-tx-requester/peer_collection.ts +24 -68
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
- package/src/services/reqresp/reqresp.ts +3 -5
- package/src/services/tx_collection/fast_tx_collection.ts +83 -57
- package/src/services/tx_collection/file_store_tx_source.ts +43 -31
- package/src/services/tx_collection/missing_txs_tracker.ts +52 -0
- package/src/services/tx_collection/proposal_tx_collector.ts +13 -8
- package/src/services/tx_collection/slow_tx_collection.ts +1 -1
- package/src/services/tx_collection/tx_collection.ts +5 -3
- package/src/services/tx_collection/tx_source.ts +8 -7
- package/src/test-helpers/make-test-p2p-clients.ts +1 -1
- package/src/test-helpers/reqresp-nodes.ts +1 -1
- package/src/test-helpers/testbench-utils.ts +3 -28
- package/src/testbench/p2p_client_testbench_worker.ts +9 -7
- package/src/testbench/worker_client_manager.ts +1 -2
- package/src/util.ts +1 -1
- package/dest/services/tx_collection/request_tracker.d.ts +0 -53
- package/dest/services/tx_collection/request_tracker.d.ts.map +0 -1
- package/dest/services/tx_collection/request_tracker.js +0 -84
- package/src/services/tx_collection/request_tracker.ts +0 -127
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch_tx_requester.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/batch_tx_requester.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"batch_tx_requester.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/batch_tx_requester.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAkB,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EAAE,EAAE,EAAmB,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAErF,OAAO,EAAqC,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAQjG,OAAO,KAAK,EAAE,6BAA6B,EAAE,uBAAuB,EAAyB,MAAM,gBAAgB,CAAC;AAsBpH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAa;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2B;IACvD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,YACE,iBAAiB,EAAE,kBAAkB,EACrC,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,6BAA6B,EACzC,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,YAAY,EAC3B,IAAI,CAAC,EAAE,uBAAuB,EAkC/B;IAKa,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,CAAC,CA6C/D;IAKD,OAAoB,aAAa,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CASvG;YAUa,mBAAmB;YAkDnB,aAAa;YAyDb,cAAc;YAgDd,cAAc;YAwCd,eAAe;YAkFf,cAAc;IAmC5B,OAAO,CAAC,0BAA0B;YAiBpB,6BAA6B;YAY7B,iBAAiB;IAqD/B,OAAO,CAAC,mBAAmB;IAkC3B,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,0BAA0B;IAKlC,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,gCAAgC;IAgBxC,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,8BAA8B;YAUxB,sBAAsB;CAOrC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { chunkWrapAround } from '@aztec/foundation/collection';
|
|
2
|
+
import { TimeoutError } from '@aztec/foundation/error';
|
|
2
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
4
|
import { FifoMemoryQueue, Semaphore } from '@aztec/foundation/queue';
|
|
4
5
|
import { sleep } from '@aztec/foundation/sleep';
|
|
5
|
-
import { DateProvider } from '@aztec/foundation/timer';
|
|
6
|
+
import { DateProvider, executeTimeout } from '@aztec/foundation/timer';
|
|
6
7
|
import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
7
8
|
import { TxHash } from '@aztec/stdlib/tx';
|
|
9
|
+
import { peerIdFromString } from '@libp2p/peer-id';
|
|
8
10
|
import { ReqRespSubProtocol } from '.././interface.js';
|
|
9
11
|
import { BlockTxsRequest, BlockTxsResponse } from '.././protocols/index.js';
|
|
10
12
|
import { ReqRespStatus } from '.././status.js';
|
|
@@ -29,64 +31,79 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
29
31
|
* - Bad peer:
|
|
30
32
|
* - Is the peer which was unable to send us successful response N times in a row
|
|
31
33
|
* */ export class BatchTxRequester {
|
|
32
|
-
requestTracker;
|
|
33
34
|
blockTxsSource;
|
|
34
35
|
pinnedPeer;
|
|
36
|
+
timeoutMs;
|
|
35
37
|
p2pService;
|
|
36
38
|
logger;
|
|
39
|
+
dateProvider;
|
|
37
40
|
opts;
|
|
38
41
|
peers;
|
|
39
42
|
txsMetadata;
|
|
43
|
+
deadline;
|
|
40
44
|
smartRequesterSemaphore;
|
|
41
45
|
txQueue;
|
|
42
46
|
txValidator;
|
|
43
47
|
smartParallelWorkerCount;
|
|
44
48
|
dumbParallelWorkerCount;
|
|
45
49
|
txBatchSize;
|
|
46
|
-
constructor(
|
|
47
|
-
this.requestTracker = requestTracker;
|
|
50
|
+
constructor(missingTxsTracker, blockTxsSource, pinnedPeer, timeoutMs, p2pService, logger, dateProvider, opts){
|
|
48
51
|
this.blockTxsSource = blockTxsSource;
|
|
49
52
|
this.pinnedPeer = pinnedPeer;
|
|
53
|
+
this.timeoutMs = timeoutMs;
|
|
50
54
|
this.p2pService = p2pService;
|
|
51
55
|
this.logger = logger ?? createLogger('p2p:reqresp_batch');
|
|
56
|
+
this.dateProvider = dateProvider ?? new DateProvider();
|
|
52
57
|
this.opts = opts ?? {};
|
|
53
58
|
this.smartParallelWorkerCount = this.opts.smartParallelWorkerCount ?? DEFAULT_BATCH_TX_REQUESTER_SMART_PARALLEL_WORKER_COUNT;
|
|
54
59
|
this.dumbParallelWorkerCount = this.opts.dumbParallelWorkerCount ?? DEFAULT_BATCH_TX_REQUESTER_DUMB_PARALLEL_WORKER_COUNT;
|
|
55
60
|
this.txBatchSize = this.opts.txBatchSize ?? DEFAULT_BATCH_TX_REQUESTER_TX_BATCH_SIZE;
|
|
61
|
+
this.deadline = this.dateProvider.now() + this.timeoutMs;
|
|
56
62
|
this.txQueue = new FifoMemoryQueue(this.logger);
|
|
57
63
|
this.txValidator = this.opts.txValidator ?? new BatchRequestTxValidator(this.p2pService.txValidatorConfig);
|
|
58
64
|
if (this.opts.peerCollection) {
|
|
59
65
|
this.peers = this.opts.peerCollection;
|
|
60
66
|
} else {
|
|
67
|
+
const initialPeers = this.p2pService.connectionSampler.getPeerListSortedByConnectionCountAsc();
|
|
61
68
|
const badPeerThreshold = this.opts.badPeerThreshold ?? DEFAULT_BATCH_TX_REQUESTER_BAD_PEER_THRESHOLD;
|
|
62
|
-
this.peers = new PeerCollection(
|
|
69
|
+
this.peers = new PeerCollection(initialPeers, this.pinnedPeer, this.dateProvider, badPeerThreshold, this.p2pService.peerScoring);
|
|
63
70
|
}
|
|
64
|
-
this.txsMetadata = new MissingTxMetadataCollection(
|
|
71
|
+
this.txsMetadata = new MissingTxMetadataCollection(missingTxsTracker, this.txBatchSize);
|
|
65
72
|
this.smartRequesterSemaphore = this.opts.semaphore ?? new Semaphore(0);
|
|
66
73
|
}
|
|
67
74
|
/*
|
|
68
75
|
* Fetches all missing transactions and yields them one by one
|
|
69
76
|
* */ async *run() {
|
|
77
|
+
// Our timeout is represented in milliseconds but queue expects seconds
|
|
78
|
+
// We also want to make sure we wait at least 1 second in case of very low timeouts
|
|
79
|
+
const timeoutQueueAfter = Math.max(Math.ceil(this.timeoutMs / 1_000), 1);
|
|
70
80
|
try {
|
|
71
81
|
if (this.txsMetadata.getMissingTxHashes().size === 0) {
|
|
72
82
|
return undefined;
|
|
73
83
|
}
|
|
74
|
-
// Start workers in background
|
|
75
|
-
const workersPromise = Promise.allSettled([
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
84
|
+
// Start workers in background
|
|
85
|
+
const workersPromise = executeTimeout(()=>Promise.allSettled([
|
|
86
|
+
this.smartRequester(),
|
|
87
|
+
this.dumbRequester(),
|
|
88
|
+
this.pinnedPeerRequester()
|
|
89
|
+
]), this.timeoutMs).finally(()=>{
|
|
80
90
|
this.txQueue.end();
|
|
81
91
|
});
|
|
82
|
-
// Yield txs as workers put them on the queue. The queue's end() drains remaining items
|
|
83
|
-
// before returning null, so we don't lose any txs.
|
|
84
92
|
while(true){
|
|
85
|
-
const tx = await this.txQueue.get();
|
|
93
|
+
const tx = await this.txQueue.get(timeoutQueueAfter);
|
|
94
|
+
// null indicates that the queue has ended
|
|
86
95
|
if (tx === null) {
|
|
87
96
|
break;
|
|
88
97
|
}
|
|
89
98
|
yield tx;
|
|
99
|
+
if (this.shouldStop()) {
|
|
100
|
+
// Drain queue before ending
|
|
101
|
+
let remaining;
|
|
102
|
+
while((remaining = this.txQueue.getImmediate()) !== undefined){
|
|
103
|
+
yield remaining;
|
|
104
|
+
}
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
90
107
|
}
|
|
91
108
|
this.unlockSmartRequesterSemaphores();
|
|
92
109
|
await workersPromise;
|
|
@@ -160,6 +177,7 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
160
177
|
/*
|
|
161
178
|
* Starts dumb worker loops
|
|
162
179
|
* */ async dumbRequester() {
|
|
180
|
+
const nextPeerIndex = this.makeRoundRobinIndexer();
|
|
163
181
|
const nextBatchIndex = this.makeRoundRobinIndexer();
|
|
164
182
|
// Chunk missing tx hashes into batches of txBatchSize, wrapping around to ensure no peer gets less than txBatchSize
|
|
165
183
|
const txChunks = ()=>{
|
|
@@ -187,10 +205,15 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
187
205
|
txs
|
|
188
206
|
};
|
|
189
207
|
};
|
|
190
|
-
const
|
|
208
|
+
const nextPeer = ()=>{
|
|
209
|
+
const peers = this.peers.getDumbPeersToQuery();
|
|
210
|
+
const idx = nextPeerIndex(()=>peers.length);
|
|
211
|
+
return idx === undefined ? undefined : peerIdFromString(peers[idx]);
|
|
212
|
+
};
|
|
213
|
+
const workerCount = Math.min(this.dumbParallelWorkerCount, this.peers.getAllPeers().size);
|
|
191
214
|
const workers = Array.from({
|
|
192
215
|
length: workerCount
|
|
193
|
-
}, (_, index)=>this.dumbWorkerLoop(
|
|
216
|
+
}, (_, index)=>this.dumbWorkerLoop(nextPeer, makeRequest, index + 1));
|
|
194
217
|
await Promise.allSettled(workers);
|
|
195
218
|
}
|
|
196
219
|
/*
|
|
@@ -234,6 +257,12 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
234
257
|
/*
|
|
235
258
|
* Starts smart worker loops
|
|
236
259
|
* */ async smartRequester() {
|
|
260
|
+
const nextPeerIndex = this.makeRoundRobinIndexer();
|
|
261
|
+
const nextPeer = ()=>{
|
|
262
|
+
const peers = this.peers.getSmartPeersToQuery();
|
|
263
|
+
const idx = nextPeerIndex(()=>peers.length);
|
|
264
|
+
return idx === undefined ? undefined : peerIdFromString(peers[idx]);
|
|
265
|
+
};
|
|
237
266
|
const makeRequest = (pid)=>{
|
|
238
267
|
const txs = this.txsMetadata.getTxsToRequestFromThePeer(pid);
|
|
239
268
|
const blockRequest = BlockTxsRequest.fromTxsSourceAndMissingTxs(this.blockTxsSource, txs);
|
|
@@ -246,8 +275,8 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
246
275
|
};
|
|
247
276
|
};
|
|
248
277
|
const workers = Array.from({
|
|
249
|
-
length: this.smartParallelWorkerCount
|
|
250
|
-
}, (_, index)=>this.smartWorkerLoop(
|
|
278
|
+
length: Math.min(this.smartParallelWorkerCount, this.peers.getAllPeers().size)
|
|
279
|
+
}, (_, index)=>this.smartWorkerLoop(nextPeer, makeRequest, index + 1));
|
|
251
280
|
await Promise.allSettled(workers);
|
|
252
281
|
}
|
|
253
282
|
/*
|
|
@@ -265,40 +294,35 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
265
294
|
* */ async smartWorkerLoop(pickNextPeer, request, workerIndex) {
|
|
266
295
|
try {
|
|
267
296
|
this.logger.trace(`Smart worker ${workerIndex} started`);
|
|
268
|
-
await
|
|
269
|
-
this.smartRequesterSemaphore.acquire(),
|
|
270
|
-
this.requestTracker.cancellationToken
|
|
271
|
-
]);
|
|
272
|
-
if (this.requestTracker.checkCancelled()) {
|
|
273
|
-
return;
|
|
274
|
-
}
|
|
297
|
+
await executeTimeout((_)=>this.smartRequesterSemaphore.acquire(), this.timeoutMs);
|
|
275
298
|
this.logger.trace(`Smart worker ${workerIndex} acquired semaphore`);
|
|
276
299
|
while(!this.shouldStop()){
|
|
277
300
|
const peerId = pickNextPeer();
|
|
278
301
|
const weRanOutOfPeersToQuery = peerId === undefined;
|
|
279
302
|
if (weRanOutOfPeersToQuery) {
|
|
280
303
|
this.logger.debug(`Worker loop smart: No more peers to query`);
|
|
281
|
-
// If
|
|
282
|
-
|
|
283
|
-
const
|
|
284
|
-
if (
|
|
285
|
-
|
|
286
|
-
|
|
304
|
+
// If there are no more dumb peers to query then none of our peers can become smart,
|
|
305
|
+
// thus we can simply exit this worker
|
|
306
|
+
const noMoreDumbPeersToQuery = this.peers.getDumbPeersToQuery().length === 0;
|
|
307
|
+
if (noMoreDumbPeersToQuery) {
|
|
308
|
+
// These might be either smart peers that will get unblocked after _some time_
|
|
309
|
+
const nextSmartPeerDelay = this.peers.getNextSmartPeerAvailabilityDelayMs();
|
|
310
|
+
const thereAreSomeRateLimitedSmartPeers = nextSmartPeerDelay !== undefined;
|
|
311
|
+
if (thereAreSomeRateLimitedSmartPeers) {
|
|
312
|
+
await this.sleepClampedToDeadline(nextSmartPeerDelay);
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
this.logger.debug(`Worker loop smart: No more smart peers to query killing ${workerIndex}`);
|
|
316
|
+
break;
|
|
287
317
|
}
|
|
318
|
+
// Otherwise there are still some dumb peers that could become smart.
|
|
288
319
|
// We end up here when all known smart peers became temporarily unavailable via combination of
|
|
289
320
|
// (bad, in-flight, or rate-limited) or in some weird scenario all current smart peers turn bad which is permanent
|
|
290
|
-
// but
|
|
291
|
-
// or new peer can join as dumb and be promoted later
|
|
321
|
+
// but dumb peers still exist that could become smart.
|
|
292
322
|
//
|
|
293
323
|
// When a dumb peer responds with valid txIndices, it gets
|
|
294
324
|
// promoted to smart and releases the semaphore, waking this worker.
|
|
295
|
-
await
|
|
296
|
-
this.smartRequesterSemaphore.acquire(),
|
|
297
|
-
this.requestTracker.cancellationToken
|
|
298
|
-
]);
|
|
299
|
-
if (this.requestTracker.checkCancelled()) {
|
|
300
|
-
break;
|
|
301
|
-
}
|
|
325
|
+
await executeTimeout((_)=>this.smartRequesterSemaphore.acquire(), this.timeoutMs);
|
|
302
326
|
this.logger.debug(`Worker loop smart: acquired next smart peer`);
|
|
303
327
|
continue;
|
|
304
328
|
}
|
|
@@ -321,7 +345,11 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
321
345
|
});
|
|
322
346
|
}
|
|
323
347
|
} catch (err) {
|
|
324
|
-
|
|
348
|
+
if (err instanceof TimeoutError) {
|
|
349
|
+
this.logger.debug(`Smart worker ${workerIndex} timed out waiting for semaphore`);
|
|
350
|
+
} else {
|
|
351
|
+
this.logger.error(`Smart worker ${workerIndex} encountered an error: ${err}`);
|
|
352
|
+
}
|
|
325
353
|
} finally{
|
|
326
354
|
this.logger.debug(`Smart worker ${workerIndex} finished`);
|
|
327
355
|
}
|
|
@@ -359,17 +387,9 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
359
387
|
* - FAILURE and UNKNOWN: We penalise this, if peer has been penalised this way N times they are not queried again
|
|
360
388
|
* this implies we will query these peers couple of more times and give them a chance to "redeem" themselves before completely ignoring them
|
|
361
389
|
*/ handleFailResponseFromPeer(peerId, responseStatus) {
|
|
390
|
+
//TODO: Should we ban these peers?
|
|
362
391
|
if (responseStatus === ReqRespStatus.FAILURE || responseStatus === ReqRespStatus.UNKNOWN) {
|
|
363
392
|
this.peers.penalisePeer(peerId, PeerErrorSeverity.HighToleranceError);
|
|
364
|
-
this.peers.markPeerDumb(peerId);
|
|
365
|
-
this.txsMetadata.clearPeerData(peerId);
|
|
366
|
-
return;
|
|
367
|
-
}
|
|
368
|
-
// NOT_FOUND means the peer pruned its block proposal — it can no longer serve
|
|
369
|
-
// index-based requests, but this is a legitimate state so we don't penalize.
|
|
370
|
-
if (responseStatus === ReqRespStatus.NOT_FOUND) {
|
|
371
|
-
this.peers.markPeerDumb(peerId);
|
|
372
|
-
this.txsMetadata.clearPeerData(peerId);
|
|
373
393
|
return;
|
|
374
394
|
}
|
|
375
395
|
if (responseStatus === ReqRespStatus.RATE_LIMIT_EXCEEDED) {
|
|
@@ -438,9 +458,10 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
438
458
|
if (smartPeersAreDisabled) {
|
|
439
459
|
return;
|
|
440
460
|
}
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
461
|
+
// If block response is invalid we still want to query this peer in the future
|
|
462
|
+
// Because they sent successful response, so they might become smart peer in the future
|
|
463
|
+
// Or send us needed txs
|
|
464
|
+
if (!this.isBlockResponseValid(response)) {
|
|
444
465
|
return;
|
|
445
466
|
}
|
|
446
467
|
// We mark peer as "smart" only if they have some txs we are missing
|
|
@@ -452,24 +473,16 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
452
473
|
this.peers.markPeerSmart(peerId);
|
|
453
474
|
this.markTxsPeerHas(peerId, response);
|
|
454
475
|
// Unblock smart workers
|
|
455
|
-
this.
|
|
456
|
-
|
|
457
|
-
/**
|
|
458
|
-
* Handles an archive root mismatch between local state and peer response.
|
|
459
|
-
*
|
|
460
|
-
* - Response archive is Fr.ZERO (peer pruned proposal, legitimate): marks peer dumb.
|
|
461
|
-
* - Non-zero archive mismatch (malicious response): penalises + marks dumb.
|
|
462
|
-
*/ handleArchiveRootMismatch(peerId, response) {
|
|
463
|
-
if (!response.archiveRoot.isZero()) {
|
|
464
|
-
this.peers.penalisePeer(peerId, PeerErrorSeverity.LowToleranceError);
|
|
476
|
+
if (this.peers.getSmartPeersToQuery().length <= this.smartParallelWorkerCount) {
|
|
477
|
+
this.smartRequesterSemaphore.release();
|
|
465
478
|
}
|
|
466
|
-
|
|
467
|
-
|
|
479
|
+
}
|
|
480
|
+
isBlockResponseValid(response) {
|
|
481
|
+
const archiveRootsMatch = this.blockTxsSource.archive.toString() === response.archiveRoot.toString();
|
|
482
|
+
const peerHasSomeTxsFromProposal = !response.txIndices.isEmpty();
|
|
483
|
+
return archiveRootsMatch && peerHasSomeTxsFromProposal;
|
|
468
484
|
}
|
|
469
485
|
peerHasSomeTxsWeAreMissing(_peerId, response) {
|
|
470
|
-
if (response.txIndices.isEmpty()) {
|
|
471
|
-
return false;
|
|
472
|
-
}
|
|
473
486
|
const txsPeerHas = new Set(this.extractHashesPeerHasFromResponse(response).map((h)=>h.toString()));
|
|
474
487
|
return this.txsMetadata.getMissingTxHashes().intersection(txsPeerHas).size > 0;
|
|
475
488
|
}
|
|
@@ -510,12 +523,23 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
510
523
|
};
|
|
511
524
|
}
|
|
512
525
|
/*
|
|
513
|
-
*
|
|
514
|
-
|
|
515
|
-
|
|
526
|
+
* @returns true if all missing txs have been fetched */ fetchedAllTxs() {
|
|
527
|
+
return this.txsMetadata.getMissingTxHashes().size == 0;
|
|
528
|
+
}
|
|
529
|
+
/*
|
|
530
|
+
* Checks if the BatchTxRequester should stop fetching missing txs
|
|
531
|
+
* Conditions for stopping are:
|
|
532
|
+
* - There have been no missing transactions to start with
|
|
533
|
+
* - All transactions have been fetched
|
|
534
|
+
* - The deadline has been hit (no more time to fetch)
|
|
535
|
+
* - This process has been cancelled via abortSignal
|
|
536
|
+
*
|
|
537
|
+
* @returns true if BatchTxRequester should stop, otherwise false*/ shouldStop() {
|
|
538
|
+
const aborted = this.opts.abortSignal?.aborted ?? false;
|
|
539
|
+
if (aborted) {
|
|
516
540
|
this.unlockSmartRequesterSemaphores();
|
|
517
541
|
}
|
|
518
|
-
return this.
|
|
542
|
+
return aborted || this.fetchedAllTxs() || this.dateProvider.now() > this.deadline;
|
|
519
543
|
}
|
|
520
544
|
/*
|
|
521
545
|
* Helper function which unlocks all smart requester semaphores
|
|
@@ -529,12 +553,10 @@ import { BatchRequestTxValidator } from './tx_validator.js';
|
|
|
529
553
|
* Sleeps for the given duration, but clamped to the deadline.
|
|
530
554
|
* This ensures we don't sleep past the deadline.
|
|
531
555
|
* */ async sleepClampedToDeadline(durationMs) {
|
|
532
|
-
|
|
533
|
-
|
|
556
|
+
const remaining = this.deadline - this.dateProvider.now();
|
|
557
|
+
const thereIsTimeRemaining = remaining > 0;
|
|
558
|
+
if (thereIsTimeRemaining) {
|
|
559
|
+
await sleep(Math.min(durationMs, remaining));
|
|
534
560
|
}
|
|
535
|
-
await Promise.race([
|
|
536
|
-
sleep(durationMs),
|
|
537
|
-
this.requestTracker.cancellationToken
|
|
538
|
-
]);
|
|
539
561
|
}
|
|
540
562
|
}
|
|
@@ -18,8 +18,6 @@ export interface ITxMetadataCollection {
|
|
|
18
18
|
markNotInFlightBySmartPeer(txHash: TxHash): void;
|
|
19
19
|
alreadyFetched(txHash: TxHash): boolean;
|
|
20
20
|
markPeerHas(peerId: PeerId, txHashes: TxHash[]): void;
|
|
21
|
-
/** Remove all tx metadata associations for a peer (e.g. on demotion from smart to dumb). */
|
|
22
|
-
clearPeerData(peerId: PeerId): void;
|
|
23
21
|
}
|
|
24
22
|
/**
|
|
25
23
|
* Interface for BatchTxRequester dependencies that can be injected from upstream
|
|
@@ -41,7 +39,8 @@ export interface BatchTxRequesterOptions {
|
|
|
41
39
|
badPeerThreshold?: number;
|
|
42
40
|
semaphore?: ISemaphore;
|
|
43
41
|
peerCollection?: IPeerCollection;
|
|
42
|
+
abortSignal?: AbortSignal;
|
|
44
43
|
/** Optional tx validator for testing - if not provided, one is created from p2pService.txValidatorConfig */
|
|
45
44
|
txValidator?: IBatchRequestTxValidator;
|
|
46
45
|
}
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9iYXRjaC10eC1yZXF1ZXN0ZXIvaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDckYsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSw2QkFBNkIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWpHLE1BQU0sV0FBVyxjQUFjO0lBQzdCLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7Q0FDaEU7QUFFRCxNQUFNLFdBQVcscUJBQXFCO0lBQ3BDLGtCQUFrQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUM3QywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ25ELGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNwQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztJQUM5QywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNqRCxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFFeEMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztDQUN2RDtBQUVEOztHQUVHO0FBQ0gsTUFBTSxXQUFXLDZCQUE2QjtJQUM1QyxzREFBc0Q7SUFDdEQsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzFFLGdEQUFnRDtJQUNoRCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsdUNBQXVDLENBQUMsQ0FBQztJQUNwRixzREFBc0Q7SUFDdEQsaUJBQWlCLEVBQUUsNkJBQTZCLENBQUM7SUFDakQsd0NBQXdDO0lBQ3hDLFdBQVcsRUFBRSxjQUFjLENBQUM7Q0FDN0I7QUFFRCxNQUFNLFdBQVcsdUJBQXVCO0lBQ3RDLHdCQUF3QixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2xDLHVCQUF1QixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2pDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNyQixnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUUxQixTQUFTLENBQUMsRUFBRSxVQUFVLENBQUM7SUFDdkIsY0FBYyxDQUFDLEVBQUUsZUFBZSxDQUFDO0lBQ2pDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQztJQUMxQiw0R0FBNEc7SUFDNUcsV0FBVyxDQUFDLEVBQUUsd0JBQXdCLENBQUM7Q0FDeEMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,6BAA6B,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAEjG,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAC7C,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACnD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACjD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAExC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,6BAA6B,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAEjG,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAC7C,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACnD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACjD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAExC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,sDAAsD;IACtD,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,mBAAmB,CAAC,CAAC;IAC1E,gDAAgD;IAChD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,uCAAuC,CAAC,CAAC;IACpF,sDAAsD;IACtD,iBAAiB,EAAE,6BAA6B,CAAC;IACjD,wCAAwC;IACxC,WAAW,EAAE,cAAc,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,4GAA4G;IAC5G,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACxC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Tx, TxHash } from '@aztec/stdlib/tx';
|
|
2
2
|
import type { PeerId } from '@libp2p/interface';
|
|
3
|
-
import type {
|
|
3
|
+
import type { IMissingTxsTracker } from '../../tx_collection/missing_txs_tracker.js';
|
|
4
4
|
import type { ITxMetadataCollection } from './interface.js';
|
|
5
5
|
declare class MissingTxMetadata {
|
|
6
6
|
readonly txHash: string;
|
|
@@ -15,10 +15,10 @@ declare class MissingTxMetadata {
|
|
|
15
15
|
isInFlight(): boolean;
|
|
16
16
|
}
|
|
17
17
|
export declare class MissingTxMetadataCollection implements ITxMetadataCollection {
|
|
18
|
-
private
|
|
18
|
+
private missingTxsTracker;
|
|
19
19
|
private readonly txBatchSize;
|
|
20
20
|
private txMetadata;
|
|
21
|
-
constructor(
|
|
21
|
+
constructor(missingTxsTracker: IMissingTxsTracker, txBatchSize?: number);
|
|
22
22
|
getPrioritizingNotInFlightAndLowerRequestCount(txs: string[]): MissingTxMetadata[];
|
|
23
23
|
getMissingTxHashes(): Set<string>;
|
|
24
24
|
getTxsPeerHas(peer: PeerId): Set<string>;
|
|
@@ -29,7 +29,6 @@ export declare class MissingTxMetadataCollection implements ITxMetadataCollectio
|
|
|
29
29
|
alreadyFetched(txHash: TxHash): boolean;
|
|
30
30
|
markFetched(peerId: PeerId, tx: Tx): boolean;
|
|
31
31
|
markPeerHas(peerId: PeerId, txHash: TxHash[]): void;
|
|
32
|
-
clearPeerData(peerId: PeerId): void;
|
|
33
32
|
}
|
|
34
33
|
export {};
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzc2luZ190eHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL2JhdGNoLXR4LXJlcXVlc3Rlci9taXNzaW5nX3R4cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVyRixPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVELGNBQU0saUJBQWlCO2FBRUgsTUFBTSxFQUFFLE1BQU07SUFDdkIsY0FBYztJQUNkLGFBQWE7SUFDYixFQUFFLEVBQUUsRUFBRSxHQUFHLFNBQVM7YUFDVCxLQUFLO0lBTHZCLFlBQ2tCLE1BQU0sRUFBRSxNQUFNLEVBQ3ZCLGNBQWMsU0FBSSxFQUNsQixhQUFhLFNBQUksRUFDakIsRUFBRSxHQUFFLEVBQUUsR0FBRyxTQUFxQixFQUNyQixLQUFLLGNBQW9CLEVBQ3ZDO0lBRUcsZUFBZSxTQUVyQjtJQUVNLFlBQVksU0FFbEI7SUFFTSxlQUFlLFNBRXJCO0lBRU0sVUFBVSxJQUFJLE9BQU8sQ0FFM0I7Q0FDRjtBQU9ELHFCQUFhLDJCQUE0QixZQUFXLHFCQUFxQjtJQUlyRSxPQUFPLENBQUMsaUJBQWlCO0lBQ3pCLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVztJQUo5QixPQUFPLENBQUMsVUFBVSxDQUF3QztJQUUxRCxZQUNVLGlCQUFpQixFQUFFLGtCQUFrQixFQUM1QixXQUFXLEdBQUUsTUFBaUQsRUFHaEY7SUFFTSw4Q0FBOEMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsaUJBQWlCLEVBQUUsQ0FleEY7SUFFTSxrQkFBa0IsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBRXZDO0lBRU0sYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQVc5QztJQUVNLDBCQUEwQixDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBdUJ4RDtJQUVNLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxRQUVsQztJQU9NLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxNQUFNLFFBRTVDO0lBTU0sMEJBQTBCLENBQUMsTUFBTSxFQUFFLE1BQU0sUUFFL0M7SUFFTSxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBRTdDO0lBRU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBY2xEO0lBRU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQVVsRDtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"missing_txs.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/missing_txs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"missing_txs.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/missing_txs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAErF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,cAAM,iBAAiB;aAEH,MAAM,EAAE,MAAM;IACvB,cAAc;IACd,aAAa;IACb,EAAE,EAAE,EAAE,GAAG,SAAS;aACT,KAAK;IALvB,YACkB,MAAM,EAAE,MAAM,EACvB,cAAc,SAAI,EAClB,aAAa,SAAI,EACjB,EAAE,GAAE,EAAE,GAAG,SAAqB,EACrB,KAAK,cAAoB,EACvC;IAEG,eAAe,SAErB;IAEM,YAAY,SAElB;IAEM,eAAe,SAErB;IAEM,UAAU,IAAI,OAAO,CAE3B;CACF;AAOD,qBAAa,2BAA4B,YAAW,qBAAqB;IAIrE,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJ9B,OAAO,CAAC,UAAU,CAAwC;IAE1D,YACU,iBAAiB,EAAE,kBAAkB,EAC5B,WAAW,GAAE,MAAiD,EAGhF;IAEM,8CAA8C,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAexF;IAEM,kBAAkB,IAAI,GAAG,CAAC,MAAM,CAAC,CAEvC;IAEM,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAW9C;IAEM,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAuBxD;IAEM,aAAa,CAAC,MAAM,EAAE,MAAM,QAElC;IAOM,uBAAuB,CAAC,MAAM,EAAE,MAAM,QAE5C;IAMM,0BAA0B,CAAC,MAAM,EAAE,MAAM,QAE/C;IAEM,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE7C;IAEM,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAclD;IAEM,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAUlD;CACF"}
|
|
@@ -31,14 +31,14 @@ class MissingTxMetadata {
|
|
|
31
31
|
* This could be better optimized but given expected count of missing txs (N < 100)
|
|
32
32
|
* At the moment there is no need for it. And benefit is that we have everything in single store
|
|
33
33
|
* */ export class MissingTxMetadataCollection {
|
|
34
|
-
|
|
34
|
+
missingTxsTracker;
|
|
35
35
|
txBatchSize;
|
|
36
36
|
txMetadata;
|
|
37
|
-
constructor(
|
|
38
|
-
this.
|
|
37
|
+
constructor(missingTxsTracker, txBatchSize = DEFAULT_BATCH_TX_REQUESTER_TX_BATCH_SIZE){
|
|
38
|
+
this.missingTxsTracker = missingTxsTracker;
|
|
39
39
|
this.txBatchSize = txBatchSize;
|
|
40
40
|
this.txMetadata = new Map();
|
|
41
|
-
|
|
41
|
+
missingTxsTracker.missingTxHashes.forEach((hash)=>this.txMetadata.set(hash, new MissingTxMetadata(hash)));
|
|
42
42
|
}
|
|
43
43
|
getPrioritizingNotInFlightAndLowerRequestCount(txs) {
|
|
44
44
|
const filtered = Array.from(this.txMetadata.values()).filter((txMeta)=>txs.includes(txMeta.txHash.toString()));
|
|
@@ -57,7 +57,7 @@ class MissingTxMetadata {
|
|
|
57
57
|
];
|
|
58
58
|
}
|
|
59
59
|
getMissingTxHashes() {
|
|
60
|
-
return this.
|
|
60
|
+
return this.missingTxsTracker.missingTxHashes;
|
|
61
61
|
}
|
|
62
62
|
getTxsPeerHas(peer) {
|
|
63
63
|
const peerIdStr = peer.toString();
|
|
@@ -102,7 +102,7 @@ class MissingTxMetadata {
|
|
|
102
102
|
this.txMetadata.get(txHash.toString())?.markNotInFlight();
|
|
103
103
|
}
|
|
104
104
|
alreadyFetched(txHash) {
|
|
105
|
-
return !this.
|
|
105
|
+
return !this.missingTxsTracker.isMissing(txHash.toString());
|
|
106
106
|
}
|
|
107
107
|
markFetched(peerId, tx) {
|
|
108
108
|
const txHashStr = tx.txHash.toString();
|
|
@@ -116,7 +116,7 @@ class MissingTxMetadata {
|
|
|
116
116
|
return false;
|
|
117
117
|
}
|
|
118
118
|
txMeta.peers.add(peerId.toString());
|
|
119
|
-
return this.
|
|
119
|
+
return this.missingTxsTracker.markFetched(tx);
|
|
120
120
|
}
|
|
121
121
|
markPeerHas(peerId, txHash) {
|
|
122
122
|
const peerIdStr = peerId.toString();
|
|
@@ -127,10 +127,4 @@ class MissingTxMetadata {
|
|
|
127
127
|
}
|
|
128
128
|
});
|
|
129
129
|
}
|
|
130
|
-
clearPeerData(peerId) {
|
|
131
|
-
const peerIdStr = peerId.toString();
|
|
132
|
-
for (const txMeta of this.txMetadata.values()){
|
|
133
|
-
txMeta.peers.delete(peerIdStr);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
130
|
}
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import type { DateProvider } from '@aztec/foundation/timer';
|
|
2
2
|
import type { PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
3
3
|
import type { PeerId } from '@libp2p/interface';
|
|
4
|
-
import type { ConnectionSampler } from '../connection-sampler/connection_sampler.js';
|
|
5
4
|
import type { IPeerPenalizer } from './interface.js';
|
|
6
5
|
export declare const RATE_LIMIT_EXCEEDED_PEER_CACHE_TTL = 1000;
|
|
7
6
|
export interface IPeerCollection {
|
|
7
|
+
getAllPeers(): Set<string>;
|
|
8
|
+
getSmartPeers(): Set<string>;
|
|
8
9
|
markPeerSmart(peerId: PeerId): void;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
nextSmartPeerToQuery(): PeerId | undefined;
|
|
12
|
-
/** Sample next peer in round-robin fashion. No dumb peers if returns undefined */
|
|
13
|
-
nextDumbPeerToQuery(): PeerId | undefined;
|
|
10
|
+
getSmartPeersToQuery(): Array<string>;
|
|
11
|
+
getDumbPeersToQuery(): Array<string>;
|
|
14
12
|
thereAreSomeDumbRatelimitExceededPeers(): boolean;
|
|
15
13
|
penalisePeer(peerId: PeerId, severity: PeerErrorSeverity): void;
|
|
16
14
|
unMarkPeerAsBad(peerId: PeerId): void;
|
|
@@ -24,26 +22,22 @@ export interface IPeerCollection {
|
|
|
24
22
|
getNextSmartPeerAvailabilityDelayMs(): number | undefined;
|
|
25
23
|
}
|
|
26
24
|
export declare class PeerCollection implements IPeerCollection {
|
|
27
|
-
private readonly connectionSampler;
|
|
28
25
|
private readonly pinnedPeerId;
|
|
29
26
|
private readonly dateProvider;
|
|
30
27
|
private readonly badPeerThreshold;
|
|
31
28
|
private readonly peerPenalizer?;
|
|
29
|
+
private readonly peers;
|
|
32
30
|
private readonly smartPeers;
|
|
33
31
|
private readonly inFlightPeers;
|
|
34
32
|
private readonly rateLimitExceededPeers;
|
|
35
33
|
private readonly peerPenaltyCounters;
|
|
36
34
|
private readonly badPeers;
|
|
37
|
-
constructor(
|
|
35
|
+
constructor(initialPeers: PeerId[], pinnedPeerId: PeerId | undefined, dateProvider: DateProvider, badPeerThreshold?: number, peerPenalizer?: IPeerPenalizer | undefined);
|
|
36
|
+
getAllPeers(): Set<string>;
|
|
37
|
+
getSmartPeers(): Set<string>;
|
|
38
38
|
markPeerSmart(peerId: PeerId): void;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
private queriedDumbPeers;
|
|
42
|
-
private static nextPeer;
|
|
43
|
-
nextSmartPeerToQuery(): PeerId | undefined;
|
|
44
|
-
nextDumbPeerToQuery(): PeerId | undefined;
|
|
45
|
-
private get availableSmartPeers();
|
|
46
|
-
private get availableDumbPeers();
|
|
39
|
+
getSmartPeersToQuery(): Array<string>;
|
|
40
|
+
getDumbPeersToQuery(): Array<string>;
|
|
47
41
|
thereAreSomeDumbRatelimitExceededPeers(): boolean;
|
|
48
42
|
markPeerInFlight(peerId: PeerId): void;
|
|
49
43
|
unMarkPeerInFlight(peerId: PeerId): void;
|
|
@@ -56,7 +50,5 @@ export declare class PeerCollection implements IPeerCollection {
|
|
|
56
50
|
getNextDumbPeerAvailabilityDelayMs(): number | undefined;
|
|
57
51
|
getNextSmartPeerAvailabilityDelayMs(): number | undefined;
|
|
58
52
|
private getNextRateLimitDelayMs;
|
|
59
|
-
private orderedPeers;
|
|
60
|
-
private get peers();
|
|
61
53
|
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9jb2xsZWN0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9iYXRjaC10eC1yZXF1ZXN0ZXIvcGVlcl9jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFM0QsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHaEQsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckQsZUFBTyxNQUFNLGtDQUFrQyxPQUFPLENBQUM7QUFFdkQsTUFBTSxXQUFXLGVBQWU7SUFDOUIsV0FBVyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixhQUFhLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdCLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNwQyxvQkFBb0IsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsbUJBQW1CLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLHNDQUFzQyxJQUFJLE9BQU8sQ0FBQztJQUNsRCxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ2hFLGVBQWUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztJQUN0QyxXQUFXLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3ZDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3pDLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2hELHlCQUF5QixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6Qyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDNUQsa0NBQWtDLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUN6RCxtQ0FBbUMsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDO0NBQzNEO0FBRUQscUJBQWEsY0FBZSxZQUFXLGVBQWU7SUFXbEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZO0lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWTtJQUM3QixPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQjtJQUNqQyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztJQWJqQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUV2QixPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBcUI7SUFDaEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQXFCO0lBQ25ELE9BQU8sQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQTZCO0lBQ3BFLE9BQU8sQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQTZCO0lBQ2pFLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFxQjtJQUU5QyxZQUNFLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFDTCxZQUFZLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDaEMsWUFBWSxFQUFFLFlBQVksRUFDMUIsZ0JBQWdCLEdBQUUsTUFBc0QsRUFDeEUsYUFBYSxDQUFDLDRCQUFnQixFQVdoRDtJQUVNLFdBQVcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBRWhDO0lBRU0sYUFBYSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FFbEM7SUFFTSxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBRXpDO0lBRU0sb0JBQW9CLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUkzQztJQUVNLG1CQUFtQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FNMUM7SUFFTSxzQ0FBc0MsSUFBSSxPQUFPLENBS3ZEO0lBRU0sZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sUUFFckM7SUFFTSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxRQU12QztJQUVNLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxNQUFNLFFBRzlDO0lBRU0seUJBQXlCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQWE5QztJQUVNLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsR0FBRyxJQUFJLENBUXJFO0lBRU0sZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLFFBSXBDO0lBRU0sV0FBVyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FFaEM7SUFFTSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU0sR0FBRyxTQUFTLENBZWpFO0lBRU0sa0NBQWtDLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FXOUQ7SUFFTSxtQ0FBbUMsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUsvRDtJQUVELE9BQU8sQ0FBQyx1QkFBdUI7Q0EwQmhDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer_collection.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/peer_collection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"peer_collection.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/peer_collection.ts"],"names":[],"mappings":"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"}
|