@aztec/p2p 0.47.0 → 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/index.js +2 -2
- package/dest/client/mocks.d.ts +5 -3
- package/dest/client/mocks.d.ts.map +1 -1
- package/dest/client/mocks.js +18 -9
- package/dest/client/p2p_client.d.ts +5 -3
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +19 -6
- package/dest/config.d.ts +12 -12
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +89 -25
- package/dest/service/libp2p_service.d.ts +2 -3
- package/dest/service/libp2p_service.d.ts.map +1 -1
- package/dest/service/libp2p_service.js +20 -32
- 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/index.ts +1 -1
- package/src/client/mocks.ts +20 -7
- package/src/client/p2p_client.ts +19 -4
- package/src/config.ts +116 -55
- 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 -32
- package/dest/service/tx_messages.d.ts.map +0 -1
- package/dest/service/tx_messages.js +0 -121
- package/src/service/tx_messages.ts +0 -143
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TopicType, TopicTypeMap, Tx } from '@aztec/circuit-types';
|
|
2
2
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { SerialQueue } from '@aztec/foundation/queue';
|
|
3
4
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
4
5
|
import { gossipsub } from '@chainsafe/libp2p-gossipsub';
|
|
5
6
|
import { noise } from '@chainsafe/libp2p-noise';
|
|
@@ -13,7 +14,6 @@ import { createLibp2p } from 'libp2p';
|
|
|
13
14
|
import { convertToMultiaddr } from '../util.js';
|
|
14
15
|
import { AztecDatastore } from './data_store.js';
|
|
15
16
|
import { PeerManager } from './peer_manager.js';
|
|
16
|
-
import { AztecTxMessageCreator, fromTxMessage } from './tx_messages.js';
|
|
17
17
|
/**
|
|
18
18
|
* Create a libp2p peer ID from the private key if provided, otherwise creates a new random ID.
|
|
19
19
|
* @param privateKey - Optional peer ID private key as hex string
|
|
@@ -40,7 +40,6 @@ export class LibP2PService {
|
|
|
40
40
|
this.txPool = txPool;
|
|
41
41
|
this.logger = logger;
|
|
42
42
|
this.jobQueue = new SerialQueue();
|
|
43
|
-
this.messageCreator = new AztecTxMessageCreator(config.txGossipVersion);
|
|
44
43
|
this.peerManager = new PeerManager(node, peerDiscoveryService, config, logger);
|
|
45
44
|
}
|
|
46
45
|
/**
|
|
@@ -66,17 +65,19 @@ export class LibP2PService {
|
|
|
66
65
|
await this.node.start();
|
|
67
66
|
this.logger.info(`Started P2P client with Peer ID ${this.node.peerId.toString()}`);
|
|
68
67
|
// Subscribe to standard GossipSub topics by default
|
|
69
|
-
|
|
68
|
+
for (const topic in TopicType) {
|
|
69
|
+
this.subscribeToTopic(TopicTypeMap[topic].p2pTopic);
|
|
70
|
+
}
|
|
70
71
|
// add GossipSub listener
|
|
71
72
|
this.node.services.pubsub.addEventListener('gossipsub:message', async (e) => {
|
|
72
73
|
const { msg } = e.detail;
|
|
73
74
|
this.logger.debug(`Received PUBSUB message.`);
|
|
74
|
-
await this.jobQueue.put(() => this.handleNewGossipMessage(msg
|
|
75
|
+
await this.jobQueue.put(() => this.handleNewGossipMessage(msg));
|
|
75
76
|
});
|
|
76
77
|
// Start running promise for peer discovery
|
|
77
78
|
this.discoveryRunningPromise = new RunningPromise(() => {
|
|
78
79
|
this.peerManager.discover();
|
|
79
|
-
}, this.config.
|
|
80
|
+
}, this.config.peerCheckIntervalMS);
|
|
80
81
|
this.discoveryRunningPromise.start();
|
|
81
82
|
}
|
|
82
83
|
/**
|
|
@@ -106,19 +107,6 @@ export class LibP2PService {
|
|
|
106
107
|
// We know tcpAnnounceAddress cannot be null here because we set it or throw when setting up the service.
|
|
107
108
|
const announceAddrTcp = convertToMultiaddr(tcpAnnounceAddress, 'tcp');
|
|
108
109
|
const datastore = new AztecDatastore(store);
|
|
109
|
-
// The autonat service seems quite problematic in that using it seems to cause a lot of attempts
|
|
110
|
-
// to dial ephemeral ports. I suspect that it works better if you can get the uPNPnat service to
|
|
111
|
-
// work as then you would have a permanent port to be dialled.
|
|
112
|
-
// Alas, I struggled to get this to work reliably either. I find there is a race between the
|
|
113
|
-
// service that reads our listener addresses and the uPnP service.
|
|
114
|
-
// The result being the uPnP service can't find an address to use for the port forward.
|
|
115
|
-
// Need to investigate further.
|
|
116
|
-
// if (enableNat) {
|
|
117
|
-
// services.autoNAT = autoNATService({
|
|
118
|
-
// protocolPrefix: 'aztec',
|
|
119
|
-
// });
|
|
120
|
-
// services.uPnPNAT = uPnPNATService();
|
|
121
|
-
// }
|
|
122
110
|
const node = await createLibp2p({
|
|
123
111
|
start: false,
|
|
124
112
|
peerId,
|
|
@@ -191,20 +179,19 @@ export class LibP2PService {
|
|
|
191
179
|
* @param topic - The message's topic.
|
|
192
180
|
* @param data - The message data
|
|
193
181
|
*/
|
|
194
|
-
async handleNewGossipMessage(
|
|
195
|
-
if (topic
|
|
196
|
-
|
|
197
|
-
|
|
182
|
+
async handleNewGossipMessage(message) {
|
|
183
|
+
if (message.topic === Tx.p2pTopic) {
|
|
184
|
+
const tx = Tx.fromBuffer(Buffer.from(message.data));
|
|
185
|
+
await this.processTxFromPeer(tx);
|
|
198
186
|
}
|
|
199
|
-
|
|
200
|
-
await this.processTxFromPeer(tx);
|
|
187
|
+
return;
|
|
201
188
|
}
|
|
202
189
|
/**
|
|
203
190
|
* Propagates the provided transaction to peers.
|
|
204
191
|
* @param tx - The transaction to propagate.
|
|
205
192
|
*/
|
|
206
193
|
propagateTx(tx) {
|
|
207
|
-
void this.jobQueue.put(() => Promise.resolve(this.
|
|
194
|
+
void this.jobQueue.put(() => Promise.resolve(this.sendToPeers(tx)));
|
|
208
195
|
}
|
|
209
196
|
async processTxFromPeer(tx) {
|
|
210
197
|
const txHash = tx.getTxHash();
|
|
@@ -212,11 +199,12 @@ export class LibP2PService {
|
|
|
212
199
|
this.logger.verbose(`Received tx ${txHashString} from external peer.`);
|
|
213
200
|
await this.txPool.addTxs([tx]);
|
|
214
201
|
}
|
|
215
|
-
async
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
this.
|
|
202
|
+
async sendToPeers(message) {
|
|
203
|
+
const parent = message.constructor;
|
|
204
|
+
const identifier = message.p2pMessageIdentifier().toString();
|
|
205
|
+
this.logger.verbose(`Sending tx ${identifier} to peers`);
|
|
206
|
+
const recipientsNum = await this.publishToTopic(parent.p2pTopic, message.toBuffer());
|
|
207
|
+
this.logger.verbose(`Sent tx ${identifier} to ${recipientsNum} peers`);
|
|
220
208
|
}
|
|
221
209
|
// Libp2p seems to hang sometimes if new peers are initiating connections.
|
|
222
210
|
async stopLibP2P() {
|
|
@@ -233,4 +221,4 @@ export class LibP2PService {
|
|
|
233
221
|
}
|
|
234
222
|
}
|
|
235
223
|
}
|
|
236
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicDJwX3NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZS9saWJwMnBfc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTBDLFNBQVMsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUduRSxPQUFPLEVBQXdCLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTVDLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQWUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBSW5ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBUWhEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUFDLFVBQW1CO0lBQzFELElBQUksQ0FBQyxV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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aztec_kv_tx_pool.d.ts","sourceRoot":"","sources":["../../src/tx_pool/aztec_kv_tx_pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,KAAK,MAAM,EAAqB,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,KAAK,YAAY,EAAgC,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;GAEG;AACH,qBAAa,aAAc,YAAW,MAAM;;IAe1C;;;;OAIG;gBACS,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,SAAqC;IAU9F,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"aztec_kv_tx_pool.d.ts","sourceRoot":"","sources":["../../src/tx_pool/aztec_kv_tx_pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,KAAK,MAAM,EAAqB,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,KAAK,YAAY,EAAgC,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;GAEG;AACH,qBAAa,aAAc,YAAW,MAAM;;IAe1C;;;;OAIG;gBACS,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,SAAqC;IAU9F,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB9C,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;IAyBvC;;;;OAIG;IACI,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBnD;;;OAGG;IACI,SAAS,IAAI,EAAE,EAAE;IAIxB;;;OAGG;IACI,cAAc,IAAI,MAAM,EAAE;CAGlC"}
|
|
@@ -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/index.ts
CHANGED
package/src/client/mocks.ts
CHANGED
|
@@ -8,14 +8,23 @@ export class MockBlockSource implements L2BlockSource {
|
|
|
8
8
|
private l2Blocks: L2Block[] = [];
|
|
9
9
|
private txEffects: TxEffect[] = [];
|
|
10
10
|
|
|
11
|
-
constructor(
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
constructor(numBlocks = 100, private provenBlockNumber?: number) {
|
|
12
|
+
this.addBlocks(numBlocks);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public addBlocks(numBlocks: number) {
|
|
16
|
+
for (let i = 0; i < numBlocks; i++) {
|
|
17
|
+
const blockNum = this.l2Blocks.length;
|
|
18
|
+
const block = L2Block.random(blockNum, blockNum);
|
|
14
19
|
this.l2Blocks.push(block);
|
|
15
20
|
this.txEffects.push(...block.body.txEffects);
|
|
16
21
|
}
|
|
17
22
|
}
|
|
18
23
|
|
|
24
|
+
public setProvenBlockNumber(provenBlockNumber: number) {
|
|
25
|
+
this.provenBlockNumber = provenBlockNumber;
|
|
26
|
+
}
|
|
27
|
+
|
|
19
28
|
/**
|
|
20
29
|
* Method to fetch the rollup contract address at the base-layer.
|
|
21
30
|
* @returns The rollup address.
|
|
@@ -40,8 +49,8 @@ export class MockBlockSource implements L2BlockSource {
|
|
|
40
49
|
return Promise.resolve(this.l2Blocks.length - 1);
|
|
41
50
|
}
|
|
42
51
|
|
|
43
|
-
public getProvenBlockNumber(): Promise<number> {
|
|
44
|
-
return this.getBlockNumber();
|
|
52
|
+
public async getProvenBlockNumber(): Promise<number> {
|
|
53
|
+
return this.provenBlockNumber ?? (await this.getBlockNumber());
|
|
45
54
|
}
|
|
46
55
|
|
|
47
56
|
/**
|
|
@@ -59,8 +68,12 @@ export class MockBlockSource implements L2BlockSource {
|
|
|
59
68
|
* @param limit - The maximum number of blocks to return.
|
|
60
69
|
* @returns The requested mocked L2 blocks.
|
|
61
70
|
*/
|
|
62
|
-
public getBlocks(from: number, limit: number) {
|
|
63
|
-
return Promise.resolve(
|
|
71
|
+
public getBlocks(from: number, limit: number, proven?: boolean) {
|
|
72
|
+
return Promise.resolve(
|
|
73
|
+
this.l2Blocks
|
|
74
|
+
.slice(from, from + limit)
|
|
75
|
+
.filter(b => !proven || this.provenBlockNumber === undefined || b.number <= this.provenBlockNumber),
|
|
76
|
+
);
|
|
64
77
|
}
|
|
65
78
|
|
|
66
79
|
/**
|
package/src/client/p2p_client.ts
CHANGED
|
@@ -123,6 +123,7 @@ export class P2PClient implements P2P {
|
|
|
123
123
|
* @param l2BlockSource - P2P client's source for fetching existing blocks.
|
|
124
124
|
* @param txPool - The client's instance of a transaction pool. Defaults to in-memory implementation.
|
|
125
125
|
* @param p2pService - The concrete instance of p2p networking to use.
|
|
126
|
+
* @param keepProvenTxsFor - How many blocks have to pass after a block is proven before its txs are deleted (zero to delete immediately once proven).
|
|
126
127
|
* @param log - A logger.
|
|
127
128
|
*/
|
|
128
129
|
constructor(
|
|
@@ -130,9 +131,10 @@ export class P2PClient implements P2P {
|
|
|
130
131
|
private l2BlockSource: L2BlockSource,
|
|
131
132
|
private txPool: TxPool,
|
|
132
133
|
private p2pService: P2PService,
|
|
134
|
+
private keepProvenTxsFor: number,
|
|
133
135
|
private log = createDebugLogger('aztec:p2p'),
|
|
134
136
|
) {
|
|
135
|
-
const {
|
|
137
|
+
const { blockCheckIntervalMS: checkInterval, l2QueueSize: p2pL2QueueSize } = getP2PConfigEnvVars();
|
|
136
138
|
const l2DownloaderOpts = { maxQueueSize: p2pL2QueueSize, pollIntervalMS: checkInterval };
|
|
137
139
|
// TODO(palla/prover-node): This effectively downloads blocks twice from the archiver, which is an issue
|
|
138
140
|
// if the archiver is remote. We should refactor this so the downloader keeps a single queue and handles
|
|
@@ -340,6 +342,7 @@ export class P2PClient implements P2P {
|
|
|
340
342
|
* @returns Empty promise.
|
|
341
343
|
*/
|
|
342
344
|
private async deleteTxsFromBlocks(blocks: L2Block[]): Promise<void> {
|
|
345
|
+
this.log.debug(`Deleting txs from blocks ${blocks[0].number} to ${blocks[blocks.length - 1].number}`);
|
|
343
346
|
for (const block of blocks) {
|
|
344
347
|
const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
|
|
345
348
|
await this.txPool.deleteTxs(txHashes);
|
|
@@ -363,16 +366,28 @@ export class P2PClient implements P2P {
|
|
|
363
366
|
}
|
|
364
367
|
|
|
365
368
|
/**
|
|
366
|
-
* Handles new proven blocks by deleting the txs in them.
|
|
367
|
-
* @param blocks - A list of
|
|
369
|
+
* Handles new proven blocks by deleting the txs in them, or by deleting the txs in blocks `keepProvenTxsFor` ago.
|
|
370
|
+
* @param blocks - A list of proven L2 blocks.
|
|
368
371
|
* @returns Empty promise.
|
|
369
372
|
*/
|
|
370
373
|
private async handleProvenL2Blocks(blocks: L2Block[]): Promise<void> {
|
|
371
374
|
if (!blocks.length) {
|
|
372
375
|
return Promise.resolve();
|
|
373
376
|
}
|
|
374
|
-
|
|
377
|
+
|
|
378
|
+
const firstBlockNum = blocks[0].number;
|
|
375
379
|
const lastBlockNum = blocks[blocks.length - 1].number;
|
|
380
|
+
|
|
381
|
+
if (this.keepProvenTxsFor === 0) {
|
|
382
|
+
await this.deleteTxsFromBlocks(blocks);
|
|
383
|
+
} else if (lastBlockNum - this.keepProvenTxsFor >= INITIAL_L2_BLOCK_NUM) {
|
|
384
|
+
const fromBlock = Math.max(INITIAL_L2_BLOCK_NUM, firstBlockNum - this.keepProvenTxsFor);
|
|
385
|
+
const toBlock = lastBlockNum - this.keepProvenTxsFor;
|
|
386
|
+
const limit = toBlock - fromBlock + 1;
|
|
387
|
+
const blocksToDeleteTxsFrom = await this.l2BlockSource.getBlocks(fromBlock, limit, true);
|
|
388
|
+
await this.deleteTxsFromBlocks(blocksToDeleteTxsFrom);
|
|
389
|
+
}
|
|
390
|
+
|
|
376
391
|
await this.synchedProvenBlockNumber.set(lastBlockNum);
|
|
377
392
|
this.log.debug(`Synched to proven block ${lastBlockNum}`);
|
|
378
393
|
await this.startServiceIfSynched();
|