@aztec/p2p 0.43.0 → 0.44.0
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/index.d.ts.map +1 -1
- package/dest/client/index.js +5 -7
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +2 -3
- package/dest/service/discV5_service.d.ts +5 -2
- package/dest/service/discV5_service.d.ts.map +1 -1
- package/dest/service/discV5_service.js +26 -9
- package/dest/service/dummy_service.d.ts +4 -1
- package/dest/service/dummy_service.d.ts.map +1 -1
- package/dest/service/dummy_service.js +7 -1
- package/dest/service/libp2p_service.d.ts +6 -14
- package/dest/service/libp2p_service.d.ts.map +1 -1
- package/dest/service/libp2p_service.js +49 -91
- package/dest/service/peer_manager.d.ts +25 -3
- package/dest/service/peer_manager.d.ts.map +1 -1
- package/dest/service/peer_manager.js +152 -12
- package/dest/service/service.d.ts +12 -6
- package/dest/service/service.d.ts.map +1 -1
- package/dest/service/service.js +1 -1
- package/dest/tx_pool/aztec_kv_tx_pool.d.ts +2 -1
- package/dest/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/tx_pool/aztec_kv_tx_pool.js +11 -6
- package/dest/tx_pool/instrumentation.d.ts +23 -0
- package/dest/tx_pool/instrumentation.d.ts.map +1 -0
- package/dest/tx_pool/instrumentation.js +48 -0
- package/dest/tx_pool/memory_tx_pool.d.ts +3 -1
- package/dest/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/tx_pool/memory_tx_pool.js +6 -2
- package/package.json +15 -6
- package/src/client/index.ts +4 -6
- package/src/client/p2p_client.ts +1 -2
- package/src/service/discV5_service.ts +28 -11
- package/src/service/dummy_service.ts +10 -1
- package/src/service/libp2p_service.ts +52 -101
- package/src/service/peer_manager.ts +187 -12
- package/src/service/service.ts +14 -7
- package/src/tx_pool/aztec_kv_tx_pool.ts +12 -3
- package/src/tx_pool/instrumentation.ts +58 -0
- package/src/tx_pool/memory_tx_pool.ts +8 -1
- package/dest/service/known_txs.d.ts +0 -31
- package/dest/service/known_txs.d.ts.map +0 -1
- package/dest/service/known_txs.js +0 -52
- package/src/service/known_txs.ts +0 -56
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
var _AztecKVTxPool_store, _AztecKVTxPool_txs, _AztecKVTxPool_log;
|
|
1
|
+
var _AztecKVTxPool_store, _AztecKVTxPool_txs, _AztecKVTxPool_log, _AztecKVTxPool_metrics;
|
|
2
2
|
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
3
|
import { Tx, TxHash } from '@aztec/circuit-types';
|
|
4
4
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
5
|
+
import { TxPoolInstrumentation } from './instrumentation.js';
|
|
5
6
|
/**
|
|
6
7
|
* In-memory implementation of the Transaction Pool.
|
|
7
8
|
*/
|
|
@@ -11,16 +12,18 @@ export class AztecKVTxPool {
|
|
|
11
12
|
* @param store - A KV store.
|
|
12
13
|
* @param log - A logger.
|
|
13
14
|
*/
|
|
14
|
-
constructor(store, log = createDebugLogger('aztec:tx_pool')) {
|
|
15
|
+
constructor(store, telemetry, log = createDebugLogger('aztec:tx_pool')) {
|
|
15
16
|
_AztecKVTxPool_store.set(this, void 0);
|
|
16
17
|
/**
|
|
17
18
|
* Our tx pool, stored as a Map in-memory, with K: tx hash and V: the transaction.
|
|
18
19
|
*/
|
|
19
20
|
_AztecKVTxPool_txs.set(this, void 0);
|
|
20
21
|
_AztecKVTxPool_log.set(this, void 0);
|
|
22
|
+
_AztecKVTxPool_metrics.set(this, void 0);
|
|
21
23
|
__classPrivateFieldSet(this, _AztecKVTxPool_txs, store.openMap('txs'), "f");
|
|
22
24
|
__classPrivateFieldSet(this, _AztecKVTxPool_store, store, "f");
|
|
23
25
|
__classPrivateFieldSet(this, _AztecKVTxPool_log, log, "f");
|
|
26
|
+
__classPrivateFieldSet(this, _AztecKVTxPool_metrics, new TxPoolInstrumentation(telemetry, 'AztecKVTxPool'), "f");
|
|
24
27
|
}
|
|
25
28
|
/**
|
|
26
29
|
* Checks if a transaction exists in the pool and returns it.
|
|
@@ -36,8 +39,8 @@ export class AztecKVTxPool {
|
|
|
36
39
|
* @param txs - An array of txs to be added to the pool.
|
|
37
40
|
* @returns Empty promise.
|
|
38
41
|
*/
|
|
39
|
-
|
|
40
|
-
const txHashes =
|
|
42
|
+
addTxs(txs) {
|
|
43
|
+
const txHashes = txs.map(tx => tx.getTxHash());
|
|
41
44
|
return __classPrivateFieldGet(this, _AztecKVTxPool_store, "f").transaction(() => {
|
|
42
45
|
for (const [i, tx] of txs.entries()) {
|
|
43
46
|
const txHash = txHashes[i];
|
|
@@ -47,6 +50,7 @@ export class AztecKVTxPool {
|
|
|
47
50
|
});
|
|
48
51
|
void __classPrivateFieldGet(this, _AztecKVTxPool_txs, "f").set(txHash.toString(), tx.toBuffer());
|
|
49
52
|
}
|
|
53
|
+
__classPrivateFieldGet(this, _AztecKVTxPool_metrics, "f").recordTxs(txs);
|
|
50
54
|
});
|
|
51
55
|
}
|
|
52
56
|
/**
|
|
@@ -59,6 +63,7 @@ export class AztecKVTxPool {
|
|
|
59
63
|
for (const hash of txHashes) {
|
|
60
64
|
void __classPrivateFieldGet(this, _AztecKVTxPool_txs, "f").delete(hash.toString());
|
|
61
65
|
}
|
|
66
|
+
__classPrivateFieldGet(this, _AztecKVTxPool_metrics, "f").removeTxs(txHashes.length);
|
|
62
67
|
});
|
|
63
68
|
}
|
|
64
69
|
/**
|
|
@@ -84,5 +89,5 @@ export class AztecKVTxPool {
|
|
|
84
89
|
return __classPrivateFieldGet(this, _AztecKVTxPool_txs, "f").has(txHash.toString());
|
|
85
90
|
}
|
|
86
91
|
}
|
|
87
|
-
_AztecKVTxPool_store = new WeakMap(), _AztecKVTxPool_txs = new WeakMap(), _AztecKVTxPool_log = new WeakMap();
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
_AztecKVTxPool_store = new WeakMap(), _AztecKVTxPool_txs = new WeakMap(), _AztecKVTxPool_log = new WeakMap(), _AztecKVTxPool_metrics = new WeakMap();
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp0ZWNfa3ZfdHhfcG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF9wb29sL2F6dGVjX2t2X3R4X3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBZSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSXZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRzdEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFZeEI7Ozs7T0FJRztJQUNILFlBQVksS0FBbUIsRUFBRSxTQUEwQixFQUFFLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxlQUFlLENBQUM7UUFoQnJHLHVDQUFxQjtRQUVyQjs7V0FFRztRQUNILHFDQUErQjtRQUUvQixxQ0FBYTtRQUViLHlDQUFnQztRQVE5Qix1QkFBQSxJQUFJLHNCQUFRLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQUEsQ0FBQztRQUNqQyx1QkFBQSxJQUFJLHdCQUFVLEtBQUssTUFBQSxDQUFDO1FBQ3BCLHVCQUFBLElBQUksc0JBQVEsR0FBRyxNQUFBLENBQUM7UUFDaEIsdUJBQUEsSUFBSSwwQkFBWSxJQUFJLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsTUFBQSxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksV0FBVyxDQUFDLE1BQWM7UUFDL0IsTUFBTSxNQUFNLEdBQUcsdUJBQUEsSUFBSSwwQkFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNoRCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLEdBQVM7UUFDckIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sdUJBQUEsSUFBSSw0QkFBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLHVCQUFBLElBQUksMEJBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFO29CQUN2RCxTQUFTLEVBQUUsa0JBQWtCO29CQUM3QixHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUU7aUJBQ1ksQ0FBQyxDQUFDO2dCQUVoQyxLQUFLLHVCQUFBLElBQUksMEJBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFFRCx1QkFBQSxJQUFJLDhCQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxTQUFTLENBQUMsUUFBa0I7UUFDakMsT0FBTyx1QkFBQSxJQUFJLDRCQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixLQUFLLHVCQUFBLElBQUksMEJBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDekMsQ0FBQztZQUVELHVCQUFBLElBQUksOEJBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFNBQVM7UUFDZCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsdUJBQUEsSUFBSSwwQkFBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRDs7O09BR0c7SUFDSSxjQUFjO1FBQ25CLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBQSxJQUFJLDBCQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsTUFBYztRQUN6QixPQUFPLHVCQUFBLElBQUksMEJBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type Tx } from '@aztec/circuit-types';
|
|
2
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
3
|
+
/**
|
|
4
|
+
* Instrumentation class for the TxPool.
|
|
5
|
+
*/
|
|
6
|
+
export declare class TxPoolInstrumentation {
|
|
7
|
+
/** The number of txs in the mempool */
|
|
8
|
+
private txInMempool;
|
|
9
|
+
/** Tracks tx size */
|
|
10
|
+
private txSize;
|
|
11
|
+
constructor(telemetry: TelemetryClient, name: string);
|
|
12
|
+
/**
|
|
13
|
+
* Updates the metrics with the new transactions.
|
|
14
|
+
* @param txs - The transactions to record
|
|
15
|
+
*/
|
|
16
|
+
recordTxs(txs: Tx[]): void;
|
|
17
|
+
/**
|
|
18
|
+
* Updates the metrics by removing transactions from the mempool.
|
|
19
|
+
* @param count - The number of transactions to remove from the mempool
|
|
20
|
+
*/
|
|
21
|
+
removeTxs(count?: number): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=instrumentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/tx_pool/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAA2B,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAE5G;;GAEG;AACH,qBAAa,qBAAqB;IAChC,uCAAuC;IACvC,OAAO,CAAC,WAAW,CAAgB;IACnC,qBAAqB;IACrB,OAAO,CAAC,MAAM,CAAY;gBAEd,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM;IAuBpD;;;OAGG;IACI,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE;IAQ1B;;;OAGG;IACI,SAAS,CAAC,KAAK,SAAI;CAM3B"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Metrics } from '@aztec/telemetry-client';
|
|
2
|
+
/**
|
|
3
|
+
* Instrumentation class for the TxPool.
|
|
4
|
+
*/
|
|
5
|
+
export class TxPoolInstrumentation {
|
|
6
|
+
constructor(telemetry, name) {
|
|
7
|
+
const meter = telemetry.getMeter(name);
|
|
8
|
+
this.txInMempool = meter.createUpDownCounter(Metrics.MEMPOOL_TX_COUNT, {
|
|
9
|
+
description: 'The current number of transactions in the mempool',
|
|
10
|
+
});
|
|
11
|
+
this.txSize = meter.createHistogram(Metrics.MEMPOOL_TX_SIZE, {
|
|
12
|
+
unit: 'By',
|
|
13
|
+
description: 'The size of transactions in the mempool',
|
|
14
|
+
advice: {
|
|
15
|
+
explicitBucketBoundaries: [
|
|
16
|
+
5000, // 5KB
|
|
17
|
+
10000,
|
|
18
|
+
20000,
|
|
19
|
+
50000,
|
|
20
|
+
75000,
|
|
21
|
+
100000, // 100KB
|
|
22
|
+
200000,
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Updates the metrics with the new transactions.
|
|
29
|
+
* @param txs - The transactions to record
|
|
30
|
+
*/
|
|
31
|
+
recordTxs(txs) {
|
|
32
|
+
for (const tx of txs) {
|
|
33
|
+
this.txSize.record(tx.getSize());
|
|
34
|
+
}
|
|
35
|
+
this.txInMempool.add(txs.length);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Updates the metrics by removing transactions from the mempool.
|
|
39
|
+
* @param count - The number of transactions to remove from the mempool
|
|
40
|
+
*/
|
|
41
|
+
removeTxs(count = 1) {
|
|
42
|
+
if (count < 0) {
|
|
43
|
+
throw new Error('Count must be positive');
|
|
44
|
+
}
|
|
45
|
+
this.txInMempool.add(-1 * count);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4X3Bvb2wvaW5zdHJ1bWVudGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBa0IsT0FBTyxFQUE0QyxNQUFNLHlCQUF5QixDQUFDO0FBRTVHOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHFCQUFxQjtJQU1oQyxZQUFZLFNBQTBCLEVBQUUsSUFBWTtRQUNsRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyRSxXQUFXLEVBQUUsbURBQW1EO1NBQ2pFLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFO1lBQzNELElBQUksRUFBRSxJQUFJO1lBQ1YsV0FBVyxFQUFFLHlDQUF5QztZQUN0RCxNQUFNLEVBQUU7Z0JBQ04sd0JBQXdCLEVBQUU7b0JBQ3hCLElBQUssRUFBRSxNQUFNO29CQUNiLEtBQU07b0JBQ04sS0FBTTtvQkFDTixLQUFNO29CQUNOLEtBQU07b0JBQ04sTUFBTyxFQUFFLFFBQVE7b0JBQ2pCLE1BQU87aUJBQ1I7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxTQUFTLENBQUMsR0FBUztRQUN4QixLQUFLLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztRQUN4QixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGIn0=
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Tx, TxHash } from '@aztec/circuit-types';
|
|
2
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
2
3
|
import { type TxPool } from './tx_pool.js';
|
|
3
4
|
/**
|
|
4
5
|
* In-memory implementation of the Transaction Pool.
|
|
@@ -9,11 +10,12 @@ export declare class InMemoryTxPool implements TxPool {
|
|
|
9
10
|
* Our tx pool, stored as a Map in-memory, with K: tx hash and V: the transaction.
|
|
10
11
|
*/
|
|
11
12
|
private txs;
|
|
13
|
+
private metrics;
|
|
12
14
|
/**
|
|
13
15
|
* Class constructor for in-memory TxPool. Initiates our transaction pool as a JS Map.
|
|
14
16
|
* @param log - A logger.
|
|
15
17
|
*/
|
|
16
|
-
constructor(log?: import("@aztec/foundation/log").Logger);
|
|
18
|
+
constructor(telemetry: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
|
|
17
19
|
/**
|
|
18
20
|
* Checks if a transaction exists in the pool and returns it.
|
|
19
21
|
* @param txHash - The generated tx hash.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory_tx_pool.d.ts","sourceRoot":"","sources":["../../src/tx_pool/memory_tx_pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"memory_tx_pool.d.ts","sourceRoot":"","sources":["../../src/tx_pool/memory_tx_pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGlD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;GAEG;AACH,qBAAa,cAAe,YAAW,MAAM;IAYH,OAAO,CAAC,GAAG;IAXnD;;OAEG;IACH,OAAO,CAAC,GAAG,CAAkB;IAE7B,OAAO,CAAC,OAAO,CAAwB;IAEvC;;;OAGG;gBACS,SAAS,EAAE,eAAe,EAAU,GAAG,yCAAqC;IAKxF;;;;OAIG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,GAAG,SAAS;IAKlD;;;;OAIG;IACI,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAavC;;;;OAIG;IACI,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD;;;OAGG;IACI,SAAS,IAAI,EAAE,EAAE;IAIxB;;;OAGG;IACI,cAAc,IAAI,MAAM,EAAE;IAIjC;;;;OAIG;IACI,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;CAGtC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Tx, TxHash } from '@aztec/circuit-types';
|
|
2
2
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { TxPoolInstrumentation } from './instrumentation.js';
|
|
3
4
|
/**
|
|
4
5
|
* In-memory implementation of the Transaction Pool.
|
|
5
6
|
*/
|
|
@@ -8,9 +9,10 @@ export class InMemoryTxPool {
|
|
|
8
9
|
* Class constructor for in-memory TxPool. Initiates our transaction pool as a JS Map.
|
|
9
10
|
* @param log - A logger.
|
|
10
11
|
*/
|
|
11
|
-
constructor(log = createDebugLogger('aztec:tx_pool')) {
|
|
12
|
+
constructor(telemetry, log = createDebugLogger('aztec:tx_pool')) {
|
|
12
13
|
this.log = log;
|
|
13
14
|
this.txs = new Map();
|
|
15
|
+
this.metrics = new TxPoolInstrumentation(telemetry, 'InMemoryTxPool');
|
|
14
16
|
}
|
|
15
17
|
/**
|
|
16
18
|
* Checks if a transaction exists in the pool and returns it.
|
|
@@ -27,6 +29,7 @@ export class InMemoryTxPool {
|
|
|
27
29
|
* @returns Empty promise.
|
|
28
30
|
*/
|
|
29
31
|
addTxs(txs) {
|
|
32
|
+
this.metrics.recordTxs(txs);
|
|
30
33
|
for (const tx of txs) {
|
|
31
34
|
const txHash = tx.getTxHash();
|
|
32
35
|
this.log.debug(`Adding tx with id ${txHash.toString()}`, {
|
|
@@ -43,6 +46,7 @@ export class InMemoryTxPool {
|
|
|
43
46
|
* @returns The number of transactions that was deleted from the pool.
|
|
44
47
|
*/
|
|
45
48
|
deleteTxs(txHashes) {
|
|
49
|
+
this.metrics.removeTxs(txHashes.length);
|
|
46
50
|
for (const txHash of txHashes) {
|
|
47
51
|
this.txs.delete(txHash.toBigInt());
|
|
48
52
|
}
|
|
@@ -71,4 +75,4 @@ export class InMemoryTxPool {
|
|
|
71
75
|
return this.txs.has(txHash.toBigInt());
|
|
72
76
|
}
|
|
73
77
|
}
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5X3R4X3Bvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHhfcG9vbC9tZW1vcnlfdHhfcG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRzdEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFRekI7OztPQUdHO0lBQ0gsWUFBWSxTQUEwQixFQUFVLE1BQU0saUJBQWlCLENBQUMsZUFBZSxDQUFDO1FBQXhDLFFBQUcsR0FBSCxHQUFHLENBQXFDO1FBQ3RGLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQWMsQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUkscUJBQXFCLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxXQUFXLENBQUMsTUFBYztRQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMvQyxPQUFPLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxHQUFTO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLEtBQUssTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUM7WUFDckIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHFCQUFxQixNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRTtnQkFDdkQsU0FBUyxFQUFFLGtCQUFrQjtnQkFDN0IsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFO2FBQ1ksQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxTQUFTLENBQUMsUUFBa0I7UUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxTQUFTO1FBQ2QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGNBQWM7UUFDbkIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsTUFBYztRQUN6QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7Q0FDRiJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/p2p",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.44.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"typedocOptions": {
|
|
@@ -31,7 +31,15 @@
|
|
|
31
31
|
"rootDir": "./src",
|
|
32
32
|
"transform": {
|
|
33
33
|
"^.+\\.tsx?$": [
|
|
34
|
-
"@swc/jest"
|
|
34
|
+
"@swc/jest",
|
|
35
|
+
{
|
|
36
|
+
"jsc": {
|
|
37
|
+
"parser": {
|
|
38
|
+
"syntax": "typescript",
|
|
39
|
+
"decorators": true
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
35
43
|
]
|
|
36
44
|
},
|
|
37
45
|
"extensionsToTreatAsEsm": [
|
|
@@ -48,10 +56,11 @@
|
|
|
48
56
|
"testTimeout": 15000
|
|
49
57
|
},
|
|
50
58
|
"dependencies": {
|
|
51
|
-
"@aztec/circuit-types": "0.
|
|
52
|
-
"@aztec/circuits.js": "0.
|
|
53
|
-
"@aztec/foundation": "0.
|
|
54
|
-
"@aztec/kv-store": "0.
|
|
59
|
+
"@aztec/circuit-types": "0.44.0",
|
|
60
|
+
"@aztec/circuits.js": "0.44.0",
|
|
61
|
+
"@aztec/foundation": "0.44.0",
|
|
62
|
+
"@aztec/kv-store": "0.44.0",
|
|
63
|
+
"@aztec/telemetry-client": "0.44.0",
|
|
55
64
|
"@chainsafe/discv5": "9.0.0",
|
|
56
65
|
"@chainsafe/enr": "3.0.0",
|
|
57
66
|
"@chainsafe/libp2p-gossipsub": "13.0.0",
|
package/src/client/index.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { type AztecKVStore } from '@aztec/kv-store';
|
|
|
4
4
|
import { P2PClient } from '../client/p2p_client.js';
|
|
5
5
|
import { type P2PConfig } from '../config.js';
|
|
6
6
|
import { DiscV5Service } from '../service/discV5_service.js';
|
|
7
|
-
import { DummyP2PService
|
|
7
|
+
import { DummyP2PService } from '../service/dummy_service.js';
|
|
8
8
|
import { LibP2PService, createLibP2PPeerId } from '../service/index.js';
|
|
9
9
|
import { type TxPool } from '../tx_pool/index.js';
|
|
10
10
|
import { getPublicIp, splitAddressPort } from '../util.js';
|
|
@@ -17,7 +17,6 @@ export const createP2PClient = async (
|
|
|
17
17
|
txPool: TxPool,
|
|
18
18
|
l2BlockSource: L2BlockSource,
|
|
19
19
|
) => {
|
|
20
|
-
let discv5Service;
|
|
21
20
|
let p2pService;
|
|
22
21
|
|
|
23
22
|
if (config.p2pEnabled) {
|
|
@@ -40,7 +39,7 @@ export const createP2PClient = async (
|
|
|
40
39
|
config.tcpAnnounceAddress = tcpAnnounceAddress;
|
|
41
40
|
} else {
|
|
42
41
|
throw new Error(
|
|
43
|
-
`Invalid announceTcpAddress provided: ${
|
|
42
|
+
`Invalid announceTcpAddress provided: ${configTcpAnnounceAddress}. Expected format: <addr>:<port>`,
|
|
44
43
|
);
|
|
45
44
|
}
|
|
46
45
|
}
|
|
@@ -59,11 +58,10 @@ export const createP2PClient = async (
|
|
|
59
58
|
|
|
60
59
|
// Create peer discovery service
|
|
61
60
|
const peerId = await createLibP2PPeerId(config.peerIdPrivateKey);
|
|
62
|
-
|
|
63
|
-
p2pService = await LibP2PService.new(config,
|
|
61
|
+
const discoveryService = new DiscV5Service(peerId, config);
|
|
62
|
+
p2pService = await LibP2PService.new(config, discoveryService, peerId, txPool, store);
|
|
64
63
|
} else {
|
|
65
64
|
p2pService = new DummyP2PService();
|
|
66
|
-
discv5Service = new DummyPeerDiscoveryService();
|
|
67
65
|
}
|
|
68
66
|
return new P2PClient(store, l2BlockSource, txPool, p2pService);
|
|
69
67
|
};
|
package/src/client/p2p_client.ts
CHANGED
|
@@ -194,7 +194,7 @@ export class P2PClient implements P2P {
|
|
|
194
194
|
this.log.debug('Stopped block downloader');
|
|
195
195
|
await this.runningPromise;
|
|
196
196
|
this.setCurrentState(P2PClientState.STOPPED);
|
|
197
|
-
this.log.info('P2P client stopped
|
|
197
|
+
this.log.info('P2P client stopped.');
|
|
198
198
|
}
|
|
199
199
|
|
|
200
200
|
/**
|
|
@@ -278,7 +278,6 @@ export class P2PClient implements P2P {
|
|
|
278
278
|
for (const block of blocks) {
|
|
279
279
|
const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
|
|
280
280
|
await this.txPool.deleteTxs(txHashes);
|
|
281
|
-
this.p2pService.settledTxs(txHashes);
|
|
282
281
|
}
|
|
283
282
|
}
|
|
284
283
|
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
2
|
-
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
3
2
|
import { sleep } from '@aztec/foundation/sleep';
|
|
4
3
|
|
|
5
4
|
import { Discv5, type Discv5EventEmitter } from '@chainsafe/discv5';
|
|
6
|
-
import {
|
|
5
|
+
import { ENR, SignableENR } from '@chainsafe/enr';
|
|
7
6
|
import type { PeerId } from '@libp2p/interface';
|
|
8
7
|
import { multiaddr } from '@multiformats/multiaddr';
|
|
9
8
|
import EventEmitter from 'events';
|
|
@@ -14,6 +13,8 @@ import { type PeerDiscoveryService, PeerDiscoveryState } from './service.js';
|
|
|
14
13
|
|
|
15
14
|
export const AZTEC_ENR_KEY = 'aztec_network';
|
|
16
15
|
|
|
16
|
+
const delayBeforeStart = 2000; // 2sec
|
|
17
|
+
|
|
17
18
|
export enum AztecENR {
|
|
18
19
|
devnet = 0x01,
|
|
19
20
|
testnet = 0x02,
|
|
@@ -33,11 +34,12 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
33
34
|
/** This instance's ENR */
|
|
34
35
|
private enr: SignableENR;
|
|
35
36
|
|
|
36
|
-
private runningPromise: RunningPromise;
|
|
37
|
-
|
|
38
37
|
private currentState = PeerDiscoveryState.STOPPED;
|
|
39
38
|
|
|
40
39
|
private bootstrapNodes: string[];
|
|
40
|
+
private bootstrapNodePeerIds: PeerId[] = [];
|
|
41
|
+
|
|
42
|
+
private startTime = 0;
|
|
41
43
|
|
|
42
44
|
constructor(private peerId: PeerId, config: P2PConfig, private logger = createDebugLogger('aztec:discv5_service')) {
|
|
43
45
|
super();
|
|
@@ -83,18 +85,17 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
83
85
|
const multiAddrUdp = await enr.getFullMultiaddr('udp');
|
|
84
86
|
this.logger.debug(`ENR multiaddr: ${multiAddrTcp?.toString()}, ${multiAddrUdp?.toString()}`);
|
|
85
87
|
});
|
|
86
|
-
|
|
87
|
-
this.runningPromise = new RunningPromise(async () => {
|
|
88
|
-
await this.discv5.findRandomNode();
|
|
89
|
-
}, config.p2pPeerCheckIntervalMS);
|
|
90
88
|
}
|
|
91
89
|
|
|
92
90
|
public async start(): Promise<void> {
|
|
91
|
+
// Do this conversion once since it involves an async function call
|
|
92
|
+
this.bootstrapNodePeerIds = await Promise.all(this.bootstrapNodes.map(enr => ENR.decodeTxt(enr).peerId()));
|
|
93
93
|
if (this.currentState === PeerDiscoveryState.RUNNING) {
|
|
94
94
|
throw new Error('DiscV5Service already started');
|
|
95
95
|
}
|
|
96
96
|
this.logger.info('Starting DiscV5');
|
|
97
97
|
await this.discv5.start();
|
|
98
|
+
this.startTime = Date.now();
|
|
98
99
|
|
|
99
100
|
this.logger.info('DiscV5 started');
|
|
100
101
|
this.currentState = PeerDiscoveryState.RUNNING;
|
|
@@ -110,12 +111,25 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
110
111
|
this.logger.error(`Error adding bootnode ENRs: ${e}`);
|
|
111
112
|
}
|
|
112
113
|
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
public async runRandomNodesQuery(): Promise<void> {
|
|
117
|
+
if (this.currentState !== PeerDiscoveryState.RUNNING) {
|
|
118
|
+
throw new Error('DiscV5Service not running');
|
|
119
|
+
}
|
|
113
120
|
|
|
114
121
|
// First, wait some time before starting the peer discovery
|
|
115
122
|
// reference: https://github.com/ChainSafe/lodestar/issues/3423
|
|
116
|
-
|
|
123
|
+
const msSinceStart = Date.now() - this.startTime;
|
|
124
|
+
if (Date.now() - this.startTime <= delayBeforeStart) {
|
|
125
|
+
await sleep(delayBeforeStart - msSinceStart);
|
|
126
|
+
}
|
|
117
127
|
|
|
118
|
-
|
|
128
|
+
try {
|
|
129
|
+
await this.discv5.findRandomNode();
|
|
130
|
+
} catch (err) {
|
|
131
|
+
this.logger.error(`Error running discV5 random node query: ${err}`);
|
|
132
|
+
}
|
|
119
133
|
}
|
|
120
134
|
|
|
121
135
|
public getAllPeers(): ENR[] {
|
|
@@ -134,8 +148,11 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
|
|
|
134
148
|
return this.currentState;
|
|
135
149
|
}
|
|
136
150
|
|
|
151
|
+
public isBootstrapPeer(peerId: PeerId): boolean {
|
|
152
|
+
return this.bootstrapNodePeerIds.some(node => node.equals(peerId));
|
|
153
|
+
}
|
|
154
|
+
|
|
137
155
|
public async stop(): Promise<void> {
|
|
138
|
-
await this.runningPromise.stop();
|
|
139
156
|
await this.discv5.stop();
|
|
140
157
|
this.currentState = PeerDiscoveryState.STOPPED;
|
|
141
158
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Tx, TxHash } from '@aztec/circuit-types';
|
|
2
2
|
|
|
3
|
+
import type { PeerId } from '@libp2p/interface';
|
|
3
4
|
import EventEmitter from 'events';
|
|
4
5
|
|
|
5
6
|
import { type P2PService, type PeerDiscoveryService, PeerDiscoveryState } from './service.js';
|
|
@@ -66,6 +67,14 @@ export class DummyPeerDiscoveryService extends EventEmitter implements PeerDisco
|
|
|
66
67
|
return [];
|
|
67
68
|
}
|
|
68
69
|
|
|
70
|
+
public runRandomNodesQuery(): Promise<void> {
|
|
71
|
+
return Promise.resolve();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
public isBootstrapPeer(_: PeerId): boolean {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
|
|
69
78
|
public getStatus(): PeerDiscoveryState {
|
|
70
79
|
return this.currentState;
|
|
71
80
|
}
|