@aztec/p2p 0.0.1-commit.e0f15ab9b → 0.0.1-commit.e304674f1

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.
Files changed (158) hide show
  1. package/dest/client/factory.d.ts +1 -1
  2. package/dest/client/factory.d.ts.map +1 -1
  3. package/dest/client/factory.js +5 -4
  4. package/dest/client/interface.d.ts +9 -2
  5. package/dest/client/interface.d.ts.map +1 -1
  6. package/dest/client/p2p_client.d.ts +3 -2
  7. package/dest/client/p2p_client.d.ts.map +1 -1
  8. package/dest/client/p2p_client.js +21 -8
  9. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +14 -3
  10. package/dest/errors/p2p-service.error.d.ts +9 -0
  11. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  12. package/dest/errors/p2p-service.error.js +10 -0
  13. package/dest/index.d.ts +1 -2
  14. package/dest/index.d.ts.map +1 -1
  15. package/dest/index.js +0 -1
  16. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +1 -1
  17. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  18. package/dest/mem_pools/attestation_pool/attestation_pool.js +3 -2
  19. package/dest/mem_pools/index.d.ts +1 -2
  20. package/dest/mem_pools/index.d.ts.map +1 -1
  21. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +1 -1
  22. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  23. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +5 -1
  24. package/dest/msg_validators/tx_validator/gas_validator.d.ts +1 -1
  25. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  26. package/dest/msg_validators/tx_validator/gas_validator.js +11 -9
  27. package/dest/services/dummy_service.d.ts +5 -3
  28. package/dest/services/dummy_service.d.ts.map +1 -1
  29. package/dest/services/dummy_service.js +5 -1
  30. package/dest/services/libp2p/libp2p_service.d.ts +12 -17
  31. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  32. package/dest/services/libp2p/libp2p_service.js +25 -59
  33. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  34. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  35. package/dest/services/peer-manager/peer_manager.js +18 -6
  36. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  37. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  38. package/dest/services/peer-manager/peer_scoring.js +32 -10
  39. package/dest/services/reqresp/interface.d.ts +1 -9
  40. package/dest/services/reqresp/interface.d.ts.map +1 -1
  41. package/dest/services/reqresp/interface.js +0 -11
  42. package/dest/services/reqresp/metrics.d.ts +1 -1
  43. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  44. package/dest/services/reqresp/metrics.js +0 -1
  45. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  46. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  47. package/dest/services/reqresp/protocols/index.js +0 -1
  48. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  49. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  50. package/dest/services/reqresp/protocols/tx.js +1 -3
  51. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  52. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  53. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  54. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  55. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  56. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  57. package/dest/services/reqresp/reqresp.js +1 -1
  58. package/dest/services/service.d.ts +5 -2
  59. package/dest/services/service.d.ts.map +1 -1
  60. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  61. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  62. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  63. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  64. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  65. package/dest/services/tx_collection/tx_source.js +9 -7
  66. package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
  67. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  68. package/dest/test-helpers/reqresp-nodes.js +0 -2
  69. package/dest/test-helpers/testbench-utils.d.ts +1 -1
  70. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  71. package/dest/test-helpers/testbench-utils.js +1 -0
  72. package/dest/testbench/p2p_client_testbench_worker.js +63 -12
  73. package/dest/testbench/worker_client_manager.d.ts +8 -1
  74. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  75. package/dest/testbench/worker_client_manager.js +49 -1
  76. package/package.json +14 -14
  77. package/src/client/factory.ts +7 -2
  78. package/src/client/interface.ts +9 -1
  79. package/src/client/p2p_client.ts +23 -8
  80. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +15 -3
  81. package/src/errors/p2p-service.error.ts +11 -0
  82. package/src/index.ts +0 -1
  83. package/src/mem_pools/attestation_pool/attestation_pool.ts +4 -2
  84. package/src/mem_pools/index.ts +0 -3
  85. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +7 -1
  86. package/src/msg_validators/proposal_validator/README.md +1 -1
  87. package/src/msg_validators/tx_validator/gas_validator.ts +25 -9
  88. package/src/services/dummy_service.ts +7 -2
  89. package/src/services/libp2p/libp2p_service.ts +30 -62
  90. package/src/services/peer-manager/peer_manager.ts +21 -6
  91. package/src/services/peer-manager/peer_scoring.ts +27 -5
  92. package/src/services/reqresp/interface.ts +0 -11
  93. package/src/services/reqresp/metrics.ts +0 -1
  94. package/src/services/reqresp/protocols/index.ts +0 -1
  95. package/src/services/reqresp/protocols/tx.ts +1 -3
  96. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  97. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  98. package/src/services/reqresp/reqresp.ts +1 -1
  99. package/src/services/service.ts +6 -1
  100. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  101. package/src/services/tx_collection/tx_source.ts +8 -7
  102. package/src/test-helpers/reqresp-nodes.ts +0 -2
  103. package/src/test-helpers/testbench-utils.ts +1 -0
  104. package/src/testbench/p2p_client_testbench_worker.ts +67 -9
  105. package/src/testbench/worker_client_manager.ts +55 -1
  106. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  107. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  108. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  109. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  110. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  111. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  112. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  113. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  114. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  115. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  116. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  117. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -123
  118. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  119. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  120. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  121. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  122. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  123. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  124. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  125. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  126. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  127. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  128. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  129. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  130. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  131. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  132. package/dest/mem_pools/tx_pool/index.js +0 -2
  133. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  134. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  135. package/dest/mem_pools/tx_pool/priority.js +0 -15
  136. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  137. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  138. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  139. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  140. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  141. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -402
  142. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  143. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  144. package/dest/services/reqresp/protocols/block.js +0 -32
  145. package/src/mem_pools/tx_pool/README.md +0 -270
  146. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  147. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  148. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  149. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -163
  150. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  151. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  152. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  153. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  154. package/src/mem_pools/tx_pool/index.ts +0 -2
  155. package/src/mem_pools/tx_pool/priority.ts +0 -20
  156. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  157. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -321
  158. package/src/services/reqresp/protocols/block.ts +0 -37
