@aztec/p2p 0.47.1 → 0.48.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/bootstrap/bootstrap.d.ts +2 -6
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +1 -1
- package/dest/client/mocks.js +2 -2
- package/dest/client/p2p_client.js +2 -2
- package/dest/config.d.ts +10 -12
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +89 -26
- package/dest/service/libp2p_service.d.ts +1 -2
- package/dest/service/libp2p_service.d.ts.map +1 -1
- package/dest/service/libp2p_service.js +20 -33
- package/dest/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/tx_pool/aztec_kv_tx_pool.js +24 -6
- package/dest/tx_pool/instrumentation.d.ts +4 -2
- package/dest/tx_pool/instrumentation.d.ts.map +1 -1
- package/dest/tx_pool/instrumentation.js +21 -8
- package/dest/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/tx_pool/memory_tx_pool.js +13 -5
- package/package.json +6 -6
- package/src/bootstrap/bootstrap.ts +2 -9
- package/src/client/mocks.ts +1 -1
- package/src/client/p2p_client.ts +1 -1
- package/src/config.ts +113 -57
- package/src/service/libp2p_service.ts +21 -34
- package/src/tx_pool/aztec_kv_tx_pool.ts +24 -5
- package/src/tx_pool/instrumentation.ts +23 -8
- package/src/tx_pool/memory_tx_pool.ts +16 -4
- package/dest/service/tx_messages.d.ts +0 -14
- package/dest/service/tx_messages.d.ts.map +0 -1
- package/dest/service/tx_messages.js +0 -14
- package/src/service/tx_messages.ts +0 -22
|
@@ -31,11 +31,17 @@ export class AztecKVTxPool {
|
|
|
31
31
|
}
|
|
32
32
|
markAsMined(txHashes) {
|
|
33
33
|
return __classPrivateFieldGet(this, _AztecKVTxPool_store, "f").transaction(() => {
|
|
34
|
+
let deleted = 0;
|
|
34
35
|
for (const hash of txHashes) {
|
|
35
36
|
const key = hash.toString();
|
|
36
37
|
void __classPrivateFieldGet(this, _AztecKVTxPool_minedTxs, "f").add(key);
|
|
37
|
-
|
|
38
|
+
if (__classPrivateFieldGet(this, _AztecKVTxPool_pendingTxs, "f").has(key)) {
|
|
39
|
+
deleted++;
|
|
40
|
+
void __classPrivateFieldGet(this, _AztecKVTxPool_pendingTxs, "f").delete(key);
|
|
41
|
+
}
|
|
38
42
|
}
|
|
43
|
+
__classPrivateFieldGet(this, _AztecKVTxPool_metrics, "f").recordRemovedTxs('pending', deleted);
|
|
44
|
+
__classPrivateFieldGet(this, _AztecKVTxPool_metrics, "f").recordAddedTxs('mined', txHashes.length);
|
|
39
45
|
});
|
|
40
46
|
}
|
|
41
47
|
getPendingTxHashes() {
|
|
@@ -73,6 +79,7 @@ export class AztecKVTxPool {
|
|
|
73
79
|
addTxs(txs) {
|
|
74
80
|
const txHashes = txs.map(tx => tx.getTxHash());
|
|
75
81
|
return __classPrivateFieldGet(this, _AztecKVTxPool_store, "f").transaction(() => {
|
|
82
|
+
let pendingCount = 0;
|
|
76
83
|
for (const [i, tx] of txs.entries()) {
|
|
77
84
|
const txHash = txHashes[i];
|
|
78
85
|
__classPrivateFieldGet(this, _AztecKVTxPool_log, "f").info(`Adding tx with id ${txHash.toString()}`, {
|
|
@@ -82,11 +89,13 @@ export class AztecKVTxPool {
|
|
|
82
89
|
const key = txHash.toString();
|
|
83
90
|
void __classPrivateFieldGet(this, _AztecKVTxPool_txs, "f").set(key, tx.toBuffer());
|
|
84
91
|
if (!__classPrivateFieldGet(this, _AztecKVTxPool_minedTxs, "f").has(key)) {
|
|
92
|
+
pendingCount++;
|
|
85
93
|
// REFACTOR: Use an lmdb conditional write to avoid race conditions with this write tx
|
|
86
94
|
void __classPrivateFieldGet(this, _AztecKVTxPool_pendingTxs, "f").add(key);
|
|
95
|
+
__classPrivateFieldGet(this, _AztecKVTxPool_metrics, "f").recordTxSize(tx);
|
|
87
96
|
}
|
|
88
97
|
}
|
|
89
|
-
__classPrivateFieldGet(this, _AztecKVTxPool_metrics, "f").
|
|
98
|
+
__classPrivateFieldGet(this, _AztecKVTxPool_metrics, "f").recordAddedTxs('pending', pendingCount);
|
|
90
99
|
});
|
|
91
100
|
}
|
|
92
101
|
/**
|
|
@@ -96,13 +105,22 @@ export class AztecKVTxPool {
|
|
|
96
105
|
*/
|
|
97
106
|
deleteTxs(txHashes) {
|
|
98
107
|
return __classPrivateFieldGet(this, _AztecKVTxPool_store, "f").transaction(() => {
|
|
108
|
+
let pendingDeleted = 0;
|
|
109
|
+
let minedDeleted = 0;
|
|
99
110
|
for (const hash of txHashes) {
|
|
100
111
|
const key = hash.toString();
|
|
101
112
|
void __classPrivateFieldGet(this, _AztecKVTxPool_txs, "f").delete(key);
|
|
102
|
-
|
|
103
|
-
|
|
113
|
+
if (__classPrivateFieldGet(this, _AztecKVTxPool_pendingTxs, "f").has(key)) {
|
|
114
|
+
pendingDeleted++;
|
|
115
|
+
void __classPrivateFieldGet(this, _AztecKVTxPool_pendingTxs, "f").delete(key);
|
|
116
|
+
}
|
|
117
|
+
if (__classPrivateFieldGet(this, _AztecKVTxPool_minedTxs, "f").has(key)) {
|
|
118
|
+
minedDeleted++;
|
|
119
|
+
void __classPrivateFieldGet(this, _AztecKVTxPool_minedTxs, "f").delete(key);
|
|
120
|
+
}
|
|
104
121
|
}
|
|
105
|
-
__classPrivateFieldGet(this, _AztecKVTxPool_metrics, "f").
|
|
122
|
+
__classPrivateFieldGet(this, _AztecKVTxPool_metrics, "f").recordRemovedTxs('pending', pendingDeleted);
|
|
123
|
+
__classPrivateFieldGet(this, _AztecKVTxPool_metrics, "f").recordRemovedTxs('mined', minedDeleted);
|
|
106
124
|
});
|
|
107
125
|
}
|
|
108
126
|
/**
|
|
@@ -121,4 +139,4 @@ export class AztecKVTxPool {
|
|
|
121
139
|
}
|
|
122
140
|
}
|
|
123
141
|
_AztecKVTxPool_store = new WeakMap(), _AztecKVTxPool_txs = new WeakMap(), _AztecKVTxPool_pendingTxs = new WeakMap(), _AztecKVTxPool_minedTxs = new WeakMap(), _AztecKVTxPool_log = new WeakMap(), _AztecKVTxPool_metrics = new WeakMap();
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp0ZWNfa3ZfdHhfcG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF9wb29sL2F6dGVjX2t2X3R4X3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBZSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSXZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRzdEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFleEI7Ozs7T0FJRztJQUNILFlBQVksS0FBbUIsRUFBRSxTQUEwQixFQUFFLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxlQUFlLENBQUM7UUFuQnJHLHVDQUFxQjtRQUVyQiw0RUFBNEU7UUFDNUUscUNBQStCO1FBRS9CLDZCQUE2QjtRQUM3Qiw0Q0FBOEI7UUFDOUIsMkJBQTJCO1FBQzNCLDBDQUE0QjtRQUU1QixxQ0FBYTtRQUViLHlDQUFnQztRQVE5Qix1QkFBQSxJQUFJLHNCQUFRLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQUEsQ0FBQztRQUNqQyx1QkFBQSxJQUFJLDJCQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQUEsQ0FBQztRQUMzQyx1QkFBQSxJQUFJLDZCQUFlLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQUEsQ0FBQztRQUUvQyx1QkFBQSxJQUFJLHdCQUFVLEtBQUssTUFBQSxDQUFDO1FBQ3BCLHVCQUFBLElBQUksc0JBQVEsR0FBRyxNQUFBLENBQUM7UUFDaEIsdUJBQUEsSUFBSSwwQkFBWSxJQUFJLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsTUFBQSxDQUFDO0lBQ3hFLENBQUM7SUFFTSxXQUFXLENBQUMsUUFBa0I7UUFDbkMsT0FBTyx1QkFBQSxJQUFJLDRCQUFPLENB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
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Tx } from '@aztec/circuit-types';
|
|
2
2
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
3
|
+
export type TxStatus = 'pending' | 'mined';
|
|
3
4
|
/**
|
|
4
5
|
* Instrumentation class for the TxPool.
|
|
5
6
|
*/
|
|
@@ -9,15 +10,16 @@ export declare class TxPoolInstrumentation {
|
|
|
9
10
|
/** Tracks tx size */
|
|
10
11
|
private txSize;
|
|
11
12
|
constructor(telemetry: TelemetryClient, name: string);
|
|
13
|
+
recordTxSize(tx: Tx): void;
|
|
12
14
|
/**
|
|
13
15
|
* Updates the metrics with the new transactions.
|
|
14
16
|
* @param txs - The transactions to record
|
|
15
17
|
*/
|
|
16
|
-
|
|
18
|
+
recordAddedTxs(status: string, count?: number): void;
|
|
17
19
|
/**
|
|
18
20
|
* Updates the metrics by removing transactions from the mempool.
|
|
19
21
|
* @param count - The number of transactions to remove from the mempool
|
|
20
22
|
*/
|
|
21
|
-
|
|
23
|
+
recordRemovedTxs(status: string, count?: number): void;
|
|
22
24
|
}
|
|
23
25
|
//# sourceMappingURL=instrumentation.d.ts.map
|
|
@@ -1 +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,
|
|
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,EAAuC,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAExH,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAE3C;;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;IAuB7C,YAAY,CAAC,EAAE,EAAE,EAAE;IAI1B;;;OAGG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI;IAY/C;;;OAGG;IACI,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI;CAWlD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Metrics } from '@aztec/telemetry-client';
|
|
1
|
+
import { Attributes, Metrics } from '@aztec/telemetry-client';
|
|
2
2
|
/**
|
|
3
3
|
* Instrumentation class for the TxPool.
|
|
4
4
|
*/
|
|
@@ -24,25 +24,38 @@ export class TxPoolInstrumentation {
|
|
|
24
24
|
},
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
+
recordTxSize(tx) {
|
|
28
|
+
this.txSize.record(tx.getSize());
|
|
29
|
+
}
|
|
27
30
|
/**
|
|
28
31
|
* Updates the metrics with the new transactions.
|
|
29
32
|
* @param txs - The transactions to record
|
|
30
33
|
*/
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
recordAddedTxs(status, count = 1) {
|
|
35
|
+
if (count < 0) {
|
|
36
|
+
throw new Error('Count must be positive');
|
|
37
|
+
}
|
|
38
|
+
if (count === 0) {
|
|
39
|
+
return;
|
|
34
40
|
}
|
|
35
|
-
this.txInMempool.add(
|
|
41
|
+
this.txInMempool.add(count, {
|
|
42
|
+
[Attributes.STATUS]: status,
|
|
43
|
+
});
|
|
36
44
|
}
|
|
37
45
|
/**
|
|
38
46
|
* Updates the metrics by removing transactions from the mempool.
|
|
39
47
|
* @param count - The number of transactions to remove from the mempool
|
|
40
48
|
*/
|
|
41
|
-
|
|
49
|
+
recordRemovedTxs(status, count = 1) {
|
|
42
50
|
if (count < 0) {
|
|
43
51
|
throw new Error('Count must be positive');
|
|
44
52
|
}
|
|
45
|
-
|
|
53
|
+
if (count === 0) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
this.txInMempool.add(-1 * count, {
|
|
57
|
+
[Attributes.STATUS]: status,
|
|
58
|
+
});
|
|
46
59
|
}
|
|
47
60
|
}
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4X3Bvb2wvaW5zdHJ1bWVudGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQWtCLE9BQU8sRUFBNEMsTUFBTSx5QkFBeUIsQ0FBQztBQUl4SDs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBcUI7SUFNaEMsWUFBWSxTQUEwQixFQUFFLElBQVk7UUFDbEQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7WUFDckUsV0FBVyxFQUFFLG1EQUFtRDtTQUNqRSxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRTtZQUMzRCxJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRSx5Q0FBeUM7WUFDdEQsTUFBTSxFQUFFO2dCQUNOLHdCQUF3QixFQUFFO29CQUN4QixJQUFLLEVBQUUsTUFBTTtvQkFDYixLQUFNO29CQUNOLEtBQU07b0JBQ04sS0FBTTtvQkFDTixLQUFNO29CQUNOLE1BQU8sRUFBRSxRQUFRO29CQUNqQixNQUFPO2lCQUNSO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLEVBQU07UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGNBQWMsQ0FBQyxNQUFjLEVBQUUsS0FBSyxHQUFHLENBQUM7UUFDN0MsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFO1lBQzFCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU07U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGdCQUFnQixDQUFDLE1BQWMsRUFBRSxLQUFLLEdBQUcsQ0FBQztRQUMvQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7WUFDL0IsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTTtTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YifQ==
|
|
@@ -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;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;IAcH,OAAO,CAAC,GAAG;IAbnD;;OAEG;IACH,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,UAAU,CAAc;IAEhC,OAAO,CAAC,OAAO,CAAwB;IAEvC;;;OAGG;gBACS,SAAS,EAAE,eAAe,EAAU,GAAG,yCAAqC;IAOjF,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,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;IAcH,OAAO,CAAC,GAAG;IAbnD;;OAEG;IACH,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,UAAU,CAAc;IAEhC,OAAO,CAAC,OAAO,CAAwB;IAEvC;;;OAGG;gBACS,SAAS,EAAE,eAAe,EAAU,GAAG,yCAAqC;IAOjF,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9C,kBAAkB,IAAI,MAAM,EAAE;IAI9B,gBAAgB,IAAI,MAAM,EAAE;IAI5B,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS;IAWnE;;;;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;IAsBvC;;;;OAIG;IACI,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnD;;;OAGG;IACI,SAAS,IAAI,EAAE,EAAE;IAIxB;;;OAGG;IACI,cAAc,IAAI,MAAM,EAAE;CAGlC"}
|
|
@@ -22,6 +22,8 @@ export class InMemoryTxPool {
|
|
|
22
22
|
this.minedTxs.add(key);
|
|
23
23
|
this.pendingTxs.delete(key);
|
|
24
24
|
}
|
|
25
|
+
this.metrics.recordRemovedTxs('pending', txHashes.length);
|
|
26
|
+
this.metrics.recordAddedTxs('mined', txHashes.length);
|
|
25
27
|
return Promise.resolve();
|
|
26
28
|
}
|
|
27
29
|
getPendingTxHashes() {
|
|
@@ -55,7 +57,7 @@ export class InMemoryTxPool {
|
|
|
55
57
|
* @returns Empty promise.
|
|
56
58
|
*/
|
|
57
59
|
addTxs(txs) {
|
|
58
|
-
|
|
60
|
+
let pending = 0;
|
|
59
61
|
for (const tx of txs) {
|
|
60
62
|
const txHash = tx.getTxHash();
|
|
61
63
|
this.log.debug(`Adding tx with id ${txHash.toString()}`, {
|
|
@@ -65,9 +67,12 @@ export class InMemoryTxPool {
|
|
|
65
67
|
const key = txHash.toBigInt();
|
|
66
68
|
this.txs.set(key, tx);
|
|
67
69
|
if (!this.minedTxs.has(key)) {
|
|
70
|
+
pending++;
|
|
71
|
+
this.metrics.recordTxSize(tx);
|
|
68
72
|
this.pendingTxs.add(key);
|
|
69
73
|
}
|
|
70
74
|
}
|
|
75
|
+
this.metrics.recordAddedTxs('pending', pending);
|
|
71
76
|
return Promise.resolve();
|
|
72
77
|
}
|
|
73
78
|
/**
|
|
@@ -76,13 +81,16 @@ export class InMemoryTxPool {
|
|
|
76
81
|
* @returns The number of transactions that was deleted from the pool.
|
|
77
82
|
*/
|
|
78
83
|
deleteTxs(txHashes) {
|
|
79
|
-
|
|
84
|
+
let deletedMined = 0;
|
|
85
|
+
let deletedPending = 0;
|
|
80
86
|
for (const txHash of txHashes) {
|
|
81
87
|
const key = txHash.toBigInt();
|
|
82
88
|
this.txs.delete(key);
|
|
83
|
-
this.pendingTxs.delete(key);
|
|
84
|
-
this.minedTxs.delete(key);
|
|
89
|
+
deletedPending += this.pendingTxs.delete(key) ? 1 : 0;
|
|
90
|
+
deletedMined += this.minedTxs.delete(key) ? 1 : 0;
|
|
85
91
|
}
|
|
92
|
+
this.metrics.recordRemovedTxs('pending', deletedPending);
|
|
93
|
+
this.metrics.recordRemovedTxs('mined', deletedMined);
|
|
86
94
|
return Promise.resolve();
|
|
87
95
|
}
|
|
88
96
|
/**
|
|
@@ -100,4 +108,4 @@ export class InMemoryTxPool {
|
|
|
100
108
|
return Array.from(this.txs.keys()).map(x => TxHash.fromBigInt(x));
|
|
101
109
|
}
|
|
102
110
|
}
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5X3R4X3Bvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHhfcG9vbC9tZW1vcnlfdHhfcG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRzdEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFVekI7OztPQUdHO0lBQ0gsWUFBWSxTQUEwQixFQUFVLE1BQU0saUJBQWlCLENBQUMsZUFBZSxDQUFDO1FBQXhDLFFBQUcsR0FBSCxHQUFHLENBQXFDO1FBQ3RGLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQWMsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU0sV0FBVyxDQUFDLFFBQWtCO1FBQ25DLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM3QyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFD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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/p2p",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.48.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"typedocOptions": {
|
|
@@ -56,11 +56,11 @@
|
|
|
56
56
|
"testTimeout": 15000
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@aztec/circuit-types": "0.
|
|
60
|
-
"@aztec/circuits.js": "0.
|
|
61
|
-
"@aztec/foundation": "0.
|
|
62
|
-
"@aztec/kv-store": "0.
|
|
63
|
-
"@aztec/telemetry-client": "0.
|
|
59
|
+
"@aztec/circuit-types": "0.48.0",
|
|
60
|
+
"@aztec/circuits.js": "0.48.0",
|
|
61
|
+
"@aztec/foundation": "0.48.0",
|
|
62
|
+
"@aztec/kv-store": "0.48.0",
|
|
63
|
+
"@aztec/telemetry-client": "0.48.0",
|
|
64
64
|
"@chainsafe/discv5": "9.0.0",
|
|
65
65
|
"@chainsafe/enr": "3.0.0",
|
|
66
66
|
"@chainsafe/libp2p-gossipsub": "13.0.0",
|
|
@@ -5,18 +5,11 @@ import { SignableENR } from '@chainsafe/enr';
|
|
|
5
5
|
import type { PeerId } from '@libp2p/interface';
|
|
6
6
|
import { type Multiaddr, multiaddr } from '@multiformats/multiaddr';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import type { BootnodeConfig } from '../config.js';
|
|
9
9
|
import { AZTEC_ENR_KEY, AZTEC_NET } from '../service/discV5_service.js';
|
|
10
10
|
import { createLibP2PPeerId } from '../service/index.js';
|
|
11
11
|
import { convertToMultiaddr } from '../util.js';
|
|
12
12
|
|
|
13
|
-
/**
|
|
14
|
-
* Required P2P config values for a bootstrap node.
|
|
15
|
-
*/
|
|
16
|
-
export type BootNodeConfig = Partial<P2PConfig> &
|
|
17
|
-
Pick<P2PConfig, 'udpAnnounceAddress'> &
|
|
18
|
-
Required<Pick<P2PConfig, 'udpListenAddress'>>;
|
|
19
|
-
|
|
20
13
|
/**
|
|
21
14
|
* Encapsulates a 'Bootstrap' node, used for the purpose of assisting new joiners in acquiring peers.
|
|
22
15
|
*/
|
|
@@ -31,7 +24,7 @@ export class BootstrapNode {
|
|
|
31
24
|
* @param config - A partial P2P configuration. No need for TCP values as well as aztec node specific values.
|
|
32
25
|
* @returns An empty promise.
|
|
33
26
|
*/
|
|
34
|
-
public async start(config:
|
|
27
|
+
public async start(config: BootnodeConfig) {
|
|
35
28
|
const { peerIdPrivateKey, udpListenAddress, udpAnnounceAddress } = config;
|
|
36
29
|
const peerId = await createLibP2PPeerId(peerIdPrivateKey);
|
|
37
30
|
this.peerId = peerId;
|
package/src/client/mocks.ts
CHANGED
|
@@ -15,7 +15,7 @@ export class MockBlockSource implements L2BlockSource {
|
|
|
15
15
|
public addBlocks(numBlocks: number) {
|
|
16
16
|
for (let i = 0; i < numBlocks; i++) {
|
|
17
17
|
const blockNum = this.l2Blocks.length;
|
|
18
|
-
const block = L2Block.random(blockNum);
|
|
18
|
+
const block = L2Block.random(blockNum, blockNum);
|
|
19
19
|
this.l2Blocks.push(block);
|
|
20
20
|
this.txEffects.push(...block.body.txEffects);
|
|
21
21
|
}
|
package/src/client/p2p_client.ts
CHANGED
|
@@ -134,7 +134,7 @@ export class P2PClient implements P2P {
|
|
|
134
134
|
private keepProvenTxsFor: number,
|
|
135
135
|
private log = createDebugLogger('aztec:p2p'),
|
|
136
136
|
) {
|
|
137
|
-
const {
|
|
137
|
+
const { blockCheckIntervalMS: checkInterval, l2QueueSize: p2pL2QueueSize } = getP2PConfigEnvVars();
|
|
138
138
|
const l2DownloaderOpts = { maxQueueSize: p2pL2QueueSize, pollIntervalMS: checkInterval };
|
|
139
139
|
// TODO(palla/prover-node): This effectively downloads blocks twice from the archiver, which is an issue
|
|
140
140
|
// if the archiver is remote. We should refactor this so the downloader keeps a single queue and handles
|
package/src/config.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type ConfigMappingsType,
|
|
3
|
+
booleanConfigHelper,
|
|
4
|
+
getConfigFromMappings,
|
|
5
|
+
numberConfigHelper,
|
|
6
|
+
pickConfigMappings,
|
|
7
|
+
} from '@aztec/foundation/config';
|
|
2
8
|
|
|
3
9
|
/**
|
|
4
10
|
* P2P client configuration values.
|
|
@@ -12,17 +18,17 @@ export interface P2PConfig {
|
|
|
12
18
|
/**
|
|
13
19
|
* The frequency in which to check for new L2 blocks.
|
|
14
20
|
*/
|
|
15
|
-
|
|
21
|
+
blockCheckIntervalMS: number;
|
|
16
22
|
|
|
17
23
|
/**
|
|
18
24
|
* The frequency in which to check for new peers.
|
|
19
25
|
*/
|
|
20
|
-
|
|
26
|
+
peerCheckIntervalMS: number;
|
|
21
27
|
|
|
22
28
|
/**
|
|
23
29
|
* Size of queue of L2 blocks to store.
|
|
24
30
|
*/
|
|
25
|
-
|
|
31
|
+
l2QueueSize: number;
|
|
26
32
|
|
|
27
33
|
/**
|
|
28
34
|
* The announce address for TCP.
|
|
@@ -59,11 +65,6 @@ export interface P2PConfig {
|
|
|
59
65
|
*/
|
|
60
66
|
transactionProtocol: string;
|
|
61
67
|
|
|
62
|
-
/**
|
|
63
|
-
* Whether to enable NAT from libp2p (ignored for bootstrap node).
|
|
64
|
-
*/
|
|
65
|
-
enableNat?: boolean;
|
|
66
|
-
|
|
67
68
|
/**
|
|
68
69
|
* The minimum number of peers (a peer count below this will cause the node to look for more peers)
|
|
69
70
|
*/
|
|
@@ -79,11 +80,6 @@ export interface P2PConfig {
|
|
|
79
80
|
*/
|
|
80
81
|
dataDirectory?: string;
|
|
81
82
|
|
|
82
|
-
/**
|
|
83
|
-
* The transaction gossiping message version.
|
|
84
|
-
*/
|
|
85
|
-
txGossipVersion: SemVer;
|
|
86
|
-
|
|
87
83
|
/**
|
|
88
84
|
* If announceUdpAddress or announceTcpAddress are not provided, query for the IP address of the machine. Default is false.
|
|
89
85
|
*/
|
|
@@ -93,52 +89,112 @@ export interface P2PConfig {
|
|
|
93
89
|
keepProvenTxsInPoolFor: number;
|
|
94
90
|
}
|
|
95
91
|
|
|
92
|
+
export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
|
|
93
|
+
p2pEnabled: {
|
|
94
|
+
env: 'P2P_ENABLED',
|
|
95
|
+
description: 'A flag dictating whether the P2P subsystem should be enabled.',
|
|
96
|
+
...booleanConfigHelper(),
|
|
97
|
+
},
|
|
98
|
+
blockCheckIntervalMS: {
|
|
99
|
+
env: 'P2P_BLOCK_CHECK_INTERVAL_MS',
|
|
100
|
+
description: 'The frequency in which to check for new L2 blocks.',
|
|
101
|
+
...numberConfigHelper(100),
|
|
102
|
+
},
|
|
103
|
+
peerCheckIntervalMS: {
|
|
104
|
+
env: 'P2P_PEER_CHECK_INTERVAL_MS',
|
|
105
|
+
description: 'The frequency in which to check for new peers.',
|
|
106
|
+
...numberConfigHelper(1_000),
|
|
107
|
+
},
|
|
108
|
+
l2QueueSize: {
|
|
109
|
+
env: 'P2P_L2_QUEUE_SIZE',
|
|
110
|
+
description: 'Size of queue of L2 blocks to store.',
|
|
111
|
+
...numberConfigHelper(1_000),
|
|
112
|
+
},
|
|
113
|
+
tcpListenAddress: {
|
|
114
|
+
env: 'TCP_LISTEN_ADDR',
|
|
115
|
+
defaultValue: '0.0.0.0:40400',
|
|
116
|
+
description: 'The listen address for TCP. Format: <IP_ADDRESS>:<PORT>.',
|
|
117
|
+
},
|
|
118
|
+
udpListenAddress: {
|
|
119
|
+
env: 'UDP_LISTEN_ADDR',
|
|
120
|
+
defaultValue: '0.0.0.0:40400',
|
|
121
|
+
description: 'The listen address for UDP. Format: <IP_ADDRESS>:<PORT>.',
|
|
122
|
+
},
|
|
123
|
+
tcpAnnounceAddress: {
|
|
124
|
+
env: 'P2P_TCP_ANNOUNCE_ADDR',
|
|
125
|
+
description:
|
|
126
|
+
'The announce address for TCP. Format: <IP_ADDRESS>:<PORT>. Leave IP_ADDRESS blank to query for public IP.',
|
|
127
|
+
},
|
|
128
|
+
udpAnnounceAddress: {
|
|
129
|
+
env: 'P2P_UDP_ANNOUNCE_ADDR',
|
|
130
|
+
description:
|
|
131
|
+
'The announce address for UDP. Format: <IP_ADDRESS>:<PORT>. Leave IP_ADDRESS blank to query for public IP.',
|
|
132
|
+
},
|
|
133
|
+
peerIdPrivateKey: {
|
|
134
|
+
env: 'PEER_ID_PRIVATE_KEY',
|
|
135
|
+
description: 'An optional peer id private key. If blank, will generate a random key.',
|
|
136
|
+
},
|
|
137
|
+
bootstrapNodes: {
|
|
138
|
+
env: 'BOOTSTRAP_NODES',
|
|
139
|
+
parseEnv: (val: string) => val.split(','),
|
|
140
|
+
description: 'A list of bootstrap peer ENRs to connect to. Separated by commas.',
|
|
141
|
+
},
|
|
142
|
+
transactionProtocol: {
|
|
143
|
+
env: 'P2P_TX_PROTOCOL',
|
|
144
|
+
description: 'Protocol identifier for transaction gossiping.',
|
|
145
|
+
defaultValue: '/aztec/0.1.0',
|
|
146
|
+
},
|
|
147
|
+
minPeerCount: {
|
|
148
|
+
env: 'P2P_MIN_PEERS',
|
|
149
|
+
description: 'The minimum number of peers to connect to.',
|
|
150
|
+
...numberConfigHelper(10),
|
|
151
|
+
},
|
|
152
|
+
maxPeerCount: {
|
|
153
|
+
env: 'P2P_MAX_PEERS',
|
|
154
|
+
description: 'The maximum number of peers to connect to.',
|
|
155
|
+
...numberConfigHelper(100),
|
|
156
|
+
},
|
|
157
|
+
dataDirectory: {
|
|
158
|
+
env: 'DATA_DIRECTORY',
|
|
159
|
+
description: 'Data directory for peer & tx databases. Will use temporary location if not set.',
|
|
160
|
+
},
|
|
161
|
+
queryForIp: {
|
|
162
|
+
env: 'P2P_QUERY_FOR_IP',
|
|
163
|
+
description:
|
|
164
|
+
'If announceUdpAddress or announceTcpAddress are not provided, query for the IP address of the machine. Default is false.',
|
|
165
|
+
...booleanConfigHelper(),
|
|
166
|
+
},
|
|
167
|
+
keepProvenTxsInPoolFor: {
|
|
168
|
+
env: 'P2P_TX_POOL_KEEP_PROVEN_FOR',
|
|
169
|
+
description:
|
|
170
|
+
'How many blocks have to pass after a block is proven before its txs are deleted (zero to delete immediately once proven)',
|
|
171
|
+
...numberConfigHelper(0),
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
|
|
96
175
|
/**
|
|
97
176
|
* Gets the config values for p2p client from environment variables.
|
|
98
177
|
* @returns The config values for p2p client.
|
|
99
178
|
*/
|
|
100
179
|
export function getP2PConfigEnvVars(): P2PConfig {
|
|
101
|
-
|
|
102
|
-
P2P_ENABLED,
|
|
103
|
-
P2P_BLOCK_CHECK_INTERVAL_MS,
|
|
104
|
-
P2P_PEER_CHECK_INTERVAL_MS,
|
|
105
|
-
P2P_L2_BLOCK_QUEUE_SIZE,
|
|
106
|
-
P2P_TCP_LISTEN_ADDR,
|
|
107
|
-
P2P_UDP_LISTEN_ADDR,
|
|
108
|
-
P2P_TCP_ANNOUNCE_ADDR,
|
|
109
|
-
P2P_UDP_ANNOUNCE_ADDR,
|
|
110
|
-
PEER_ID_PRIVATE_KEY,
|
|
111
|
-
BOOTSTRAP_NODES,
|
|
112
|
-
P2P_NAT_ENABLED,
|
|
113
|
-
P2P_MIN_PEERS,
|
|
114
|
-
P2P_MAX_PEERS,
|
|
115
|
-
DATA_DIRECTORY,
|
|
116
|
-
TX_GOSSIP_VERSION,
|
|
117
|
-
P2P_TX_PROTOCOL,
|
|
118
|
-
P2P_QUERY_FOR_IP,
|
|
119
|
-
P2P_TX_POOL_KEEP_PROVEN_FOR,
|
|
120
|
-
} = process.env;
|
|
121
|
-
// P2P listen & announce addresses passed in format: <IP_ADDRESS>:<PORT>
|
|
122
|
-
// P2P announce multiaddrs passed in format: /ip4/<IP_ADDRESS>/<protocol>/<PORT>
|
|
123
|
-
const envVars: P2PConfig = {
|
|
124
|
-
tcpAnnounceAddress: P2P_TCP_ANNOUNCE_ADDR,
|
|
125
|
-
udpAnnounceAddress: P2P_UDP_ANNOUNCE_ADDR,
|
|
126
|
-
tcpListenAddress: P2P_TCP_LISTEN_ADDR || '0.0.0.0:40400',
|
|
127
|
-
udpListenAddress: P2P_UDP_LISTEN_ADDR || '0.0.0.0:40400',
|
|
128
|
-
p2pEnabled: P2P_ENABLED === 'true',
|
|
129
|
-
p2pBlockCheckIntervalMS: P2P_BLOCK_CHECK_INTERVAL_MS ? +P2P_BLOCK_CHECK_INTERVAL_MS : 100,
|
|
130
|
-
p2pPeerCheckIntervalMS: P2P_PEER_CHECK_INTERVAL_MS ? +P2P_PEER_CHECK_INTERVAL_MS : 1000,
|
|
131
|
-
p2pL2QueueSize: P2P_L2_BLOCK_QUEUE_SIZE ? +P2P_L2_BLOCK_QUEUE_SIZE : 1000,
|
|
132
|
-
peerIdPrivateKey: PEER_ID_PRIVATE_KEY,
|
|
133
|
-
bootstrapNodes: BOOTSTRAP_NODES ? BOOTSTRAP_NODES.split(',') : [],
|
|
134
|
-
transactionProtocol: P2P_TX_PROTOCOL ? P2P_TX_PROTOCOL : '/aztec/0.1.0',
|
|
135
|
-
enableNat: P2P_NAT_ENABLED === 'true',
|
|
136
|
-
minPeerCount: P2P_MIN_PEERS ? +P2P_MIN_PEERS : 10,
|
|
137
|
-
maxPeerCount: P2P_MAX_PEERS ? +P2P_MAX_PEERS : 100,
|
|
138
|
-
dataDirectory: DATA_DIRECTORY,
|
|
139
|
-
txGossipVersion: TX_GOSSIP_VERSION ? new SemVer(TX_GOSSIP_VERSION) : new SemVer('0.1.0'),
|
|
140
|
-
queryForIp: P2P_QUERY_FOR_IP === 'true',
|
|
141
|
-
keepProvenTxsInPoolFor: P2P_TX_POOL_KEEP_PROVEN_FOR ? +P2P_TX_POOL_KEEP_PROVEN_FOR : 0,
|
|
142
|
-
};
|
|
143
|
-
return envVars;
|
|
180
|
+
return getConfigFromMappings<P2PConfig>(p2pConfigMappings);
|
|
144
181
|
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Required P2P config values for a bootstrap node.
|
|
185
|
+
*/
|
|
186
|
+
export type BootnodeConfig = Pick<
|
|
187
|
+
P2PConfig,
|
|
188
|
+
'udpAnnounceAddress' | 'peerIdPrivateKey' | 'minPeerCount' | 'maxPeerCount'
|
|
189
|
+
> &
|
|
190
|
+
Required<Pick<P2PConfig, 'udpListenAddress'>>;
|
|
191
|
+
|
|
192
|
+
const bootnodeConfigKeys: (keyof BootnodeConfig)[] = [
|
|
193
|
+
'udpAnnounceAddress',
|
|
194
|
+
'peerIdPrivateKey',
|
|
195
|
+
'minPeerCount',
|
|
196
|
+
'maxPeerCount',
|
|
197
|
+
'udpListenAddress',
|
|
198
|
+
];
|
|
199
|
+
|
|
200
|
+
export const bootnodeConfigMappings = pickConfigMappings(p2pConfigMappings, bootnodeConfigKeys);
|