@aztec/p2p 0.87.4 → 0.87.6
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/interface.d.ts +8 -4
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +4 -3
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +17 -10
- package/dest/config.d.ts +10 -0
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +12 -2
- package/dest/index.d.ts +1 -0
- package/dest/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +5 -6
- 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 +37 -12
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +2 -2
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +1 -3
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +6 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
- package/dest/services/dummy_service.d.ts +1 -1
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +1 -1
- package/dest/services/index.d.ts +1 -0
- package/dest/services/index.d.ts.map +1 -1
- package/dest/services/index.js +1 -0
- package/dest/services/libp2p/libp2p_service.d.ts +5 -3
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +42 -8
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +7 -3
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +8 -3
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/goodbye.js +3 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +4 -2
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -2
- package/dest/services/reqresp/rate-limiter/rate_limits.js +1 -1
- package/dest/services/reqresp/reqresp.d.ts +3 -3
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +39 -13
- package/dest/services/service.d.ts +3 -2
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collector.d.ts +14 -0
- package/dest/services/tx_collector.d.ts.map +1 -0
- package/dest/services/tx_collector.js +73 -0
- package/dest/test-helpers/reqresp-nodes.d.ts +3 -3
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +4 -4
- package/dest/testbench/p2p_client_testbench_worker.js +1 -1
- package/package.json +12 -12
- package/src/client/interface.ts +8 -4
- package/src/client/p2p_client.ts +22 -10
- package/src/config.ts +22 -1
- package/src/index.ts +2 -0
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +45 -18
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +2 -4
- package/src/mem_pools/tx_pool/tx_pool.ts +7 -1
- package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
- package/src/services/dummy_service.ts +3 -1
- package/src/services/index.ts +1 -0
- package/src/services/libp2p/libp2p_service.ts +51 -9
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +4 -2
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +8 -3
- package/src/services/reqresp/protocols/goodbye.ts +3 -1
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +9 -3
- package/src/services/reqresp/rate-limiter/rate_limits.ts +1 -1
- package/src/services/reqresp/reqresp.ts +44 -16
- package/src/services/service.ts +4 -1
- package/src/services/tx_collector.ts +98 -0
- package/src/test-helpers/reqresp-nodes.ts +13 -8
- package/src/testbench/p2p_client_testbench_worker.ts +1 -1
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { L2BlockId } from '@aztec/stdlib/block';
|
|
2
2
|
import type { P2PApi } from '@aztec/stdlib/interfaces/server';
|
|
3
|
-
import {
|
|
3
|
+
import type { BlockProposal, P2PClientType } from '@aztec/stdlib/p2p';
|
|
4
4
|
import type { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
5
5
|
import type { ENR } from '@chainsafe/enr';
|
|
6
|
+
import type { PeerId } from '@libp2p/interface';
|
|
6
7
|
import type { P2PConfig } from '../config.js';
|
|
8
|
+
import type { P2PBlockReceivedCallback } from '../services/service.js';
|
|
7
9
|
/**
|
|
8
10
|
* Enum defining the possible states of the p2p client.
|
|
9
11
|
*/
|
|
@@ -42,13 +44,14 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApi<T> & {
|
|
|
42
44
|
*
|
|
43
45
|
* @param handler - A function taking a received block proposal and producing an attestation
|
|
44
46
|
*/
|
|
45
|
-
registerBlockProposalHandler(
|
|
47
|
+
registerBlockProposalHandler(callback: P2PBlockReceivedCallback): void;
|
|
46
48
|
/**
|
|
47
49
|
* Request a list of transactions from another peer by their tx hashes.
|
|
48
50
|
* @param txHashes - Hashes of the txs to query.
|
|
51
|
+
* @param pinnedPeerId - An optional peer id that will be used to request the tx from (in addition to other random peers).
|
|
49
52
|
* @returns A list of transactions or undefined if the transactions are not found.
|
|
50
53
|
*/
|
|
51
|
-
requestTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
54
|
+
requestTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId): Promise<(Tx | undefined)[]>;
|
|
52
55
|
/**
|
|
53
56
|
* Request a transaction from another peer by its tx hash.
|
|
54
57
|
* @param txHash - Hash of the tx to query.
|
|
@@ -97,9 +100,10 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApi<T> & {
|
|
|
97
100
|
/**
|
|
98
101
|
* Returns transactions in the transaction pool by hash, requesting from the network if not found.
|
|
99
102
|
* @param txHashes - Hashes of tx to return.
|
|
103
|
+
* @param pinnedPeerId - An optional peer id that will be used to request the tx from (in addition to other random peers).
|
|
100
104
|
* @returns An array of tx or undefined.
|
|
101
105
|
*/
|
|
102
|
-
getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
106
|
+
getTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId | undefined): Promise<(Tx | undefined)[]>;
|
|
103
107
|
/**
|
|
104
108
|
* Returns an archived transaction from the transaction pool by its hash.
|
|
105
109
|
* @param txHash - Hash of tx to return.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/client/interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/client/interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEvE;;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,SAAS,CAAC;CAC5B;AAED;;IAEI;AACJ,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG;IAC1E;;;;OAIG;IACH,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1D;;;;;OAKG;IAGH,4BAA4B,CAAC,QAAQ,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAEvE;;;;;OAKG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAExF;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;IAEzD;;;QAGI;IACJ,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9B;;;QAGI;IACJ,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC;;;;QAII;IACJ,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;IAE7D;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAEtE;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAErD;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;IAErD;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAEhG;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;IAE7D;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAEtE,2DAA2D;IAC3D,iBAAiB,IAAI,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAE/C,wDAAwD;IACxD,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAErC;;;OAGG;IACH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC;IAEnB;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IAEnC;;OAEG;IACH,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC;IAE1B,+BAA+B;IAC/B,WAAW,IAAI,IAAI,CAAC;IAEpB,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3D,8BAA8B;IAC9B,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC,qBAAqB;IACrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC"}
|
|
@@ -6,6 +6,7 @@ import { BlockAttestation, type BlockProposal, type P2PClientType } from '@aztec
|
|
|
6
6
|
import type { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
7
7
|
import { type TelemetryClient, WithTracer } from '@aztec/telemetry-client';
|
|
8
8
|
import type { ENR } from '@chainsafe/enr';
|
|
9
|
+
import type { PeerId } from '@libp2p/interface';
|
|
9
10
|
import { type P2PConfig } from '../config.js';
|
|
10
11
|
import type { MemPools } from '../mem_pools/interface.js';
|
|
11
12
|
import type { P2PService } from '../services/service.js';
|
|
@@ -70,7 +71,7 @@ export declare class P2PClient<T extends P2PClientType = P2PClientType.Full> ext
|
|
|
70
71
|
broadcastProposal(proposal: BlockProposal): Promise<void>;
|
|
71
72
|
getAttestationsForSlot(slot: bigint, proposalId?: string): Promise<BlockAttestation[]>;
|
|
72
73
|
addAttestation(attestation: BlockAttestation): Promise<void>;
|
|
73
|
-
registerBlockProposalHandler(handler: (block: BlockProposal) => Promise<BlockAttestation | undefined>): void;
|
|
74
|
+
registerBlockProposalHandler(handler: (block: BlockProposal, sender: any) => Promise<BlockAttestation | undefined>): void;
|
|
74
75
|
/**
|
|
75
76
|
* Uses the Request Response protocol to request a transaction from the network.
|
|
76
77
|
*
|
|
@@ -84,7 +85,7 @@ export declare class P2PClient<T extends P2PClientType = P2PClientType.Full> ext
|
|
|
84
85
|
/**
|
|
85
86
|
* Uses the batched Request Response protocol to request a set of transactions from the network.
|
|
86
87
|
*/
|
|
87
|
-
requestTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
88
|
+
requestTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId | undefined): Promise<(Tx | undefined)[]>;
|
|
88
89
|
getPendingTxs(): Promise<Tx[]>;
|
|
89
90
|
getPendingTxCount(): Promise<number>;
|
|
90
91
|
iteratePendingTxs(): AsyncIterableIterator<Tx>;
|
|
@@ -119,7 +120,7 @@ export declare class P2PClient<T extends P2PClientType = P2PClientType.Full> ext
|
|
|
119
120
|
* @param txHashes - Hashes of the transactions to look for.
|
|
120
121
|
* @returns The txs found, or undefined if not found in the order requested.
|
|
121
122
|
*/
|
|
122
|
-
getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
|
|
123
|
+
getTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId | undefined): Promise<(Tx | undefined)[]>;
|
|
123
124
|
/**
|
|
124
125
|
* Returns an archived transaction in the transaction pool by its hash.
|
|
125
126
|
* @param txHash - Hash of the archived transaction to look for.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p2p_client.d.ts","sourceRoot":"","sources":["../../src/client/p2p_client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAsC,MAAM,iBAAiB,CAAC;AAC7F,OAAO,KAAK,EAGV,aAAa,EAEb,kBAAkB,EAClB,MAAM,EAEP,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAEL,KAAK,eAAe,EAEpB,UAAU,EAGX,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"p2p_client.d.ts","sourceRoot":"","sources":["../../src/client/p2p_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
9
9
|
import { Attributes, TraceableL2BlockStream, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
10
10
|
import { getP2PDefaultConfig } from '../config.js';
|
|
11
11
|
import { ReqRespSubProtocol } from '../services/reqresp/interface.js';
|
|
12
|
+
import { TxCollector } from '../services/tx_collector.js';
|
|
12
13
|
import { P2PClientState } from './interface.js';
|
|
13
14
|
/**
|
|
14
15
|
* The P2P client implementation.
|
|
@@ -49,6 +50,14 @@ import { P2PClientState } from './interface.js';
|
|
|
49
50
|
};
|
|
50
51
|
this.txPool = mempools.txPool;
|
|
51
52
|
this.attestationPool = mempools.attestationPool;
|
|
53
|
+
// Default to collecting all txs when we see a valid proposal
|
|
54
|
+
// This can be overridden by the validator client to attest, and it will call collectForBlockProposal on its own
|
|
55
|
+
const txCollector = new TxCollector(this, this.log);
|
|
56
|
+
this.registerBlockProposalHandler(async (block, sender)=>{
|
|
57
|
+
this.log.debug(`Received block proposal from ${sender.toString()}`);
|
|
58
|
+
await txCollector.collectForBlockProposal(block, sender);
|
|
59
|
+
return undefined;
|
|
60
|
+
});
|
|
52
61
|
// REFACTOR: Try replacing these with an L2TipsStore
|
|
53
62
|
this.synchedBlockHashes = store.openMap('p2p_pool_block_hashes');
|
|
54
63
|
this.synchedLatestBlockNumber = store.openSingleton('p2p_pool_last_l2_block');
|
|
@@ -68,11 +77,9 @@ import { P2PClientState } from './interface.js';
|
|
|
68
77
|
getL2BlockHash(number) {
|
|
69
78
|
return this.synchedBlockHashes.getAsync(number);
|
|
70
79
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
this.config.maxTxPoolSize = config.maxTxPoolSize;
|
|
75
|
-
}
|
|
80
|
+
updateP2PConfig(config) {
|
|
81
|
+
this.txPool.updateConfig(config);
|
|
82
|
+
return Promise.resolve();
|
|
76
83
|
}
|
|
77
84
|
async getL2Tips() {
|
|
78
85
|
const latestBlockNumber = await this.getSyncedLatestBlockNum();
|
|
@@ -278,11 +285,11 @@ import { P2PClientState } from './interface.js';
|
|
|
278
285
|
}
|
|
279
286
|
/**
|
|
280
287
|
* Uses the batched Request Response protocol to request a set of transactions from the network.
|
|
281
|
-
*/ async requestTxsByHash(txHashes) {
|
|
288
|
+
*/ async requestTxsByHash(txHashes, pinnedPeerId) {
|
|
282
289
|
const timeoutMs = 8000; // Longer timeout for now
|
|
283
290
|
const maxPeers = Math.min(Math.ceil(txHashes.length / 3), 10);
|
|
284
291
|
const maxRetryAttempts = 10; // Keep retrying within the timeout
|
|
285
|
-
const txs = await this.p2pService.sendBatchRequest(ReqRespSubProtocol.TX, txHashes, timeoutMs, maxPeers, maxRetryAttempts);
|
|
292
|
+
const txs = await this.p2pService.sendBatchRequest(ReqRespSubProtocol.TX, txHashes, pinnedPeerId, timeoutMs, maxPeers, maxRetryAttempts);
|
|
286
293
|
// Some transactions may return undefined, so we filter them out
|
|
287
294
|
const filteredTxs = txs.filter((tx)=>!!tx);
|
|
288
295
|
if (filteredTxs.length > 0) {
|
|
@@ -360,7 +367,7 @@ import { P2PClientState } from './interface.js';
|
|
|
360
367
|
* If a transaction is not in the pool, it will be requested from the network.
|
|
361
368
|
* @param txHashes - Hashes of the transactions to look for.
|
|
362
369
|
* @returns The txs found, or undefined if not found in the order requested.
|
|
363
|
-
*/ async getTxsByHash(txHashes) {
|
|
370
|
+
*/ async getTxsByHash(txHashes, pinnedPeerId) {
|
|
364
371
|
const txs = await Promise.all(txHashes.map((txHash)=>this.txPool.getTxByHash(txHash)));
|
|
365
372
|
const missingTxHashes = txs.map((tx, index)=>[
|
|
366
373
|
tx,
|
|
@@ -369,7 +376,7 @@ import { P2PClientState } from './interface.js';
|
|
|
369
376
|
if (missingTxHashes.length === 0) {
|
|
370
377
|
return txs;
|
|
371
378
|
}
|
|
372
|
-
const missingTxs = await this.requestTxsByHash(missingTxHashes);
|
|
379
|
+
const missingTxs = await this.requestTxsByHash(missingTxHashes, pinnedPeerId);
|
|
373
380
|
const fetchedMissingTxs = missingTxs.filter((tx)=>!!tx);
|
|
374
381
|
// TODO: optimize
|
|
375
382
|
// Merge the found txs in order
|
|
@@ -527,7 +534,7 @@ import { P2PClientState } from './interface.js';
|
|
|
527
534
|
missingTxHashes,
|
|
528
535
|
unprovenBlockNumbers: unprovenBlocks.map((block)=>block.number)
|
|
529
536
|
});
|
|
530
|
-
await this.requestTxsByHash(missingTxHashes);
|
|
537
|
+
await this.requestTxsByHash(missingTxHashes, undefined);
|
|
531
538
|
}
|
|
532
539
|
} catch (err) {
|
|
533
540
|
this.log.error(`Error requesting missing txs from unproven blocks`, err, {
|
package/dest/config.d.ts
CHANGED
|
@@ -148,6 +148,14 @@ export interface P2PConfig extends P2PReqRespConfig, ChainConfig {
|
|
|
148
148
|
* The maximum cumulative tx size (in bytes) of pending txs before evicting lower priority txs.
|
|
149
149
|
*/
|
|
150
150
|
maxTxPoolSize: number;
|
|
151
|
+
/**
|
|
152
|
+
* If the pool is full, it will still accept a few more txs until it reached maxTxPoolOverspillFactor * maxTxPoolSize. Then it will evict
|
|
153
|
+
*/
|
|
154
|
+
txPoolOverflowFactor: number;
|
|
155
|
+
/**
|
|
156
|
+
* The node's seen message ID cache size
|
|
157
|
+
*/
|
|
158
|
+
seenMessageCacheSize: number;
|
|
151
159
|
}
|
|
152
160
|
export declare const DEFAULT_P2P_PORT = 40400;
|
|
153
161
|
export declare const p2pConfigMappings: ConfigMappingsType<P2PConfig>;
|
|
@@ -206,6 +214,8 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
|
|
|
206
214
|
p2pStoreMapSizeKb: unknown;
|
|
207
215
|
txPublicSetupAllowList: unknown;
|
|
208
216
|
maxTxPoolSize: unknown;
|
|
217
|
+
txPoolOverflowFactor: unknown;
|
|
218
|
+
seenMessageCacheSize: unknown;
|
|
209
219
|
}, "p2pPort" | "p2pBroadcastPort" | "p2pIp" | "listenAddress" | "peerIdPrivateKey" | "peerIdPrivateKeyPath" | "bootstrapNodes" | "l1ChainId" | "dataDirectory" | "dataStoreMapSizeKB">>;
|
|
210
220
|
/**
|
|
211
221
|
* Parses a string to a list of allowed elements.
|
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,EACL,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dest/config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { booleanConfigHelper, getConfigFromMappings, getDefaultConfig, numberConfigHelper, pickConfigMappings } from '@aztec/foundation/config';
|
|
1
|
+
import { booleanConfigHelper, floatConfigHelper, getConfigFromMappings, getDefaultConfig, numberConfigHelper, pickConfigMappings } from '@aztec/foundation/config';
|
|
2
2
|
import { Fr } from '@aztec/foundation/fields';
|
|
3
3
|
import { dataConfigMappings } from '@aztec/kv-store/config';
|
|
4
4
|
import { FunctionSelector } from '@aztec/stdlib/abi';
|
|
@@ -112,7 +112,7 @@ export const p2pConfigMappings = {
|
|
|
112
112
|
gossipsubFloodPublish: {
|
|
113
113
|
env: 'P2P_GOSSIPSUB_FLOOD_PUBLISH',
|
|
114
114
|
description: 'Whether to flood publish messages. - For testing purposes only',
|
|
115
|
-
...booleanConfigHelper(
|
|
115
|
+
...booleanConfigHelper(false)
|
|
116
116
|
},
|
|
117
117
|
gossipsubMcacheLength: {
|
|
118
118
|
env: 'P2P_GOSSIPSUB_MCACHE_LENGTH',
|
|
@@ -197,6 +197,16 @@ export const p2pConfigMappings = {
|
|
|
197
197
|
description: 'The maximum cumulative tx size of pending txs (in bytes) before evicting lower priority txs.',
|
|
198
198
|
...numberConfigHelper(100_000_000)
|
|
199
199
|
},
|
|
200
|
+
txPoolOverflowFactor: {
|
|
201
|
+
env: 'P2P_TX_POOL_OVERFLOW_FACTOR',
|
|
202
|
+
description: 'How much the tx pool can overflow before it starts evicting txs. Must be greater than 1',
|
|
203
|
+
...floatConfigHelper(1.1)
|
|
204
|
+
},
|
|
205
|
+
seenMessageCacheSize: {
|
|
206
|
+
env: 'P2P_SEEN_MSG_CACHE_SIZE',
|
|
207
|
+
description: 'The number of messages to keep in the seen message cache',
|
|
208
|
+
...numberConfigHelper(100_000)
|
|
209
|
+
},
|
|
200
210
|
...p2pReqRespConfigMappings,
|
|
201
211
|
...chainConfigMappings
|
|
202
212
|
};
|
package/dest/index.d.ts
CHANGED
package/dest/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC"}
|
|
@@ -5,12 +5,14 @@ import { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
|
5
5
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
6
6
|
import { ArchiveCache } from '../../msg_validators/tx_validator/archive_cache.js';
|
|
7
7
|
import { GasTxValidator } from '../../msg_validators/tx_validator/gas_validator.js';
|
|
8
|
-
import type { TxPool } from './tx_pool.js';
|
|
8
|
+
import type { TxPool, TxPoolOptions } from './tx_pool.js';
|
|
9
9
|
/**
|
|
10
10
|
* KV implementation of the Transaction Pool.
|
|
11
11
|
*/
|
|
12
12
|
export declare class AztecKVTxPool implements TxPool {
|
|
13
13
|
#private;
|
|
14
|
+
/** The tx evicion logic will kick after pool size is greater than maxTxPoolSize * txPoolOverflowFactor */
|
|
15
|
+
txPoolOverflowFactor: number;
|
|
14
16
|
/**
|
|
15
17
|
* Class constructor for KV TxPool. Initiates our transaction pool as an AztecMap.
|
|
16
18
|
* @param store - A KV store for live txs in the pool.
|
|
@@ -19,10 +21,7 @@ export declare class AztecKVTxPool implements TxPool {
|
|
|
19
21
|
* @param archivedTxLimit - The number of txs to archive.
|
|
20
22
|
* @param log - A logger.
|
|
21
23
|
*/
|
|
22
|
-
constructor(store: AztecAsyncKVStore, archive: AztecAsyncKVStore, worldStateSynchronizer: WorldStateSynchronizer, telemetry?: TelemetryClient, config?:
|
|
23
|
-
maxTxPoolSize?: number;
|
|
24
|
-
archivedTxLimit?: number;
|
|
25
|
-
}, log?: Logger);
|
|
24
|
+
constructor(store: AztecAsyncKVStore, archive: AztecAsyncKVStore, worldStateSynchronizer: WorldStateSynchronizer, telemetry?: TelemetryClient, config?: TxPoolOptions, log?: Logger);
|
|
26
25
|
isEmpty(): Promise<boolean>;
|
|
27
26
|
markAsMined(txHashes: TxHash[], blockNumber: number): Promise<void>;
|
|
28
27
|
markMinedAsPending(txHashes: TxHash[]): Promise<void>;
|
|
@@ -66,7 +65,7 @@ export declare class AztecKVTxPool implements TxPool {
|
|
|
66
65
|
* @returns An array of transaction hashes found in the tx pool.
|
|
67
66
|
*/
|
|
68
67
|
getAllTxHashes(): Promise<TxHash[]>;
|
|
69
|
-
|
|
68
|
+
updateConfig({ maxTxPoolSize, txPoolOverflowFactor, archivedTxLimit }: TxPoolOptions): void;
|
|
70
69
|
markTxsAsNonEvictable(txHashes: TxHash[]): Promise<void>;
|
|
71
70
|
/**
|
|
72
71
|
* Creates a GasTxValidator instance.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aztec_kv_tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/aztec_kv_tx_pool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAA0D,MAAM,iBAAiB,CAAC;AAGjH,OAAO,KAAK,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAIxG,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"aztec_kv_tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/aztec_kv_tx_pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import { ClientIvcProof } from '@aztec/stdlib/proofs';
|
|
|
7
7
|
import { DatabasePublicStateSource } from '@aztec/stdlib/trees';
|
|
8
8
|
import { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
9
9
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
10
|
+
import assert from 'assert';
|
|
10
11
|
import { ArchiveCache } from '../../msg_validators/tx_validator/archive_cache.js';
|
|
11
12
|
import { GasTxValidator } from '../../msg_validators/tx_validator/gas_validator.js';
|
|
12
13
|
import { PoolInstrumentation, PoolName } from '../instrumentation.js';
|
|
@@ -16,7 +17,8 @@ import { getPendingTxPriority } from './priority.js';
|
|
|
16
17
|
*/ export class AztecKVTxPool {
|
|
17
18
|
#store;
|
|
18
19
|
/** Our tx pool, stored as a Map, with K: tx hash and V: the transaction. */ #txs;
|
|
19
|
-
/** The maximum cumulative tx size that the pending txs in the pool take up. */ #maxTxPoolSize;
|
|
20
|
+
/** The maximum cumulative tx size that the pending txs in the pool take up. */ #maxTxPoolSize = 0;
|
|
21
|
+
/** The tx evicion logic will kick after pool size is greater than maxTxPoolSize * txPoolOverflowFactor */ txPoolOverflowFactor = 1;
|
|
20
22
|
/** Index from tx hash to the block number in which they were mined, filtered by mined txs. */ #minedTxHashToBlock;
|
|
21
23
|
/** Index from tx priority (stored as hex) to its tx hash, filtered by pending txs. */ #pendingTxPriorityToHash;
|
|
22
24
|
/** Index from tx hash to its tx size (in bytes), filtered by pending txs. */ #pendingTxHashToSize;
|
|
@@ -28,7 +30,7 @@ import { getPendingTxPriority } from './priority.js';
|
|
|
28
30
|
/** KV store for archived txs. */ #archive;
|
|
29
31
|
/** Archived txs map for future lookup. */ #archivedTxs;
|
|
30
32
|
/** Indexes of the archived txs by insertion order. */ #archivedTxIndices;
|
|
31
|
-
/** Number of txs to archive. */ #archivedTxLimit;
|
|
33
|
+
/** Number of txs to archive. */ #archivedTxLimit = 0;
|
|
32
34
|
/** The world state synchronizer used in the node. */ #worldStateSynchronizer;
|
|
33
35
|
#log;
|
|
34
36
|
#metrics;
|
|
@@ -40,6 +42,8 @@ import { getPendingTxPriority } from './priority.js';
|
|
|
40
42
|
* @param archivedTxLimit - The number of txs to archive.
|
|
41
43
|
* @param log - A logger.
|
|
42
44
|
*/ constructor(store, archive, worldStateSynchronizer, telemetry = getTelemetryClient(), config = {}, log = createLogger('p2p:tx_pool')){
|
|
45
|
+
this.#log = log;
|
|
46
|
+
this.updateConfig(config);
|
|
43
47
|
this.#txs = store.openMap('txs');
|
|
44
48
|
this.#minedTxHashToBlock = store.openMap('txHashToBlockMined');
|
|
45
49
|
this.#pendingTxPriorityToHash = store.openMultiMap('pendingTxFeeToHash');
|
|
@@ -47,16 +51,13 @@ import { getPendingTxPriority } from './priority.js';
|
|
|
47
51
|
this.#pendingTxHashToHeaderHash = store.openMap('pendingTxHashToHeaderHash');
|
|
48
52
|
this.#pendingTxSize = store.openSingleton('pendingTxSize');
|
|
49
53
|
this.#pendingTxCount = store.openSingleton('pendingTxCount');
|
|
50
|
-
this.#maxTxPoolSize = config.maxTxPoolSize;
|
|
51
54
|
this.#pendingTxs = new Map();
|
|
52
55
|
this.#nonEvictableTxs = new Set();
|
|
53
56
|
this.#archivedTxs = archive.openMap('archivedTxs');
|
|
54
57
|
this.#archivedTxIndices = archive.openMap('archivedTxIndices');
|
|
55
|
-
this.#archivedTxLimit = config.archivedTxLimit ?? 0;
|
|
56
58
|
this.#store = store;
|
|
57
59
|
this.#archive = archive;
|
|
58
60
|
this.#worldStateSynchronizer = worldStateSynchronizer;
|
|
59
|
-
this.#log = log;
|
|
60
61
|
this.#metrics = new PoolInstrumentation(telemetry, PoolName.TX_POOL, ()=>store.estimateSize());
|
|
61
62
|
}
|
|
62
63
|
async isEmpty() {
|
|
@@ -287,9 +288,30 @@ import { getPendingTxPriority } from './priority.js';
|
|
|
287
288
|
const vals = await toArray(this.#txs.keysAsync());
|
|
288
289
|
return vals.map((x)=>TxHash.fromString(x));
|
|
289
290
|
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
291
|
+
updateConfig({ maxTxPoolSize, txPoolOverflowFactor, archivedTxLimit }) {
|
|
292
|
+
if (typeof maxTxPoolSize === 'number') {
|
|
293
|
+
assert(maxTxPoolSize >= 0, 'maxTxPoolSize must be greater or equal to 0');
|
|
294
|
+
this.#maxTxPoolSize = maxTxPoolSize;
|
|
295
|
+
if (maxTxPoolSize === 0) {
|
|
296
|
+
this.#log.info(`Disabling maximum tx mempool size. Tx eviction stopped`);
|
|
297
|
+
} else {
|
|
298
|
+
this.#log.info(`Setting maximum tx mempool size`, {
|
|
299
|
+
maxTxPoolSize
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
if (typeof txPoolOverflowFactor === 'number') {
|
|
304
|
+
assert(txPoolOverflowFactor >= 1, 'txPoolOveflowFactor must be greater or equal to 1');
|
|
305
|
+
this.txPoolOverflowFactor = txPoolOverflowFactor;
|
|
306
|
+
this.#log.info(`Allowing tx pool size to grow above limit`, {
|
|
307
|
+
maxTxPoolSize,
|
|
308
|
+
txPoolOverflowFactor
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
if (typeof archivedTxLimit === 'number') {
|
|
312
|
+
assert(archivedTxLimit >= 0, 'archivedTxLimit must be greater or equal to 0');
|
|
313
|
+
this.#archivedTxLimit = archivedTxLimit;
|
|
314
|
+
}
|
|
293
315
|
}
|
|
294
316
|
markTxsAsNonEvictable(txHashes) {
|
|
295
317
|
txHashes.forEach((txHash)=>this.#nonEvictableTxs.add(txHash.toString()));
|
|
@@ -372,7 +394,7 @@ import { getPendingTxPriority } from './priority.js';
|
|
|
372
394
|
* @param newTxHashes - The tx hashes of the new txs added to the pool.
|
|
373
395
|
* @returns The total number of txs evicted from the pool and the number of new txs that were evicted.
|
|
374
396
|
*/ async evictLowPriorityTxs(newTxHashes) {
|
|
375
|
-
if (this.#maxTxPoolSize === undefined) {
|
|
397
|
+
if (this.#maxTxPoolSize === undefined || this.#maxTxPoolSize === 0) {
|
|
376
398
|
return {
|
|
377
399
|
numLowPriorityTxsEvicted: 0,
|
|
378
400
|
numNewTxsEvicted: 0
|
|
@@ -381,14 +403,17 @@ import { getPendingTxPriority } from './priority.js';
|
|
|
381
403
|
let numNewTxsEvicted = 0;
|
|
382
404
|
const txsToEvict = [];
|
|
383
405
|
let pendingTxsSize = await this.#pendingTxSize.getAsync() ?? 0;
|
|
384
|
-
if (pendingTxsSize > this.#maxTxPoolSize) {
|
|
406
|
+
if (pendingTxsSize > this.#maxTxPoolSize * this.txPoolOverflowFactor) {
|
|
385
407
|
for await (const txHash of this.#pendingTxPriorityToHash.valuesAsync()){
|
|
386
408
|
if (this.#nonEvictableTxs.has(txHash.toString())) {
|
|
387
409
|
continue;
|
|
388
410
|
}
|
|
389
|
-
this.#log.verbose(`Evicting tx ${txHash} from pool due to low priority to satisfy max tx size limit`);
|
|
390
|
-
txsToEvict.push(TxHash.fromString(txHash));
|
|
391
411
|
const txSize = await this.#pendingTxHashToSize.getAsync(txHash.toString()) ?? (await this.getPendingTxByHash(txHash))?.getSize();
|
|
412
|
+
this.#log.verbose(`Evicting tx ${txHash} from pool due to low priority to satisfy max tx size limit`, {
|
|
413
|
+
txHash,
|
|
414
|
+
txSize
|
|
415
|
+
});
|
|
416
|
+
txsToEvict.push(TxHash.fromString(txHash));
|
|
392
417
|
if (txSize) {
|
|
393
418
|
pendingTxsSize -= txSize;
|
|
394
419
|
if (pendingTxsSize <= this.#maxTxPoolSize) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
2
2
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
3
|
-
import type { TxPool } from './tx_pool.js';
|
|
3
|
+
import type { TxPool, TxPoolOptions } from './tx_pool.js';
|
|
4
4
|
/**
|
|
5
5
|
* In-memory implementation of the Transaction Pool.
|
|
6
6
|
*/
|
|
@@ -56,7 +56,7 @@ export declare class InMemoryTxPool implements TxPool {
|
|
|
56
56
|
* @returns An array of transaction hashes found in the tx pool.
|
|
57
57
|
*/
|
|
58
58
|
getAllTxHashes(): Promise<TxHash[]>;
|
|
59
|
-
|
|
59
|
+
updateConfig(_config: TxPoolOptions): void;
|
|
60
60
|
markTxsAsNonEvictable(_: TxHash[]): Promise<void>;
|
|
61
61
|
}
|
|
62
62
|
//# sourceMappingURL=memory_tx_pool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory_tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/memory_tx_pool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAInF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"memory_tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/memory_tx_pool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAInF,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE1D;;GAEG;AACH,qBAAa,cAAe,YAAW,MAAM;IAgBzC,OAAO,CAAC,GAAG;IAfb;;OAEG;IACH,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,UAAU,CAAc;IAEhC,OAAO,CAAC,OAAO,CAA0B;IAEzC;;;OAGG;gBAED,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAA8B;IAQpC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAI3B,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWnE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B/C,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQ7C,gBAAgB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAM/C,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIpC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAW5E;;;;OAIG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAK3D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;IAG7D,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAIvC,mBAAmB,IAAI,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAIrD;;;;OAIG;IACU,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB7C;;;;OAIG;IACI,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnD;;;OAGG;IACI,SAAS,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;IAIjC;;;OAGG;IACI,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI1C,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAE1C,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAGlD"}
|
|
@@ -150,9 +150,7 @@ import { getPendingTxPriority } from './priority.js';
|
|
|
150
150
|
*/ getAllTxHashes() {
|
|
151
151
|
return Promise.resolve(Array.from(this.txs.keys()).map((x)=>TxHash.fromBigInt(x)));
|
|
152
152
|
}
|
|
153
|
-
|
|
154
|
-
return Promise.resolve();
|
|
155
|
-
}
|
|
153
|
+
updateConfig(_config) {}
|
|
156
154
|
markTxsAsNonEvictable(_) {
|
|
157
155
|
return Promise.resolve();
|
|
158
156
|
}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import type { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
2
|
+
export type TxPoolOptions = {
|
|
3
|
+
maxTxPoolSize?: number;
|
|
4
|
+
txPoolOverflowFactor?: number;
|
|
5
|
+
archivedTxLimit?: number;
|
|
6
|
+
};
|
|
2
7
|
/**
|
|
3
8
|
* Interface of a transaction pool. The pool includes tx requests and is kept up-to-date by a P2P client.
|
|
4
9
|
*/
|
|
@@ -80,7 +85,7 @@ export interface TxPool {
|
|
|
80
85
|
* Configure the maximum size of the tx pool
|
|
81
86
|
* @param maxSizeBytes - The maximum size in bytes of the mempool. Set to undefined to disable it
|
|
82
87
|
*/
|
|
83
|
-
|
|
88
|
+
updateConfig(config: TxPoolOptions): void;
|
|
84
89
|
/** Returns whether the pool is empty. */
|
|
85
90
|
isEmpty(): Promise<boolean>;
|
|
86
91
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/tx_pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;IAErD;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAE9D;;;;OAIG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAE/C;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;IAE7D;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE;;;;OAIG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtD;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3B;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEpC;;;OAGG;IACH,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAExC,qDAAqD;IACrD,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAErC;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAEjE;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAEtE;;;OAGG;IACH,
|
|
1
|
+
{"version":3,"file":"tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/tx_pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;IAErD;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAE9D;;;;OAIG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAE/C;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;IAE7D;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE;;;;OAIG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtD;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3B;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEpC;;;OAGG;IACH,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAExC,qDAAqD;IACrD,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAErC;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAEjE;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAEtE;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAE1C,yCAAyC;IACzC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5B;;;OAGG;IACH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class MessageSeenValidator {
|
|
2
|
+
private queueLength;
|
|
3
|
+
private queue;
|
|
4
|
+
private writePointer;
|
|
5
|
+
private seenMessages;
|
|
6
|
+
constructor(queueLength: number);
|
|
7
|
+
addMessage(msgId: string): boolean;
|
|
8
|
+
size(): number;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=msg_seen_validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"msg_seen_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/msg_seen_validator/msg_seen_validator.ts"],"names":[],"mappings":"AACA,qBAAa,oBAAoB;IAKnB,OAAO,CAAC,WAAW;IAJ/B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAA0B;gBAE1B,WAAW,EAAE,MAAM;IAQhC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAkBlC,IAAI;CAGZ"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Implements a queue of message IDs
|
|
2
|
+
export class MessageSeenValidator {
|
|
3
|
+
queueLength;
|
|
4
|
+
queue;
|
|
5
|
+
writePointer;
|
|
6
|
+
seenMessages;
|
|
7
|
+
constructor(queueLength){
|
|
8
|
+
this.queueLength = queueLength;
|
|
9
|
+
this.writePointer = 0;
|
|
10
|
+
this.seenMessages = new Set();
|
|
11
|
+
if (this.queueLength <= 0) {
|
|
12
|
+
throw new Error('Queue length must be greater than 0');
|
|
13
|
+
}
|
|
14
|
+
this.queue = new Array(this.queueLength);
|
|
15
|
+
}
|
|
16
|
+
// Adds a message if not seen before. Returns true if added, false if already seen.
|
|
17
|
+
addMessage(msgId) {
|
|
18
|
+
// Check if the message is already in the cache
|
|
19
|
+
if (this.seenMessages.has(msgId)) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
// If we are at the cache limit, remove the oldest msg ID
|
|
23
|
+
if (this.seenMessages.size >= this.queueLength) {
|
|
24
|
+
const msgToRemove = this.queue[this.writePointer];
|
|
25
|
+
this.seenMessages.delete(msgToRemove);
|
|
26
|
+
}
|
|
27
|
+
// Insert the message into the cache and the queue
|
|
28
|
+
this.seenMessages.add(msgId);
|
|
29
|
+
this.queue[this.writePointer] = msgId;
|
|
30
|
+
this.writePointer = this.writePointer === this.queueLength - 1 ? 0 : this.writePointer + 1;
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
size() {
|
|
34
|
+
return this.seenMessages.size;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -35,7 +35,7 @@ export declare class DummyP2PService implements P2PService {
|
|
|
35
35
|
/**
|
|
36
36
|
* Register a callback into the validator client for when a block proposal is received
|
|
37
37
|
*/
|
|
38
|
-
registerBlockReceivedCallback(
|
|
38
|
+
registerBlockReceivedCallback(_callback: (block: BlockProposal, sender: PeerId) => Promise<BlockAttestation>): void;
|
|
39
39
|
/**
|
|
40
40
|
* Sends a request to a peer.
|
|
41
41
|
* @param _protocol - The protocol to send the request on.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dummy_service.d.ts","sourceRoot":"","sources":["../../src/services/dummy_service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE9F;;GAEG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAChD,wCAAwC;IACxC,QAAQ,IAAI,QAAQ,EAAE;IAItB;;;OAGG;IACI,KAAK;IAIZ;;;OAGG;IACI,IAAI;IAIX;;;OAGG;IACI,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,EAAE,CAAC;IAI3C;;;OAGG;IACI,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE;IAE7B;;OAEG;IACI,6BAA6B,
|
|
1
|
+
{"version":3,"file":"dummy_service.d.ts","sourceRoot":"","sources":["../../src/services/dummy_service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE9F;;GAEG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAChD,wCAAwC;IACxC,QAAQ,IAAI,QAAQ,EAAE;IAItB;;;OAGG;IACI,KAAK;IAIZ;;;OAGG;IACI,IAAI;IAIX;;;OAGG;IACI,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,EAAE,CAAC;IAI3C;;;OAGG;IACI,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE;IAE7B;;OAEG;IACI,6BAA6B,CAClC,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC;IAGhF;;;;;OAKG;IACI,WAAW,CAAC,QAAQ,SAAS,kBAAkB,EACpD,SAAS,EAAE,QAAQ,EACnB,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,GAC1D,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IAI1E;;;;;OAKG;IACI,gBAAgB,CAAC,QAAQ,SAAS,kBAAkB,EACzD,SAAS,EAAE,QAAQ,EACnB,SAAS,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAC7D,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;IAIhE;;;OAGG;IACI,MAAM,IAAI,SAAS;IAI1B,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAGpC;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,YAAa,YAAW,oBAAoB;IACzF,OAAO,CAAC,YAAY,CAA8B;IAC3C,iBAAiB,EAAE,GAAG,EAAE,CAAM;IAErC;;;OAGG;IACI,KAAK;IAIZ;;;OAGG;IACI,IAAI;IAIX;;;OAGG;IACI,YAAY;IAIZ,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAInC,SAAS,IAAI,kBAAkB;IAI/B,MAAM,IAAI,SAAS;CAG3B"}
|
|
@@ -30,7 +30,7 @@ import { PeerDiscoveryState } from './service.js';
|
|
|
30
30
|
*/ settledTxs(_) {}
|
|
31
31
|
/**
|
|
32
32
|
* Register a callback into the validator client for when a block proposal is received
|
|
33
|
-
*/ registerBlockReceivedCallback(
|
|
33
|
+
*/ registerBlockReceivedCallback(_callback) {}
|
|
34
34
|
/**
|
|
35
35
|
* Sends a request to a peer.
|
|
36
36
|
* @param _protocol - The protocol to send the request on.
|
package/dest/services/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC"}
|
package/dest/services/index.js
CHANGED