@@ -1,402 +0,0 @@
1
- import { BlockNumber } from '@aztec/foundation/branded-types';
2
- import { unfreeze } from '@aztec/foundation/types';
3
- import { GasFees } from '@aztec/stdlib/gas';
4
- import { mockTx } from '@aztec/stdlib/testing';
5
- import { BlockHeader, GlobalVariables } from '@aztec/stdlib/tx';
6
- /**
7
- * Tests a TxPool implementation.
8
- * @param getTxPool - Gets a fresh TxPool
9
- */ export function describeTxPool(getTxPool) {
10
- let pool;
11
- const minedBlockHeader = BlockHeader.empty({
12
- globalVariables: GlobalVariables.empty({
13
- blockNumber: BlockNumber(1),
14
- timestamp: 0n
15
- })
16
- });
17
- beforeEach(()=>{
18
- pool = getTxPool();
19
- });
20
- afterEach(()=>{
21
- pool.removeAllListeners('txs-added');
22
- });
23
- it('adds txs to the pool as pending', async ()=>{
24
- const tx1 = await mockTx(1);
25
- await pool.addTxs([
26
- tx1
27
- ]);
28
- const poolTx = await pool.getTxByHash(tx1.getTxHash());
29
- expect(poolTx.getTxHash()).toEqual(tx1.getTxHash());
30
- await expect(pool.getTxStatus(tx1.getTxHash())).resolves.toEqual('pending');
31
- await expect(pool.getPendingTxHashes()).resolves.toEqual([
32
- tx1.getTxHash()
33
- ]);
34
- await expect(pool.getPendingTxCount()).resolves.toEqual(1);
35
- });
36
- it('emits txs-added event with new txs', async ()=>{
37
- const tx1 = await mockTx(1); // existing and pending
38
- const tx2 = await mockTx(2); // mined but not known
39
- const tx3 = await mockTx(3); // brand new
40
- await pool.addTxs([
41
- tx1
42
- ]);
43
- await pool.markAsMined([
44
- tx2.getTxHash()
45
- ], minedBlockHeader);
46
- let txsFromEvent = undefined;
47
- pool.once('txs-added', ({ txs })=>{
48
- txsFromEvent = txs;
49
- });
50
- await pool.addTxs([
51
- tx1,
52
- tx2,
53
- tx3
54
- ]);
55
- expect(txsFromEvent).toBeDefined();
56
- expect(txsFromEvent).toHaveLength(2);
57
- const eventHashes = txsFromEvent.map((tx)=>tx.getTxHash());
58
- expect(eventHashes).toEqual(expect.arrayContaining([
59
- tx2.getTxHash(),
60
- tx3.getTxHash()
61
- ]));
62
- });
63
- it('removes txs from the pool', async ()=>{
64
- const pendingTx = await mockTx(1);
65
- const minedTx = await mockTx(2);
66
- await pool.addTxs([
67
- pendingTx,
68
- minedTx
69
- ]);
70
- await pool.markAsMined([
71
- minedTx.getTxHash()
72
- ], minedBlockHeader);
73
- // Delete a pending tx - should be permanently deleted
74
- await pool.deleteTxs([
75
- pendingTx.getTxHash()
76
- ]);
77
- await expect(pool.getTxByHash(pendingTx.getTxHash())).resolves.toBeUndefined();
78
- await expect(pool.getTxStatus(pendingTx.getTxHash())).resolves.toBeUndefined();
79
- // Delete a mined tx - should be soft-deleted (still in storage)
80
- await pool.deleteTxs([
81
- minedTx.getTxHash()
82
- ]);
83
- await expect(pool.getTxByHash(minedTx.getTxHash())).resolves.toBeDefined();
84
- await expect(pool.getTxStatus(minedTx.getTxHash())).resolves.toEqual('deleted');
85
- await expect(pool.getMinedTxHashes()).resolves.toEqual([]);
86
- await expect(pool.getPendingTxCount()).resolves.toEqual(0);
87
- });
88
- it('marks txs as mined', async ()=>{
89
- const tx1 = await mockTx(1);
90
- const tx2 = await mockTx(2);
91
- await pool.addTxs([
92
- tx1,
93
- tx2
94
- ]);
95
- await pool.markAsMined([
96
- tx1.getTxHash()
97
- ], minedBlockHeader);
98
- const retrievedTx = await pool.getTxByHash(tx1.getTxHash());
99
- expect(retrievedTx?.getTxHash()).toEqual(tx1.getTxHash());
100
- await expect(pool.getTxStatus(tx1.getTxHash())).resolves.toEqual('mined');
101
- await expect(pool.getMinedTxHashes()).resolves.toEqual([
102
- [
103
- tx1.getTxHash(),
104
- 1
105
- ]
106
- ]);
107
- await expect(pool.getPendingTxHashes()).resolves.toEqual([
108
- tx2.getTxHash()
109
- ]);
110
- await expect(pool.getPendingTxCount()).resolves.toEqual(1);
111
- });
112
- it('marks txs as pending after being mined', async ()=>{
113
- const tx1 = await mockTx(1);
114
- const tx2 = await mockTx(2);
115
- await pool.addTxs([
116
- tx1,
117
- tx2
118
- ]);
119
- await pool.markAsMined([
120
- tx1.getTxHash()
121
- ], minedBlockHeader);
122
- await pool.markMinedAsPending([
123
- tx1.getTxHash()
124
- ], BlockNumber(1));
125
- await expect(pool.getMinedTxHashes()).resolves.toEqual([]);
126
- const pending = await pool.getPendingTxHashes();
127
- expect(pending).toHaveLength(2);
128
- expect(pending).toEqual(expect.arrayContaining([
129
- tx1.getTxHash(),
130
- tx2.getTxHash()
131
- ]));
132
- await expect(pool.getPendingTxCount()).resolves.toEqual(2);
133
- });
134
- it('only marks txs as pending if they are known', async ()=>{
135
- const tx1 = await mockTx(1);
136
- // simulate a situation where not all peers have all the txs
137
- const tx2 = await mockTx(2);
138
- const someTxHashThatThisPeerDidNotSee = tx2.getTxHash();
139
- await pool.addTxs([
140
- tx1
141
- ]);
142
- // this peer knows that tx2 was mined, but it does not have the tx object
143
- await pool.markAsMined([
144
- tx1.getTxHash(),
145
- someTxHashThatThisPeerDidNotSee
146
- ], minedBlockHeader);
147
- expect(await pool.getMinedTxHashes()).toEqual(expect.arrayContaining([
148
- [
149
- tx1.getTxHash(),
150
- 1
151
- ],
152
- [
153
- someTxHashThatThisPeerDidNotSee,
154
- 1
155
- ]
156
- ]));
157
- // reorg: both txs should now become available again
158
- await pool.markMinedAsPending([
159
- tx1.getTxHash(),
160
- someTxHashThatThisPeerDidNotSee
161
- ], BlockNumber(1));
162
- await expect(pool.getMinedTxHashes()).resolves.toEqual([]);
163
- await expect(pool.getPendingTxHashes()).resolves.toEqual([
164
- tx1.getTxHash()
165
- ]); // tx2 is not in the pool
166
- await expect(pool.getPendingTxCount()).resolves.toEqual(1);
167
- });
168
- it('returns all transactions in the pool', async ()=>{
169
- const tx1 = await mockTx(1);
170
- const tx2 = await mockTx(2);
171
- const tx3 = await mockTx(3);
172
- await pool.addTxs([
173
- tx1,
174
- tx2,
175
- tx3
176
- ]);
177
- const poolTxs = await pool.getAllTxs();
178
- expect(poolTxs).toHaveLength(3);
179
- const poolHashes = poolTxs.map((tx)=>tx.getTxHash());
180
- expect(poolHashes).toEqual(expect.arrayContaining([
181
- tx1.getTxHash(),
182
- tx2.getTxHash(),
183
- tx3.getTxHash()
184
- ]));
185
- await expect(pool.getPendingTxCount()).resolves.toEqual(3);
186
- });
187
- it('returns all txHashes in the pool', async ()=>{
188
- const tx1 = await mockTx(1);
189
- const tx2 = await mockTx(2);
190
- const tx3 = await mockTx(3);
191
- await pool.addTxs([
192
- tx1,
193
- tx2,
194
- tx3
195
- ]);
196
- const poolTxHashes = await pool.getAllTxHashes();
197
- const expectedHashes = [
198
- tx1,
199
- tx2,
200
- tx3
201
- ].map((tx)=>tx.getTxHash());
202
- expect(poolTxHashes).toHaveLength(3);
203
- expect(poolTxHashes).toEqual(expect.arrayContaining(expectedHashes));
204
- await expect(pool.getPendingTxCount()).resolves.toEqual(3);
205
- });
206
- it('returns txs by their hash', async ()=>{
207
- const tx1 = await mockTx(1);
208
- const tx2 = await mockTx(2);
209
- const tx3 = await mockTx(3);
210
- await pool.addTxs([
211
- tx1,
212
- tx2,
213
- tx3
214
- ]);
215
- const requestedTxs = await pool.getTxsByHash([
216
- tx1.getTxHash(),
217
- tx3.getTxHash()
218
- ]);
219
- expect(requestedTxs).toHaveLength(2);
220
- const requestedHashes = requestedTxs.map((tx)=>tx.getTxHash());
221
- expect(requestedHashes).toEqual(expect.arrayContaining([
222
- tx1.getTxHash(),
223
- tx3.getTxHash()
224
- ]));
225
- });
226
- it('returns a large number of transactions by their hash', async ()=>{
227
- const numTxs = 1_000;
228
- const txs = await Promise.all(Array.from({
229
- length: numTxs
230
- }, (_, i)=>mockTx(i)));
231
- const hashes = txs.map((tx)=>tx.getTxHash());
232
- await pool.addTxs(txs);
233
- const requestedTxs = await pool.getTxsByHash(hashes);
234
- expect(requestedTxs).toHaveLength(numTxs);
235
- const requestedHashes = requestedTxs.map((tx)=>tx.getTxHash());
236
- expect(requestedHashes).toEqual(expect.arrayContaining(hashes));
237
- });
238
- it('returns whether or not txs exist', async ()=>{
239
- const tx1 = await mockTx(1);
240
- const tx2 = await mockTx(2);
241
- const tx3 = await mockTx(3);
242
- await pool.addTxs([
243
- tx1,
244
- tx2,
245
- tx3
246
- ]);
247
- const tx4 = await mockTx(4);
248
- const tx5 = await mockTx(5);
249
- const availability = await pool.hasTxs([
250
- tx1.getTxHash(),
251
- tx2.getTxHash(),
252
- tx3.getTxHash(),
253
- tx4.getTxHash(),
254
- tx5.getTxHash()
255
- ]);
256
- expect(availability).toHaveLength(5);
257
- expect(availability).toEqual(expect.arrayContaining([
258
- true,
259
- true,
260
- true,
261
- false,
262
- false
263
- ]));
264
- });
265
- it('returns pending tx hashes sorted by priority', async ()=>{
266
- const withPriorityFee = (tx, fee)=>{
267
- const gs = unfreeze(tx.data.constants.txContext.gasSettings);
268
- gs.maxPriorityFeesPerGas = new GasFees(fee, fee);
269
- gs.maxFeesPerGas = new GasFees(fee, fee);
270
- return tx;
271
- };
272
- const tx1 = withPriorityFee(await mockTx(0), 1000);
273
- const tx2 = withPriorityFee(await mockTx(1), 100);
274
- const tx3 = withPriorityFee(await mockTx(2), 200);
275
- const tx4 = withPriorityFee(await mockTx(3), 3000);
276
- await pool.addTxs([
277
- tx1,
278
- tx2,
279
- tx3,
280
- tx4
281
- ]);
282
- const poolTxHashes = await pool.getPendingTxHashes();
283
- expect(poolTxHashes).toHaveLength(4);
284
- expect(poolTxHashes).toEqual([
285
- tx4,
286
- tx1,
287
- tx3,
288
- tx2
289
- ].map((tx)=>tx.getTxHash()));
290
- });
291
- describe('soft-delete', ()=>{
292
- it('soft-deletes mined txs and keeps them in storage', async ()=>{
293
- const txs = await Promise.all([
294
- mockTx(1),
295
- mockTx(2),
296
- mockTx(3)
297
- ]);
298
- await pool.addTxs(txs);
299
- // Mark first tx as mined
300
- await pool.markAsMined([
301
- txs[0].getTxHash()
302
- ], minedBlockHeader);
303
- // Verify initial state
304
- await expect(pool.getPendingTxCount()).resolves.toBe(2);
305
- await expect(pool.getTxByHash(txs[0].getTxHash())).resolves.toBeDefined();
306
- await expect(pool.getTxByHash(txs[1].getTxHash())).resolves.toBeDefined();
307
- // Delete mined tx - should be soft-deleted
308
- await pool.deleteTxs([
309
- txs[0].getTxHash()
310
- ]);
311
- // Delete pending tx - should be permanently deleted
312
- await pool.deleteTxs([
313
- txs[1].getTxHash()
314
- ]);
315
- // Verify mined tx still exists in storage but has 'deleted' status
316
- await expect(pool.getTxByHash(txs[0].getTxHash())).resolves.toBeDefined();
317
- await expect(pool.getTxStatus(txs[0].getTxHash())).resolves.toEqual('deleted');
318
- // Verify pending tx is permanently deleted
319
- await expect(pool.getTxByHash(txs[1].getTxHash())).resolves.toBeUndefined();
320
- await expect(pool.getTxStatus(txs[1].getTxHash())).resolves.toBeUndefined();
321
- // Verify remaining pending count
322
- await expect(pool.getPendingTxCount()).resolves.toBe(1);
323
- // Verify pending hashes don't include deleted txs
324
- const pendingHashes = await pool.getPendingTxHashes();
325
- expect(pendingHashes).toHaveLength(1);
326
- expect(pendingHashes.map((h)=>h.toString())).toContain(txs[2].getTxHash().toString());
327
- });
328
- it('cleans up old deleted mined transactions', async ()=>{
329
- const txs = await Promise.all([
330
- mockTx(1),
331
- mockTx(2),
332
- mockTx(3)
333
- ]);
334
- await pool.addTxs(txs);
335
- // Mark first two as mined in block 1
336
- await pool.markAsMined([
337
- txs[0].getTxHash(),
338
- txs[1].getTxHash()
339
- ], minedBlockHeader);
340
- // Soft-delete mined transactions
341
- await pool.deleteTxs([
342
- txs[0].getTxHash(),
343
- txs[1].getTxHash()
344
- ]);
345
- // Clean up deleted mined txs from block 1 and earlier
346
- const deletedCount = await pool.cleanupDeletedMinedTxs(BlockNumber(1));
347
- // Verify old transactions are permanently deleted
348
- expect(deletedCount).toBe(2);
349
- await expect(pool.getTxByHash(txs[0].getTxHash())).resolves.toBeUndefined();
350
- await expect(pool.getTxByHash(txs[1].getTxHash())).resolves.toBeUndefined();
351
- await expect(pool.getTxByHash(txs[2].getTxHash())).resolves.toBeDefined();
352
- });
353
- it('does not clean up recent deleted mined transactions', async ()=>{
354
- const txs = await Promise.all([
355
- mockTx(1),
356
- mockTx(2)
357
- ]);
358
- await pool.addTxs(txs);
359
- // Mark as mined in block 2
360
- const laterBlockHeader = BlockHeader.empty({
361
- globalVariables: GlobalVariables.empty({
362
- blockNumber: BlockNumber(2),
363
- timestamp: 0n
364
- })
365
- });
366
- await pool.markAsMined([
367
- txs[0].getTxHash()
368
- ], laterBlockHeader);
369
- // Soft-delete a mined transaction
370
- await pool.deleteTxs([
371
- txs[0].getTxHash()
372
- ]);
373
- // Try to clean up with block 1 (before the mined block)
374
- const deletedCount = await pool.cleanupDeletedMinedTxs(BlockNumber(1));
375
- // Verify no transactions were cleaned up
376
- expect(deletedCount).toBe(0);
377
- await expect(pool.getTxByHash(txs[0].getTxHash())).resolves.toBeDefined();
378
- });
379
- it('restores deleted mined tx when it is mined again', async ()=>{
380
- const tx = await mockTx(1);
381
- await pool.addTxs([
382
- tx
383
- ]);
384
- // Mark as mined
385
- await pool.markAsMined([
386
- tx.getTxHash()
387
- ], minedBlockHeader);
388
- // Soft-delete it
389
- await pool.deleteTxs([
390
- tx.getTxHash()
391
- ]);
392
- await expect(pool.getTxStatus(tx.getTxHash())).resolves.toEqual('deleted');
393
- // Mark as mined again (e.g., after a reorg)
394
- await pool.markAsMined([
395
- tx.getTxHash()
396
- ], minedBlockHeader);
397
- // Should be back to mined status
398
- await expect(pool.getTxStatus(tx.getTxHash())).resolves.toEqual('mined');
399
- await expect(pool.getTxByHash(tx.getTxHash())).resolves.toBeDefined();
400
- });
401
- });
402
- }
@@ -1,9 +0,0 @@
1
- import type { L2BlockSource } from '@aztec/stdlib/block';
2
- import type { ReqRespSubProtocolHandler } from '../interface.js';
3
- /**
4
- * Handler for L2 Block requests
5
- * @param l2BlockSource - source for L2 blocks
6
- * @returns the Block request handler
7
- * */
8
- export declare function reqRespBlockHandler(l2BlockSource: L2BlockSource): ReqRespSubProtocolHandler;
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2suZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3Byb3RvY29scy9ibG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUl6RCxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR2pFOzs7O0tBSUs7QUFDTCx3QkFBZ0IsbUJBQW1CLENBQUMsYUFBYSxFQUFFLGFBQWEsR0FBRyx5QkFBeUIsQ0FzQjNGIn0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/block.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAGjE;;;;KAIK;AACL,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,aAAa,GAAG,yBAAyB,CAsB3F"}
@@ -1,32 +0,0 @@
1
- import { BlockNumber } from '@aztec/foundation/branded-types';
2
- import { Fr } from '@aztec/foundation/curves/bn254';
3
- import { ReqRespStatus, ReqRespStatusError } from '../status.js';
4
- /**
5
- * Handler for L2 Block requests
6
- * @param l2BlockSource - source for L2 blocks
7
- * @returns the Block request handler
8
- * */ export function reqRespBlockHandler(l2BlockSource) {
9
- /**
10
- * @param peerId - the peer ID of the requester
11
- * @param msg - the block request message, which is expected to contain valid block number as a Buffer
12
- * @returns a Buffer containing the requested block data, or an empty Buffer if the block is not found
13
- * @throws ReqRespStatusError if the input msg is not a valid block number
14
- * */ return async (_peerId, msg)=>{
15
- let blockNumber;
16
- try {
17
- blockNumber = Fr.fromBuffer(msg);
18
- } catch (err) {
19
- throw new ReqRespStatusError(ReqRespStatus.BADLY_FORMED_REQUEST, {
20
- cause: err
21
- });
22
- }
23
- try {
24
- const foundBlock = await l2BlockSource.getBlock(BlockNumber(Number(blockNumber)));
25
- return foundBlock ? foundBlock.toBuffer() : Buffer.alloc(0);
26
- } catch (err) {
27
- throw new ReqRespStatusError(ReqRespStatus.INTERNAL_ERROR, {
28
- cause: err
29
- });
30
- }
31
- };
32
- }