@aztec/p2p 0.0.1-commit.ef17749e1 → 0.0.1-commit.f1b29a41e

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 (226) hide show
  1. package/README.md +129 -3
  2. package/dest/client/factory.d.ts +1 -1
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +23 -10
  5. package/dest/client/interface.d.ts +9 -2
  6. package/dest/client/interface.d.ts.map +1 -1
  7. package/dest/client/p2p_client.d.ts +3 -2
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +37 -12
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +17 -6
  11. package/dest/config.d.ts +13 -1
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +20 -0
  14. package/dest/errors/p2p-service.error.d.ts +9 -0
  15. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  16. package/dest/errors/p2p-service.error.js +10 -0
  17. package/dest/index.d.ts +1 -2
  18. package/dest/index.d.ts.map +1 -1
  19. package/dest/index.js +0 -1
  20. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +4 -4
  21. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  22. package/dest/mem_pools/attestation_pool/attestation_pool.js +6 -5
  23. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +6 -6
  24. package/dest/mem_pools/index.d.ts +1 -2
  25. package/dest/mem_pools/index.d.ts.map +1 -1
  26. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  27. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  28. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -1
  29. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +7 -5
  30. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  31. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +9 -2
  32. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  33. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +12 -2
  34. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  35. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  36. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +3 -0
  37. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -1
  38. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  39. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +19 -5
  40. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +1 -1
  41. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  42. package/dest/msg_validators/attestation_validator/attestation_validator.js +5 -4
  43. package/dest/msg_validators/clock_tolerance.d.ts +1 -1
  44. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  45. package/dest/msg_validators/clock_tolerance.js +4 -3
  46. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +1 -1
  47. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  48. package/dest/msg_validators/proposal_validator/proposal_validator.js +5 -5
  49. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  50. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  51. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  52. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  53. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  54. package/dest/msg_validators/tx_validator/data_validator.js +35 -2
  55. package/dest/msg_validators/tx_validator/factory.d.ts +23 -4
  56. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  57. package/dest/msg_validators/tx_validator/factory.js +36 -10
  58. package/dest/msg_validators/tx_validator/gas_validator.d.ts +13 -4
  59. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  60. package/dest/msg_validators/tx_validator/gas_validator.js +39 -9
  61. package/dest/msg_validators/tx_validator/phases_validator.d.ts +21 -1
  62. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  63. package/dest/msg_validators/tx_validator/phases_validator.js +28 -1
  64. package/dest/services/dummy_service.d.ts +5 -3
  65. package/dest/services/dummy_service.d.ts.map +1 -1
  66. package/dest/services/dummy_service.js +5 -1
  67. package/dest/services/encoding.d.ts +5 -1
  68. package/dest/services/encoding.d.ts.map +1 -1
  69. package/dest/services/encoding.js +7 -1
  70. package/dest/services/libp2p/libp2p_service.d.ts +14 -11
  71. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  72. package/dest/services/libp2p/libp2p_service.js +136 -65
  73. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  74. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  75. package/dest/services/peer-manager/peer_manager.js +22 -8
  76. package/dest/services/peer-manager/peer_scoring.d.ts +5 -2
  77. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  78. package/dest/services/peer-manager/peer_scoring.js +28 -10
  79. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  80. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  81. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +69 -65
  82. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +3 -2
  83. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  84. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  85. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  86. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  87. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  88. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  89. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  90. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  91. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  92. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  93. package/dest/services/reqresp/reqresp.d.ts +1 -1
  94. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  95. package/dest/services/reqresp/reqresp.js +17 -9
  96. package/dest/services/service.d.ts +5 -2
  97. package/dest/services/service.d.ts.map +1 -1
  98. package/dest/services/tx_collection/fast_tx_collection.d.ts +1 -4
  99. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  100. package/dest/services/tx_collection/fast_tx_collection.js +57 -73
  101. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  102. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  103. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  104. package/dest/services/tx_collection/proposal_tx_collector.d.ts +6 -7
  105. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  106. package/dest/services/tx_collection/proposal_tx_collector.js +4 -4
  107. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  108. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  109. package/dest/services/tx_collection/request_tracker.js +84 -0
  110. package/dest/services/tx_collection/slow_tx_collection.js +1 -1
  111. package/dest/services/tx_collection/tx_collection.d.ts +3 -6
  112. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  113. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  114. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  115. package/dest/services/tx_collection/tx_source.js +9 -7
  116. package/dest/test-helpers/testbench-utils.d.ts +1 -1
  117. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  118. package/dest/test-helpers/testbench-utils.js +22 -3
  119. package/dest/testbench/p2p_client_testbench_worker.js +44 -15
  120. package/dest/testbench/worker_client_manager.d.ts +1 -1
  121. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  122. package/dest/testbench/worker_client_manager.js +0 -1
  123. package/package.json +14 -14
  124. package/src/client/factory.ts +41 -13
  125. package/src/client/interface.ts +9 -1
  126. package/src/client/p2p_client.ts +39 -14
  127. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +18 -8
  128. package/src/config.ts +33 -0
  129. package/src/errors/p2p-service.error.ts +11 -0
  130. package/src/index.ts +0 -1
  131. package/src/mem_pools/attestation_pool/attestation_pool.ts +7 -5
  132. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +6 -6
  133. package/src/mem_pools/index.ts +0 -3
  134. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  135. package/src/mem_pools/tx_pool_v2/interfaces.ts +6 -4
  136. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +18 -2
  137. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +13 -1
  138. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +20 -5
  139. package/src/msg_validators/attestation_validator/README.md +49 -0
  140. package/src/msg_validators/attestation_validator/attestation_validator.ts +5 -4
  141. package/src/msg_validators/clock_tolerance.ts +4 -3
  142. package/src/msg_validators/proposal_validator/README.md +123 -0
  143. package/src/msg_validators/proposal_validator/proposal_validator.ts +6 -5
  144. package/src/msg_validators/tx_validator/README.md +5 -1
  145. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  146. package/src/msg_validators/tx_validator/data_validator.ts +42 -1
  147. package/src/msg_validators/tx_validator/factory.ts +43 -3
  148. package/src/msg_validators/tx_validator/gas_validator.ts +41 -8
  149. package/src/msg_validators/tx_validator/phases_validator.ts +31 -1
  150. package/src/services/dummy_service.ts +7 -2
  151. package/src/services/encoding.ts +9 -1
  152. package/src/services/libp2p/libp2p_service.ts +137 -79
  153. package/src/services/peer-manager/peer_manager.ts +26 -8
  154. package/src/services/peer-manager/peer_scoring.ts +21 -5
  155. package/src/services/reqresp/README.md +229 -0
  156. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  157. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +64 -69
  158. package/src/services/reqresp/batch-tx-requester/interface.ts +2 -1
  159. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  160. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  161. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  162. package/src/services/reqresp/reqresp.ts +19 -11
  163. package/src/services/service.ts +6 -1
  164. package/src/services/tx_collection/fast_tx_collection.ts +57 -83
  165. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  166. package/src/services/tx_collection/proposal_tx_collector.ts +8 -13
  167. package/src/services/tx_collection/request_tracker.ts +127 -0
  168. package/src/services/tx_collection/slow_tx_collection.ts +1 -1
  169. package/src/services/tx_collection/tx_collection.ts +3 -5
  170. package/src/services/tx_collection/tx_source.ts +8 -7
  171. package/src/test-helpers/testbench-utils.ts +29 -3
  172. package/src/testbench/p2p_client_testbench_worker.ts +43 -14
  173. package/src/testbench/worker_client_manager.ts +0 -1
  174. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  175. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  176. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  177. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  178. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  179. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  180. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  181. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  182. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  183. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  184. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  185. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  186. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  187. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  188. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  189. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  190. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  191. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  192. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  193. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  194. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  195. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  196. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  197. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  198. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  199. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  200. package/dest/mem_pools/tx_pool/index.js +0 -2
  201. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  202. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  203. package/dest/mem_pools/tx_pool/priority.js +0 -15
  204. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  205. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  206. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  207. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  208. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  209. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  210. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  211. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  212. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  213. package/src/mem_pools/tx_pool/README.md +0 -270
  214. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  215. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  216. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  217. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  218. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  219. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  220. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  221. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  222. package/src/mem_pools/tx_pool/index.ts +0 -2
  223. package/src/mem_pools/tx_pool/priority.ts +0 -20
  224. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  225. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  226. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
