@aztec/p2p 0.60.0 → 0.62.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.js +2 -39
- package/dest/client/p2p_client.d.ts +33 -9
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +121 -30
- package/dest/config.d.ts +5 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +7 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +3 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +30 -5
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +3 -2
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +26 -5
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +8 -2
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -3
- package/dest/mocks/index.d.ts +18 -2
- package/dest/mocks/index.d.ts.map +1 -1
- package/dest/mocks/index.js +79 -5
- package/dest/service/peer_scoring.js +5 -5
- package/dest/util.d.ts +3 -0
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +38 -1
- package/package.json +12 -7
- package/src/client/index.ts +1 -48
- package/src/client/p2p_client.ts +156 -40
- package/src/config.ts +11 -1
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +35 -6
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +32 -6
- package/src/mem_pools/tx_pool/tx_pool.ts +9 -2
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +34 -2
- package/src/mocks/index.ts +123 -5
- package/src/service/peer_scoring.ts +4 -4
- package/src/util.ts +53 -0
|
@@ -23,18 +23,18 @@ export class AztecKVTxPool {
|
|
|
23
23
|
_AztecKVTxPool_log.set(this, void 0);
|
|
24
24
|
_AztecKVTxPool_metrics.set(this, void 0);
|
|
25
25
|
__classPrivateFieldSet(this, _AztecKVTxPool_txs, store.openMap('txs'), "f");
|
|
26
|
-
__classPrivateFieldSet(this, _AztecKVTxPool_minedTxs, store.
|
|
26
|
+
__classPrivateFieldSet(this, _AztecKVTxPool_minedTxs, store.openMap('minedTxs'), "f");
|
|
27
27
|
__classPrivateFieldSet(this, _AztecKVTxPool_pendingTxs, store.openSet('pendingTxs'), "f");
|
|
28
28
|
__classPrivateFieldSet(this, _AztecKVTxPool_store, store, "f");
|
|
29
29
|
__classPrivateFieldSet(this, _AztecKVTxPool_log, log, "f");
|
|
30
30
|
__classPrivateFieldSet(this, _AztecKVTxPool_metrics, new PoolInstrumentation(telemetry, 'AztecKVTxPool'), "f");
|
|
31
31
|
}
|
|
32
|
-
markAsMined(txHashes) {
|
|
32
|
+
markAsMined(txHashes, blockNumber) {
|
|
33
33
|
return __classPrivateFieldGet(this, _AztecKVTxPool_store, "f").transaction(() => {
|
|
34
34
|
let deleted = 0;
|
|
35
35
|
for (const hash of txHashes) {
|
|
36
36
|
const key = hash.toString();
|
|
37
|
-
void __classPrivateFieldGet(this, _AztecKVTxPool_minedTxs, "f").
|
|
37
|
+
void __classPrivateFieldGet(this, _AztecKVTxPool_minedTxs, "f").set(key, blockNumber);
|
|
38
38
|
if (__classPrivateFieldGet(this, _AztecKVTxPool_pendingTxs, "f").has(key)) {
|
|
39
39
|
deleted++;
|
|
40
40
|
void __classPrivateFieldGet(this, _AztecKVTxPool_pendingTxs, "f").delete(key);
|
|
@@ -44,11 +44,36 @@ export class AztecKVTxPool {
|
|
|
44
44
|
__classPrivateFieldGet(this, _AztecKVTxPool_metrics, "f").recordAddedObjects(txHashes.length, 'mined');
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
|
+
markMinedAsPending(txHashes) {
|
|
48
|
+
if (txHashes.length === 0) {
|
|
49
|
+
return Promise.resolve();
|
|
50
|
+
}
|
|
51
|
+
return __classPrivateFieldGet(this, _AztecKVTxPool_store, "f").transaction(() => {
|
|
52
|
+
let deleted = 0;
|
|
53
|
+
let added = 0;
|
|
54
|
+
for (const hash of txHashes) {
|
|
55
|
+
const key = hash.toString();
|
|
56
|
+
if (__classPrivateFieldGet(this, _AztecKVTxPool_minedTxs, "f").has(key)) {
|
|
57
|
+
deleted++;
|
|
58
|
+
void __classPrivateFieldGet(this, _AztecKVTxPool_minedTxs, "f").delete(key);
|
|
59
|
+
}
|
|
60
|
+
if (__classPrivateFieldGet(this, _AztecKVTxPool_txs, "f").has(key)) {
|
|
61
|
+
added++;
|
|
62
|
+
void __classPrivateFieldGet(this, _AztecKVTxPool_pendingTxs, "f").add(key);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
__classPrivateFieldGet(this, _AztecKVTxPool_metrics, "f").recordRemovedObjects(deleted, 'mined');
|
|
66
|
+
__classPrivateFieldGet(this, _AztecKVTxPool_metrics, "f").recordAddedObjects(added, 'pending');
|
|
67
|
+
});
|
|
68
|
+
}
|
|
47
69
|
getPendingTxHashes() {
|
|
48
70
|
return Array.from(__classPrivateFieldGet(this, _AztecKVTxPool_pendingTxs, "f").entries()).map(x => TxHash.fromString(x));
|
|
49
71
|
}
|
|
50
72
|
getMinedTxHashes() {
|
|
51
|
-
return Array.from(__classPrivateFieldGet(this, _AztecKVTxPool_minedTxs, "f").entries()).map(
|
|
73
|
+
return Array.from(__classPrivateFieldGet(this, _AztecKVTxPool_minedTxs, "f").entries()).map(([txHash, blockNumber]) => [
|
|
74
|
+
TxHash.fromString(txHash),
|
|
75
|
+
blockNumber,
|
|
76
|
+
]);
|
|
52
77
|
}
|
|
53
78
|
getTxStatus(txHash) {
|
|
54
79
|
const key = txHash.toString();
|
|
@@ -139,4 +164,4 @@ export class AztecKVTxPool {
|
|
|
139
164
|
}
|
|
140
165
|
}
|
|
141
166
|
_AztecKVTxPool_store = new WeakMap(), _AztecKVTxPool_txs = new WeakMap(), _AztecKVTxPool_pendingTxs = new WeakMap(), _AztecKVTxPool_minedTxs = new WeakMap(), _AztecKVTxPool_log = new WeakMap(), _AztecKVTxPool_metrics = new WeakMap();
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp0ZWNfa3ZfdHhfcG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZW1fcG9vbHMvdHhfcG9vbC9henRlY19rdl90eF9wb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxPQUFPLEVBQWUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUl2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUc1RDs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBZXhCOzs7O09BSUc7SUFDSCxZQUFZLEtBQW1CLEVBQUUsU0FBMEIsRUFBRSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsZUFBZSxDQUFDO1FBbkJyRyx1Q0FBcUI7UUFFckIsNEVBQTRFO1FBQzVFLHFDQUErQjtRQUUvQiw2QkFBNkI7UUFDN0IsNENBQThCO1FBQzlCLDJCQUEyQjtRQUMzQiwwQ0FBb0M7UUFFcEMscUNBQWE7UUFFYix5Q0FBa0M7UUFRaEMsdUJBQUEsSUFBSSxzQkFBUSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFBLENBQUM7UUFDakMsdUJBQUEsSUFBSSwyQkFBYSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFBLENBQUM7UUFDM0MsdUJBQUEsSUFBSSw2QkFBZSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFBLENBQUM7UUFFL0MsdUJBQUEsSUFBSSx3QkFBVSxLQUFLLE1BQUEsQ0FBQztRQUNwQix1QkFBQSxJQUFJLHNCQUFRLEdBQUcsTUFBQSxDQUFDO1FBQ2hCLHVCQUFBLElBQUksMEJBQVksSUFBSSxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLE1BQUEsQ0FBQztJQUN0RSxDQUFDO0lBRU0sV0FBVyxDQUFDLFFBQWtCLEVBQUUsV0FBbUI7UUFDeEQs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
|
|
@@ -18,9 +18,10 @@ export declare class InMemoryTxPool implements TxPool {
|
|
|
18
18
|
* @param log - A logger.
|
|
19
19
|
*/
|
|
20
20
|
constructor(telemetry: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
|
|
21
|
-
markAsMined(txHashes: TxHash[]): Promise<void>;
|
|
21
|
+
markAsMined(txHashes: TxHash[], blockNumber: number): Promise<void>;
|
|
22
|
+
markMinedAsPending(txHashes: TxHash[]): Promise<void>;
|
|
22
23
|
getPendingTxHashes(): TxHash[];
|
|
23
|
-
getMinedTxHashes(): TxHash[];
|
|
24
|
+
getMinedTxHashes(): [TxHash, number][];
|
|
24
25
|
getTxStatus(txHash: TxHash): 'pending' | 'mined' | undefined;
|
|
25
26
|
/**
|
|
26
27
|
* Checks if a transaction exists in the pool and returns it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory_tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/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,
|
|
1
|
+
{"version":3,"file":"memory_tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/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,CAAsB;IACtC,OAAO,CAAC,UAAU,CAAc;IAEhC,OAAO,CAAC,OAAO,CAA0B;IAEzC;;;OAGG;gBACS,SAAS,EAAE,eAAe,EAAU,GAAG,yCAAqC;IAOjF,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWnE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BrD,kBAAkB,IAAI,MAAM,EAAE;IAI9B,gBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;IAItC,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"}
|
|
@@ -12,25 +12,46 @@ export class InMemoryTxPool {
|
|
|
12
12
|
constructor(telemetry, log = createDebugLogger('aztec:tx_pool')) {
|
|
13
13
|
this.log = log;
|
|
14
14
|
this.txs = new Map();
|
|
15
|
-
this.minedTxs = new
|
|
15
|
+
this.minedTxs = new Map();
|
|
16
16
|
this.pendingTxs = new Set();
|
|
17
17
|
this.metrics = new PoolInstrumentation(telemetry, 'InMemoryTxPool');
|
|
18
18
|
}
|
|
19
|
-
markAsMined(txHashes) {
|
|
19
|
+
markAsMined(txHashes, blockNumber) {
|
|
20
20
|
const keys = txHashes.map(x => x.toBigInt());
|
|
21
21
|
for (const key of keys) {
|
|
22
|
-
this.minedTxs.
|
|
22
|
+
this.minedTxs.set(key, blockNumber);
|
|
23
23
|
this.pendingTxs.delete(key);
|
|
24
24
|
}
|
|
25
25
|
this.metrics.recordRemovedObjects(txHashes.length, 'pending');
|
|
26
26
|
this.metrics.recordAddedObjects(txHashes.length, 'mined');
|
|
27
27
|
return Promise.resolve();
|
|
28
28
|
}
|
|
29
|
+
markMinedAsPending(txHashes) {
|
|
30
|
+
if (txHashes.length === 0) {
|
|
31
|
+
return Promise.resolve();
|
|
32
|
+
}
|
|
33
|
+
const keys = txHashes.map(x => x.toBigInt());
|
|
34
|
+
let deleted = 0;
|
|
35
|
+
let added = 0;
|
|
36
|
+
for (const key of keys) {
|
|
37
|
+
if (this.minedTxs.delete(key)) {
|
|
38
|
+
deleted++;
|
|
39
|
+
}
|
|
40
|
+
// only add back to the pending set if we have the tx object
|
|
41
|
+
if (this.txs.has(key)) {
|
|
42
|
+
added++;
|
|
43
|
+
this.pendingTxs.add(key);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
this.metrics.recordRemovedObjects(deleted, 'mined');
|
|
47
|
+
this.metrics.recordAddedObjects(added, 'pending');
|
|
48
|
+
return Promise.resolve();
|
|
49
|
+
}
|
|
29
50
|
getPendingTxHashes() {
|
|
30
51
|
return Array.from(this.pendingTxs).map(x => TxHash.fromBigInt(x));
|
|
31
52
|
}
|
|
32
53
|
getMinedTxHashes() {
|
|
33
|
-
return Array.from(this.minedTxs).map(
|
|
54
|
+
return Array.from(this.minedTxs.entries()).map(([txHash, blockNumber]) => [TxHash.fromBigInt(txHash), blockNumber]);
|
|
34
55
|
}
|
|
35
56
|
getTxStatus(txHash) {
|
|
36
57
|
const key = txHash.toBigInt();
|
|
@@ -108,4 +129,4 @@ export class InMemoryTxPool {
|
|
|
108
129
|
return Array.from(this.txs.keys()).map(x => TxHash.fromBigInt(x));
|
|
109
130
|
}
|
|
110
131
|
}
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5X3R4X3Bvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWVtX3Bvb2xzL3R4X3Bvb2wvbWVtb3J5X3R4X3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUc1RDs7R0FFRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBVXpCOzs7T0FHRztJQUNILFlBQVksU0FBMEIsRUFBVSxNQUFNLGlCQUFpQixDQUFDLGVBQWUsQ0FBQztRQUF4QyxRQUFHLEdBQUgsR0FBRyxDQUFxQztRQUN0RixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxFQUFjLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksbUJBQW1CLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVNLFdBQVcsQ0FBQyxRQUFrQixFQUFFLFdBQW1CO1FBQ3hELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM3QyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztR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
|
|
@@ -18,7 +18,13 @@ export interface TxPool {
|
|
|
18
18
|
* Marks the set of txs as mined, as opposed to pending.
|
|
19
19
|
* @param txHashes - Hashes of the txs to flag as mined.
|
|
20
20
|
*/
|
|
21
|
-
markAsMined(txHashes: TxHash[]): Promise<void>;
|
|
21
|
+
markAsMined(txHashes: TxHash[], blockNumber: number): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Moves mined txs back to the pending set in the case of a reorg.
|
|
24
|
+
* Note: txs not known by this peer will be ignored.
|
|
25
|
+
* @param txHashes - Hashes of the txs to flag as pending.
|
|
26
|
+
*/
|
|
27
|
+
markMinedAsPending(txHashes: TxHash[]): Promise<void>;
|
|
22
28
|
/**
|
|
23
29
|
* Deletes transactions from the pool. Tx hashes that are not present are ignored.
|
|
24
30
|
* @param txHashes - An array of tx hashes to be removed from the tx pool.
|
|
@@ -43,7 +49,7 @@ export interface TxPool {
|
|
|
43
49
|
* Gets the hashes of mined transactions currently in the tx pool.
|
|
44
50
|
* @returns An array of mined transaction hashes found in the tx pool.
|
|
45
51
|
*/
|
|
46
|
-
getMinedTxHashes(): TxHash[];
|
|
52
|
+
getMinedTxHashes(): [tx: TxHash, blockNumber: number][];
|
|
47
53
|
/**
|
|
48
54
|
* Returns whether the given tx hash is flagged as pending or mined.
|
|
49
55
|
* @param txHash - Hash of the tx to query.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/tx_pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,GAAG,SAAS,CAAC;IAE5C;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/tx_pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,GAAG,SAAS,CAAC;IAE5C;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE;;;;OAIG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtD;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C;;;OAGG;IACH,SAAS,IAAI,EAAE,EAAE,CAAC;IAElB;;;OAGG;IACH,cAAc,IAAI,MAAM,EAAE,CAAC;IAE3B;;;OAGG;IACH,kBAAkB,IAAI,MAAM,EAAE,CAAC;IAE/B;;;OAGG;IACH,gBAAgB,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;IAExD;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;CAC9D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx_pool_test_suite.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/tx_pool_test_suite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,MAAM,QA+
|
|
1
|
+
{"version":3,"file":"tx_pool_test_suite.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/tx_pool_test_suite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,MAAM,QA+FrD"}
|
|
@@ -27,12 +27,39 @@ export function describeTxPool(getTxPool) {
|
|
|
27
27
|
const tx1 = mockTx(1);
|
|
28
28
|
const tx2 = mockTx(2);
|
|
29
29
|
await pool.addTxs([tx1, tx2]);
|
|
30
|
-
await pool.markAsMined([tx1.getTxHash()]);
|
|
30
|
+
await pool.markAsMined([tx1.getTxHash()], 1);
|
|
31
31
|
expect(pool.getTxByHash(tx1.getTxHash())).toEqual(tx1);
|
|
32
32
|
expect(pool.getTxStatus(tx1.getTxHash())).toEqual('mined');
|
|
33
|
-
expect(pool.getMinedTxHashes()).toEqual([tx1.getTxHash()]);
|
|
33
|
+
expect(pool.getMinedTxHashes()).toEqual([[tx1.getTxHash(), 1]]);
|
|
34
34
|
expect(pool.getPendingTxHashes()).toEqual([tx2.getTxHash()]);
|
|
35
35
|
});
|
|
36
|
+
it('Marks txs as pending after being mined', async () => {
|
|
37
|
+
const tx1 = mockTx(1);
|
|
38
|
+
const tx2 = mockTx(2);
|
|
39
|
+
await pool.addTxs([tx1, tx2]);
|
|
40
|
+
await pool.markAsMined([tx1.getTxHash()], 1);
|
|
41
|
+
await pool.markMinedAsPending([tx1.getTxHash()]);
|
|
42
|
+
expect(pool.getMinedTxHashes()).toEqual([]);
|
|
43
|
+
const pending = pool.getPendingTxHashes();
|
|
44
|
+
expect(pending).toHaveLength(2);
|
|
45
|
+
expect(pending).toEqual(expect.arrayContaining([tx1.getTxHash(), tx2.getTxHash()]));
|
|
46
|
+
});
|
|
47
|
+
it('Only marks txs as pending if they are known', async () => {
|
|
48
|
+
const tx1 = mockTx(1);
|
|
49
|
+
// simulate a situation where not all peers have all the txs
|
|
50
|
+
const someTxHashThatThisPeerDidNotSee = mockTx(2).getTxHash();
|
|
51
|
+
await pool.addTxs([tx1]);
|
|
52
|
+
// this peer knows that tx2 was mined, but it does not have the tx object
|
|
53
|
+
await pool.markAsMined([tx1.getTxHash(), someTxHashThatThisPeerDidNotSee], 1);
|
|
54
|
+
expect(pool.getMinedTxHashes()).toEqual([
|
|
55
|
+
[tx1.getTxHash(), 1],
|
|
56
|
+
[someTxHashThatThisPeerDidNotSee, 1],
|
|
57
|
+
]);
|
|
58
|
+
// reorg: both txs should now become available again
|
|
59
|
+
await pool.markMinedAsPending([tx1.getTxHash(), someTxHashThatThisPeerDidNotSee]);
|
|
60
|
+
expect(pool.getMinedTxHashes()).toEqual([]);
|
|
61
|
+
expect(pool.getPendingTxHashes()).toEqual([tx1.getTxHash()]); // tx2 is not in the pool
|
|
62
|
+
});
|
|
36
63
|
it('Returns all transactions in the pool', async () => {
|
|
37
64
|
const tx1 = mockTx(1);
|
|
38
65
|
const tx2 = mockTx(2);
|
|
@@ -52,4 +79,4 @@ export function describeTxPool(getTxPool) {
|
|
|
52
79
|
expect(poolTxHashes).toEqual(expect.arrayContaining([tx1.getTxHash(), tx2.getTxHash(), tx3.getTxHash()]));
|
|
53
80
|
});
|
|
54
81
|
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcG9vbF90ZXN0X3N1aXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21lbV9wb29scy90eF9wb29sL3R4X3Bvb2xfdGVzdF9zdWl0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJOUM7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxTQUF1QjtJQUNwRCxJQUFJLElBQVksQ0FBQztJQUVqQixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsSUFBSSxHQUFHLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGlDQUFpQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQy9DLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBRXJCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsTUFBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekMsTUFBTSxHQUFHLEdB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
|
package/dest/mocks/index.d.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
import { type ClientProtocolCircuitVerifier, type Tx } from '@aztec/circuit-types';
|
|
1
|
+
import { type ClientProtocolCircuitVerifier, type L2BlockSource, type Tx, type WorldStateSynchronizer } from '@aztec/circuit-types';
|
|
2
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
3
|
+
import { type PeerId } from '@libp2p/interface';
|
|
2
4
|
import { type Libp2p } from 'libp2p';
|
|
5
|
+
import { BootstrapNode } from '../bootstrap/bootstrap.js';
|
|
6
|
+
import { type BootnodeConfig } from '../config.js';
|
|
7
|
+
import { type MemPools } from '../mem_pools/interface.js';
|
|
8
|
+
import { LibP2PService } from '../service/libp2p_service.js';
|
|
3
9
|
import { type PeerManager } from '../service/peer_manager.js';
|
|
4
10
|
import { type ReqRespSubProtocolHandlers, type ReqRespSubProtocolValidators } from '../service/reqresp/interface.js';
|
|
5
11
|
import { ReqResp } from '../service/reqresp/reqresp.js';
|
|
@@ -8,7 +14,14 @@ import { ReqResp } from '../service/reqresp/reqresp.js';
|
|
|
8
14
|
* @param boostrapAddrs - an optional list of bootstrap addresses
|
|
9
15
|
* @returns Lip2p node
|
|
10
16
|
*/
|
|
11
|
-
export declare function createLibp2pNode(boostrapAddrs?: string[]): Promise<Libp2p>;
|
|
17
|
+
export declare function createLibp2pNode(boostrapAddrs?: string[], peerId?: PeerId, port?: number, enableGossipSub?: boolean, start?: boolean): Promise<Libp2p>;
|
|
18
|
+
/**
|
|
19
|
+
* Test Libp2p service
|
|
20
|
+
* P2P functionality is operational, however everything else is default
|
|
21
|
+
*
|
|
22
|
+
* WORKTODO: more description
|
|
23
|
+
*/
|
|
24
|
+
export declare function createTestLibP2PService(boostrapAddrs: string[] | undefined, l2BlockSource: L2BlockSource, worldStateSynchronizer: WorldStateSynchronizer, mempools: MemPools, telemetry: TelemetryClient, port?: number, peerId?: PeerId): Promise<LibP2PService>;
|
|
12
25
|
/**
|
|
13
26
|
* A p2p / req resp node pairing the req node will always contain the p2p node.
|
|
14
27
|
* they are provided as a pair to allow access the p2p node directly
|
|
@@ -34,4 +47,7 @@ export declare class AlwaysTrueCircuitVerifier implements ClientProtocolCircuitV
|
|
|
34
47
|
export declare class AlwaysFalseCircuitVerifier implements ClientProtocolCircuitVerifier {
|
|
35
48
|
verifyProof(_tx: Tx): Promise<boolean>;
|
|
36
49
|
}
|
|
50
|
+
export declare function createBootstrapNodeConfig(privateKey: string, port: number): BootnodeConfig;
|
|
51
|
+
export declare function createBootstrapNodeFromPrivateKey(privateKey: string, port: number): Promise<BootstrapNode>;
|
|
52
|
+
export declare function createBootstrapNode(port: number): Promise<BootstrapNode>;
|
|
37
53
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mocks/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mocks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,aAAa,EAClB,KAAK,EAAE,EACP,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAO/D,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,KAAK,MAAM,EAAoC,MAAM,QAAQ,CAAC;AAEvE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAsB,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EAIlC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAGxD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,GAAE,MAAM,EAAO,EAC5B,MAAM,CAAC,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,EACb,eAAe,GAAE,OAAe,EAChC,KAAK,GAAE,OAAc,GACpB,OAAO,CAAC,MAAM,CAAC,CAqCjB;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,aAAa,sBAAe,EAC5B,aAAa,EAAE,aAAa,EAC5B,sBAAsB,EAAE,sBAAsB,EAC9C,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,eAAe,EAC1B,IAAI,GAAE,MAAU,EAChB,MAAM,CAAC,EAAE,MAAM,0BA+BhB;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAGF,eAAO,MAAM,0BAA0B,EAAE,0BAIxC,CAAC;AAIF,eAAO,MAAM,4BAA4B,EAAE,4BAI1C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,gBAAuB,WAAW,iBAAiB,MAAM,KAAG,QAAQ,WAAW,EAAE,CAExG,CAAC;AAEF,eAAO,MAAM,UAAU,UACd,WAAW,EAAE,0HAOrB,CAAC;AAEF,eAAO,MAAM,SAAS,UAAiB,WAAW,EAAE,KAAG,QAAQ,IAAI,CAOlE,CAAC;AAGF,eAAO,MAAM,aAAa,gBAAuB,WAAW,KAAG,QAAQ,WAAW,CAWjF,CAAC;AAGF,eAAO,MAAM,cAAc,UAAiB,WAAW,EAAE,KAAG,QAAQ,IAAI,CAUvE,CAAC;AAGF,qBAAa,yBAA0B,YAAW,6BAA6B;IAC7E,WAAW,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAGvC;AACD,qBAAa,0BAA2B,YAAW,6BAA6B;IAC9E,WAAW,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAGvC;AAGD,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAQ1F;AAED,wBAAgB,iCAAiC,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAG1G;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAK9E"}
|
package/dest/mocks/index.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
+
import { gossipsub } from '@chainsafe/libp2p-gossipsub';
|
|
1
2
|
import { noise } from '@chainsafe/libp2p-noise';
|
|
2
3
|
import { yamux } from '@chainsafe/libp2p-yamux';
|
|
3
4
|
import { bootstrap } from '@libp2p/bootstrap';
|
|
5
|
+
import { identify } from '@libp2p/identify';
|
|
4
6
|
import { tcp } from '@libp2p/tcp';
|
|
7
|
+
import getPort from 'get-port';
|
|
5
8
|
import { createLibp2p } from 'libp2p';
|
|
9
|
+
import { BootstrapNode } from '../bootstrap/bootstrap.js';
|
|
10
|
+
import { DiscV5Service } from '../service/discV5_service.js';
|
|
11
|
+
import { LibP2PService, createLibP2PPeerId } from '../service/libp2p_service.js';
|
|
6
12
|
import { pingHandler, statusHandler } from '../service/reqresp/handlers.js';
|
|
7
13
|
import { PING_PROTOCOL, STATUS_PROTOCOL, TX_REQ_PROTOCOL, noopValidator, } from '../service/reqresp/interface.js';
|
|
8
14
|
import { ReqResp } from '../service/reqresp/reqresp.js';
|
|
@@ -11,14 +17,22 @@ import { ReqResp } from '../service/reqresp/reqresp.js';
|
|
|
11
17
|
* @param boostrapAddrs - an optional list of bootstrap addresses
|
|
12
18
|
* @returns Lip2p node
|
|
13
19
|
*/
|
|
14
|
-
export async function createLibp2pNode(boostrapAddrs = []) {
|
|
20
|
+
export async function createLibp2pNode(boostrapAddrs = [], peerId, port, enableGossipSub = false, start = true) {
|
|
21
|
+
port = port ?? (await getPort());
|
|
15
22
|
const options = {
|
|
23
|
+
start,
|
|
16
24
|
addresses: {
|
|
17
|
-
listen: [
|
|
25
|
+
listen: [`/ip4/0.0.0.0/tcp/${port}`],
|
|
26
|
+
announce: [`/ip4/0.0.0.0/tcp/${port}`],
|
|
18
27
|
},
|
|
19
28
|
connectionEncryption: [noise()],
|
|
20
29
|
streamMuxers: [yamux()],
|
|
21
30
|
transports: [tcp()],
|
|
31
|
+
services: {
|
|
32
|
+
identify: identify({
|
|
33
|
+
protocolPrefix: 'aztec',
|
|
34
|
+
}),
|
|
35
|
+
},
|
|
22
36
|
};
|
|
23
37
|
if (boostrapAddrs.length > 0) {
|
|
24
38
|
options.peerDiscovery = [
|
|
@@ -27,8 +41,42 @@ export async function createLibp2pNode(boostrapAddrs = []) {
|
|
|
27
41
|
}),
|
|
28
42
|
];
|
|
29
43
|
}
|
|
44
|
+
if (peerId) {
|
|
45
|
+
options.peerId = peerId;
|
|
46
|
+
}
|
|
47
|
+
if (enableGossipSub) {
|
|
48
|
+
options.services.pubsub = gossipsub({
|
|
49
|
+
allowPublishToZeroTopicPeers: true,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
30
52
|
return await createLibp2p(options);
|
|
31
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Test Libp2p service
|
|
56
|
+
* P2P functionality is operational, however everything else is default
|
|
57
|
+
*
|
|
58
|
+
* WORKTODO: more description
|
|
59
|
+
*/
|
|
60
|
+
export async function createTestLibP2PService(boostrapAddrs = [], l2BlockSource, worldStateSynchronizer, mempools, telemetry, port = 0, peerId) {
|
|
61
|
+
peerId = peerId ?? (await createLibP2PPeerId());
|
|
62
|
+
const config = {
|
|
63
|
+
tcpAnnounceAddress: `127.0.0.1:${port}`,
|
|
64
|
+
udpAnnounceAddress: `127.0.0.1:${port}`,
|
|
65
|
+
tcpListenAddress: `0.0.0.0:${port}`,
|
|
66
|
+
udpListenAddress: `0.0.0.0:${port}`,
|
|
67
|
+
bootstrapNodes: boostrapAddrs,
|
|
68
|
+
peerCheckIntervalMS: 1000,
|
|
69
|
+
minPeerCount: 1,
|
|
70
|
+
maxPeerCount: 5,
|
|
71
|
+
p2pEnabled: true,
|
|
72
|
+
peerIdPrivateKey: Buffer.from(peerId.privateKey).toString('hex'),
|
|
73
|
+
};
|
|
74
|
+
const discoveryService = new DiscV5Service(peerId, config);
|
|
75
|
+
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
76
|
+
// No bootstrap nodes provided as the libp2p service will register them in the constructor
|
|
77
|
+
const p2pNode = await createLibp2pNode([], peerId, port, /*enable gossip */ true, /**start */ false);
|
|
78
|
+
return new LibP2PService(config, p2pNode, discoveryService, mempools, l2BlockSource, proofVerifier, worldStateSynchronizer, telemetry);
|
|
79
|
+
}
|
|
32
80
|
// Mock sub protocol handlers
|
|
33
81
|
export const MOCK_SUB_PROTOCOL_HANDLERS = {
|
|
34
82
|
[PING_PROTOCOL]: pingHandler,
|
|
@@ -55,10 +103,12 @@ export const startNodes = async (nodes, subProtocolHandlers = MOCK_SUB_PROTOCOL_
|
|
|
55
103
|
}
|
|
56
104
|
};
|
|
57
105
|
export const stopNodes = async (nodes) => {
|
|
106
|
+
const stopPromises = [];
|
|
58
107
|
for (const node of nodes) {
|
|
59
|
-
|
|
60
|
-
|
|
108
|
+
stopPromises.push(node.req.stop());
|
|
109
|
+
stopPromises.push(node.p2p.stop());
|
|
61
110
|
}
|
|
111
|
+
await Promise.all(stopPromises);
|
|
62
112
|
};
|
|
63
113
|
// Create a req resp node, exposing the underlying p2p node
|
|
64
114
|
export const createReqResp = async (peerManager) => {
|
|
@@ -96,4 +146,28 @@ export class AlwaysFalseCircuitVerifier {
|
|
|
96
146
|
return Promise.resolve(false);
|
|
97
147
|
}
|
|
98
148
|
}
|
|
99
|
-
|
|
149
|
+
// Bootnodes
|
|
150
|
+
export function createBootstrapNodeConfig(privateKey, port) {
|
|
151
|
+
return {
|
|
152
|
+
udpListenAddress: `0.0.0.0:${port}`,
|
|
153
|
+
udpAnnounceAddress: `127.0.0.1:${port}`,
|
|
154
|
+
peerIdPrivateKey: privateKey,
|
|
155
|
+
minPeerCount: 10,
|
|
156
|
+
maxPeerCount: 100,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
export function createBootstrapNodeFromPrivateKey(privateKey, port) {
|
|
160
|
+
const config = createBootstrapNodeConfig(privateKey, port);
|
|
161
|
+
return startBootstrapNode(config);
|
|
162
|
+
}
|
|
163
|
+
export async function createBootstrapNode(port) {
|
|
164
|
+
const peerId = await createLibP2PPeerId();
|
|
165
|
+
const config = createBootstrapNodeConfig(Buffer.from(peerId.privateKey).toString('hex'), port);
|
|
166
|
+
return startBootstrapNode(config);
|
|
167
|
+
}
|
|
168
|
+
async function startBootstrapNode(config) {
|
|
169
|
+
const bootstrapNode = new BootstrapNode();
|
|
170
|
+
await bootstrapNode.start(config);
|
|
171
|
+
return bootstrapNode;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9ja3MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQW1DLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUdqRixPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVFLE9BQU8sRUFDTCxhQUFhLEVBR2IsZUFBZSxFQUNmLGVBQWUsRUFDZixhQUFhLEdBQ2QsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHeEQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLGdCQUEwQixFQUFFLEVBQzVCLE1BQWUsRUFDZixJQUFhLEVBQ2Isa0JBQTJCLEtBQUssRUFDaEMsUUFBaUIsSUFBSTtJQUVyQixJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFB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
|
|
@@ -27,11 +27,11 @@ export class PeerScoring {
|
|
|
27
27
|
this.lastUpdateTime = new Map();
|
|
28
28
|
this.decayInterval = 1000 * 60; // 1 minute
|
|
29
29
|
this.decayFactor = 0.9;
|
|
30
|
-
const orderedValues = config.peerPenaltyValues
|
|
30
|
+
const orderedValues = config.peerPenaltyValues?.sort((a, b) => a - b);
|
|
31
31
|
this.peerPenalties = {
|
|
32
|
-
[PeerErrorSeverity.HighToleranceError]: orderedValues[0] ?? DefaultPeerPenalties[PeerErrorSeverity.LowToleranceError],
|
|
33
|
-
[PeerErrorSeverity.MidToleranceError]: orderedValues[1] ?? DefaultPeerPenalties[PeerErrorSeverity.MidToleranceError],
|
|
34
|
-
[PeerErrorSeverity.LowToleranceError]: orderedValues[2] ?? DefaultPeerPenalties[PeerErrorSeverity.HighToleranceError],
|
|
32
|
+
[PeerErrorSeverity.HighToleranceError]: orderedValues?.[0] ?? DefaultPeerPenalties[PeerErrorSeverity.LowToleranceError],
|
|
33
|
+
[PeerErrorSeverity.MidToleranceError]: orderedValues?.[1] ?? DefaultPeerPenalties[PeerErrorSeverity.MidToleranceError],
|
|
34
|
+
[PeerErrorSeverity.LowToleranceError]: orderedValues?.[2] ?? DefaultPeerPenalties[PeerErrorSeverity.HighToleranceError],
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
37
|
updateScore(peerId, scoreDelta) {
|
|
@@ -64,4 +64,4 @@ export class PeerScoring {
|
|
|
64
64
|
return this.scores.get(peerId) || 0;
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9zY29yaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2UvcGVlcl9zY29yaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBTixJQUFZLGlCQWdCWDtBQWhCRCxXQUFZLGlCQUFpQjtJQUMzQjs7O09BR0c7SUFDSCw0REFBdUMsQ0FBQTtJQUN2Qzs7O09BR0c7SUFDSCw0REFBdUMsQ0FBQTtJQUN2Qzs7O09BR0c7SUFDSCw4REFBeUMsQ0FBQTtBQUMzQyxDQUFDLEVBaEJXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFnQjVCO0FBRUQsTUFBTSxvQkFBb0IsR0FBRztJQUMzQixDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztJQUN4QyxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRTtJQUN6QyxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRTtDQUMzQyxDQUFDO0FBRUYsTUFBTSxPQUFPLFdBQVc7SUFPdEIsWUFBWSxNQUFpQjtRQU5yQixXQUFNLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDeEMsbUJBQWMsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNoRCxrQkFBYSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxXQUFXO1FBQ3RDLGdCQUFXLEdBQUcsR0FBRyxDQUFDO1FBSXhCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNuQixDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLEVBQ3BDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixD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
|
package/dest/util.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { type DataStoreConfig } from '@aztec/kv-store/utils';
|
|
1
2
|
import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
|
|
2
3
|
import type { Libp2p } from 'libp2p';
|
|
4
|
+
import { type P2PConfig } from './config.js';
|
|
3
5
|
export interface PubSubLibp2p extends Libp2p {
|
|
4
6
|
services: {
|
|
5
7
|
pubsub: GossipSub;
|
|
@@ -25,4 +27,5 @@ export declare function splitAddressPort(address: string, allowEmptyAddress: boo
|
|
|
25
27
|
*/
|
|
26
28
|
export declare function getPublicIp(): Promise<string>;
|
|
27
29
|
export declare function resolveAddressIfNecessary(address: string): Promise<string>;
|
|
30
|
+
export declare function configureP2PClientAddresses(_config: P2PConfig & DataStoreConfig): Promise<P2PConfig & DataStoreConfig>;
|
|
28
31
|
//# sourceMappingURL=util.d.ts.map
|
package/dest/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,QAAQ,EAAE;QACR,MAAM,EAAE,SAAS,CAAC;KACnB,CAAC;CACH;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CASnF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB9F;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAInD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYhF"}
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,QAAQ,EAAE;QACR,MAAM,EAAE,SAAS,CAAC;KACnB,CAAC;CACH;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CASnF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB9F;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAInD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYhF;AAcD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,GAAG,eAAe,GACnC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,CA6CtC"}
|
package/dest/util.js
CHANGED
|
@@ -75,4 +75,41 @@ function addressToMultiAddressType(address) {
|
|
|
75
75
|
return 'dns';
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
-
|
|
78
|
+
export async function configureP2PClientAddresses(_config) {
|
|
79
|
+
const config = { ..._config };
|
|
80
|
+
const { tcpAnnounceAddress: configTcpAnnounceAddress, udpAnnounceAddress: configUdpAnnounceAddress, queryForIp, } = config;
|
|
81
|
+
config.tcpAnnounceAddress = configTcpAnnounceAddress
|
|
82
|
+
? await resolveAddressIfNecessary(configTcpAnnounceAddress)
|
|
83
|
+
: undefined;
|
|
84
|
+
config.udpAnnounceAddress = configUdpAnnounceAddress
|
|
85
|
+
? await resolveAddressIfNecessary(configUdpAnnounceAddress)
|
|
86
|
+
: undefined;
|
|
87
|
+
// create variable for re-use if needed
|
|
88
|
+
let publicIp;
|
|
89
|
+
// check if no announce IP was provided
|
|
90
|
+
const splitTcpAnnounceAddress = splitAddressPort(configTcpAnnounceAddress || '', true);
|
|
91
|
+
if (splitTcpAnnounceAddress.length == 2 && splitTcpAnnounceAddress[0] === '') {
|
|
92
|
+
if (queryForIp) {
|
|
93
|
+
publicIp = await getPublicIp();
|
|
94
|
+
const tcpAnnounceAddress = `${publicIp}:${splitTcpAnnounceAddress[1]}`;
|
|
95
|
+
config.tcpAnnounceAddress = tcpAnnounceAddress;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
throw new Error(`Invalid announceTcpAddress provided: ${configTcpAnnounceAddress}. Expected format: <addr>:<port>`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const splitUdpAnnounceAddress = splitAddressPort(configUdpAnnounceAddress || '', true);
|
|
102
|
+
if (splitUdpAnnounceAddress.length == 2 && splitUdpAnnounceAddress[0] === '') {
|
|
103
|
+
// If announceUdpAddress is not provided, use announceTcpAddress
|
|
104
|
+
if (!queryForIp && config.tcpAnnounceAddress) {
|
|
105
|
+
config.udpAnnounceAddress = config.tcpAnnounceAddress;
|
|
106
|
+
}
|
|
107
|
+
else if (queryForIp) {
|
|
108
|
+
const udpPublicIp = publicIp || (await getPublicIp());
|
|
109
|
+
const udpAnnounceAddress = `${udpPublicIp}:${splitUdpAnnounceAddress[1]}`;
|
|
110
|
+
config.udpAnnounceAddress = udpAnnounceAddress;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return config;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFXdkM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBZSxFQUFFLFFBQXVCO0lBQ3pFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXRELE1BQU0sZUFBZSxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELElBQUksZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsT0FBTyxJQUFJLGVBQWUsSUFBSSxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzNELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBZSxFQUFFLGlCQUEwQjtJQUMxRSxJQUFJLElBQVksQ0FBQztJQUNqQixJQUFJLElBQVksQ0FBQztJQUVqQixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QiwyQ0FBMkM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLE9BQU8sb0NBQW9DLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBQ0QsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztTQUFNLENBQUM7UUFDTixlQUFlO1FBQ2YsQ0FBQyxJQUFJLEVB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
|