@aztec/p2p 0.0.1-commit.29c6b1a3 → 0.0.1-commit.2e2504e2

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 (218) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -3
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +4 -4
  4. package/dest/client/factory.d.ts +1 -1
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +8 -5
  7. package/dest/client/p2p_client.d.ts +4 -2
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +15 -4
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +1 -1
  11. package/dest/config.d.ts +8 -2
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +3 -1
  14. package/dest/mem_pools/instrumentation.d.ts +1 -1
  15. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  16. package/dest/mem_pools/instrumentation.js +2 -2
  17. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  18. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  19. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  20. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  21. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  22. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  23. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  24. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  25. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +119 -0
  26. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  27. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  28. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +90 -0
  29. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  30. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  31. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +89 -0
  32. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  33. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  34. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
  35. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +131 -0
  36. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  37. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +17 -0
  38. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  39. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  40. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +63 -0
  41. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  42. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  43. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +91 -0
  44. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  45. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  46. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +70 -0
  47. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  48. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  49. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +63 -0
  50. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  51. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  52. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  53. package/dest/mem_pools/tx_pool_v2/index.d.ts +5 -0
  54. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  55. package/dest/mem_pools/tx_pool_v2/index.js +4 -0
  56. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +193 -0
  57. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  58. package/dest/mem_pools/tx_pool_v2/interfaces.js +6 -0
  59. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +71 -0
  60. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  61. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +94 -0
  62. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  63. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  64. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  65. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +55 -0
  66. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  67. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +150 -0
  68. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +69 -0
  69. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  70. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +1041 -0
  71. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +1 -1
  72. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  73. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +7 -2
  74. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  75. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  76. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  77. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
  78. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  79. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
  80. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  81. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  82. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  83. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -2
  84. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  85. package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
  86. package/dest/msg_validators/tx_validator/factory.d.ts +4 -3
  87. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  88. package/dest/msg_validators/tx_validator/factory.js +12 -12
  89. package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
  90. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  91. package/dest/msg_validators/tx_validator/gas_validator.js +3 -2
  92. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  93. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  94. package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
  95. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  96. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  97. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  98. package/dest/msg_validators/tx_validator/size_validator.d.ts +3 -1
  99. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -1
  100. package/dest/msg_validators/tx_validator/size_validator.js +4 -1
  101. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
  102. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  103. package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
  104. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  105. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  106. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  107. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  108. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  109. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  110. package/dest/services/data_store.d.ts +1 -1
  111. package/dest/services/data_store.d.ts.map +1 -1
  112. package/dest/services/data_store.js +10 -6
  113. package/dest/services/discv5/discV5_service.js +1 -1
  114. package/dest/services/index.d.ts +2 -1
  115. package/dest/services/index.d.ts.map +1 -1
  116. package/dest/services/index.js +1 -0
  117. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  118. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  119. package/dest/services/libp2p/instrumentation.js +14 -3
  120. package/dest/services/libp2p/libp2p_service.d.ts +1 -1
  121. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  122. package/dest/services/libp2p/libp2p_service.js +10 -10
  123. package/dest/services/peer-manager/metrics.d.ts +2 -2
  124. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  125. package/dest/services/peer-manager/metrics.js +20 -5
  126. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  127. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  128. package/dest/services/peer-manager/peer_scoring.js +8 -2
  129. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +2 -2
  130. package/dest/services/reqresp/metrics.d.ts +6 -5
  131. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  132. package/dest/services/reqresp/metrics.js +17 -5
  133. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +2 -2
  134. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +6 -6
  135. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  136. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +14 -14
  137. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  138. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  139. package/dest/services/tx_collection/instrumentation.js +9 -2
  140. package/dest/services/tx_file_store/config.d.ts +18 -0
  141. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  142. package/dest/services/tx_file_store/config.js +26 -0
  143. package/dest/services/tx_file_store/index.d.ts +4 -0
  144. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  145. package/dest/services/tx_file_store/index.js +3 -0
  146. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  147. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  148. package/dest/services/tx_file_store/instrumentation.js +29 -0
  149. package/dest/services/tx_file_store/tx_file_store.d.ts +47 -0
  150. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  151. package/dest/services/tx_file_store/tx_file_store.js +149 -0
  152. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  153. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  154. package/dest/services/tx_provider_instrumentation.js +5 -5
  155. package/dest/test-helpers/testbench-utils.d.ts +3 -1
  156. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  157. package/dest/test-helpers/testbench-utils.js +2 -1
  158. package/dest/testbench/p2p_client_testbench_worker.js +1 -1
  159. package/package.json +14 -14
  160. package/src/bootstrap/bootstrap.ts +7 -4
  161. package/src/client/factory.ts +9 -9
  162. package/src/client/p2p_client.ts +14 -2
  163. package/src/client/test/tx_proposal_collector/README.md +4 -4
  164. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +1 -1
  165. package/src/config.ts +8 -1
  166. package/src/mem_pools/instrumentation.ts +2 -1
  167. package/src/mem_pools/tx_pool_v2/README.md +188 -0
  168. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  169. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  170. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +147 -0
  171. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +118 -0
  172. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +111 -0
  173. package/src/mem_pools/tx_pool_v2/eviction/index.ts +23 -0
  174. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +164 -0
  175. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  176. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  177. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +86 -0
  178. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +72 -0
  179. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +31 -0
  180. package/src/mem_pools/tx_pool_v2/index.ts +11 -0
  181. package/src/mem_pools/tx_pool_v2/interfaces.ts +225 -0
  182. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +160 -0
  183. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  184. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +209 -0
  185. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1265 -0
  186. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +8 -2
  187. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  188. package/src/msg_validators/tx_validator/block_header_validator.ts +7 -8
  189. package/src/msg_validators/tx_validator/data_validator.ts +6 -2
  190. package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
  191. package/src/msg_validators/tx_validator/factory.ts +46 -30
  192. package/src/msg_validators/tx_validator/gas_validator.ts +9 -3
  193. package/src/msg_validators/tx_validator/metadata_validator.ts +6 -3
  194. package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
  195. package/src/msg_validators/tx_validator/size_validator.ts +6 -2
  196. package/src/msg_validators/tx_validator/timestamp_validator.ts +6 -3
  197. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  198. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  199. package/src/services/data_store.ts +10 -7
  200. package/src/services/discv5/discV5_service.ts +1 -1
  201. package/src/services/index.ts +1 -0
  202. package/src/services/libp2p/instrumentation.ts +15 -2
  203. package/src/services/libp2p/libp2p_service.ts +20 -16
  204. package/src/services/peer-manager/metrics.ts +21 -4
  205. package/src/services/peer-manager/peer_scoring.ts +4 -1
  206. package/src/services/reqresp/batch-tx-requester/README.md +7 -7
  207. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +2 -2
  208. package/src/services/reqresp/metrics.ts +34 -9
  209. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +2 -2
  210. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +10 -10
  211. package/src/services/tx_collection/instrumentation.ts +11 -2
  212. package/src/services/tx_file_store/config.ts +43 -0
  213. package/src/services/tx_file_store/index.ts +3 -0
  214. package/src/services/tx_file_store/instrumentation.ts +36 -0
  215. package/src/services/tx_file_store/tx_file_store.ts +173 -0
  216. package/src/services/tx_provider_instrumentation.ts +11 -5
  217. package/src/test-helpers/testbench-utils.ts +2 -0
  218. package/src/testbench/p2p_client_testbench_worker.ts +1 -1