@@ -53,12 +53,13 @@ import type { TxMetaData } from '../../mem_pools/tx_pool_v2/tx_metadata.js';
53
53
  import { AggregateTxValidator } from './aggregate_tx_validator.js';
54
54
  import { ArchiveCache } from './archive_cache.js';
55
55
  import { type ArchiveSource, BlockHeaderTxValidator } from './block_header_validator.js';
56
+ import { ContractInstanceTxValidator } from './contract_instance_validator.js';
56
57
  import { DataTxValidator } from './data_validator.js';
57
58
  import { DoubleSpendTxValidator, type NullifierSource } from './double_spend_validator.js';
58
59
  import { GasLimitsValidator, GasTxValidator } from './gas_validator.js';
59
60
  import { MetadataTxValidator } from './metadata_validator.js';
60
61
  import { NullifierCache } from './nullifier_cache.js';
61
- import { PhasesTxValidator } from './phases_validator.js';
62
+ import { AllowedSetupCallsMetaValidator, PhasesTxValidator } from './phases_validator.js';
62
63
  import { SizeTxValidator } from './size_validator.js';
63
64
  import { TimestampTxValidator } from './timestamp_validator.js';
64
65
  import { TxPermittedValidator } from './tx_permitted_validator.js';
@@ -97,6 +98,7 @@ export function createFirstStageTxValidationsForGossipedTransactions(
97
98
  txsPermitted: boolean,
98
99
  allowedInSetup: AllowedElement[] = [],
99
100
  bindings?: LoggerBindings,
101
+ gasLimitOpts?: { rollupManaLimit?: number; maxBlockL2Gas?: number; maxBlockDAGas?: number },
100
102
  ): Record<string, TransactionValidator> {
101
103
  const merkleTree = worldStateSynchronizer.getCommitted();
102
104
 
@@ -158,6 +160,7 @@ export function createFirstStageTxValidationsForGossipedTransactions(
158
160
  ProtocolContractAddress.FeeJuice,
159
161
  gasFees,
160
162
  bindings,
163
+ gasLimitOpts,
161
164
  ),
162
165
  severity: PeerErrorSeverity.MidToleranceError,
163
166
  },
