@aztec/p2p 0.72.1 → 0.74.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 -2
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +1 -1
- package/dest/client/factory.d.ts +2 -2
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +4 -4
- package/dest/client/p2p_client.d.ts +13 -16
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +50 -62
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +11 -19
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +6 -13
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +74 -80
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +5 -5
- package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +3 -3
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +9 -9
- 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 +59 -53
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +7 -7
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +17 -18
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +7 -7
- 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 +48 -47
- package/dest/mocks/index.js +3 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.js +2 -2
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +2 -2
- package/dest/msg_validators/tx_validator/block_header_validator.js +3 -3
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.js +7 -7
- package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -3
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +9 -9
- package/dest/services/data_store.d.ts +4 -4
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/data_store.js +7 -7
- package/dest/services/libp2p/libp2p_service.d.ts +3 -3
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +56 -35
- package/dest/services/peer-manager/peer_manager.d.ts +1 -0
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +6 -3
- package/dest/services/reqresp/protocols/tx.js +4 -4
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +2 -2
- package/dest/util.d.ts +2 -2
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +2 -2
- package/package.json +7 -7
- package/src/bootstrap/bootstrap.ts +2 -2
- package/src/client/factory.ts +5 -5
- package/src/client/p2p_client.ts +63 -75
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +14 -22
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +100 -94
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +4 -4
- package/src/mem_pools/attestation_pool/mocks.ts +3 -3
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +84 -72
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +26 -23
- package/src/mem_pools/tx_pool/tx_pool.ts +7 -7
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +50 -47
- package/src/mocks/index.ts +2 -2
- package/src/msg_validators/attestation_validator/attestation_validator.ts +1 -1
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +1 -1
- package/src/msg_validators/tx_validator/block_header_validator.ts +2 -2
- package/src/msg_validators/tx_validator/data_validator.ts +12 -9
- package/src/msg_validators/tx_validator/double_spend_validator.ts +2 -2
- package/src/msg_validators/tx_validator/metadata_validator.ts +8 -8
- package/src/services/data_store.ts +9 -9
- package/src/services/libp2p/libp2p_service.ts +70 -36
- package/src/services/peer-manager/peer_manager.ts +7 -2
- package/src/services/reqresp/protocols/tx.ts +3 -3
- package/src/services/reqresp/reqresp.ts +7 -1
- package/src/util.ts +7 -4
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,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,KAAK,MAAM,EAAmB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGpE,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;QAClB,UAAU,EAAE;YACV,iBAAiB,EAAE,iBAAiB,CAAC;SACtC,CAAC;KACH,CAAC;CACH;AAED;;;;;;;6CAO6C;AAC7C,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;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,EACrC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;;GAIG;AACH,wBAAsB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1F"}
|
package/dest/util.js
CHANGED
|
@@ -127,7 +127,7 @@ export async function getPeerIdPrivateKey(config, store) {
|
|
|
127
127
|
await peerIdPrivateKeySingleton.set(config.peerIdPrivateKey);
|
|
128
128
|
return config.peerIdPrivateKey;
|
|
129
129
|
}
|
|
130
|
-
const storedPeerIdPrivateKey = peerIdPrivateKeySingleton.
|
|
130
|
+
const storedPeerIdPrivateKey = await peerIdPrivateKeySingleton.getAsync();
|
|
131
131
|
if (storedPeerIdPrivateKey) {
|
|
132
132
|
return storedPeerIdPrivateKey;
|
|
133
133
|
}
|
|
@@ -148,4 +148,4 @@ export async function createLibP2PPeerIdFromPrivateKey(privateKey) {
|
|
|
148
148
|
const asLibp2pPrivateKey = await unmarshalPrivateKey(new Uint8Array(Buffer.from(privateKey, 'hex')));
|
|
149
149
|
return await createFromPrivKey(asLibp2pPrivateKey);
|
|
150
150
|
}
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUc5RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBY3ZDOzs7Ozs7OzZDQU82QztBQUM3QyxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBZSxFQUFFLFFBQXVCO0lBQ3pFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXRELE1BQU0sZUFBZSxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELElBQUksZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsT0FBTyxJQUFJLGVBQWUsSUFBSSxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzNELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBZSxFQUFFLGlCQUEwQjtJQUMxRSxJQUFJLElBQVksQ0FBQztJQUNqQixJQUFJLElBQVksQ0FBQztJQUVqQixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QiwyQ0FBMkM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLE9BQU8sb0NBQW9DLENBQUMs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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.74.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -63,12 +63,12 @@
|
|
|
63
63
|
]
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@aztec/circuit-types": "0.
|
|
67
|
-
"@aztec/circuits.js": "0.
|
|
68
|
-
"@aztec/epoch-cache": "0.
|
|
69
|
-
"@aztec/foundation": "0.
|
|
70
|
-
"@aztec/kv-store": "0.
|
|
71
|
-
"@aztec/telemetry-client": "0.
|
|
66
|
+
"@aztec/circuit-types": "0.74.0",
|
|
67
|
+
"@aztec/circuits.js": "0.74.0",
|
|
68
|
+
"@aztec/epoch-cache": "0.74.0",
|
|
69
|
+
"@aztec/foundation": "0.74.0",
|
|
70
|
+
"@aztec/kv-store": "0.74.0",
|
|
71
|
+
"@aztec/telemetry-client": "0.74.0",
|
|
72
72
|
"@chainsafe/discv5": "9.0.0",
|
|
73
73
|
"@chainsafe/enr": "3.0.0",
|
|
74
74
|
"@chainsafe/libp2p-gossipsub": "13.0.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type P2PBootstrapApi } from '@aztec/circuit-types/interfaces';
|
|
2
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
-
import { type
|
|
3
|
+
import { type AztecAsyncKVStore } from '@aztec/kv-store';
|
|
4
4
|
import { OtelMetricsAdapter, type TelemetryClient } from '@aztec/telemetry-client';
|
|
5
5
|
|
|
6
6
|
import { Discv5, type Discv5EventEmitter } from '@chainsafe/discv5';
|
|
@@ -20,7 +20,7 @@ export class BootstrapNode implements P2PBootstrapApi {
|
|
|
20
20
|
private peerId?: PeerId;
|
|
21
21
|
|
|
22
22
|
constructor(
|
|
23
|
-
private store:
|
|
23
|
+
private store: AztecAsyncKVStore,
|
|
24
24
|
private telemetry: TelemetryClient,
|
|
25
25
|
private logger = createLogger('p2p:bootstrap'),
|
|
26
26
|
) {}
|
package/src/client/factory.ts
CHANGED
|
@@ -6,9 +6,9 @@ import {
|
|
|
6
6
|
} from '@aztec/circuit-types';
|
|
7
7
|
import { type EpochCache } from '@aztec/epoch-cache';
|
|
8
8
|
import { createLogger } from '@aztec/foundation/log';
|
|
9
|
-
import { type
|
|
9
|
+
import { type AztecAsyncKVStore } from '@aztec/kv-store';
|
|
10
10
|
import { type DataStoreConfig } from '@aztec/kv-store/config';
|
|
11
|
-
import { createStore } from '@aztec/kv-store/lmdb';
|
|
11
|
+
import { createStore } from '@aztec/kv-store/lmdb-v2';
|
|
12
12
|
import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
13
13
|
|
|
14
14
|
import { P2PClient } from '../client/p2p_client.js';
|
|
@@ -26,7 +26,7 @@ import { configureP2PClientAddresses, createLibP2PPeerIdFromPrivateKey, getPeerI
|
|
|
26
26
|
|
|
27
27
|
type P2PClientDeps<T extends P2PClientType> = {
|
|
28
28
|
txPool?: TxPool;
|
|
29
|
-
store?:
|
|
29
|
+
store?: AztecAsyncKVStore;
|
|
30
30
|
attestationPool?: T extends P2PClientType.Full ? AttestationPool : undefined;
|
|
31
31
|
epochProofQuotePool?: EpochProofQuotePool;
|
|
32
32
|
};
|
|
@@ -43,8 +43,8 @@ export const createP2PClient = async <T extends P2PClientType>(
|
|
|
43
43
|
) => {
|
|
44
44
|
let config = { ..._config };
|
|
45
45
|
const logger = createLogger('p2p');
|
|
46
|
-
const store = deps.store ?? (await createStore('p2p', config, createLogger('p2p:lmdb')));
|
|
47
|
-
const archive = await createStore('p2p-archive', config, createLogger('p2p-archive:lmdb'));
|
|
46
|
+
const store = deps.store ?? (await createStore('p2p', config, createLogger('p2p:lmdb-v2')));
|
|
47
|
+
const archive = await createStore('p2p-archive', config, createLogger('p2p-archive:lmdb-v2'));
|
|
48
48
|
|
|
49
49
|
const mempools: MemPools<T> = {
|
|
50
50
|
txPool: deps.txPool ?? new AztecKVTxPool(store, archive, telemetry, config.archivedTxLimit),
|
package/src/client/p2p_client.ts
CHANGED
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
} from '@aztec/circuit-types';
|
|
16
16
|
import { INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js/constants';
|
|
17
17
|
import { createLogger } from '@aztec/foundation/log';
|
|
18
|
-
import { type
|
|
18
|
+
import { type AztecAsyncKVStore, type AztecAsyncMap, type AztecAsyncSingleton } from '@aztec/kv-store';
|
|
19
19
|
import {
|
|
20
20
|
Attributes,
|
|
21
21
|
type TelemetryClient,
|
|
@@ -126,7 +126,7 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApi<T> & {
|
|
|
126
126
|
* @param txHash - Hash of tx to return.
|
|
127
127
|
* @returns A single tx or undefined.
|
|
128
128
|
*/
|
|
129
|
-
getTxByHashFromPool(txHash: TxHash): Tx | undefined
|
|
129
|
+
getTxByHashFromPool(txHash: TxHash): Promise<Tx | undefined>;
|
|
130
130
|
|
|
131
131
|
/**
|
|
132
132
|
* Returns a transaction in the transaction pool by its hash, requesting it from the network if it is not found.
|
|
@@ -147,13 +147,13 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApi<T> & {
|
|
|
147
147
|
* @param txHash - Hash of the tx to query.
|
|
148
148
|
* @returns Pending or mined depending on its status, or undefined if not found.
|
|
149
149
|
*/
|
|
150
|
-
getTxStatus(txHash: TxHash): 'pending' | 'mined' | undefined
|
|
150
|
+
getTxStatus(txHash: TxHash): Promise<'pending' | 'mined' | undefined>;
|
|
151
151
|
|
|
152
152
|
/** Returns an iterator over pending txs on the mempool. */
|
|
153
|
-
iteratePendingTxs():
|
|
153
|
+
iteratePendingTxs(): AsyncIterableIterator<Tx>;
|
|
154
154
|
|
|
155
155
|
/** Returns the number of pending txs in the mempool. */
|
|
156
|
-
getPendingTxCount(): number
|
|
156
|
+
getPendingTxCount(): Promise<number>;
|
|
157
157
|
|
|
158
158
|
/**
|
|
159
159
|
* Starts the p2p client.
|
|
@@ -194,9 +194,6 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
194
194
|
extends WithTracer
|
|
195
195
|
implements P2P, P2P<P2PClientType.Prover>
|
|
196
196
|
{
|
|
197
|
-
/** Property that indicates whether the client is running. */
|
|
198
|
-
private stopping = false;
|
|
199
|
-
|
|
200
197
|
/** The JS promise that will be running to keep the client's data in sync. Can be interrupted if the client is stopped. */
|
|
201
198
|
private runningPromise!: Promise<void>;
|
|
202
199
|
|
|
@@ -206,9 +203,9 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
206
203
|
private latestBlockNumberAtStart = -1;
|
|
207
204
|
private provenBlockNumberAtStart = -1;
|
|
208
205
|
|
|
209
|
-
private synchedBlockHashes:
|
|
210
|
-
private synchedLatestBlockNumber:
|
|
211
|
-
private synchedProvenBlockNumber:
|
|
206
|
+
private synchedBlockHashes: AztecAsyncMap<number, string>;
|
|
207
|
+
private synchedLatestBlockNumber: AztecAsyncSingleton<number>;
|
|
208
|
+
private synchedProvenBlockNumber: AztecAsyncSingleton<number>;
|
|
212
209
|
|
|
213
210
|
private txPool: TxPool;
|
|
214
211
|
private attestationPool: T extends P2PClientType.Full ? AttestationPool : undefined;
|
|
@@ -231,8 +228,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
231
228
|
* @param log - A logger.
|
|
232
229
|
*/
|
|
233
230
|
constructor(
|
|
234
|
-
|
|
235
|
-
store:
|
|
231
|
+
_clientType: T,
|
|
232
|
+
store: AztecAsyncKVStore,
|
|
236
233
|
private l2BlockSource: L2BlockSource,
|
|
237
234
|
mempools: MemPools<T>,
|
|
238
235
|
private p2pService: P2PService,
|
|
@@ -274,17 +271,17 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
274
271
|
}
|
|
275
272
|
|
|
276
273
|
public getL2BlockHash(number: number): Promise<string | undefined> {
|
|
277
|
-
return
|
|
274
|
+
return this.synchedBlockHashes.getAsync(number);
|
|
278
275
|
}
|
|
279
276
|
|
|
280
|
-
public getL2Tips(): Promise<L2Tips> {
|
|
281
|
-
const latestBlockNumber = this.getSyncedLatestBlockNum();
|
|
277
|
+
public async getL2Tips(): Promise<L2Tips> {
|
|
278
|
+
const latestBlockNumber = await this.getSyncedLatestBlockNum();
|
|
282
279
|
let latestBlockHash: string | undefined;
|
|
283
|
-
const provenBlockNumber = this.getSyncedProvenBlockNum();
|
|
280
|
+
const provenBlockNumber = await this.getSyncedProvenBlockNum();
|
|
284
281
|
let provenBlockHash: string | undefined;
|
|
285
282
|
|
|
286
283
|
if (latestBlockNumber > 0) {
|
|
287
|
-
latestBlockHash = this.synchedBlockHashes.
|
|
284
|
+
latestBlockHash = await this.synchedBlockHashes.getAsync(latestBlockNumber);
|
|
288
285
|
if (typeof latestBlockHash === 'undefined') {
|
|
289
286
|
this.log.warn(`Block hash for latest block ${latestBlockNumber} not found`);
|
|
290
287
|
throw new Error();
|
|
@@ -292,7 +289,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
292
289
|
}
|
|
293
290
|
|
|
294
291
|
if (provenBlockNumber > 0) {
|
|
295
|
-
provenBlockHash = this.synchedBlockHashes.
|
|
292
|
+
provenBlockHash = await this.synchedBlockHashes.getAsync(provenBlockNumber);
|
|
296
293
|
if (typeof provenBlockHash === 'undefined') {
|
|
297
294
|
this.log.warn(`Block hash for proven block ${provenBlockNumber} not found`);
|
|
298
295
|
throw new Error();
|
|
@@ -316,7 +313,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
316
313
|
// TODO (alexg): I think we can prune the block hashes map here
|
|
317
314
|
break;
|
|
318
315
|
case 'chain-proven': {
|
|
319
|
-
const from = this.getSyncedProvenBlockNum() + 1;
|
|
316
|
+
const from = (await this.getSyncedProvenBlockNum()) + 1;
|
|
320
317
|
const limit = event.blockNumber - from + 1;
|
|
321
318
|
await this.handleProvenL2Blocks(await this.l2BlockSource.getBlocks(from, limit));
|
|
322
319
|
break;
|
|
@@ -374,8 +371,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
374
371
|
this.latestBlockNumberAtStart = await this.l2BlockSource.getBlockNumber();
|
|
375
372
|
this.provenBlockNumberAtStart = await this.l2BlockSource.getProvenBlockNumber();
|
|
376
373
|
|
|
377
|
-
const syncedLatestBlock = this.getSyncedLatestBlockNum() + 1;
|
|
378
|
-
const syncedProvenBlock = this.getSyncedProvenBlockNum() + 1;
|
|
374
|
+
const syncedLatestBlock = (await this.getSyncedLatestBlockNum()) + 1;
|
|
375
|
+
const syncedProvenBlock = (await this.getSyncedProvenBlockNum()) + 1;
|
|
379
376
|
|
|
380
377
|
// if there are blocks to be retrieved, go to a synching state
|
|
381
378
|
if (syncedLatestBlock <= this.latestBlockNumberAtStart || syncedProvenBlock <= this.provenBlockNumberAtStart) {
|
|
@@ -404,7 +401,6 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
404
401
|
*/
|
|
405
402
|
public async stop() {
|
|
406
403
|
this.log.debug('Stopping p2p client...');
|
|
407
|
-
this.stopping = true;
|
|
408
404
|
await this.p2pService.stop();
|
|
409
405
|
this.log.debug('Stopped p2p service');
|
|
410
406
|
await this.blockStream.stop();
|
|
@@ -414,19 +410,19 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
414
410
|
this.log.info('P2P client stopped.');
|
|
415
411
|
}
|
|
416
412
|
|
|
417
|
-
@trackSpan('p2pClient.broadcastProposal', proposal => ({
|
|
413
|
+
@trackSpan('p2pClient.broadcastProposal', async proposal => ({
|
|
418
414
|
[Attributes.BLOCK_NUMBER]: proposal.payload.header.globalVariables.blockNumber.toNumber(),
|
|
419
415
|
[Attributes.SLOT_NUMBER]: proposal.payload.header.globalVariables.slotNumber.toNumber(),
|
|
420
416
|
[Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
|
|
421
|
-
[Attributes.P2P_ID]: proposal.p2pMessageIdentifier().toString(),
|
|
417
|
+
[Attributes.P2P_ID]: (await proposal.p2pMessageIdentifier()).toString(),
|
|
422
418
|
}))
|
|
423
419
|
public broadcastProposal(proposal: BlockProposal): void {
|
|
424
420
|
this.log.verbose(`Broadcasting proposal ${proposal.p2pMessageIdentifier()} to peers`);
|
|
425
421
|
return this.p2pService.propagate(proposal);
|
|
426
422
|
}
|
|
427
423
|
|
|
428
|
-
public getAttestationsForSlot(slot: bigint, proposalId: string): Promise<BlockAttestation[]> {
|
|
429
|
-
return
|
|
424
|
+
public async getAttestationsForSlot(slot: bigint, proposalId: string): Promise<BlockAttestation[]> {
|
|
425
|
+
return (await this.attestationPool?.getAttestationsForSlot(slot, proposalId)) ?? [];
|
|
430
426
|
}
|
|
431
427
|
|
|
432
428
|
// REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
|
|
@@ -475,14 +471,14 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
475
471
|
return Promise.resolve(this.getTxs('pending'));
|
|
476
472
|
}
|
|
477
473
|
|
|
478
|
-
public getPendingTxCount(): number {
|
|
479
|
-
|
|
474
|
+
public async getPendingTxCount(): Promise<number> {
|
|
475
|
+
const pendingTxs = await this.txPool.getPendingTxHashes();
|
|
476
|
+
return pendingTxs.length;
|
|
480
477
|
}
|
|
481
478
|
|
|
482
|
-
public *iteratePendingTxs() {
|
|
483
|
-
const
|
|
484
|
-
|
|
485
|
-
const tx = this.txPool.getTxByHash(txHash);
|
|
479
|
+
public async *iteratePendingTxs(): AsyncIterableIterator<Tx> {
|
|
480
|
+
for (const txHash of await this.txPool.getPendingTxHashes()) {
|
|
481
|
+
const tx = await this.txPool.getTxByHash(txHash);
|
|
486
482
|
if (tx) {
|
|
487
483
|
yield tx;
|
|
488
484
|
}
|
|
@@ -493,19 +489,17 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
493
489
|
* Returns all transactions in the transaction pool.
|
|
494
490
|
* @returns An array of Txs.
|
|
495
491
|
*/
|
|
496
|
-
public getTxs(filter: 'all' | 'pending' | 'mined'): Tx[] {
|
|
492
|
+
public async getTxs(filter: 'all' | 'pending' | 'mined'): Promise<Tx[]> {
|
|
497
493
|
if (filter === 'all') {
|
|
498
494
|
return this.txPool.getAllTxs();
|
|
499
495
|
} else if (filter === 'mined') {
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
.filter((tx): tx is Tx => !!tx);
|
|
496
|
+
const minedHashes = await this.txPool.getMinedTxHashes();
|
|
497
|
+
const minedTx = await Promise.all(minedHashes.map(([txHash]) => this.txPool.getTxByHash(txHash)));
|
|
498
|
+
return minedTx.filter((tx): tx is Tx => !!tx);
|
|
504
499
|
} else if (filter === 'pending') {
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
.filter((tx): tx is Tx => !!tx);
|
|
500
|
+
const pendingHashses = await this.txPool.getPendingTxHashes();
|
|
501
|
+
const pendingTxs = await Promise.all(pendingHashses.map(txHash => this.txPool.getTxByHash(txHash)));
|
|
502
|
+
return pendingTxs.filter((tx): tx is Tx => !!tx);
|
|
509
503
|
} else {
|
|
510
504
|
const _: never = filter;
|
|
511
505
|
throw new Error(`Unknown filter ${filter}`);
|
|
@@ -517,7 +511,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
517
511
|
* @param txHash - Hash of the transaction to look for in the pool.
|
|
518
512
|
* @returns A single tx or undefined.
|
|
519
513
|
*/
|
|
520
|
-
getTxByHashFromPool(txHash: TxHash): Tx | undefined {
|
|
514
|
+
getTxByHashFromPool(txHash: TxHash): Promise<Tx | undefined> {
|
|
521
515
|
return this.txPool.getTxByHash(txHash);
|
|
522
516
|
}
|
|
523
517
|
|
|
@@ -527,10 +521,10 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
527
521
|
* @param txHash - Hash of the transaction to look for in the pool.
|
|
528
522
|
* @returns A single tx or undefined.
|
|
529
523
|
*/
|
|
530
|
-
getTxByHash(txHash: TxHash): Promise<Tx | undefined> {
|
|
531
|
-
const tx = this.txPool.getTxByHash(txHash);
|
|
524
|
+
async getTxByHash(txHash: TxHash): Promise<Tx | undefined> {
|
|
525
|
+
const tx = await this.txPool.getTxByHash(txHash);
|
|
532
526
|
if (tx) {
|
|
533
|
-
return
|
|
527
|
+
return tx;
|
|
534
528
|
}
|
|
535
529
|
return this.requestTxByHash(txHash);
|
|
536
530
|
}
|
|
@@ -541,7 +535,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
541
535
|
* @returns A single tx or undefined.
|
|
542
536
|
*/
|
|
543
537
|
getArchivedTxByHash(txHash: TxHash): Promise<Tx | undefined> {
|
|
544
|
-
return
|
|
538
|
+
return this.txPool.getArchivedTxByHash(txHash);
|
|
545
539
|
}
|
|
546
540
|
|
|
547
541
|
/**
|
|
@@ -560,7 +554,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
560
554
|
* @param txHash - Hash of the tx to query.
|
|
561
555
|
* @returns Pending or mined depending on its status, or undefined if not found.
|
|
562
556
|
*/
|
|
563
|
-
public getTxStatus(txHash: TxHash): 'pending' | 'mined' | undefined {
|
|
557
|
+
public getTxStatus(txHash: TxHash): Promise<'pending' | 'mined' | undefined> {
|
|
564
558
|
return this.txPool.getTxStatus(txHash);
|
|
565
559
|
}
|
|
566
560
|
|
|
@@ -595,16 +589,16 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
595
589
|
* Public function to check the latest block number that the P2P client is synced to.
|
|
596
590
|
* @returns Block number of latest L2 Block we've synced with.
|
|
597
591
|
*/
|
|
598
|
-
public getSyncedLatestBlockNum() {
|
|
599
|
-
return this.synchedLatestBlockNumber.
|
|
592
|
+
public async getSyncedLatestBlockNum(): Promise<number> {
|
|
593
|
+
return (await this.synchedLatestBlockNumber.getAsync()) ?? INITIAL_L2_BLOCK_NUM - 1;
|
|
600
594
|
}
|
|
601
595
|
|
|
602
596
|
/**
|
|
603
597
|
* Public function to check the latest proven block number that the P2P client is synced to.
|
|
604
598
|
* @returns Block number of latest proven L2 Block we've synced with.
|
|
605
599
|
*/
|
|
606
|
-
public getSyncedProvenBlockNum() {
|
|
607
|
-
return this.synchedProvenBlockNumber.
|
|
600
|
+
public async getSyncedProvenBlockNum(): Promise<number> {
|
|
601
|
+
return (await this.synchedProvenBlockNumber.getAsync()) ?? INITIAL_L2_BLOCK_NUM - 1;
|
|
608
602
|
}
|
|
609
603
|
|
|
610
604
|
/**
|
|
@@ -612,15 +606,19 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
612
606
|
* @returns Information about p2p client status: state & syncedToBlockNum.
|
|
613
607
|
*/
|
|
614
608
|
public async getStatus(): Promise<P2PSyncState> {
|
|
615
|
-
const blockNumber = this.getSyncedLatestBlockNum();
|
|
609
|
+
const blockNumber = await this.getSyncedLatestBlockNum();
|
|
616
610
|
const blockHash =
|
|
617
|
-
blockNumber
|
|
611
|
+
blockNumber === 0
|
|
618
612
|
? ''
|
|
619
|
-
: await this.l2BlockSource
|
|
620
|
-
|
|
613
|
+
: await this.l2BlockSource
|
|
614
|
+
.getBlockHeader(blockNumber)
|
|
615
|
+
.then(header => header?.hash())
|
|
616
|
+
.then(hash => hash?.toString());
|
|
617
|
+
|
|
618
|
+
return {
|
|
621
619
|
state: this.currentState,
|
|
622
620
|
syncedToL2Block: { number: blockNumber, hash: blockHash },
|
|
623
|
-
} as P2PSyncState
|
|
621
|
+
} as P2PSyncState;
|
|
624
622
|
}
|
|
625
623
|
|
|
626
624
|
/**
|
|
@@ -660,7 +658,9 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
660
658
|
|
|
661
659
|
await this.markTxsAsMinedFromBlocks(blocks);
|
|
662
660
|
const lastBlockNum = blocks[blocks.length - 1].number;
|
|
663
|
-
await Promise.all(
|
|
661
|
+
await Promise.all(
|
|
662
|
+
blocks.map(async block => this.synchedBlockHashes.set(block.number, (await block.hash()).toString())),
|
|
663
|
+
);
|
|
664
664
|
await this.synchedLatestBlockNumber.set(lastBlockNum);
|
|
665
665
|
this.log.debug(`Synched to latest block ${lastBlockNum}`);
|
|
666
666
|
await this.startServiceIfSynched();
|
|
@@ -714,10 +714,10 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
714
714
|
*/
|
|
715
715
|
private async handlePruneL2Blocks(latestBlock: number): Promise<void> {
|
|
716
716
|
const txsToDelete: TxHash[] = [];
|
|
717
|
-
for (const tx of this.txPool.getAllTxs()) {
|
|
717
|
+
for (const tx of await this.txPool.getAllTxs()) {
|
|
718
718
|
// every tx that's been generated against a block that has now been pruned is no longer valid
|
|
719
719
|
if (tx.data.constants.historicalHeader.globalVariables.blockNumber.toNumber() > latestBlock) {
|
|
720
|
-
txsToDelete.push(tx.getTxHash());
|
|
720
|
+
txsToDelete.push(await tx.getTxHash());
|
|
721
721
|
}
|
|
722
722
|
}
|
|
723
723
|
|
|
@@ -735,7 +735,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
735
735
|
// NOTE: we can't move _all_ txs back to pending because the tx pool could keep hold of mined txs for longer
|
|
736
736
|
// (see this.keepProvenTxsFor)
|
|
737
737
|
const txsToMoveToPending: TxHash[] = [];
|
|
738
|
-
for (const [txHash, blockNumber] of this.txPool.getMinedTxHashes()) {
|
|
738
|
+
for (const [txHash, blockNumber] of await this.txPool.getMinedTxHashes()) {
|
|
739
739
|
if (blockNumber > latestBlock) {
|
|
740
740
|
txsToMoveToPending.push(txHash);
|
|
741
741
|
}
|
|
@@ -751,8 +751,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
751
751
|
private async startServiceIfSynched() {
|
|
752
752
|
if (
|
|
753
753
|
this.currentState === P2PClientState.SYNCHING &&
|
|
754
|
-
this.getSyncedLatestBlockNum() >= this.latestBlockNumberAtStart &&
|
|
755
|
-
this.getSyncedProvenBlockNum() >= this.provenBlockNumberAtStart
|
|
754
|
+
(await this.getSyncedLatestBlockNum()) >= this.latestBlockNumberAtStart &&
|
|
755
|
+
(await this.getSyncedProvenBlockNum()) >= this.provenBlockNumberAtStart
|
|
756
756
|
) {
|
|
757
757
|
this.log.debug(`Synched to blocks at start`);
|
|
758
758
|
this.setCurrentState(P2PClientState.RUNNING);
|
|
@@ -772,16 +772,4 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
772
772
|
this.currentState = newState;
|
|
773
773
|
this.log.debug(`Moved from state ${P2PClientState[oldState]} to ${P2PClientState[this.currentState]}`);
|
|
774
774
|
}
|
|
775
|
-
|
|
776
|
-
private async publishStoredTxs() {
|
|
777
|
-
if (!this.isReady()) {
|
|
778
|
-
return;
|
|
779
|
-
}
|
|
780
|
-
|
|
781
|
-
const txs = this.txPool.getAllTxs();
|
|
782
|
-
if (txs.length > 0) {
|
|
783
|
-
this.log.debug(`Publishing ${txs.length} previously stored txs`);
|
|
784
|
-
await Promise.all(txs.map(tx => this.p2pService.propagate(tx)));
|
|
785
|
-
}
|
|
786
|
-
}
|
|
787
775
|
}
|
|
@@ -29,7 +29,7 @@ export function describeAttestationPool(getAttestationPool: () => AttestationPoo
|
|
|
29
29
|
|
|
30
30
|
const createAttestationsForSlot = (slotNumber: number) => {
|
|
31
31
|
const archive = Fr.random();
|
|
32
|
-
return signers.map(signer => mockAttestation(signer, slotNumber, archive));
|
|
32
|
+
return Promise.all(signers.map(signer => mockAttestation(signer, slotNumber, archive)));
|
|
33
33
|
};
|
|
34
34
|
|
|
35
35
|
// We compare buffers as the objects can have cached values attached to them which are not serialised
|
|
@@ -44,7 +44,7 @@ export function describeAttestationPool(getAttestationPool: () => AttestationPoo
|
|
|
44
44
|
it('should add attestations to pool', async () => {
|
|
45
45
|
const slotNumber = 420;
|
|
46
46
|
const archive = Fr.random();
|
|
47
|
-
const attestations = signers.map(signer => mockAttestation(signer, slotNumber, archive));
|
|
47
|
+
const attestations = await Promise.all(signers.map(signer => mockAttestation(signer, slotNumber, archive)));
|
|
48
48
|
|
|
49
49
|
await ap.addAttestations(attestations);
|
|
50
50
|
|
|
@@ -75,7 +75,7 @@ export function describeAttestationPool(getAttestationPool: () => AttestationPoo
|
|
|
75
75
|
const attestations: BlockAttestation[] = [];
|
|
76
76
|
const signer = signers[0];
|
|
77
77
|
for (let i = 0; i < NUMBER_OF_SIGNERS_PER_TEST; i++) {
|
|
78
|
-
attestations.push(mockAttestation(signer, slotNumber, archive, txs));
|
|
78
|
+
attestations.push(await mockAttestation(signer, slotNumber, archive, txs));
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
await ap.addAttestations(attestations);
|
|
@@ -84,12 +84,12 @@ export function describeAttestationPool(getAttestationPool: () => AttestationPoo
|
|
|
84
84
|
expect(retreivedAttestations.length).toBe(1);
|
|
85
85
|
expect(retreivedAttestations[0].toBuffer()).toEqual(attestations[0].toBuffer());
|
|
86
86
|
expect(retreivedAttestations[0].payload.txHashes).toEqual(txs);
|
|
87
|
-
expect(retreivedAttestations[0].getSender().toString()).toEqual(signer.address.toString());
|
|
87
|
+
expect((await retreivedAttestations[0].getSender()).toString()).toEqual(signer.address.toString());
|
|
88
88
|
});
|
|
89
89
|
|
|
90
90
|
it('Should store attestations by differing slot', async () => {
|
|
91
91
|
const slotNumbers = [1, 2, 3, 4];
|
|
92
|
-
const attestations = signers.map((signer, i) => mockAttestation(signer, slotNumbers[i]));
|
|
92
|
+
const attestations = await Promise.all(signers.map((signer, i) => mockAttestation(signer, slotNumbers[i])));
|
|
93
93
|
|
|
94
94
|
await ap.addAttestations(attestations);
|
|
95
95
|
|
|
@@ -107,7 +107,9 @@ export function describeAttestationPool(getAttestationPool: () => AttestationPoo
|
|
|
107
107
|
it('Should store attestations by differing slot and archive', async () => {
|
|
108
108
|
const slotNumbers = [1, 1, 2, 3];
|
|
109
109
|
const archives = [Fr.random(), Fr.random(), Fr.random(), Fr.random()];
|
|
110
|
-
const attestations =
|
|
110
|
+
const attestations = await Promise.all(
|
|
111
|
+
signers.map((signer, i) => mockAttestation(signer, slotNumbers[i], archives[i])),
|
|
112
|
+
);
|
|
111
113
|
|
|
112
114
|
await ap.addAttestations(attestations);
|
|
113
115
|
|
|
@@ -125,7 +127,7 @@ export function describeAttestationPool(getAttestationPool: () => AttestationPoo
|
|
|
125
127
|
it('Should delete attestations', async () => {
|
|
126
128
|
const slotNumber = 420;
|
|
127
129
|
const archive = Fr.random();
|
|
128
|
-
const attestations = signers.map(signer => mockAttestation(signer, slotNumber, archive));
|
|
130
|
+
const attestations = await Promise.all(signers.map(signer => mockAttestation(signer, slotNumber, archive)));
|
|
129
131
|
const proposalId = attestations[0].archive.toString();
|
|
130
132
|
|
|
131
133
|
await ap.addAttestations(attestations);
|
|
@@ -165,12 +167,12 @@ export function describeAttestationPool(getAttestationPool: () => AttestationPoo
|
|
|
165
167
|
it('Should blanket delete attestations per slot and proposal', async () => {
|
|
166
168
|
const slotNumber = 420;
|
|
167
169
|
const archive = Fr.random();
|
|
168
|
-
const attestations = signers.map(signer => mockAttestation(signer, slotNumber, archive));
|
|
170
|
+
const attestations = await Promise.all(signers.map(signer => mockAttestation(signer, slotNumber, archive)));
|
|
169
171
|
const proposalId = attestations[0].archive.toString();
|
|
170
172
|
|
|
171
173
|
// Add another set of attestations with a different proposalId, yet the same slot
|
|
172
174
|
const archive2 = Fr.random();
|
|
173
|
-
const attestations2 = signers.map(signer => mockAttestation(signer, slotNumber, archive2));
|
|
175
|
+
const attestations2 = await Promise.all(signers.map(signer => mockAttestation(signer, slotNumber, archive2)));
|
|
174
176
|
const proposalId2 = attestations2[0].archive.toString();
|
|
175
177
|
|
|
176
178
|
await ap.addAttestations(attestations);
|
|
@@ -198,21 +200,11 @@ export function describeAttestationPool(getAttestationPool: () => AttestationPoo
|
|
|
198
200
|
compareAttestations(retreivedAttestationsAfterDeleteForOtherProposal, attestations2);
|
|
199
201
|
});
|
|
200
202
|
|
|
201
|
-
it('Should blanket delete attestations per slot and proposal (does not perform db ops if there are no attestations)', async () => {
|
|
202
|
-
const slotNumber = 420;
|
|
203
|
-
const proposalId = 'proposalId';
|
|
204
|
-
|
|
205
|
-
const retreivedAttestations = await ap.getAttestationsForSlot(BigInt(slotNumber), proposalId);
|
|
206
|
-
expect(retreivedAttestations.length).toBe(0);
|
|
207
|
-
|
|
208
|
-
await ap.deleteAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
|
|
209
|
-
|
|
210
|
-
expect(metricsMock.recordRemovedObjects).toHaveBeenCalledTimes(0);
|
|
211
|
-
});
|
|
212
|
-
|
|
213
203
|
it('Should delete attestations older than a given slot', async () => {
|
|
214
204
|
const slotNumbers = [1, 2, 3, 69, 72, 74, 88, 420];
|
|
215
|
-
const attestations =
|
|
205
|
+
const attestations = (
|
|
206
|
+
await Promise.all(slotNumbers.map(slotNumber => createAttestationsForSlot(slotNumber)))
|
|
207
|
+
).flat();
|
|
216
208
|
const proposalId = attestations[0].archive.toString();
|
|
217
209
|
|
|
218
210
|
await ap.addAttestations(attestations);
|