@aztec/p2p 0.46.7 → 0.47.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/client/index.d.ts +1 -1
- package/dest/client/index.d.ts.map +1 -1
- package/dest/client/index.js +3 -3
- 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 +52 -22
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +125 -37
- package/dest/config.d.ts +2 -0
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +3 -2
- package/dest/service/libp2p_service.d.ts +1 -1
- package/dest/service/libp2p_service.d.ts.map +1 -1
- package/dest/service/libp2p_service.js +4 -3
- package/dest/service/tx_messages.d.ts +1 -19
- package/dest/service/tx_messages.d.ts.map +1 -1
- package/dest/service/tx_messages.js +2 -109
- package/dest/tx_pool/aztec_kv_tx_pool.d.ts +4 -6
- package/dest/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/tx_pool/aztec_kv_tx_pool.js +47 -16
- package/dest/tx_pool/memory_tx_pool.d.ts +6 -6
- package/dest/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/tx_pool/memory_tx_pool.js +36 -11
- package/dest/tx_pool/tx_pool.d.ts +19 -4
- package/dest/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
- package/dest/tx_pool/tx_pool_test_suite.js +16 -4
- package/package.json +6 -6
- package/src/client/index.ts +2 -2
- package/src/client/mocks.ts +20 -7
- package/src/client/p2p_client.ts +149 -48
- package/src/config.ts +5 -0
- package/src/service/libp2p_service.ts +3 -3
- package/src/service/tx_messages.ts +2 -123
- package/src/tx_pool/aztec_kv_tx_pool.ts +49 -15
- package/src/tx_pool/memory_tx_pool.ts +42 -11
- package/src/tx_pool/tx_pool.ts +22 -4
- package/src/tx_pool/tx_pool_test_suite.ts +18 -3
package/dest/client/index.d.ts
CHANGED
|
@@ -4,5 +4,5 @@ import { P2PClient } from '../client/p2p_client.js';
|
|
|
4
4
|
import { type P2PConfig } from '../config.js';
|
|
5
5
|
import { type TxPool } from '../tx_pool/index.js';
|
|
6
6
|
export * from './p2p_client.js';
|
|
7
|
-
export declare const createP2PClient: (
|
|
7
|
+
export declare const createP2PClient: (config: P2PConfig, store: AztecKVStore, txPool: TxPool, l2BlockSource: L2BlockSource) => Promise<P2PClient>;
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAI9C,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,cAAc,iBAAiB,CAAC;AAEhC,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAI9C,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,cAAc,iBAAiB,CAAC;AAEhC,eAAO,MAAM,eAAe,WAClB,SAAS,SACV,YAAY,UACX,MAAM,iBACC,aAAa,uBAiD7B,CAAC"}
|
package/dest/client/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import { DummyP2PService } from '../service/dummy_service.js';
|
|
|
4
4
|
import { LibP2PService, createLibP2PPeerId } from '../service/index.js';
|
|
5
5
|
import { getPublicIp, splitAddressPort } from '../util.js';
|
|
6
6
|
export * from './p2p_client.js';
|
|
7
|
-
export const createP2PClient = async (
|
|
7
|
+
export const createP2PClient = async (config, store, txPool, l2BlockSource) => {
|
|
8
8
|
let p2pService;
|
|
9
9
|
if (config.p2pEnabled) {
|
|
10
10
|
// If announceTcpAddress or announceUdpAddress are not provided, query for public IP if config allows
|
|
@@ -43,6 +43,6 @@ export const createP2PClient = async (store, config, txPool, l2BlockSource) => {
|
|
|
43
43
|
else {
|
|
44
44
|
p2pService = new DummyP2PService();
|
|
45
45
|
}
|
|
46
|
-
return new P2PClient(store, l2BlockSource, txPool, p2pService);
|
|
46
|
+
return new P2PClient(store, l2BlockSource, txPool, p2pService, config.keepProvenTxsInPoolFor);
|
|
47
47
|
};
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTNELGNBQWMsaUJBQWlCLENBQUM7QUFFaEMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEtBQUssRUFDbEMsTUFBaUIsRUFDakIsS0FBbUIsRUFDbkIsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLEVBQUU7SUFDRixJQUFJLFVBQVUsQ0FBQztJQUVmLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3RCLHFHQUFxRztRQUNyRyxNQUFNLEVBQ0osa0JBQWtCLEVBQUUsd0JBQXdCLEVBQzVDLGtCQUFrQixFQUFFLHdCQUF3QixFQUM1QyxVQUFVLEdBQ1gsR0FBRyxNQUFNLENBQUM7UUFFWCx1Q0FBdUM7UUFDdkMsSUFBSSxRQUFRLENBQUM7UUFFYix1Q0FBdUM7UUFDdkMsTUFBTSx1QkFBdUIsR0FBRyxnQkFBZ0IsQ0FBQyx3QkFBd0IsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkYsSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzdFLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsUUFBUSxHQUFHLE1BQU0sV0FBVyxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxRQUFRLElBQUksdUJBQXVCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdkUsTUFBTSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1lBQ2pELENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksS0FBSyxDQUNiLHdDQUF3Qyx3QkFBd0Isa0NBQWtDLENBQ25HLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sdUJBQXVCLEdBQUcsZ0JBQWdCLENBQUMsd0JBQXdCLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZGLElBQUksdUJBQXVCLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUM3RSxnRUFBZ0U7WUFDaEUsSUFBSSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztZQUN4RCxDQUFDO2lCQUFNLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sV0FBVyxHQUFHLFFBQVEsSUFBSSxDQUFDLE1BQU0sV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLFdBQVcsSUFBSSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMxRSxNQUFNLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7WUFDakQsQ0FBQztRQUNILENBQUM7UUFFRCxnQ0FBZ0M7UUFDaEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNqRSxNQUFNLGdCQUFnQixHQUFHLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzRCxVQUFVLEdBQUcsTUFBTSxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hGLENBQUM7U0FBTSxDQUFDO1FBQ04sVUFBVSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUNELE9BQU8sSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ2hHLENBQUMsQ0FBQyJ9
|
package/dest/client/mocks.d.ts
CHANGED
|
@@ -4,10 +4,12 @@ import { EthAddress } from '@aztec/circuits.js';
|
|
|
4
4
|
* A mocked implementation of L2BlockSource to be used in p2p tests.
|
|
5
5
|
*/
|
|
6
6
|
export declare class MockBlockSource implements L2BlockSource {
|
|
7
|
-
private
|
|
7
|
+
private provenBlockNumber?;
|
|
8
8
|
private l2Blocks;
|
|
9
9
|
private txEffects;
|
|
10
|
-
constructor(numBlocks?: number);
|
|
10
|
+
constructor(numBlocks?: number, provenBlockNumber?: number | undefined);
|
|
11
|
+
addBlocks(numBlocks: number): void;
|
|
12
|
+
setProvenBlockNumber(provenBlockNumber: number): void;
|
|
11
13
|
/**
|
|
12
14
|
* Method to fetch the rollup contract address at the base-layer.
|
|
13
15
|
* @returns The rollup address.
|
|
@@ -36,7 +38,7 @@ export declare class MockBlockSource implements L2BlockSource {
|
|
|
36
38
|
* @param limit - The maximum number of blocks to return.
|
|
37
39
|
* @returns The requested mocked L2 blocks.
|
|
38
40
|
*/
|
|
39
|
-
getBlocks(from: number, limit: number): Promise<L2Block[]>;
|
|
41
|
+
getBlocks(from: number, limit: number, proven?: boolean): Promise<L2Block[]>;
|
|
40
42
|
/**
|
|
41
43
|
* Gets a tx effect.
|
|
42
44
|
* @param txHash - The hash of a transaction which resulted in the returned tx effect.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../src/client/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,SAAS,EAAY,MAAM,sBAAsB,CAAC;AACpH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD;;GAEG;AACH,qBAAa,eAAgB,YAAW,aAAa;
|
|
1
|
+
{"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../src/client/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,SAAS,EAAY,MAAM,sBAAsB,CAAC;AACpH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD;;GAEG;AACH,qBAAa,eAAgB,YAAW,aAAa;IAItB,OAAO,CAAC,iBAAiB,CAAC;IAHvD,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,SAAS,CAAkB;gBAEvB,SAAS,SAAM,EAAU,iBAAiB,CAAC,oBAAQ;IAIxD,SAAS,CAAC,SAAS,EAAE,MAAM;IAS3B,oBAAoB,CAAC,iBAAiB,EAAE,MAAM;IAIrD;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIvC;;;OAGG;IACH,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC;IAIzC;;;OAGG;IACI,cAAc;IAIR,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIpD;;;;OAIG;IACI,QAAQ,CAAC,MAAM,EAAE,MAAM;IAI9B;;;;;OAKG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAQ9D;;;;OAIG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM;IAKjC;;;;OAIG;IACI,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAoB1E;;;OAGG;IACI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B;;;OAGG;IACI,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
package/dest/client/mocks.js
CHANGED
|
@@ -4,16 +4,23 @@ import { EthAddress } from '@aztec/circuits.js';
|
|
|
4
4
|
* A mocked implementation of L2BlockSource to be used in p2p tests.
|
|
5
5
|
*/
|
|
6
6
|
export class MockBlockSource {
|
|
7
|
-
constructor(numBlocks = 100) {
|
|
8
|
-
this.
|
|
7
|
+
constructor(numBlocks = 100, provenBlockNumber) {
|
|
8
|
+
this.provenBlockNumber = provenBlockNumber;
|
|
9
9
|
this.l2Blocks = [];
|
|
10
10
|
this.txEffects = [];
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
this.addBlocks(numBlocks);
|
|
12
|
+
}
|
|
13
|
+
addBlocks(numBlocks) {
|
|
14
|
+
for (let i = 0; i < numBlocks; i++) {
|
|
15
|
+
const blockNum = this.l2Blocks.length;
|
|
16
|
+
const block = L2Block.random(blockNum);
|
|
13
17
|
this.l2Blocks.push(block);
|
|
14
18
|
this.txEffects.push(...block.body.txEffects);
|
|
15
19
|
}
|
|
16
20
|
}
|
|
21
|
+
setProvenBlockNumber(provenBlockNumber) {
|
|
22
|
+
this.provenBlockNumber = provenBlockNumber;
|
|
23
|
+
}
|
|
17
24
|
/**
|
|
18
25
|
* Method to fetch the rollup contract address at the base-layer.
|
|
19
26
|
* @returns The rollup address.
|
|
@@ -35,8 +42,8 @@ export class MockBlockSource {
|
|
|
35
42
|
getBlockNumber() {
|
|
36
43
|
return Promise.resolve(this.l2Blocks.length - 1);
|
|
37
44
|
}
|
|
38
|
-
getProvenBlockNumber() {
|
|
39
|
-
return this.getBlockNumber();
|
|
45
|
+
async getProvenBlockNumber() {
|
|
46
|
+
return this.provenBlockNumber ?? (await this.getBlockNumber());
|
|
40
47
|
}
|
|
41
48
|
/**
|
|
42
49
|
* Gets an l2 block.
|
|
@@ -52,8 +59,10 @@ export class MockBlockSource {
|
|
|
52
59
|
* @param limit - The maximum number of blocks to return.
|
|
53
60
|
* @returns The requested mocked L2 blocks.
|
|
54
61
|
*/
|
|
55
|
-
getBlocks(from, limit) {
|
|
56
|
-
return Promise.resolve(this.l2Blocks
|
|
62
|
+
getBlocks(from, limit, proven) {
|
|
63
|
+
return Promise.resolve(this.l2Blocks
|
|
64
|
+
.slice(from, from + limit)
|
|
65
|
+
.filter(b => !proven || this.provenBlockNumber === undefined || b.number <= this.provenBlockNumber));
|
|
57
66
|
}
|
|
58
67
|
/**
|
|
59
68
|
* Gets a tx effect.
|
|
@@ -94,4 +103,4 @@ export class MockBlockSource {
|
|
|
94
103
|
return Promise.resolve();
|
|
95
104
|
}
|
|
96
105
|
}
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L21vY2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQWtELFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUkxQixZQUFZLFNBQVMsR0FBRyxHQUFHLEVBQVUsaUJBQTBCO1FBQTFCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBUztRQUh2RCxhQUFRLEdBQWMsRUFBRSxDQUFDO1FBQ3pCLGNBQVMsR0FBZSxFQUFFLENBQUM7UUFHakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU0sU0FBUyxDQUFDLFNBQWlCO1FBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUN0QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVNLG9CQUFvQixDQUFDLGlCQUF5QjtRQUNuRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQjtRQUNkLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FB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
|
|
@@ -43,13 +43,19 @@ export interface P2P {
|
|
|
43
43
|
* Returns all transactions in the transaction pool.
|
|
44
44
|
* @returns An array of Txs.
|
|
45
45
|
*/
|
|
46
|
-
getTxs():
|
|
46
|
+
getTxs(filter: 'all' | 'pending' | 'mined'): Tx[];
|
|
47
47
|
/**
|
|
48
48
|
* Returns a transaction in the transaction pool by its hash.
|
|
49
49
|
* @param txHash - Hash of tx to return.
|
|
50
50
|
* @returns A single tx or undefined.
|
|
51
51
|
*/
|
|
52
|
-
getTxByHash(txHash: TxHash):
|
|
52
|
+
getTxByHash(txHash: TxHash): Tx | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Returns whether the given tx hash is flagged as pending or mined.
|
|
55
|
+
* @param txHash - Hash of the tx to query.
|
|
56
|
+
* @returns Pending or mined depending on its status, or undefined if not found.
|
|
57
|
+
*/
|
|
58
|
+
getTxStatus(txHash: TxHash): 'pending' | 'mined' | undefined;
|
|
53
59
|
/**
|
|
54
60
|
* Starts the p2p client.
|
|
55
61
|
* @returns A promise signalling the completion of the block sync.
|
|
@@ -77,33 +83,33 @@ export declare class P2PClient implements P2P {
|
|
|
77
83
|
private l2BlockSource;
|
|
78
84
|
private txPool;
|
|
79
85
|
private p2pService;
|
|
86
|
+
private keepProvenTxsFor;
|
|
80
87
|
private log;
|
|
81
|
-
/**
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
private
|
|
85
|
-
/**
|
|
86
|
-
* Property that indicates whether the client is running.
|
|
87
|
-
*/
|
|
88
|
+
/** L2 block download to stay in sync with latest blocks. */
|
|
89
|
+
private latestBlockDownloader;
|
|
90
|
+
/** L2 block download to stay in sync with proven blocks. */
|
|
91
|
+
private provenBlockDownloader;
|
|
92
|
+
/** Property that indicates whether the client is running. */
|
|
88
93
|
private stopping;
|
|
89
|
-
/**
|
|
90
|
-
* The JS promise that will be running to keep the client's data in sync. Can be interrupted if the client is stopped.
|
|
91
|
-
*/
|
|
94
|
+
/** The JS promise that will be running to keep the client's data in sync. Can be interrupted if the client is stopped. */
|
|
92
95
|
private runningPromise;
|
|
93
96
|
private currentState;
|
|
94
97
|
private syncPromise;
|
|
95
|
-
private latestBlockNumberAtStart;
|
|
96
98
|
private syncResolve?;
|
|
97
|
-
private
|
|
99
|
+
private latestBlockNumberAtStart;
|
|
100
|
+
private provenBlockNumberAtStart;
|
|
101
|
+
private synchedLatestBlockNumber;
|
|
102
|
+
private synchedProvenBlockNumber;
|
|
98
103
|
/**
|
|
99
104
|
* In-memory P2P client constructor.
|
|
100
105
|
* @param store - The client's instance of the KV store.
|
|
101
106
|
* @param l2BlockSource - P2P client's source for fetching existing blocks.
|
|
102
107
|
* @param txPool - The client's instance of a transaction pool. Defaults to in-memory implementation.
|
|
103
108
|
* @param p2pService - The concrete instance of p2p networking to use.
|
|
109
|
+
* @param keepProvenTxsFor - How many blocks have to pass after a block is proven before its txs are deleted (zero to delete immediately once proven).
|
|
104
110
|
* @param log - A logger.
|
|
105
111
|
*/
|
|
106
|
-
constructor(store: AztecKVStore, l2BlockSource: L2BlockSource, txPool: TxPool, p2pService: P2PService, log?: import("@aztec/foundation/log").Logger);
|
|
112
|
+
constructor(store: AztecKVStore, l2BlockSource: L2BlockSource, txPool: TxPool, p2pService: P2PService, keepProvenTxsFor: number, log?: import("@aztec/foundation/log").Logger);
|
|
107
113
|
/**
|
|
108
114
|
* Starts the P2P client.
|
|
109
115
|
* @returns An empty promise signalling the synching process.
|
|
@@ -118,19 +124,25 @@ export declare class P2PClient implements P2P {
|
|
|
118
124
|
* Returns all transactions in the transaction pool.
|
|
119
125
|
* @returns An array of Txs.
|
|
120
126
|
*/
|
|
121
|
-
getTxs():
|
|
127
|
+
getTxs(filter: 'all' | 'pending' | 'mined'): Tx[];
|
|
122
128
|
/**
|
|
123
129
|
* Returns a transaction in the transaction pool by its hash.
|
|
124
130
|
* @param txHash - Hash of the transaction to look for in the pool.
|
|
125
131
|
* @returns A single tx or undefined.
|
|
126
132
|
*/
|
|
127
|
-
getTxByHash(txHash: TxHash):
|
|
133
|
+
getTxByHash(txHash: TxHash): Tx | undefined;
|
|
128
134
|
/**
|
|
129
135
|
* Verifies the 'tx' and, if valid, adds it to local tx pool and forwards it to other peers.
|
|
130
136
|
* @param tx - The tx to verify.
|
|
131
137
|
* @returns Empty promise.
|
|
132
138
|
**/
|
|
133
139
|
sendTx(tx: Tx): Promise<void>;
|
|
140
|
+
/**
|
|
141
|
+
* Returns whether the given tx hash is flagged as pending or mined.
|
|
142
|
+
* @param txHash - Hash of the tx to query.
|
|
143
|
+
* @returns Pending or mined depending on its status, or undefined if not found.
|
|
144
|
+
*/
|
|
145
|
+
getTxStatus(txHash: TxHash): 'pending' | 'mined' | undefined;
|
|
134
146
|
/**
|
|
135
147
|
* Deletes the 'txs' from the pool.
|
|
136
148
|
* NOT used if we use sendTx as reconcileTxPool will handle this.
|
|
@@ -147,24 +159,42 @@ export declare class P2PClient implements P2P {
|
|
|
147
159
|
* Public function to check the latest block number that the P2P client is synced to.
|
|
148
160
|
* @returns Block number of latest L2 Block we've synced with.
|
|
149
161
|
*/
|
|
150
|
-
|
|
162
|
+
getSyncedLatestBlockNum(): number;
|
|
163
|
+
/**
|
|
164
|
+
* Public function to check the latest proven block number that the P2P client is synced to.
|
|
165
|
+
* @returns Block number of latest proven L2 Block we've synced with.
|
|
166
|
+
*/
|
|
167
|
+
getSyncedProvenBlockNum(): number;
|
|
151
168
|
/**
|
|
152
169
|
* Method to check the status the p2p client.
|
|
153
170
|
* @returns Information about p2p client status: state & syncedToBlockNum.
|
|
154
171
|
*/
|
|
155
172
|
getStatus(): Promise<P2PSyncState>;
|
|
156
173
|
/**
|
|
157
|
-
*
|
|
174
|
+
* Mark all txs from these blocks as mined.
|
|
175
|
+
* @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
|
|
176
|
+
* @returns Empty promise.
|
|
177
|
+
*/
|
|
178
|
+
private markTxsAsMinedFromBlocks;
|
|
179
|
+
/**
|
|
180
|
+
* Deletes txs from these blocks.
|
|
158
181
|
* @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
|
|
159
182
|
* @returns Empty promise.
|
|
160
183
|
*/
|
|
161
|
-
private
|
|
184
|
+
private deleteTxsFromBlocks;
|
|
162
185
|
/**
|
|
163
|
-
*
|
|
186
|
+
* Handles new mined blocks by marking the txs in them as mined.
|
|
164
187
|
* @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
|
|
165
188
|
* @returns Empty promise.
|
|
166
189
|
*/
|
|
167
|
-
private
|
|
190
|
+
private handleLatestL2Blocks;
|
|
191
|
+
/**
|
|
192
|
+
* Handles new proven blocks by deleting the txs in them, or by deleting the txs in blocks `keepProvenTxsFor` ago.
|
|
193
|
+
* @param blocks - A list of proven L2 blocks.
|
|
194
|
+
* @returns Empty promise.
|
|
195
|
+
*/
|
|
196
|
+
private handleProvenL2Blocks;
|
|
197
|
+
private startServiceIfSynched;
|
|
168
198
|
/**
|
|
169
199
|
* Method to set the value of the current state.
|
|
170
200
|
* @param newState - New state value.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p2p_client.d.ts","sourceRoot":"","sources":["../../src/client/p2p_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,aAAa,EAAE,KAAK,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGjH,OAAO,EAAE,KAAK,YAAY,EAAuB,MAAM,iBAAiB,CAAC;AAGzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD;;GAEG;AACH,oBAAY,cAAc;IACxB,IAAI,IAAA;IACJ,QAAQ,IAAA;IACR,OAAO,IAAA;IACP,OAAO,IAAA;CACR;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,KAAK,EAAE,cAAc,CAAC;IACtB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;IAEI;AACJ,MAAM,WAAW,GAAG;IAClB;;;QAGI;IACJ,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9B;;;;QAII;IACJ,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C;;;OAGG;IACH,MAAM,
|
|
1
|
+
{"version":3,"file":"p2p_client.d.ts","sourceRoot":"","sources":["../../src/client/p2p_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,27 +22,31 @@ export class P2PClient {
|
|
|
22
22
|
* @param l2BlockSource - P2P client's source for fetching existing blocks.
|
|
23
23
|
* @param txPool - The client's instance of a transaction pool. Defaults to in-memory implementation.
|
|
24
24
|
* @param p2pService - The concrete instance of p2p networking to use.
|
|
25
|
+
* @param keepProvenTxsFor - How many blocks have to pass after a block is proven before its txs are deleted (zero to delete immediately once proven).
|
|
25
26
|
* @param log - A logger.
|
|
26
27
|
*/
|
|
27
|
-
constructor(store, l2BlockSource, txPool, p2pService, log = createDebugLogger('aztec:p2p')) {
|
|
28
|
+
constructor(store, l2BlockSource, txPool, p2pService, keepProvenTxsFor, log = createDebugLogger('aztec:p2p')) {
|
|
28
29
|
this.l2BlockSource = l2BlockSource;
|
|
29
30
|
this.txPool = txPool;
|
|
30
31
|
this.p2pService = p2pService;
|
|
32
|
+
this.keepProvenTxsFor = keepProvenTxsFor;
|
|
31
33
|
this.log = log;
|
|
32
|
-
/**
|
|
33
|
-
* Property that indicates whether the client is running.
|
|
34
|
-
*/
|
|
34
|
+
/** Property that indicates whether the client is running. */
|
|
35
35
|
this.stopping = false;
|
|
36
36
|
this.currentState = P2PClientState.IDLE;
|
|
37
37
|
this.syncPromise = Promise.resolve();
|
|
38
|
-
this.latestBlockNumberAtStart = -1;
|
|
39
38
|
this.syncResolve = undefined;
|
|
39
|
+
this.latestBlockNumberAtStart = -1;
|
|
40
|
+
this.provenBlockNumberAtStart = -1;
|
|
40
41
|
const { p2pBlockCheckIntervalMS: checkInterval, p2pL2QueueSize } = getP2PConfigEnvVars();
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
this.
|
|
42
|
+
const l2DownloaderOpts = { maxQueueSize: p2pL2QueueSize, pollIntervalMS: checkInterval };
|
|
43
|
+
// TODO(palla/prover-node): This effectively downloads blocks twice from the archiver, which is an issue
|
|
44
|
+
// if the archiver is remote. We should refactor this so the downloader keeps a single queue and handles
|
|
45
|
+
// latest/proven metadata, as well as block reorgs.
|
|
46
|
+
this.latestBlockDownloader = new L2BlockDownloader(l2BlockSource, l2DownloaderOpts);
|
|
47
|
+
this.provenBlockDownloader = new L2BlockDownloader(l2BlockSource, { ...l2DownloaderOpts, proven: true });
|
|
48
|
+
this.synchedLatestBlockNumber = store.openSingleton('p2p_pool_last_l2_block');
|
|
49
|
+
this.synchedProvenBlockNumber = store.openSingleton('p2p_pool_last_proven_l2_block');
|
|
46
50
|
}
|
|
47
51
|
/**
|
|
48
52
|
* Starts the P2P client.
|
|
@@ -55,36 +59,43 @@ export class P2PClient {
|
|
|
55
59
|
if (this.currentState !== P2PClientState.IDLE) {
|
|
56
60
|
return this.syncPromise;
|
|
57
61
|
}
|
|
58
|
-
// get the current latest block
|
|
62
|
+
// get the current latest block numbers
|
|
59
63
|
this.latestBlockNumberAtStart = await this.l2BlockSource.getBlockNumber();
|
|
60
|
-
|
|
64
|
+
this.provenBlockNumberAtStart = await this.l2BlockSource.getProvenBlockNumber();
|
|
65
|
+
const syncedLatestBlock = this.getSyncedLatestBlockNum() + 1;
|
|
66
|
+
const syncedProvenBlock = this.getSyncedProvenBlockNum() + 1;
|
|
61
67
|
// if there are blocks to be retrieved, go to a synching state
|
|
62
|
-
if (
|
|
68
|
+
if (syncedLatestBlock <= this.latestBlockNumberAtStart || syncedProvenBlock <= this.provenBlockNumberAtStart) {
|
|
63
69
|
this.setCurrentState(P2PClientState.SYNCHING);
|
|
64
70
|
this.syncPromise = new Promise(resolve => {
|
|
65
71
|
this.syncResolve = resolve;
|
|
66
72
|
});
|
|
67
|
-
this.log.verbose(`Starting sync from ${
|
|
73
|
+
this.log.verbose(`Starting sync from ${syncedLatestBlock} (last proven ${syncedProvenBlock})`);
|
|
68
74
|
}
|
|
69
75
|
else {
|
|
70
76
|
// if no blocks to be retrieved, go straight to running
|
|
71
77
|
this.setCurrentState(P2PClientState.RUNNING);
|
|
72
78
|
this.syncPromise = Promise.resolve();
|
|
73
79
|
await this.p2pService.start();
|
|
74
|
-
this.log.verbose(`
|
|
80
|
+
this.log.verbose(`Block ${syncedLatestBlock} (proven ${syncedProvenBlock}) already beyond current block`);
|
|
75
81
|
}
|
|
76
82
|
// publish any txs in TxPool after its doing initial sync
|
|
77
83
|
this.syncPromise = this.syncPromise.then(() => this.publishStoredTxs());
|
|
78
84
|
// start looking for further blocks
|
|
79
|
-
const
|
|
85
|
+
const processLatest = async () => {
|
|
80
86
|
while (!this.stopping) {
|
|
81
|
-
|
|
82
|
-
await this.handleL2Blocks(blocks);
|
|
87
|
+
await this.latestBlockDownloader.getBlocks(1).then(this.handleLatestL2Blocks.bind(this));
|
|
83
88
|
}
|
|
84
89
|
};
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
90
|
+
const processProven = async () => {
|
|
91
|
+
while (!this.stopping) {
|
|
92
|
+
await this.provenBlockDownloader.getBlocks(1).then(this.handleProvenL2Blocks.bind(this));
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
this.runningPromise = Promise.all([processLatest(), processProven()]).then(() => { });
|
|
96
|
+
this.latestBlockDownloader.start(syncedLatestBlock);
|
|
97
|
+
this.provenBlockDownloader.start(syncedLatestBlock);
|
|
98
|
+
this.log.verbose(`Started block downloader from block ${syncedLatestBlock}`);
|
|
88
99
|
return this.syncPromise;
|
|
89
100
|
}
|
|
90
101
|
/**
|
|
@@ -96,7 +107,8 @@ export class P2PClient {
|
|
|
96
107
|
this.stopping = true;
|
|
97
108
|
await this.p2pService.stop();
|
|
98
109
|
this.log.debug('Stopped p2p service');
|
|
99
|
-
await this.
|
|
110
|
+
await this.latestBlockDownloader.stop();
|
|
111
|
+
await this.provenBlockDownloader.stop();
|
|
100
112
|
this.log.debug('Stopped block downloader');
|
|
101
113
|
await this.runningPromise;
|
|
102
114
|
this.setCurrentState(P2PClientState.STOPPED);
|
|
@@ -106,8 +118,26 @@ export class P2PClient {
|
|
|
106
118
|
* Returns all transactions in the transaction pool.
|
|
107
119
|
* @returns An array of Txs.
|
|
108
120
|
*/
|
|
109
|
-
getTxs() {
|
|
110
|
-
|
|
121
|
+
getTxs(filter) {
|
|
122
|
+
if (filter === 'all') {
|
|
123
|
+
return this.txPool.getAllTxs();
|
|
124
|
+
}
|
|
125
|
+
else if (filter === 'mined') {
|
|
126
|
+
return this.txPool
|
|
127
|
+
.getMinedTxHashes()
|
|
128
|
+
.map(txHash => this.txPool.getTxByHash(txHash))
|
|
129
|
+
.filter((tx) => !!tx);
|
|
130
|
+
}
|
|
131
|
+
else if (filter === 'pending') {
|
|
132
|
+
return this.txPool
|
|
133
|
+
.getPendingTxHashes()
|
|
134
|
+
.map(txHash => this.txPool.getTxByHash(txHash))
|
|
135
|
+
.filter((tx) => !!tx);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
const _ = filter;
|
|
139
|
+
throw new Error(`Unknown filter ${filter}`);
|
|
140
|
+
}
|
|
111
141
|
}
|
|
112
142
|
/**
|
|
113
143
|
* Returns a transaction in the transaction pool by its hash.
|
|
@@ -115,7 +145,7 @@ export class P2PClient {
|
|
|
115
145
|
* @returns A single tx or undefined.
|
|
116
146
|
*/
|
|
117
147
|
getTxByHash(txHash) {
|
|
118
|
-
return
|
|
148
|
+
return this.txPool.getTxByHash(txHash);
|
|
119
149
|
}
|
|
120
150
|
/**
|
|
121
151
|
* Verifies the 'tx' and, if valid, adds it to local tx pool and forwards it to other peers.
|
|
@@ -130,6 +160,14 @@ export class P2PClient {
|
|
|
130
160
|
await this.txPool.addTxs([tx]);
|
|
131
161
|
this.p2pService.propagateTx(tx);
|
|
132
162
|
}
|
|
163
|
+
/**
|
|
164
|
+
* Returns whether the given tx hash is flagged as pending or mined.
|
|
165
|
+
* @param txHash - Hash of the tx to query.
|
|
166
|
+
* @returns Pending or mined depending on its status, or undefined if not found.
|
|
167
|
+
*/
|
|
168
|
+
getTxStatus(txHash) {
|
|
169
|
+
return this.txPool.getTxStatus(txHash);
|
|
170
|
+
}
|
|
133
171
|
/**
|
|
134
172
|
* Deletes the 'txs' from the pool.
|
|
135
173
|
* NOT used if we use sendTx as reconcileTxPool will handle this.
|
|
@@ -154,8 +192,15 @@ export class P2PClient {
|
|
|
154
192
|
* Public function to check the latest block number that the P2P client is synced to.
|
|
155
193
|
* @returns Block number of latest L2 Block we've synced with.
|
|
156
194
|
*/
|
|
157
|
-
|
|
158
|
-
return this.
|
|
195
|
+
getSyncedLatestBlockNum() {
|
|
196
|
+
return this.synchedLatestBlockNumber.get() ?? INITIAL_L2_BLOCK_NUM - 1;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Public function to check the latest proven block number that the P2P client is synced to.
|
|
200
|
+
* @returns Block number of latest proven L2 Block we've synced with.
|
|
201
|
+
*/
|
|
202
|
+
getSyncedProvenBlockNum() {
|
|
203
|
+
return this.synchedProvenBlockNumber.get() ?? INITIAL_L2_BLOCK_NUM - 1;
|
|
159
204
|
}
|
|
160
205
|
/**
|
|
161
206
|
* Method to check the status the p2p client.
|
|
@@ -164,34 +209,77 @@ export class P2PClient {
|
|
|
164
209
|
getStatus() {
|
|
165
210
|
return Promise.resolve({
|
|
166
211
|
state: this.currentState,
|
|
167
|
-
syncedToL2Block: this.
|
|
212
|
+
syncedToL2Block: this.getSyncedLatestBlockNum(),
|
|
168
213
|
});
|
|
169
214
|
}
|
|
170
215
|
/**
|
|
171
|
-
*
|
|
216
|
+
* Mark all txs from these blocks as mined.
|
|
217
|
+
* @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
|
|
218
|
+
* @returns Empty promise.
|
|
219
|
+
*/
|
|
220
|
+
async markTxsAsMinedFromBlocks(blocks) {
|
|
221
|
+
for (const block of blocks) {
|
|
222
|
+
const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
|
|
223
|
+
await this.txPool.markAsMined(txHashes);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Deletes txs from these blocks.
|
|
172
228
|
* @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
|
|
173
229
|
* @returns Empty promise.
|
|
174
230
|
*/
|
|
175
|
-
async
|
|
231
|
+
async deleteTxsFromBlocks(blocks) {
|
|
232
|
+
this.log.debug(`Deleting txs from blocks ${blocks[0].number} to ${blocks[blocks.length - 1].number}`);
|
|
176
233
|
for (const block of blocks) {
|
|
177
234
|
const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
|
|
178
235
|
await this.txPool.deleteTxs(txHashes);
|
|
179
236
|
}
|
|
180
237
|
}
|
|
181
238
|
/**
|
|
182
|
-
*
|
|
239
|
+
* Handles new mined blocks by marking the txs in them as mined.
|
|
183
240
|
* @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
|
|
184
241
|
* @returns Empty promise.
|
|
185
242
|
*/
|
|
186
|
-
async
|
|
243
|
+
async handleLatestL2Blocks(blocks) {
|
|
244
|
+
if (!blocks.length) {
|
|
245
|
+
return Promise.resolve();
|
|
246
|
+
}
|
|
247
|
+
await this.markTxsAsMinedFromBlocks(blocks);
|
|
248
|
+
const lastBlockNum = blocks[blocks.length - 1].number;
|
|
249
|
+
await this.synchedLatestBlockNumber.set(lastBlockNum);
|
|
250
|
+
this.log.debug(`Synched to latest block ${lastBlockNum}`);
|
|
251
|
+
await this.startServiceIfSynched();
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Handles new proven blocks by deleting the txs in them, or by deleting the txs in blocks `keepProvenTxsFor` ago.
|
|
255
|
+
* @param blocks - A list of proven L2 blocks.
|
|
256
|
+
* @returns Empty promise.
|
|
257
|
+
*/
|
|
258
|
+
async handleProvenL2Blocks(blocks) {
|
|
187
259
|
if (!blocks.length) {
|
|
188
260
|
return Promise.resolve();
|
|
189
261
|
}
|
|
190
|
-
|
|
262
|
+
const firstBlockNum = blocks[0].number;
|
|
191
263
|
const lastBlockNum = blocks[blocks.length - 1].number;
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
264
|
+
if (this.keepProvenTxsFor === 0) {
|
|
265
|
+
await this.deleteTxsFromBlocks(blocks);
|
|
266
|
+
}
|
|
267
|
+
else if (lastBlockNum - this.keepProvenTxsFor >= INITIAL_L2_BLOCK_NUM) {
|
|
268
|
+
const fromBlock = Math.max(INITIAL_L2_BLOCK_NUM, firstBlockNum - this.keepProvenTxsFor);
|
|
269
|
+
const toBlock = lastBlockNum - this.keepProvenTxsFor;
|
|
270
|
+
const limit = toBlock - fromBlock + 1;
|
|
271
|
+
const blocksToDeleteTxsFrom = await this.l2BlockSource.getBlocks(fromBlock, limit, true);
|
|
272
|
+
await this.deleteTxsFromBlocks(blocksToDeleteTxsFrom);
|
|
273
|
+
}
|
|
274
|
+
await this.synchedProvenBlockNumber.set(lastBlockNum);
|
|
275
|
+
this.log.debug(`Synched to proven block ${lastBlockNum}`);
|
|
276
|
+
await this.startServiceIfSynched();
|
|
277
|
+
}
|
|
278
|
+
async startServiceIfSynched() {
|
|
279
|
+
if (this.currentState === P2PClientState.SYNCHING &&
|
|
280
|
+
this.getSyncedLatestBlockNum() >= this.latestBlockNumberAtStart &&
|
|
281
|
+
this.getSyncedProvenBlockNum() >= this.provenBlockNumberAtStart) {
|
|
282
|
+
this.log.debug(`Synched to blocks at start`);
|
|
195
283
|
this.setCurrentState(P2PClientState.RUNNING);
|
|
196
284
|
if (this.syncResolve !== undefined) {
|
|
197
285
|
this.syncResolve();
|
|
@@ -218,4 +306,4 @@ export class P2PClient {
|
|
|
218
306
|
}
|
|
219
307
|
}
|
|
220
308
|
}
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX2NsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvcDJwX2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLGlCQUFpQixFQUE0QyxNQUFNLHNCQUFzQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUluRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEIsbURBQUksQ0FBQTtJQUNKLDJEQUFRLENBQUE7SUFDUix5REFBTyxDQUFBO0lBQ1AseURBQU8sQ0FBQTtBQUNULENBQUMsRUFMVyxjQUFjLEtBQWQsY0FBYyxRQUt6QjtBQXNFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxTQUFTO0lBc0JwQjs7Ozs7OztPQU9HO0lBQ0gsWUFDRSxLQUFtQixFQUNYLGFBQTRCLEVBQzVCLE1BQWMsRUFDZCxVQUFzQixFQUN0QixNQUFNLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztRQUhwQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixRQUFHLEdBQUgsR0FBRyxDQUFpQztRQTdCOUM7O1dBRUc7UUFDSyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBT2pCLGlCQUFZLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztRQUNuQyxnQkFBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQyw2QkFBd0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5QixnQkFBVyxHQUFnQixTQUFTLENBQUM7UUFrQjNDLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxhQUFh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
|
|
309
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX2NsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvcDJwX2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLGlCQUFpQixFQUE0QyxNQUFNLHNCQUFzQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUluRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEIsbURBQUksQ0FBQTtJQUNKLDJEQUFRLENBQUE7SUFDUix5REFBTyxDQUFBO0lBQ1AseURBQU8sQ0FBQTtBQUNULENBQUMsRUFMVyxjQUFjLEtBQWQsY0FBYyxRQUt6QjtBQTZFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxTQUFTO0lBc0JwQjs7Ozs7Ozs7T0FRRztJQUNILFlBQ0UsS0FBbUIsRUFDWCxhQUE0QixFQUM1QixNQUFjLEVBQ2QsVUFBc0IsRUFDdEIsZ0JBQXdCLEVBQ3hCLE1BQU0saUJBQWlCLENBQUMsV0FBVyxDQUFDO1FBSnBDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBUTtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUFpQztRQTlCOUMsNkRBQTZEO1FBQ3JELGFBQVEsR0FBRyxLQUFLLENBQUM7UUFLakIsaUJBQVksR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDO1FBQ25DLGdCQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hDLGdCQUFXLEdBQWdCLFNBQVMsQ0FBQztRQUNyQyw2QkFBd0IsR0FBRyxD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
|
package/dest/config.d.ts
CHANGED
|
@@ -71,6 +71,8 @@ export interface P2PConfig {
|
|
|
71
71
|
* If announceUdpAddress or announceTcpAddress are not provided, query for the IP address of the machine. Default is false.
|
|
72
72
|
*/
|
|
73
73
|
queryForIp: boolean;
|
|
74
|
+
/** How many blocks have to pass after a block is proven before its txs are deleted (zero to delete immediately once proven) */
|
|
75
|
+
keepProvenTxsInPoolFor: number;
|
|
74
76
|
}
|
|
75
77
|
/**
|
|
76
78
|
* Gets the config values for p2p client from environment variables.
|
package/dest/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,uBAAuB,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,sBAAsB,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,uBAAuB,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,sBAAsB,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB,+HAA+H;IAC/H,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,CA4C/C"}
|