@@ -165,6 +168,10 @@ export function createFirstStageTxValidationsForGossipedTransactions(
165
168
  validator: new DataTxValidator(bindings),
166
169
  severity: PeerErrorSeverity.MidToleranceError,
167
170
  },
171
+ contractInstanceValidator: {
172
+ validator: new ContractInstanceTxValidator(bindings),
173
+ severity: PeerErrorSeverity.MidToleranceError,
174
+ },
168
175
  };
169
176
  }
170
177
 
@@ -216,6 +223,7 @@ function createTxValidatorForMinimumTxIntegrityChecks(
216
223
  ),
217
224
  new SizeTxValidator(bindings),
218
225
  new DataTxValidator(bindings),
226
+ new ContractInstanceTxValidator(bindings),
219
227
  new TxProofValidator(verifier, bindings),
220
228
  );
221
229
  }
@@ -278,6 +286,9 @@ export function createTxValidatorForAcceptingTxsOverRPC(
278
286
  timestamp,
279
287
  blockNumber,
280
288
  txsPermitted,
289
+ rollupManaLimit,
290
+ maxBlockL2Gas,
291
+ maxBlockDAGas,
281
292
  }: {
282
293
  l1ChainId: number;
283
294
  rollupVersion: number;
@@ -287,6 +298,9 @@ export function createTxValidatorForAcceptingTxsOverRPC(
287
298
  timestamp: UInt64;
288
299
  blockNumber: BlockNumber;
289
300
  txsPermitted: boolean;
301
+ rollupManaLimit: number;
302
+ maxBlockL2Gas?: number;
303
+ maxBlockDAGas?: number;
290
304
  },
291
305
  bindings?: LoggerBindings,
292
306
  ): TxValidator<Tx> {
@@ -313,11 +327,16 @@ export function createTxValidatorForAcceptingTxsOverRPC(
313
327
  new BlockHeaderTxValidator(new ArchiveCache(db), bindings),
314
328
  new DoubleSpendTxValidator(new NullifierCache(db), bindings),
315
329
  new DataTxValidator(bindings),
330
+ new ContractInstanceTxValidator(bindings),
316
331
  ];
317
332
 
318
333
  if (!skipFeeEnforcement) {
319
334
  validators.push(
320
- new GasTxValidator(new DatabasePublicStateSource(db), ProtocolContractAddress.FeeJuice, gasFees, bindings),
335
+ new GasTxValidator(new DatabasePublicStateSource(db), ProtocolContractAddress.FeeJuice, gasFees, bindings, {
336
+ rollupManaLimit,
337
+ maxBlockL2Gas,
338
+ maxBlockDAGas,
339
+ }),
321
340
  );
322
341
  }
323
342
 
@@ -403,6 +422,7 @@ export async function createTxValidatorForTransactionsEnteringPendingTxPool(
403
422
  worldStateSynchronizer: WorldStateSynchronizer,
404
423
  timestamp: bigint,
405
424
  blockNumber: BlockNumber,
425
+ gasLimitOpts: { rollupManaLimit?: number; maxBlockL2Gas?: number; maxBlockDAGas?: number },
406
426
  bindings?: LoggerBindings,
407
427
  ): Promise<TxValidator<TxMetaData>> {
408
428
  await worldStateSynchronizer.syncImmediate();
@@ -419,9 +439,29 @@ export async function createTxValidatorForTransactionsEnteringPendingTxPool(
419
439
  },
420
440
  };
421
441
  return new AggregateTxValidator<TxMetaData>(
422
- new GasLimitsValidator<TxMetaData>(bindings),
442
+ new GasLimitsValidator<TxMetaData>({ ...gasLimitOpts, bindings }),
423
443
  new TimestampTxValidator<TxMetaData>({ timestamp, blockNumber }, bindings),
424
444
  new DoubleSpendTxValidator<TxMetaData>(nullifierSource, bindings),
425
445
  new BlockHeaderTxValidator<TxMetaData>(archiveSource, bindings),
446
+ new AllowedSetupCallsMetaValidator<TxMetaData>(bindings),
426
447
  );
427
448
  }