@@ -0,0 +1,71 @@
1
+ import type { L2BlockId } from '@aztec/stdlib/block';
2
+ import type { Tx } from '@aztec/stdlib/tx';
3
+ import type { PreAddResult } from './eviction/interfaces.js';
4
+ /**
5
+ * Lightweight in-memory representation of a transaction.
6
+ * Stored for every tx in the pool to enable efficient queries and challenges
7
+ * without deserializing full transaction data.
8
+ *
9
+ * Uses strings for txHash and nullifiers to enable fast Map/Set lookups
10
+ * without repeated .toString() conversions.
11
+ */
12
+ export type TxMetaData = {
13
+ /** The transaction hash as hex string */
14
+ readonly txHash: string;
15
+ /** Block ID (number and hash) in which the transaction was mined (undefined if not mined) */
16
+ minedL2BlockId?: L2BlockId;
17
+ /** Hash of the block header the transaction uses as its anchor (hex string) */
18
+ readonly anchorBlockHeaderHash: string;
19
+ /** The total priority fee (used for ordering and challenges) */
20
+ readonly priorityFee: bigint;
21
+ /** The fee payer address as hex string */
22
+ readonly feePayer: string;
23
+ /** The claim amount for the fee payer */
24
+ readonly claimAmount: bigint;
25
+ /** The fee limit */
26
+ readonly feeLimit: bigint;
27
+ /** Non-empty nullifiers emitted by the transaction (hex strings) */
28
+ readonly nullifiers: readonly string[];
29
+ /** Timestamp by which the transaction must be included (for expiration checks) */
30
+ readonly includeByTimestamp: bigint;
31
+ };
32
+ /** Transaction state derived from TxMetaData fields and pool protection status */
33
+ export type TxState = 'pending' | 'protected' | 'mined';
34
+ /**
35
+ * Builds TxMetaData from a full Tx object.
36
+ * Extracts all relevant fields for efficient in-memory storage and querying.
37
+ */
38
+ export declare function buildTxMetaData(tx: Tx): Promise<TxMetaData>;
39
+ /** Minimal fields required for priority comparison. */
40
+ type PriorityComparable = Pick<TxMetaData, 'txHash' | 'priorityFee'>;
41
+ /**
42
+ * Compares two priority fees in ascending order.
43
+ * Returns negative if a < b, positive if a > b, 0 if equal.
44
+ */
45
+ export declare function compareFee(a: bigint, b: bigint): number;
46
+ /**
47
+ * Compares two tx hashes in ascending order.
48
+ * Uses field element comparison for deterministic ordering.
49
+ * Returns negative if a < b, positive if a > b, 0 if equal.
50
+ */
51
+ export declare function compareTxHash(a: string, b: string): number;
52
+ /**
53
+ * Compares two transactions by priority fee, with txHash as tiebreaker.
54
+ * Returns negative if a < b, positive if a > b, 0 if equal.
55
+ * Use with sort() for ascending order, or negate/reverse for descending.
56
+ */
57
+ export declare function comparePriority(a: PriorityComparable, b: PriorityComparable): number;
58
+ /**
59
+ * Checks for nullifier conflicts between an incoming transaction and existing pool state.
60
+ *
61
+ * When the incoming tx shares nullifiers with existing pending txs:
62
+ * - If the incoming tx has strictly higher priority, mark conflicting txs for eviction
63
+ * - If any conflicting tx has equal or higher priority, ignore the incoming tx
64
+ *
65
+ * @param incomingMeta - Metadata for the incoming transaction
66
+ * @param getTxHashByNullifier - Accessor to find which tx uses a nullifier
67
+ * @param getMetadata - Accessor to get metadata for a tx hash
68
+ */
69
+ export declare function checkNullifierConflict(incomingMeta: TxMetaData, getTxHashByNullifier: (nullifier: string) => string | undefined, getMetadata: (txHash: string) => TxMetaData | undefined): PreAddResult;
70
+ export {};
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfbWV0YWRhdGEuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZW1fcG9vbHMvdHhfcG9vbF92Mi90eF9tZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUkzQyxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU3RDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxNQUFNLFVBQVUsR0FBRztJQUN2Qix5Q0FBeUM7SUFDekMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFFeEIsNkZBQTZGO0lBQzdGLGNBQWMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztJQUUzQiwrRUFBK0U7SUFDL0UsUUFBUSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQztJQUV2QyxnRUFBZ0U7SUFDaEUsUUFBUSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUM7SUFFN0IsMENBQTBDO0lBQzFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO0lBRTFCLHlDQUF5QztJQUN6QyxRQUFRLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQztJQUU3QixvQkFBb0I7SUFDcEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFFMUIsb0VBQW9FO0lBQ3BFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxNQUFNLEVBQUUsQ0FBQztJQUV2QyxrRkFBa0Y7SUFDbEYsUUFBUSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQztDQUNyQyxDQUFDO0FBRUYsa0ZBQWtGO0FBQ2xGLE1BQU0sTUFBTSxPQUFPLEdBQUcsU0FBUyxHQUFHLFdBQVcsR0FBRyxPQUFPLENBQUM7QUFFeEQ7OztHQUdHO0FBQ0gsd0JBQXNCLGVBQWUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FvQmpFO0FBRUQsdURBQXVEO0FBQ3ZELEtBQUssa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUM7QUFFckU7OztHQUdHO0FBQ0gsd0JBQWdCLFVBQVUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUV2RDtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBZ0IsYUFBYSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxNQUFNLENBSTFEO0FBRUQ7Ozs7R0FJRztBQUNILHdCQUFnQixlQUFlLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLENBQUMsRUFBRSxrQkFBa0IsR0FBRyxNQUFNLENBTXBGO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILHdCQUFnQixzQkFBc0IsQ0FDcEMsWUFBWSxFQUFFLFVBQVUsRUFDeEIsb0JBQW9CLEVBQUUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxLQUFLLE1BQU0sR0FBRyxTQUFTLEVBQy9ELFdBQVcsRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLEtBQUssVUFBVSxHQUFHLFNBQVMsR0FDdEQsWUFBWSxDQWtDZCJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx_metadata.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool_v2/tx_metadata.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAI3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,6FAA6F;IAC7F,cAAc,CAAC,EAAE,SAAS,CAAC;IAE3B,+EAA+E;IAC/E,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IAEvC,gEAAgE;IAChE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,oBAAoB;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAEvC,kFAAkF;IAClF,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC,CAAC;AAEF,kFAAkF;AAClF,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAExD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAoBjE;AAED,uDAAuD;AACvD,KAAK,kBAAkB,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,aAAa,CAAC,CAAC;AAErE;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAMpF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,UAAU,EACxB,oBAAoB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EAC/D,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,GACtD,YAAY,CAkCd"}
@@ -0,0 +1,94 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { ProtocolContractAddress } from '@aztec/protocol-contracts';
3
+ import { getFeePayerBalanceDelta } from '../../msg_validators/tx_validator/fee_payer_balance.js';
4
+ import { getTxPriorityFee } from '../tx_pool/priority.js';
5
+ /**
6
+ * Builds TxMetaData from a full Tx object.
7
+ * Extracts all relevant fields for efficient in-memory storage and querying.
8
+ */ export async function buildTxMetaData(tx) {
9
+ const txHash = tx.getTxHash().toString();
10
+ const anchorBlockHeaderHash = (await tx.data.constants.anchorBlockHeader.hash()).toString();
11
+ const priorityFee = getTxPriorityFee(tx);
12
+ const feePayer = tx.data.feePayer.toString();
13
+ const nullifiers = tx.data.getNonEmptyNullifiers().map((n)=>n.toString());
14
+ const includeByTimestamp = tx.data.includeByTimestamp;
15
+ const { feeLimit, claimAmount } = await getFeePayerBalanceDelta(tx, ProtocolContractAddress.FeeJuice);
16
+ return {
17
+ txHash,
18
+ anchorBlockHeaderHash,
19
+ priorityFee,
20
+ feePayer,
21
+ claimAmount,
22
+ feeLimit,
23
+ nullifiers,
24
+ includeByTimestamp
25
+ };
26
+ }
27
+ /**
28
+ * Compares two priority fees in ascending order.
29
+ * Returns negative if a < b, positive if a > b, 0 if equal.
30
+ */ export function compareFee(a, b) {
31
+ return a < b ? -1 : a > b ? 1 : 0;
32
+ }
33
+ /**
34
+ * Compares two tx hashes in ascending order.
35
+ * Uses field element comparison for deterministic ordering.
36
+ * Returns negative if a < b, positive if a > b, 0 if equal.
37
+ */ export function compareTxHash(a, b) {
38
+ const fieldA = Fr.fromHexString(a);
39
+ const fieldB = Fr.fromHexString(b);
40
+ return fieldA.cmp(fieldB);
41
+ }
42
+ /**
43
+ * Compares two transactions by priority fee, with txHash as tiebreaker.
44
+ * Returns negative if a < b, positive if a > b, 0 if equal.
45
+ * Use with sort() for ascending order, or negate/reverse for descending.
46
+ */ export function comparePriority(a, b) {
47
+ const feeComparison = compareFee(a.priorityFee, b.priorityFee);
48
+ if (feeComparison !== 0) {
49
+ return feeComparison;
50
+ }
51
+ return compareTxHash(a.txHash, b.txHash);
52
+ }
53
+ /**
54
+ * Checks for nullifier conflicts between an incoming transaction and existing pool state.
55
+ *
56
+ * When the incoming tx shares nullifiers with existing pending txs:
57
+ * - If the incoming tx has strictly higher priority, mark conflicting txs for eviction
58
+ * - If any conflicting tx has equal or higher priority, ignore the incoming tx
59
+ *
60
+ * @param incomingMeta - Metadata for the incoming transaction
61
+ * @param getTxHashByNullifier - Accessor to find which tx uses a nullifier
62
+ * @param getMetadata - Accessor to get metadata for a tx hash
63
+ */ export function checkNullifierConflict(incomingMeta, getTxHashByNullifier, getMetadata) {
64
+ const txHashesToEvict = [];
65
+ for (const nullifier of incomingMeta.nullifiers){
66
+ const conflictingHashStr = getTxHashByNullifier(nullifier);
67
+ if (!conflictingHashStr || conflictingHashStr === incomingMeta.txHash) {
68
+ continue;
69
+ }
70
+ // Skip if already marked for eviction
71
+ if (txHashesToEvict.includes(conflictingHashStr)) {
72
+ continue;
73
+ }
74
+ const conflictingMeta = getMetadata(conflictingHashStr);
75
+ if (!conflictingMeta) {
76
+ continue;
77
+ }
78
+ // If incoming tx has strictly higher priority, mark for eviction
79
+ // Otherwise, ignore incoming tx (ties go to existing tx)
80
+ if (incomingMeta.priorityFee > conflictingMeta.priorityFee) {
81
+ txHashesToEvict.push(conflictingHashStr);
82
+ } else {
83
+ return {
84
+ shouldIgnore: true,
85
+ txHashesToEvict: [],
86
+ reason: `nullifier conflict with ${conflictingHashStr}`
87
+ };
88
+ }
89
+ }
90
+ return {
91
+ shouldIgnore: false,
92
+ txHashesToEvict
93
+ };
94
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Metrics types for tx pool benchmarks.
3
+ */
4
+ export declare enum TxPoolOperation {
5
+ ADD_PENDING_TXS = "addPendingTxs",
6
+ CAN_ADD_PENDING_TX = "canAddPendingTx",
7
+ GET_PENDING_TX_HASHES = "getPendingTxHashes",
8
+ GET_TX_BY_HASH = "getTxByHash",
9
+ GET_TXS_BY_HASH = "getTxsByHash",
10
+ HAS_TXS = "hasTxs",
11
+ HANDLE_MINED_BLOCK = "handleMinedBlock",
12
+ PREPARE_FOR_SLOT = "prepareForSlot",
13
+ HANDLE_PRUNED_BLOCKS = "handlePrunedBlocks",
14
+ GET_LOWEST_PRIORITY_PENDING = "getLowestPriorityPending",
15
+ HYDRATE_FROM_DATABASE = "hydrateFromDatabase"
16
+ }
17
+ /**
18
+ * Collects and formats tx pool benchmark metrics.
19
+ */
20
+ export declare class TxPoolBenchMetrics {
21
+ private metrics;
22
+ addMetric(operation: TxPoolOperation, poolSize: number, batchSize: number, value: number): void;
23
+ toPrettyString(): string;
24
+ toGithubActionBenchmarkJSON(indent?: number): string;
25
+ }
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcG9vbF9iZW5jaF9tZXRyaWNzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWVtX3Bvb2xzL3R4X3Bvb2xfdjIvdHhfcG9vbF9iZW5jaF9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsb0JBQVksZUFBZTtJQUN6QixlQUFlLGtCQUFrQjtJQUNqQyxrQkFBa0Isb0JBQW9CO0lBQ3RDLHFCQUFxQix1QkFBdUI7SUFDNUMsY0FBYyxnQkFBZ0I7SUFDOUIsZUFBZSxpQkFBaUI7SUFDaEMsT0FBTyxXQUFXO0lBQ2xCLGtCQUFrQixxQkFBcUI7SUFDdkMsZ0JBQWdCLG1CQUFtQjtJQUNuQyxvQkFBb0IsdUJBQXVCO0lBQzNDLDJCQUEyQiw2QkFBNkI7SUFDeEQscUJBQXFCLHdCQUF3QjtDQUM5QztBQVNEOztHQUVHO0FBQ0gscUJBQWEsa0JBQWtCO0lBQzdCLE9BQU8sQ0FBQyxPQUFPLENBQXlCO0lBRWpDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUU5RjtJQUVNLGNBQWMsSUFBSSxNQUFNLENBd0I5QjtJQUVNLDJCQUEyQixDQUFDLE1BQU0sU0FBSSxHQUFHLE1BQU0sQ0FjckQ7Q0FDRiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx_pool_bench_metrics.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oBAAY,eAAe;IACzB,eAAe,kBAAkB;IACjC,kBAAkB,oBAAoB;IACtC,qBAAqB,uBAAuB;IAC5C,cAAc,gBAAgB;IAC9B,eAAe,iBAAiB;IAChC,OAAO,WAAW;IAClB,kBAAkB,qBAAqB;IACvC,gBAAgB,mBAAmB;IACnC,oBAAoB,uBAAuB;IAC3C,2BAA2B,6BAA6B;IACxD,qBAAqB,wBAAwB;CAC9C;AASD;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAyB;IAEjC,SAAS,CAAC,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAE9F;IAEM,cAAc,IAAI,MAAM,CAwB9B;IAEM,2BAA2B,CAAC,MAAM,SAAI,GAAG,MAAM,CAcrD;CACF"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Metrics types for tx pool benchmarks.
3
+ */ export var TxPoolOperation = /*#__PURE__*/ function(TxPoolOperation) {
4
+ TxPoolOperation["ADD_PENDING_TXS"] = "addPendingTxs";
5
+ TxPoolOperation["CAN_ADD_PENDING_TX"] = "canAddPendingTx";
6
+ TxPoolOperation["GET_PENDING_TX_HASHES"] = "getPendingTxHashes";
7
+ TxPoolOperation["GET_TX_BY_HASH"] = "getTxByHash";
8
+ TxPoolOperation["GET_TXS_BY_HASH"] = "getTxsByHash";
9
+ TxPoolOperation["HAS_TXS"] = "hasTxs";
10
+ TxPoolOperation["HANDLE_MINED_BLOCK"] = "handleMinedBlock";
11
+ TxPoolOperation["PREPARE_FOR_SLOT"] = "prepareForSlot";
12
+ TxPoolOperation["HANDLE_PRUNED_BLOCKS"] = "handlePrunedBlocks";
13
+ TxPoolOperation["GET_LOWEST_PRIORITY_PENDING"] = "getLowestPriorityPending";
14
+ TxPoolOperation["HYDRATE_FROM_DATABASE"] = "hydrateFromDatabase";
15
+ return TxPoolOperation;
16
+ }({});
17
+ /**
18
+ * Collects and formats tx pool benchmark metrics.
19
+ */ export class TxPoolBenchMetrics {
20
+ metrics = [];
21
+ addMetric(operation, poolSize, batchSize, value) {
22
+ this.metrics.push({
23
+ operation,
24
+ poolSize,
25
+ batchSize,
26
+ value
27
+ });
28
+ }
29
+ toPrettyString() {
30
+ let pretty = 'TxPool Benchmark Metrics:\n';
31
+ pretty += '='.repeat(60) + '\n';
32
+ // Group by operation
33
+ const byOperation = new Map();
34
+ for (const metric of this.metrics){
35
+ if (!byOperation.has(metric.operation)) {
36
+ byOperation.set(metric.operation, []);
37
+ }
38
+ byOperation.get(metric.operation).push(metric);
39
+ }
40
+ for (const [operation, opMetrics] of byOperation){
41
+ pretty += `\n${operation}:\n`;
42
+ for (const metric of opMetrics){
43
+ const poolSizeStr = metric.poolSize > 0 ? `pool=${metric.poolSize}` : '';
44
+ const batchSizeStr = metric.batchSize > 0 ? `batch=${metric.batchSize}` : '';
45
+ const params = [
46
+ poolSizeStr,
47
+ batchSizeStr
48
+ ].filter(Boolean).join(', ');
49
+ pretty += ` ${params ? `(${params})` : ''}: ${metric.value.toFixed(3)} ms\n`;
50
+ }
51
+ }
52
+ return pretty;
53
+ }
54
+ toGithubActionBenchmarkJSON(indent = 2) {
55
+ const data = this.metrics.map((metric)=>{
56
+ const poolSizeStr = metric.poolSize > 0 ? `${metric.poolSize} txs in pool` : '';
57
+ const batchSizeStr = metric.batchSize > 0 ? `batch of ${metric.batchSize}` : '';
58
+ const params = [
59
+ poolSizeStr,
60
+ batchSizeStr
61
+ ].filter(Boolean).join('/');
62
+ return {
63
+ name: `TxPool/${metric.operation}${params ? `/${params}` : ''}`,
64
+ value: metric.value,
65
+ unit: 'ms'
66
+ };
67
+ });
68
+ return JSON.stringify(data, null, indent);
69
+ }
70
+ }
@@ -0,0 +1,55 @@
1
+ import { SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { type Logger } from '@aztec/foundation/log';
3
+ import type { TypedEventEmitter } from '@aztec/foundation/types';
4
+ import type { AztecAsyncKVStore } from '@aztec/kv-store';
5
+ import type { L2Block, L2BlockId } from '@aztec/stdlib/block';
6
+ import { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
7
+ import { type TelemetryClient } from '@aztec/telemetry-client';
8
+ import type { AddTxsResult, TxPoolV2, TxPoolV2Config, TxPoolV2Dependencies, TxPoolV2Events } from './interfaces.js';
9
+ import type { TxState } from './tx_metadata.js';
10
+ declare const AztecKVTxPoolV2_base: new () => TypedEventEmitter<TxPoolV2Events>;
11
+ /**
12
+ * Implementation of TxPoolV2 with explicit state management.
13
+ *
14
+ * This class is a thin wrapper that manages the serial queue and delegates
15
+ * all operations to TxPoolV2Impl.
16
+ */
17
+ export declare class AztecKVTxPoolV2 extends AztecKVTxPoolV2_base implements TxPoolV2 {
18
+ #private;
19
+ constructor(store: AztecAsyncKVStore, archiveStore: AztecAsyncKVStore, deps: TxPoolV2Dependencies, telemetry?: TelemetryClient, config?: Partial<TxPoolV2Config>, log?: Logger);
20
+ addPendingTxs(txs: Tx[], opts?: {
21
+ source?: string;
22
+ }): Promise<AddTxsResult>;
23
+ canAddPendingTx(tx: Tx): Promise<'accepted' | 'ignored' | 'rejected'>;
24
+ addProtectedTxs(txs: Tx[], block: BlockHeader, opts?: {
25
+ source?: string;
26
+ }): Promise<void>;
27
+ protectTxs(txHashes: TxHash[], block: BlockHeader): Promise<TxHash[]>;
28
+ addMinedTxs(txs: Tx[], block: BlockHeader, opts?: {
29
+ source?: string;
30
+ }): Promise<void>;
31
+ handleMinedBlock(block: L2Block): Promise<void>;
32
+ prepareForSlot(slotNumber: SlotNumber): Promise<void>;
33
+ handlePrunedBlocks(latestBlock: L2BlockId): Promise<void>;
34
+ handleFailedExecution(txHashes: TxHash[]): Promise<void>;
35
+ handleFinalizedBlock(block: BlockHeader): Promise<void>;
36
+ getTxByHash(txHash: TxHash): Promise<Tx | undefined>;
37
+ getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
38
+ hasTxs(txHashes: TxHash[]): Promise<boolean[]>;
39
+ getTxStatus(txHash: TxHash): Promise<TxState | 'deleted' | undefined>;
40
+ getPendingTxHashes(): Promise<TxHash[]>;
41
+ getPendingTxCount(): Promise<number>;
42
+ getMinedTxHashes(): Promise<[TxHash, L2BlockId][]>;
43
+ getMinedTxCount(): Promise<number>;
44
+ isEmpty(): Promise<boolean>;
45
+ getArchivedTxByHash(txHash: TxHash): Promise<Tx | undefined>;
46
+ getLowestPriorityPending(limit: number): Promise<TxHash[]>;
47
+ updateConfig(config: Partial<TxPoolV2Config>): Promise<void>;
48
+ /**
49
+ * Starts the pool and initializes state from persistence.
50
+ */
51
+ start(): Promise<void>;
52
+ stop(): Promise<void>;
53
+ }
54
+ export {};
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcG9vbF92Mi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21lbV9wb29scy90eF9wb29sX3YyL3R4X3Bvb2xfdjIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUtuRixPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwSCxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFHaEQ7Ozs7O0dBS0c7QUFDSCxxQkFBYSxlQUFnQixTQUFRLG9CQUE4RCxZQUFXLFFBQVE7O0lBU3BILFlBQ0UsS0FBSyxFQUFFLGlCQUFpQixFQUN4QixZQUFZLEVBQUUsaUJBQWlCLEVBQy9CLElBQUksRUFBRSxvQkFBb0IsRUFDMUIsU0FBUyxHQUFFLGVBQXNDLEVBQ2pELE1BQU0sR0FBRSxPQUFPLENBQUMsY0FBYyxDQUFNLEVBQ3BDLEdBQUcsU0FBaUMsRUFzQnJDO0lBUUQsYUFBYSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEdBQUU7UUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBTyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FFOUU7SUFFRCxlQUFlLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FFcEU7SUFFRCxlQUFlLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxHQUFFO1FBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBRTVGO0lBRUQsVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUVwRTtJQUVELFdBQVcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEdBQUU7UUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFeEY7SUFJRCxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFOUM7SUFFRCxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBRXBEO0lBRUQsa0JBQWtCLENBQUMsV0FBVyxFQUFFLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBRXhEO0lBRUQscUJBQXFCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFdkQ7SUFFRCxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFdEQ7SUFJRCxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUVuRDtJQUVELFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FFNUQ7SUFFRCxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUU3QztJQUVELFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUVwRTtJQUVELGtCQUFrQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUV0QztJQUVELGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFbkM7SUFFRCxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUVqRDtJQUVELGVBQWUsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRWpDO0lBRUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FFMUI7SUFFRCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBRTNEO0lBRUQsd0JBQXdCLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FFekQ7SUFJRCxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSzNEO0lBSUQ7O09BRUc7SUFDRyxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQStCM0I7SUFFSyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUsxQjtDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx_pool_v2.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool_v2/tx_pool_v2.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ import { createLogger } from '@aztec/foundation/log';
2
+ import { SerialQueue } from '@aztec/foundation/queue';
3
+ import { getTelemetryClient } from '@aztec/telemetry-client';
4
+ import EventEmitter from 'node:events';
5
+ import { PoolInstrumentation, PoolName } from '../instrumentation.js';
6
+ import { TxPoolV2Impl } from './tx_pool_v2_impl.js';
7
+ /**
8
+ * Implementation of TxPoolV2 with explicit state management.
9
+ *
10
+ * This class is a thin wrapper that manages the serial queue and delegates
11
+ * all operations to TxPoolV2Impl.
12
+ */ export class AztecKVTxPoolV2 extends EventEmitter {
13
+ #queue;
14
+ #impl;
15
+ #metrics;
16
+ #store;
17
+ #telemetry;
18
+ #log;
19
+ #started = false;
20
+ constructor(store, archiveStore, deps, telemetry = getTelemetryClient(), config = {}, log = createLogger('p2p:tx_pool_v2')){
21
+ super();
22
+ this.#store = store;
23
+ this.#telemetry = telemetry;
24
+ this.#log = log;
25
+ this.#queue = new SerialQueue();
26
+ // Create callbacks that the impl uses to notify us about events and metrics
27
+ const callbacks = {
28
+ onTxsAdded: (txs, opts)=>{
29
+ this.#metrics?.transactionsAdded(txs);
30
+ this.emit('txs-added', {
31
+ txs,
32
+ ...opts
33
+ });
34
+ },
35
+ onTxsRemoved: (txHashes)=>{
36
+ this.#metrics?.transactionsRemoved(txHashes);
37
+ }
38
+ };
39
+ // Create the implementation
40
+ this.#impl = new TxPoolV2Impl(store, archiveStore, deps, callbacks, config, log);
41
+ }
42
+ // ============================================================================
43
+ // PUBLIC API - All methods queue to the implementation
44
+ // ============================================================================
45
+ // === Core Operations ===
46
+ addPendingTxs(txs, opts = {}) {
47
+ return this.#queue.put(()=>this.#impl.addPendingTxs(txs, opts));
48
+ }
49
+ canAddPendingTx(tx) {
50
+ return this.#queue.put(()=>this.#impl.canAddPendingTx(tx));
51
+ }
52
+ addProtectedTxs(txs, block, opts = {}) {
53
+ return this.#queue.put(()=>this.#impl.addProtectedTxs(txs, block, opts));
54
+ }
55
+ protectTxs(txHashes, block) {
56
+ return this.#queue.put(()=>Promise.resolve(this.#impl.protectTxs(txHashes, block)));
57
+ }
58
+ addMinedTxs(txs, block, opts = {}) {
59
+ return this.#queue.put(()=>this.#impl.addMinedTxs(txs, block, opts));
60
+ }
61
+ // === State Transition Handlers ===
62
+ handleMinedBlock(block) {
63
+ return this.#queue.put(()=>this.#impl.handleMinedBlock(block));
64
+ }
65
+ prepareForSlot(slotNumber) {
66
+ return this.#queue.put(()=>this.#impl.prepareForSlot(slotNumber));
67
+ }
68
+ handlePrunedBlocks(latestBlock) {
69
+ return this.#queue.put(()=>this.#impl.handlePrunedBlocks(latestBlock));
70
+ }
71
+ handleFailedExecution(txHashes) {
72
+ return this.#queue.put(()=>this.#impl.handleFailedExecution(txHashes));
73
+ }
74
+ handleFinalizedBlock(block) {
75
+ return this.#queue.put(()=>this.#impl.handleFinalizedBlock(block));
76
+ }
77
+ // === Queries ===
78
+ getTxByHash(txHash) {
79
+ return this.#queue.put(()=>this.#impl.getTxByHash(txHash));
80
+ }
81
+ getTxsByHash(txHashes) {
82
+ return this.#queue.put(()=>this.#impl.getTxsByHash(txHashes));
83
+ }
84
+ hasTxs(txHashes) {
85
+ return this.#queue.put(()=>this.#impl.hasTxs(txHashes));
86
+ }
87
+ getTxStatus(txHash) {
88
+ return this.#queue.put(()=>Promise.resolve(this.#impl.getTxStatus(txHash)));
89
+ }
90
+ getPendingTxHashes() {
91
+ return this.#queue.put(()=>Promise.resolve(this.#impl.getPendingTxHashes()));
92
+ }
93
+ getPendingTxCount() {
94
+ return this.#queue.put(()=>Promise.resolve(this.#impl.getPendingTxCount()));
95
+ }
96
+ getMinedTxHashes() {
97
+ return this.#queue.put(()=>Promise.resolve(this.#impl.getMinedTxHashes()));
98
+ }
99
+ getMinedTxCount() {
100
+ return this.#queue.put(()=>Promise.resolve(this.#impl.getMinedTxCount()));
101
+ }
102
+ isEmpty() {
103
+ return this.#queue.put(()=>Promise.resolve(this.#impl.isEmpty()));
104
+ }
105
+ getArchivedTxByHash(txHash) {
106
+ return this.#queue.put(()=>this.#impl.getArchivedTxByHash(txHash));
107
+ }
108
+ getLowestPriorityPending(limit) {
109
+ return this.#queue.put(()=>Promise.resolve(this.#impl.getLowestPriorityPending(limit)));
110
+ }
111
+ // === Configuration ===
112
+ updateConfig(config) {
113
+ return this.#queue.put(()=>{
114
+ this.#impl.updateConfig(config);
115
+ return Promise.resolve();
116
+ });
117
+ }
118
+ // === Lifecycle ===
119
+ /**
120
+ * Starts the pool and initializes state from persistence.
121
+ */ async start() {
122
+ if (this.#started) {
123
+ return;
124
+ }
125
+ this.#log.info('Starting transaction pool...');
126
+ // Start the serial queue
127
+ this.#queue.start();
128
+ this.#started = true;
129
+ // Setup metrics - created after queue is started so callbacks can safely queue
130
+ this.#metrics = new PoolInstrumentation(this.#telemetry, PoolName.TX_POOL, ()=>this.#queue.put(()=>{
131
+ const counts = this.#impl.countTxs();
132
+ return Promise.resolve({
133
+ itemCount: {
134
+ pending: counts.pending,
135
+ protected: counts.protected,
136
+ mined: counts.mined
137
+ }
138
+ });
139
+ }), ()=>this.#store.estimateSize());
140
+ // Hydrate state from persistence (runs in queue)
141
+ await this.#queue.put(()=>this.#impl.hydrateFromDatabase());
142
+ this.#log.info(`Transaction pool started with ${this.#impl.getTxCount()} transactions (${this.#impl.getPendingTxCount()} pending, ${this.#impl.getMinedTxCount()} mined)`);
143
+ }
144
+ async stop() {
145
+ if (this.#started) {
146
+ await this.#queue.end();
147
+ this.#started = false;
148
+ }
149
+ }
150
+ }
@@ -0,0 +1,69 @@
1
+ import { SlotNumber } from '@aztec/foundation/branded-types';
2
+ import type { Logger } from '@aztec/foundation/log';
3
+ import type { AztecAsyncKVStore } from '@aztec/kv-store';
4
+ import type { L2Block, L2BlockId } from '@aztec/stdlib/block';
5
+ import { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
6
+ import { type AddTxsResult, type PoolReadAccess, type TxPoolV2Config, type TxPoolV2Dependencies } from './interfaces.js';
7
+ import { type TxState } from './tx_metadata.js';
8
+ /**
9
+ * Callbacks for the implementation to notify the outer class about events and metrics.
10
+ */
11
+ export interface TxPoolV2Callbacks {
12
+ onTxsAdded: (txs: Tx[], opts: {
13
+ source?: string;
14
+ }) => void;
15
+ onTxsRemoved: (txHashes: string[] | bigint[]) => void;
16
+ }
17
+ /**
18
+ * Implementation of TxPoolV2 logic.
19
+ *
20
+ * This class contains all the actual transaction pool logic.
21
+ */
22
+ export declare class TxPoolV2Impl {
23
+ #private;
24
+ constructor(store: AztecAsyncKVStore, archiveStore: AztecAsyncKVStore, deps: TxPoolV2Dependencies, callbacks: TxPoolV2Callbacks, config: Partial<TxPoolV2Config> | undefined, log: Logger);
25
+ /**
26
+ * Hydrates the in-memory state from the database on startup.
27
+ * Pipeline: Load → Check Mined Status → Partition → Validate Non-Mined → Rebuild Pending Pool → Delete Invalid
28
+ *
29
+ * Note: Protected status is lost on restart. All non-mined txs are rebuilt as pending
30
+ * by running pre-add rules to resolve nullifier conflicts, balance checks, and pool size limits.
31
+ */
32
+ hydrateFromDatabase(): Promise<void>;
33
+ addPendingTxs(txs: Tx[], opts: {
34
+ source?: string;
35
+ }): Promise<AddTxsResult>;
36
+ canAddPendingTx(tx: Tx): Promise<'accepted' | 'ignored' | 'rejected'>;
37
+ addProtectedTxs(txs: Tx[], block: BlockHeader, opts: {
38
+ source?: string;
39
+ }): Promise<void>;
40
+ protectTxs(txHashes: TxHash[], block: BlockHeader): TxHash[];
41
+ addMinedTxs(txs: Tx[], block: BlockHeader, opts: {
42
+ source?: string;
43
+ }): Promise<void>;
44
+ handleMinedBlock(block: L2Block): Promise<void>;
45
+ prepareForSlot(slotNumber: SlotNumber): Promise<void>;
46
+ handlePrunedBlocks(latestBlock: L2BlockId): Promise<void>;
47
+ handleFailedExecution(txHashes: TxHash[]): Promise<void>;
48
+ handleFinalizedBlock(block: BlockHeader): Promise<void>;
49
+ getTxByHash(txHash: TxHash): Promise<Tx | undefined>;
50
+ getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
51
+ hasTxs(txHashes: TxHash[]): boolean[];
52
+ getTxStatus(txHash: TxHash): TxState | undefined;
53
+ getPendingTxHashes(): TxHash[];
54
+ getPendingTxCount(): number;
55
+ getMinedTxHashes(): [TxHash, L2BlockId][];
56
+ getMinedTxCount(): number;
57
+ isEmpty(): boolean;
58
+ getTxCount(): number;
59
+ getArchivedTxByHash(txHash: TxHash): Promise<Tx | undefined>;
60
+ getLowestPriorityPending(limit: number): TxHash[];
61
+ updateConfig(config: Partial<TxPoolV2Config>): void;
62
+ getPoolReadAccess(): PoolReadAccess;
63
+ countTxs(): {
64
+ pending: number;
65
+ protected: number;
66
+ mined: number;
67
+ };
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcG9vbF92Ml9pbXBsLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWVtX3Bvb2xzL3R4X3Bvb2xfdjIvdHhfcG9vbF92Ml9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUl4RSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFpQixNQUFNLHFCQUFxQixDQUFDO0FBRzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBb0IsTUFBTSxrQkFBa0IsQ0FBQztBQWU3RSxPQUFPLEVBQ0wsS0FBSyxZQUFZLEVBRWpCLEtBQUssY0FBYyxFQUNuQixLQUFLLGNBQWMsRUFDbkIsS0FBSyxvQkFBb0IsRUFDMUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBRUwsS0FBSyxPQUFPLEVBS2IsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQjs7R0FFRztBQUNILE1BQU0sV0FBVyxpQkFBaUI7SUFDaEMsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRTtRQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEtBQUssSUFBSSxDQUFDO0lBQzNELFlBQVksRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsS0FBSyxJQUFJLENBQUM7Q0FDdkQ7QUFFRDs7OztHQUlHO0FBQ0gscUJBQWEsWUFBWTs7SUFnQ3ZCLFlBQ0UsS0FBSyxFQUFFLGlCQUFpQixFQUN4QixZQUFZLEVBQUUsaUJBQWlCLEVBQy9CLElBQUksRUFBRSxvQkFBb0IsRUFDMUIsU0FBUyxFQUFFLGlC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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx_pool_v2_impl.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts"],"names":[],"mappings":"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"}