449
+
450
+ /**
451
+ * Creates a function that checks whether a tx's setup-phase calls are on the allow list.
452
+ *
453
+ * Uses the `PhasesTxValidator` on the full Tx. The result is stored as a boolean
454
+ * flag in `TxMetaData.allowedSetupCalls` at receipt time, so the pending pool
455
+ * migration validator can check it without needing the full Tx or its dependencies.
456
+ */
457
+ export function createCheckAllowedSetupCalls(
458
+ contractDataSource: ContractDataSource,
459
+ setupAllowList: AllowedElement[],
460
+ getTimestamp: () => UInt64,
461
+ ): (tx: Tx) => Promise<boolean> {
462
+ return async (tx: Tx) => {
463
+ const validator = new PhasesTxValidator(contractDataSource, setupAllowList, getTimestamp());
464
+ const result = await validator.validateTx(tx);
465
+ return result.result === 'valid';
466
+ };
467
+ }
@@ -1,4 +1,5 @@
1
1
  import {
2
+ MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT,
2
3
  MAX_PROCESSABLE_L2_GAS,
3
4
  PRIVATE_TX_L2_GAS_OVERHEAD,
4
5
  PUBLIC_TX_L2_GAS_OVERHEAD,
@@ -49,16 +50,31 @@ export interface HasGasLimitData {
49
50
  */
50
51
  export class GasLimitsValidator<T extends HasGasLimitData> implements TxValidator<T> {
51
52
  #log: Logger;
52
-
53
- constructor(bindings?: LoggerBindings) {
54
- this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
53
+ #effectiveMaxL2Gas: number;
54
+ #effectiveMaxDAGas: number;
55
+ #rollupManaLimit: number;
56
+ #maxBlockL2Gas: number;
57
+ #maxBlockDAGas: number;
58
+
59
+ constructor(opts?: {
60
+ rollupManaLimit?: number;
61
+ maxBlockL2Gas?: number;
62
+ maxBlockDAGas?: number;
63
+ bindings?: LoggerBindings;
64
+ }) {
65
+ this.#log = createLogger('sequencer:tx_validator:tx_gas', opts?.bindings);
66
+ this.#rollupManaLimit = opts?.rollupManaLimit ?? Infinity;
67
+ this.#maxBlockL2Gas = opts?.maxBlockL2Gas ?? Infinity;
68
+ this.#maxBlockDAGas = opts?.maxBlockDAGas ?? Infinity;
69
+ this.#effectiveMaxL2Gas = Math.min(MAX_PROCESSABLE_L2_GAS, this.#rollupManaLimit, this.#maxBlockL2Gas);
70
+ this.#effectiveMaxDAGas = Math.min(MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, this.#maxBlockDAGas);
55
71
  }
56
72
 
57
73
  validateTx(tx: T): Promise<TxValidationResult> {
58
74
  return Promise.resolve(this.validateGasLimit(tx));
59
75
  }
60
76
 
61
- /** Checks gas limits are >= fixed minimums and <= AVM max processable L2 gas. */
77
+ /** Checks gas limits are >= fixed minimums and <= effective max gas (L2 and DA). */
62
78
  validateGasLimit(tx: T): TxValidationResult {
63
79
  const gasLimits = tx.data.constants.txContext.gasSettings.gasLimits;
64
80
  const minGasLimits = new Gas(
@@ -74,10 +90,21 @@ export class GasLimitsValidator<T extends HasGasLimitData> implements TxValidato
74
90
  return { result: 'invalid', reason: [TX_ERROR_INSUFFICIENT_GAS_LIMIT] };
75
91
  }
76
92
 
77
- if (gasLimits.l2Gas > MAX_PROCESSABLE_L2_GAS) {
78
- this.#log.verbose(`Rejecting transaction due to the gas limit(s) being higher than the maximum processable gas`, {
93
+ if (gasLimits.l2Gas > this.#effectiveMaxL2Gas) {
94
+ this.#log.verbose(`Rejecting transaction due to the L2 gas limit being higher than the effective maximum`, {
79
95
  gasLimits,
80
- minGasLimits,
96
+ effectiveMaxL2Gas: this.#effectiveMaxL2Gas,
97
+ rollupManaLimit: this.#rollupManaLimit,
98
+ maxBlockL2Gas: this.#maxBlockL2Gas,
99
+ });
100
+ return { result: 'invalid', reason: [TX_ERROR_GAS_LIMIT_TOO_HIGH] };
101
+ }
102
+
103
+ if (gasLimits.daGas > this.#effectiveMaxDAGas) {
104
+ this.#log.verbose(`Rejecting transaction due to the DA gas limit being higher than the effective maximum`, {
105
+ gasLimits,
106
+ effectiveMaxDAGas: this.#effectiveMaxDAGas,
107
+ maxBlockDAGas: this.#maxBlockDAGas,
81
108
  });
82
109
  return { result: 'invalid', reason: [TX_ERROR_GAS_LIMIT_TOO_HIGH] };
83
110
  }
@@ -106,21 +133,27 @@ export class GasTxValidator implements TxValidator<Tx> {
106
133
  #publicDataSource: PublicStateSource;
107
134
  #feeJuiceAddress: AztecAddress;
108
135
  #gasFees: GasFees;
136
+ #gasLimitOpts?: { rollupManaLimit?: number; maxBlockL2Gas?: number; maxBlockDAGas?: number };
109
137
 
110
138
  constructor(
111
139
  publicDataSource: PublicStateSource,
112
140
  feeJuiceAddress: AztecAddress,
113
141
  gasFees: GasFees,
114
142
  private bindings?: LoggerBindings,
143
+ opts?: { rollupManaLimit?: number; maxBlockL2Gas?: number; maxBlockDAGas?: number },
115
144
  ) {
116
145
  this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
117
146
  this.#publicDataSource = publicDataSource;
118
147
  this.#feeJuiceAddress = feeJuiceAddress;
119
148
  this.#gasFees = gasFees;
149
+ this.#gasLimitOpts = opts;
120
150
  }
121
151
 
122
152
  async validateTx(tx: Tx): Promise<TxValidationResult> {
123
- const gasLimitValidation = new GasLimitsValidator(this.bindings).validateGasLimit(tx);
153
+ const gasLimitValidation = new GasLimitsValidator({
154
+ ...this.#gasLimitOpts,
155
+ bindings: this.bindings,
156
+ }).validateGasLimit(tx);
124
157
  if (gasLimitValidation.result === 'invalid') {
125
158
  return Promise.resolve(gasLimitValidation);
126
159
  }
@@ -40,7 +40,7 @@ export class PhasesTxValidator implements TxValidator<Tx> {
40
40
  // which are needed for public FPC flows, but fail if the account contract hasnt been deployed yet,
41
41
  // which is what we're trying to do as part of the current txs.
42
42
  // We only need to create/revert checkpoint here because of this addNewContracts call.
43
- await this.contractsDB.addNewContracts(tx);
43
+ this.contractsDB.addNewContracts(tx);
44
44
 
45
45
  if (!tx.data.forPublic) {
46
46
  this.#log.debug(
@@ -141,3 +141,33 @@ export class PhasesTxValidator implements TxValidator<Tx> {
141
141
  return TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED;
142
142
  }
143
143
  }
144
+
145
+ /** Structural interface for the allowed-setup-calls flag check. */
146
+ export interface HasAllowedSetupCallsData {
147
+ txHash: { toString(): string };
148
+ allowedSetupCalls: boolean;
149
+ }
150
+
151
+ /**
152
+ * Validates that a transaction's setup-phase calls were allowed at receipt time.
153
+ *
154
+ * Checks the precomputed `allowedSetupCalls` flag on TxMetaData. The flag is
155
+ * computed by running the PhasesTxValidator on the full Tx when it first enters
156
+ * the pool. This lightweight validator is used during pending pool migration to
157
+ * reject txs whose setup calls are not on the allow list.
158
+ */
159
+ export class AllowedSetupCallsMetaValidator<T extends HasAllowedSetupCallsData> implements TxValidator<T> {
160
+ #log: Logger;
161
+
162
+ constructor(bindings?: LoggerBindings) {
163
+ this.#log = createLogger('sequencer:tx_validator:tx_phases_meta', bindings);
164
+ }
165
+
166
+ validateTx(tx: T): Promise<TxValidationResult> {
167
+ if (!tx.allowedSetupCalls) {
168
+ this.#log.verbose(`Rejecting tx ${tx.txHash} because its setup calls are not on the allow list`);
169
+ return Promise.resolve({ result: 'invalid', reason: [TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED] });
170
+ }
171
+ return Promise.resolve({ result: 'valid' });
172
+ }
173
+ }
@@ -1,6 +1,6 @@
1
1
  import type { EthAddress } from '@aztec/foundation/eth-address';
2
2
  import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
3
- import type { Gossipable, PeerErrorSeverity, TopicType } from '@aztec/stdlib/p2p';
3
+ import type { CheckpointProposalCore, Gossipable, PeerErrorSeverity, TopicType } from '@aztec/stdlib/p2p';
4
4
  import { Tx, TxHash } from '@aztec/stdlib/tx';
5
5
 
6
6
  import type { PeerId } from '@libp2p/interface';
@@ -86,7 +86,12 @@ export class DummyP2PService implements P2PService {
86
86
  /**
87
87
  * Register a callback into the validator client for when a checkpoint proposal is received
88
88
  */
89
- public registerCheckpointReceivedCallback(_callback: P2PCheckpointReceivedCallback) {}
89
+ public registerValidatorCheckpointReceivedCallback(_callback: P2PCheckpointReceivedCallback) {}
90
+ public registerAllNodesCheckpointReceivedCallback(_callback: P2PCheckpointReceivedCallback) {}
91
+
92
+ public notifyOwnCheckpointProposal(_checkpoint: CheckpointProposalCore): Promise<void> {
93
+ return Promise.resolve();
94
+ }
90
95
 
91
96
  /**
92
97
  * Register a callback for when a duplicate proposal is detected
@@ -9,6 +9,14 @@ import { webcrypto } from 'node:crypto';
9
9
  import { compressSync, uncompressSync } from 'snappy';
10
10
  import xxhashFactory from 'xxhash-wasm';
11
11
 
12
+ /** Thrown when a Snappy-compressed response exceeds the allowed decompressed size. */
13
+ export class OversizedSnappyResponseError extends Error {
14
+ constructor(decompressedSize: number, maxSizeKb: number) {
15
+ super(`Decompressed size ${decompressedSize} exceeds maximum allowed size of ${maxSizeKb}kb`);
16
+ this.name = 'OversizedSnappyResponseError';
17
+ }
18
+ }
19
+
12
20
  // Load WASM
13
21
  const xxhash = await xxhashFactory();
14
22
 
@@ -86,7 +94,7 @@ export class SnappyTransform implements DataTransform {
86
94
  const { decompressedSize } = readSnappyPreamble(data);
87
95
  if (decompressedSize > maxSizeKb * 1024) {
88
96
  this.logger.warn(`Decompressed size ${decompressedSize} exceeds maximum allowed size of ${maxSizeKb}kb`);
89
- throw new Error(`Decompressed size ${decompressedSize} exceeds maximum allowed size of ${maxSizeKb}kb`);
97
+ throw new OversizedSnappyResponseError(decompressedSize, maxSizeKb);
90
98
  }
91
99
 
92
100
  return Buffer.from(uncompressSync(data, { asBuffer: true }));