@aztec/p2p 0.0.1-commit.cb6bed7c2 → 0.0.1-commit.cbf2c2d5d

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 (147) 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 +19 -7
  5. package/dest/client/p2p_client.d.ts +1 -1
  6. package/dest/client/p2p_client.d.ts.map +1 -1
  7. package/dest/client/p2p_client.js +22 -10
  8. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +3 -3
  9. package/dest/config.d.ts +13 -1
  10. package/dest/config.d.ts.map +1 -1
  11. package/dest/config.js +20 -0
  12. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +3 -3
  13. package/dest/mem_pools/attestation_pool/attestation_pool.js +3 -3
  14. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +6 -6
  15. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  16. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  17. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +2 -1
  18. package/dest/mem_pools/tx_pool/priority.d.ts +2 -2
  19. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  20. package/dest/mem_pools/tx_pool/priority.js +4 -4
  21. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  22. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  23. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +3 -1
  24. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  25. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  26. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -1
  27. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +7 -5
  28. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  29. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +9 -2
  30. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  31. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +7 -1
  32. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  33. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  34. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +3 -0
  35. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -1
  36. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  37. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +19 -5
  38. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +1 -1
  39. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  40. package/dest/msg_validators/attestation_validator/attestation_validator.js +5 -4
  41. package/dest/msg_validators/clock_tolerance.d.ts +1 -1
  42. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  43. package/dest/msg_validators/clock_tolerance.js +4 -3
  44. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +1 -1
  45. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  46. package/dest/msg_validators/proposal_validator/proposal_validator.js +5 -5
  47. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  48. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  49. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  50. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  51. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  52. package/dest/msg_validators/tx_validator/data_validator.js +35 -2
  53. package/dest/msg_validators/tx_validator/factory.d.ts +23 -4
  54. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  55. package/dest/msg_validators/tx_validator/factory.js +36 -10
  56. package/dest/msg_validators/tx_validator/gas_validator.d.ts +13 -4
  57. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  58. package/dest/msg_validators/tx_validator/gas_validator.js +39 -9
  59. package/dest/msg_validators/tx_validator/phases_validator.d.ts +21 -1
  60. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  61. package/dest/msg_validators/tx_validator/phases_validator.js +28 -1
  62. package/dest/services/encoding.d.ts +5 -1
  63. package/dest/services/encoding.d.ts.map +1 -1
  64. package/dest/services/encoding.js +7 -1
  65. package/dest/services/libp2p/libp2p_service.d.ts +4 -9
  66. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  67. package/dest/services/libp2p/libp2p_service.js +115 -59
  68. package/dest/services/peer-manager/peer_manager.d.ts +1 -1
  69. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  70. package/dest/services/peer-manager/peer_manager.js +4 -2
  71. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  72. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  73. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +69 -65
  74. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +3 -2
  75. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  76. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  77. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  78. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  79. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  80. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  81. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  82. package/dest/services/reqresp/reqresp.d.ts +1 -1
  83. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  84. package/dest/services/reqresp/reqresp.js +17 -9
  85. package/dest/services/tx_collection/fast_tx_collection.d.ts +1 -4
  86. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  87. package/dest/services/tx_collection/fast_tx_collection.js +57 -73
  88. package/dest/services/tx_collection/proposal_tx_collector.d.ts +6 -7
  89. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  90. package/dest/services/tx_collection/proposal_tx_collector.js +4 -4
  91. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  92. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  93. package/dest/services/tx_collection/request_tracker.js +84 -0
  94. package/dest/services/tx_collection/slow_tx_collection.js +1 -1
  95. package/dest/services/tx_collection/tx_collection.d.ts +3 -6
  96. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  97. package/dest/test-helpers/testbench-utils.d.ts +1 -1
  98. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  99. package/dest/test-helpers/testbench-utils.js +22 -3
  100. package/dest/testbench/p2p_client_testbench_worker.js +3 -3
  101. package/package.json +14 -14
  102. package/src/client/factory.ts +34 -11
  103. package/src/client/p2p_client.ts +22 -12
  104. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +3 -5
  105. package/src/config.ts +33 -0
  106. package/src/mem_pools/attestation_pool/attestation_pool.ts +3 -3
  107. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +6 -6
  108. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  109. package/src/mem_pools/tx_pool/priority.ts +4 -4
  110. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +3 -1
  111. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  112. package/src/mem_pools/tx_pool_v2/interfaces.ts +6 -4
  113. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +11 -1
  114. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +13 -1
  115. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +20 -5
  116. package/src/msg_validators/attestation_validator/README.md +49 -0
  117. package/src/msg_validators/attestation_validator/attestation_validator.ts +5 -4
  118. package/src/msg_validators/clock_tolerance.ts +4 -3
  119. package/src/msg_validators/proposal_validator/README.md +123 -0
  120. package/src/msg_validators/proposal_validator/proposal_validator.ts +6 -5
  121. package/src/msg_validators/tx_validator/README.md +5 -1
  122. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  123. package/src/msg_validators/tx_validator/data_validator.ts +42 -1
  124. package/src/msg_validators/tx_validator/factory.ts +43 -3
  125. package/src/msg_validators/tx_validator/gas_validator.ts +41 -8
  126. package/src/msg_validators/tx_validator/phases_validator.ts +31 -1
  127. package/src/services/encoding.ts +9 -1
  128. package/src/services/libp2p/libp2p_service.ts +108 -70
  129. package/src/services/peer-manager/peer_manager.ts +5 -2
  130. package/src/services/reqresp/README.md +229 -0
  131. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  132. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +64 -69
  133. package/src/services/reqresp/batch-tx-requester/interface.ts +2 -1
  134. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  135. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  136. package/src/services/reqresp/reqresp.ts +19 -11
  137. package/src/services/tx_collection/fast_tx_collection.ts +57 -83
  138. package/src/services/tx_collection/proposal_tx_collector.ts +8 -13
  139. package/src/services/tx_collection/request_tracker.ts +127 -0
  140. package/src/services/tx_collection/slow_tx_collection.ts +1 -1
  141. package/src/services/tx_collection/tx_collection.ts +3 -5
  142. package/src/test-helpers/testbench-utils.ts +29 -3
  143. package/src/testbench/p2p_client_testbench_worker.ts +3 -5
  144. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  145. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  146. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  147. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
@@ -1,14 +1,16 @@
1
1
  import { MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS } from '@aztec/constants';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
+ import { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
4
+ import { computeContractClassId } from '@aztec/stdlib/contract';
3
5
  import { computeCalldataHash } from '@aztec/stdlib/hash';
4
- import { TX_ERROR_CALLDATA_COUNT_MISMATCH, TX_ERROR_CALLDATA_COUNT_TOO_LARGE, TX_ERROR_CONTRACT_CLASS_LOGS, TX_ERROR_CONTRACT_CLASS_LOG_COUNT, TX_ERROR_CONTRACT_CLASS_LOG_LENGTH, TX_ERROR_CONTRACT_CLASS_LOG_SORTING, TX_ERROR_INCORRECT_CALLDATA, TX_ERROR_INCORRECT_HASH, Tx } from '@aztec/stdlib/tx';
6
+ import { TX_ERROR_CALLDATA_COUNT_MISMATCH, TX_ERROR_CALLDATA_COUNT_TOO_LARGE, TX_ERROR_CONTRACT_CLASS_LOGS, TX_ERROR_CONTRACT_CLASS_LOG_COUNT, TX_ERROR_CONTRACT_CLASS_LOG_LENGTH, TX_ERROR_CONTRACT_CLASS_LOG_SORTING, TX_ERROR_INCORRECT_CALLDATA, TX_ERROR_INCORRECT_CONTRACT_CLASS_ID, TX_ERROR_INCORRECT_HASH, TX_ERROR_MALFORMED_CONTRACT_CLASS_LOG, Tx } from '@aztec/stdlib/tx';
5
7
  export class DataTxValidator {
6
8
  #log;
7
9
  constructor(bindings){
8
10
  this.#log = createLogger('p2p:tx_validator:tx_data', bindings);
9
11
  }
10
12
  async validateTx(tx) {
11
- const reason = await this.#hasCorrectHash(tx) ?? await this.#hasCorrectCalldata(tx) ?? await this.#hasCorrectContractClassLogs(tx);
13
+ const reason = await this.#hasCorrectHash(tx) ?? await this.#hasCorrectCalldata(tx) ?? await this.#hasCorrectContractClassLogs(tx) ?? await this.#hasCorrectContractClassIds(tx);
12
14
  return reason ? {
13
15
  result: 'invalid',
14
16
  reason: [
@@ -77,4 +79,35 @@ export class DataTxValidator {
77
79
  }
78
80
  return undefined;
79
81
  }
82
+ async #hasCorrectContractClassIds(tx) {
83
+ const contractClassLogs = tx.getContractClassLogs();
84
+ for (const log of contractClassLogs){
85
+ if (!ContractClassPublishedEvent.isContractClassPublishedEvent(log)) {
86
+ continue;
87
+ }
88
+ let event;
89
+ try {
90
+ event = ContractClassPublishedEvent.fromLog(log);
91
+ } catch (e) {
92
+ this.#log.warn(`Rejecting tx ${tx.getTxHash()}: failed to parse contract class event: ${e}`);
93
+ return TX_ERROR_MALFORMED_CONTRACT_CLASS_LOG;
94
+ }
95
+ try {
96
+ const { publicBytecodeCommitment } = await event.toContractClassPublicWithBytecodeCommitment();
97
+ const computedClassId = await computeContractClassId({
98
+ artifactHash: event.artifactHash,
99
+ privateFunctionsRoot: event.privateFunctionsRoot,
100
+ publicBytecodeCommitment
101
+ });
102
+ if (!computedClassId.equals(event.contractClassId)) {
103
+ this.#log.warn(`Rejecting tx ${tx.getTxHash()}: contract class id mismatch. Claimed ${event.contractClassId}, computed ${computedClassId}`);
104
+ return TX_ERROR_INCORRECT_CONTRACT_CLASS_ID;
105
+ }
106
+ } catch (e) {
107
+ this.#log.warn(`Rejecting tx ${tx.getTxHash()}: failed to compute contract class id: ${e}`);
108
+ return TX_ERROR_MALFORMED_CONTRACT_CLASS_LOG;
109
+ }
110
+ }
111
+ return undefined;
112
+ }
80
113
  }
@@ -59,7 +59,11 @@ export interface TransactionValidator {
59
59
  * The `doubleSpendValidator` failure is special-cased by the caller (`handleGossipedTx`)
60
60
  * to determine severity based on how recently the nullifier appeared.
61
61
  */
62
- export declare function createFirstStageTxValidationsForGossipedTransactions(timestamp: UInt64, blockNumber: BlockNumber, worldStateSynchronizer: WorldStateSynchronizer, gasFees: GasFees, l1ChainId: number, rollupVersion: number, protocolContractsHash: Fr, contractDataSource: ContractDataSource, txsPermitted: boolean, allowedInSetup?: AllowedElement[], bindings?: LoggerBindings): Record<string, TransactionValidator>;
62
+ export declare function createFirstStageTxValidationsForGossipedTransactions(timestamp: UInt64, blockNumber: BlockNumber, worldStateSynchronizer: WorldStateSynchronizer, gasFees: GasFees, l1ChainId: number, rollupVersion: number, protocolContractsHash: Fr, contractDataSource: ContractDataSource, txsPermitted: boolean, allowedInSetup?: AllowedElement[], bindings?: LoggerBindings, gasLimitOpts?: {
63
+ rollupManaLimit?: number;
64
+ maxBlockL2Gas?: number;
65
+ maxBlockDAGas?: number;
66
+ }): Record<string, TransactionValidator>;
63
67
  /**
64
68
  * Second stage of gossip validation — expensive proof verification.
65
69
  *
@@ -93,7 +97,7 @@ export declare function createTxValidatorForBlockProposalReceivedTxs(verifier: C
93
97
  * (can be skipped for testing purposes). Fee enforcement is also optional (skipped for testing/dev).
94
98
  * Called from `AztecNodeService.isValidTx()`.
95
99
  */
96
- export declare function createTxValidatorForAcceptingTxsOverRPC(db: MerkleTreeReadOperations, contractDataSource: ContractDataSource, verifier: ClientProtocolCircuitVerifier | undefined, { l1ChainId, rollupVersion, setupAllowList, gasFees, skipFeeEnforcement, timestamp, blockNumber, txsPermitted }: {
100
+ export declare function createTxValidatorForAcceptingTxsOverRPC(db: MerkleTreeReadOperations, contractDataSource: ContractDataSource, verifier: ClientProtocolCircuitVerifier | undefined, { l1ChainId, rollupVersion, setupAllowList, gasFees, skipFeeEnforcement, timestamp, blockNumber, txsPermitted, rollupManaLimit, maxBlockL2Gas, maxBlockDAGas }: {
97
101
  l1ChainId: number;
98
102
  rollupVersion: number;
99
103
  setupAllowList: AllowedElement[];
@@ -102,6 +106,9 @@ export declare function createTxValidatorForAcceptingTxsOverRPC(db: MerkleTreeRe
102
106
  timestamp: UInt64;
103
107
  blockNumber: BlockNumber;
104
108
  txsPermitted: boolean;
109
+ rollupManaLimit: number;
110
+ maxBlockL2Gas?: number;
111
+ maxBlockDAGas?: number;
105
112
  }, bindings?: LoggerBindings): TxValidator<Tx>;
106
113
  /**
107
114
  * Validators for txs about to be included in a block by the sequencer.
@@ -125,5 +132,17 @@ export declare function createTxValidatorForBlockBuilding(db: MerkleTreeReadOper
125
132
  * Operates on `TxMetaData` rather than full `Tx` since metadata is pre-built by the pool.
126
133
  * Injected into `TxPoolV2` as the `createTxValidator` factory in `TxPoolV2Dependencies`.
127
134
  */
128
- export declare function createTxValidatorForTransactionsEnteringPendingTxPool(worldStateSynchronizer: WorldStateSynchronizer, timestamp: bigint, blockNumber: BlockNumber, bindings?: LoggerBindings): Promise<TxValidator<TxMetaData>>;
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSTVELE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxLQUFLLEVBQ1YsY0FBYyxFQUNkLDZCQUE2QixFQUM3Qix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0YsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFlNUU7Ozs7R0FJRztBQUNILE1BQU0sV0FBVyxvQkFBb0I7SUFDbkMsU0FBUyxFQUFFO1FBQ1QsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7S0FDakQsQ0FBQztJQUNGLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQztDQUM3QjtBQUVEOzs7Ozs7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
135
+ export declare function createTxValidatorForTransactionsEnteringPendingTxPool(worldStateSynchronizer: WorldStateSynchronizer, timestamp: bigint, blockNumber: BlockNumber, gasLimitOpts: {
136
+ rollupManaLimit?: number;
137
+ maxBlockL2Gas?: number;
138
+ maxBlockDAGas?: number;
139
+ }, bindings?: LoggerBindings): Promise<TxValidator<TxMetaData>>;
140
+ /**
141
+ * Creates a function that checks whether a tx's setup-phase calls are on the allow list.
142
+ *
143
+ * Uses the `PhasesTxValidator` on the full Tx. The result is stored as a boolean
144
+ * flag in `TxMetaData.allowedSetupCalls` at receipt time, so the pending pool
145
+ * migration validator can check it without needing the full Tx or its dependencies.
146
+ */
147
+ export declare function createCheckAllowedSetupCalls(contractDataSource: ContractDataSource, setupAllowList: AllowedElement[], getTimestamp: () => UInt64): (tx: Tx) => Promise<boolean>;
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSTVELE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxLQUFLLEVBQ1YsY0FBYyxFQUNkLDZCQUE2QixFQUM3Qix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0YsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFnQjVFOzs7O0dBSUc7QUFDSCxNQUFNLFdBQVcsb0JBQW9CO0lBQ25DLFNBQVMsRUFBRTtRQUNULFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBQ2pELENBQUM7SUFDRixRQUFRLEVBQUUsaUJBQWlCLENBQUM7Q0FDN0I7QUFFRDs7Ozs7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
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/factory.ts"],"names":[],"mappings":"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"}
@@ -36,12 +36,13 @@ import { DatabasePublicStateSource, MerkleTreeId } from '@aztec/stdlib/trees';
36
36
  import { AggregateTxValidator } from './aggregate_tx_validator.js';
37
37
  import { ArchiveCache } from './archive_cache.js';
38
38
  import { BlockHeaderTxValidator } from './block_header_validator.js';
39
+ import { ContractInstanceTxValidator } from './contract_instance_validator.js';
39
40
  import { DataTxValidator } from './data_validator.js';
40
41
  import { DoubleSpendTxValidator } from './double_spend_validator.js';
41
42
  import { GasLimitsValidator, GasTxValidator } from './gas_validator.js';
42
43
  import { MetadataTxValidator } from './metadata_validator.js';
43
44
  import { NullifierCache } from './nullifier_cache.js';
44
- import { PhasesTxValidator } from './phases_validator.js';
45
+ import { AllowedSetupCallsMetaValidator, PhasesTxValidator } from './phases_validator.js';
45
46
  import { SizeTxValidator } from './size_validator.js';
46
47
  import { TimestampTxValidator } from './timestamp_validator.js';
47
48
  import { TxPermittedValidator } from './tx_permitted_validator.js';
@@ -54,7 +55,7 @@ import { TxProofValidator } from './tx_proof_validator.js';
54
55
  *
55
56
  * The `doubleSpendValidator` failure is special-cased by the caller (`handleGossipedTx`)
56
57
  * to determine severity based on how recently the nullifier appeared.
57
- */ export function createFirstStageTxValidationsForGossipedTransactions(timestamp, blockNumber, worldStateSynchronizer, gasFees, l1ChainId, rollupVersion, protocolContractsHash, contractDataSource, txsPermitted, allowedInSetup = [], bindings) {
58
+ */ export function createFirstStageTxValidationsForGossipedTransactions(timestamp, blockNumber, worldStateSynchronizer, gasFees, l1ChainId, rollupVersion, protocolContractsHash, contractDataSource, txsPermitted, allowedInSetup = [], bindings, gasLimitOpts) {
58
59
  const merkleTree = worldStateSynchronizer.getCommitted();
59
60
  return {
60
61
  timestampValidator: {
@@ -100,12 +101,16 @@ import { TxProofValidator } from './tx_proof_validator.js';
100
101
  severity: PeerErrorSeverity.MidToleranceError
101
102
  },
102
103
  gasValidator: {
103
- validator: new GasTxValidator(new DatabasePublicStateSource(merkleTree), ProtocolContractAddress.FeeJuice, gasFees, bindings),
104
+ validator: new GasTxValidator(new DatabasePublicStateSource(merkleTree), ProtocolContractAddress.FeeJuice, gasFees, bindings, gasLimitOpts),
104
105
  severity: PeerErrorSeverity.MidToleranceError
105
106
  },
106
107
  dataValidator: {
107
108
  validator: new DataTxValidator(bindings),
108
109
  severity: PeerErrorSeverity.MidToleranceError
110
+ },
111
+ contractInstanceValidator: {
112
+ validator: new ContractInstanceTxValidator(bindings),
113
+ severity: PeerErrorSeverity.MidToleranceError
109
114
  }
110
115
  };
111
116
  }
@@ -134,7 +139,7 @@ import { TxProofValidator } from './tx_proof_validator.js';
134
139
  rollupVersion: new Fr(rollupVersion),
135
140
  protocolContractsHash,
136
141
  vkTreeRoot: getVKTreeRoot()
137
- }, bindings), new SizeTxValidator(bindings), new DataTxValidator(bindings), new TxProofValidator(verifier, bindings));
142
+ }, bindings), new SizeTxValidator(bindings), new DataTxValidator(bindings), new ContractInstanceTxValidator(bindings), new TxProofValidator(verifier, bindings));
138
143
  }
139
144
  /**
140
145
  * Validators for txs received via req/resp or filestores.
@@ -162,7 +167,7 @@ import { TxProofValidator } from './tx_proof_validator.js';
162
167
  * Full validation — all state-dependent checks are run. Proof verification is optional
163
168
  * (can be skipped for testing purposes). Fee enforcement is also optional (skipped for testing/dev).
164
169
  * Called from `AztecNodeService.isValidTx()`.
165
- */ export function createTxValidatorForAcceptingTxsOverRPC(db, contractDataSource, verifier, { l1ChainId, rollupVersion, setupAllowList, gasFees, skipFeeEnforcement, timestamp, blockNumber, txsPermitted }, bindings) {
170
+ */ export function createTxValidatorForAcceptingTxsOverRPC(db, contractDataSource, verifier, { l1ChainId, rollupVersion, setupAllowList, gasFees, skipFeeEnforcement, timestamp, blockNumber, txsPermitted, rollupManaLimit, maxBlockL2Gas, maxBlockDAGas }, bindings) {
166
171
  const validators = [
167
172
  new TxPermittedValidator(txsPermitted, bindings),
168
173
  new TimestampTxValidator({
@@ -179,10 +184,15 @@ import { TxProofValidator } from './tx_proof_validator.js';
179
184
  new PhasesTxValidator(contractDataSource, setupAllowList, timestamp, bindings),
180
185
  new BlockHeaderTxValidator(new ArchiveCache(db), bindings),
181
186
  new DoubleSpendTxValidator(new NullifierCache(db), bindings),
182
- new DataTxValidator(bindings)
187
+ new DataTxValidator(bindings),
188
+ new ContractInstanceTxValidator(bindings)
183
189
  ];
184
190
  if (!skipFeeEnforcement) {
185
- validators.push(new GasTxValidator(new DatabasePublicStateSource(db), ProtocolContractAddress.FeeJuice, gasFees, bindings));
191
+ validators.push(new GasTxValidator(new DatabasePublicStateSource(db), ProtocolContractAddress.FeeJuice, gasFees, bindings, {
192
+ rollupManaLimit,
193
+ maxBlockL2Gas,
194
+ maxBlockDAGas
195
+ }));
186
196
  }
187
197
  if (verifier) {
188
198
  validators.push(new TxProofValidator(verifier, bindings));
@@ -224,7 +234,7 @@ function createTxValidatorForValidatingAgainstCurrentState(nullifierSource, arch
224
234
  *
225
235
  * Operates on `TxMetaData` rather than full `Tx` since metadata is pre-built by the pool.
226
236
  * Injected into `TxPoolV2` as the `createTxValidator` factory in `TxPoolV2Dependencies`.
227
- */ export async function createTxValidatorForTransactionsEnteringPendingTxPool(worldStateSynchronizer, timestamp, blockNumber, bindings) {
237
+ */ export async function createTxValidatorForTransactionsEnteringPendingTxPool(worldStateSynchronizer, timestamp, blockNumber, gasLimitOpts, bindings) {
228
238
  await worldStateSynchronizer.syncImmediate();
229
239
  const merkleTree = worldStateSynchronizer.getCommitted();
230
240
  const nullifierSource = {
@@ -238,8 +248,24 @@ function createTxValidatorForValidatingAgainstCurrentState(nullifierSource, arch
238
248
  return merkleTree.findLeafIndices(MerkleTreeId.ARCHIVE, archives);
239
249
  }
240
250
  };
241
- return new AggregateTxValidator(new GasLimitsValidator(bindings), new TimestampTxValidator({
251
+ return new AggregateTxValidator(new GasLimitsValidator({
252
+ ...gasLimitOpts,
253
+ bindings
254
+ }), new TimestampTxValidator({
242
255
  timestamp,
243
256
  blockNumber
244
- }, bindings), new DoubleSpendTxValidator(nullifierSource, bindings), new BlockHeaderTxValidator(archiveSource, bindings));
257
+ }, bindings), new DoubleSpendTxValidator(nullifierSource, bindings), new BlockHeaderTxValidator(archiveSource, bindings), new AllowedSetupCallsMetaValidator(bindings));
258
+ }
259
+ /**
260
+ * Creates a function that checks whether a tx's setup-phase calls are on the allow list.
261
+ *
262
+ * Uses the `PhasesTxValidator` on the full Tx. The result is stored as a boolean
263
+ * flag in `TxMetaData.allowedSetupCalls` at receipt time, so the pending pool
264
+ * migration validator can check it without needing the full Tx or its dependencies.
265
+ */ export function createCheckAllowedSetupCalls(contractDataSource, setupAllowList, getTimestamp) {
266
+ return async (tx)=>{
267
+ const validator = new PhasesTxValidator(contractDataSource, setupAllowList, getTimestamp());
268
+ const result = await validator.validateTx(tx);
269
+ return result.result === 'valid';
270
+ };
245
271
  }
@@ -33,9 +33,14 @@ export interface HasGasLimitData {
33
33
  */
34
34
  export declare class GasLimitsValidator<T extends HasGasLimitData> implements TxValidator<T> {
35
35
  #private;
36
- constructor(bindings?: LoggerBindings);
36
+ constructor(opts?: {
37
+ rollupManaLimit?: number;
38
+ maxBlockL2Gas?: number;
39
+ maxBlockDAGas?: number;
40
+ bindings?: LoggerBindings;
41
+ });
37
42
  validateTx(tx: T): Promise<TxValidationResult>;
38
- /** Checks gas limits are >= fixed minimums and <= AVM max processable L2 gas. */
43
+ /** Checks gas limits are >= fixed minimums and <= effective max gas (L2 and DA). */
39
44
  validateGasLimit(tx: T): TxValidationResult;
40
45
  }
41
46
  /**
@@ -56,7 +61,11 @@ export declare class GasLimitsValidator<T extends HasGasLimitData> implements Tx
56
61
  export declare class GasTxValidator implements TxValidator<Tx> {
57
62
  #private;
58
63
  private bindings?;
59
- constructor(publicDataSource: PublicStateSource, feeJuiceAddress: AztecAddress, gasFees: GasFees, bindings?: LoggerBindings | undefined);
64
+ constructor(publicDataSource: PublicStateSource, feeJuiceAddress: AztecAddress, gasFees: GasFees, bindings?: LoggerBindings | undefined, opts?: {
65
+ rollupManaLimit?: number;
66
+ maxBlockL2Gas?: number;
67
+ maxBlockDAGas?: number;
68
+ });
60
69
  validateTx(tx: Tx): Promise<TxValidationResult>;
61
70
  /**
62
71
  * Checks the fee payer has enough FeeJuice balance to cover the tx's fee limit.
@@ -64,4 +73,4 @@ export declare class GasTxValidator implements TxValidator<Tx> {
64
73
  */
65
74
  validateTxFee(tx: Tx): Promise<TxValidationResult>;
66
75
  }
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9nYXNfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RixPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUtMLEtBQUssRUFBRSxFQUNQLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssV0FBVyxFQUNqQixNQUFNLGtCQUFrQixDQUFDO0FBSTFCLG9HQUFvRztBQUNwRyxNQUFNLFdBQVcsZUFBZTtJQUM5QixNQUFNLEVBQUU7UUFBRSxRQUFRLElBQUksTUFBTSxDQUFBO0tBQUUsQ0FBQztJQUMvQixJQUFJLEVBQUU7UUFFSixTQUFTLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDcEIsU0FBUyxFQUFFO1lBQ1QsU0FBUyxFQUFFO2dCQUNULFdBQVcsRUFBRTtvQkFBRSxTQUFTLEVBQUUsR0FBRyxDQUFBO2lCQUFFLENBQUM7YUFDakMsQ0FBQztTQUNILENBQUM7S0FDSCxDQUFDO0NBQ0g7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILHFCQUFhLGtCQUFrQixDQUFDLENBQUMsU0FBUyxlQUFlLENBQUUsWUFBVyxXQUFXLENBQUMsQ0FBQyxDQUFDOztJQUdsRixZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFRCxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FFN0M7SUFFRCxpRkFBaUY7SUFDakYsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxrQkFBa0IsQ0F3QjFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILHFCQUFhLGNBQWUsWUFBVyxXQUFXLENBQUMsRUFBRSxDQUFDOztJQVVsRCxPQUFPLENBQUMsUUFBUSxDQUFDO0lBSm5CLFlBQ0UsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQ25DLGVBQWUsRUFBRSxZQUFZLEVBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQ1IsUUFBUSxDQUFDLDRCQUFnQixFQU1sQztJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQVNwRDtJQXlCRDs7O09BR0c7SUFDVSxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0F5QjlEO0NBQ0YifQ==
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9nYXNfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RixPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUtMLEtBQUssRUFBRSxFQUNQLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssV0FBVyxFQUNqQixNQUFNLGtCQUFrQixDQUFDO0FBSTFCLG9HQUFvRztBQUNwRyxNQUFNLFdBQVcsZUFBZTtJQUM5QixNQUFNLEVBQUU7UUFBRSxRQUFRLElBQUksTUFBTSxDQUFBO0tBQUUsQ0FBQztJQUMvQixJQUFJLEVBQUU7UUFFSixTQUFTLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDcEIsU0FBUyxFQUFFO1lBQ1QsU0FBUyxFQUFFO2dCQUNULFdBQVcsRUFBRTtvQkFBRSxTQUFTLEVBQUUsR0FBRyxDQUFBO2lCQUFFLENBQUM7YUFDakMsQ0FBQztTQUNILENBQUM7S0FDSCxDQUFDO0NBQ0g7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILHFCQUFhLGtCQUFrQixDQUFDLENBQUMsU0FBUyxlQUFlLENBQUUsWUFBVyxXQUFXLENBQUMsQ0FBQyxDQUFDOztJQVFsRixZQUFZLElBQUksQ0FBQyxFQUFFO1FBQ2pCLGVBQWUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUN6QixhQUFhLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDdkIsYUFBYSxDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQ3ZCLFFBQVEsQ0FBQyxFQUFFLGNBQWMsQ0FBQztLQUMzQixFQU9BO0lBRUQsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBRTdDO0lBRUQsb0ZBQW9GO0lBQ3BGLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsa0JBQWtCLENBbUMxQztDQUNGO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxxQkFBYSxjQUFlLFlBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQzs7SUFXbEQsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUpuQixZQUNFLGdCQUFnQixFQUFFLGlCQUFpQixFQUNuQyxlQUFlLEVBQUUsWUFBWSxFQUM3QixPQUFPLEVBQUUsT0FBTyxFQUNSLFFBQVEsQ0FBQyw0QkFBZ0IsRUFDakMsSUFBSSxDQUFDLEVBQUU7UUFBRSxlQUFlLENBQUMsRUFBRSxNQUFNLENBQUM7UUFBQyxhQUFhLENBQUMsRUFBRSxNQUFNLENBQUM7UUFBQyxhQUFhLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxFQU9wRjtJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQVlwRDtJQXlCRDs7O09BR0c7SUFDVSxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0F5QjlEO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"gas_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/gas_validator.ts"],"names":[],"mappings":"AAMA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAKL,KAAK,EAAE,EACP,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAI1B,oGAAoG;AACpG,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAC;IAC/B,IAAI,EAAE;QAEJ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,SAAS,EAAE;YACT,SAAS,EAAE;gBACT,WAAW,EAAE;oBAAE,SAAS,EAAE,GAAG,CAAA;iBAAE,CAAC;aACjC,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAkB,CAAC,CAAC,SAAS,eAAe,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAGlF,YAAY,QAAQ,CAAC,EAAE,cAAc,EAEpC;IAED,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAE7C;IAED,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,CAwB1C;CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAe,YAAW,WAAW,CAAC,EAAE,CAAC;;IAUlD,OAAO,CAAC,QAAQ,CAAC;IAJnB,YACE,gBAAgB,EAAE,iBAAiB,EACnC,eAAe,EAAE,YAAY,EAC7B,OAAO,EAAE,OAAO,EACR,QAAQ,CAAC,4BAAgB,EAMlC;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CASpD;IAyBD;;;OAGG;IACU,aAAa,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyB9D;CACF"}
1
+ {"version":3,"file":"gas_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/gas_validator.ts"],"names":[],"mappings":"AAOA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAKL,KAAK,EAAE,EACP,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAI1B,oGAAoG;AACpG,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAC;IAC/B,IAAI,EAAE;QAEJ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,SAAS,EAAE;YACT,SAAS,EAAE;gBACT,WAAW,EAAE;oBAAE,SAAS,EAAE,GAAG,CAAA;iBAAE,CAAC;aACjC,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAkB,CAAC,CAAC,SAAS,eAAe,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAQlF,YAAY,IAAI,CAAC,EAAE;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,cAAc,CAAC;KAC3B,EAOA;IAED,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAE7C;IAED,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,CAmC1C;CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAe,YAAW,WAAW,CAAC,EAAE,CAAC;;IAWlD,OAAO,CAAC,QAAQ,CAAC;IAJnB,YACE,gBAAgB,EAAE,iBAAiB,EACnC,eAAe,EAAE,YAAY,EAC7B,OAAO,EAAE,OAAO,EACR,QAAQ,CAAC,4BAAgB,EACjC,IAAI,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,EAOpF;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAYpD;IAyBD;;;OAGG;IACU,aAAa,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyB9D;CACF"}
@@ -1,4 +1,4 @@
1
- import { MAX_PROCESSABLE_L2_GAS, PRIVATE_TX_L2_GAS_OVERHEAD, PUBLIC_TX_L2_GAS_OVERHEAD, TX_DA_GAS_OVERHEAD } from '@aztec/constants';
1
+ import { MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS, PRIVATE_TX_L2_GAS_OVERHEAD, PUBLIC_TX_L2_GAS_OVERHEAD, TX_DA_GAS_OVERHEAD } from '@aztec/constants';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
3
  import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
4
4
  import { Gas } from '@aztec/stdlib/gas';
@@ -17,13 +17,23 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
17
17
  * Used by: pending pool migration (via factory), and indirectly by {@link GasTxValidator}.
18
18
  */ export class GasLimitsValidator {
19
19
  #log;
20
- constructor(bindings){
21
- this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
20
+ #effectiveMaxL2Gas;
21
+ #effectiveMaxDAGas;
22
+ #rollupManaLimit;
23
+ #maxBlockL2Gas;
24
+ #maxBlockDAGas;
25
+ constructor(opts){
26
+ this.#log = createLogger('sequencer:tx_validator:tx_gas', opts?.bindings);
27
+ this.#rollupManaLimit = opts?.rollupManaLimit ?? Infinity;
28
+ this.#maxBlockL2Gas = opts?.maxBlockL2Gas ?? Infinity;
29
+ this.#maxBlockDAGas = opts?.maxBlockDAGas ?? Infinity;
30
+ this.#effectiveMaxL2Gas = Math.min(MAX_PROCESSABLE_L2_GAS, this.#rollupManaLimit, this.#maxBlockL2Gas);
31
+ this.#effectiveMaxDAGas = Math.min(MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, this.#maxBlockDAGas);
22
32
  }
23
33
  validateTx(tx) {
24
34
  return Promise.resolve(this.validateGasLimit(tx));
25
35
  }
26
- /** Checks gas limits are >= fixed minimums and <= AVM max processable L2 gas. */ validateGasLimit(tx) {
36
+ /** Checks gas limits are >= fixed minimums and <= effective max gas (L2 and DA). */ validateGasLimit(tx) {
27
37
  const gasLimits = tx.data.constants.txContext.gasSettings.gasLimits;
28
38
  const minGasLimits = new Gas(TX_DA_GAS_OVERHEAD, tx.data.forPublic ? PUBLIC_TX_L2_GAS_OVERHEAD : PRIVATE_TX_L2_GAS_OVERHEAD);
29
39
  if (minGasLimits.gtAny(gasLimits)) {
@@ -38,10 +48,25 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
38
48
  ]
39
49
  };
40
50
  }
41
- if (gasLimits.l2Gas > MAX_PROCESSABLE_L2_GAS) {
42
- this.#log.verbose(`Rejecting transaction due to the gas limit(s) being higher than the maximum processable gas`, {
51
+ if (gasLimits.l2Gas > this.#effectiveMaxL2Gas) {
52
+ this.#log.verbose(`Rejecting transaction due to the L2 gas limit being higher than the effective maximum`, {
43
53
  gasLimits,
44
- minGasLimits
54
+ effectiveMaxL2Gas: this.#effectiveMaxL2Gas,
55
+ rollupManaLimit: this.#rollupManaLimit,
56
+ maxBlockL2Gas: this.#maxBlockL2Gas
57
+ });
58
+ return {
59
+ result: 'invalid',
60
+ reason: [
61
+ TX_ERROR_GAS_LIMIT_TOO_HIGH
62
+ ]
63
+ };
64
+ }
65
+ if (gasLimits.daGas > this.#effectiveMaxDAGas) {
66
+ this.#log.verbose(`Rejecting transaction due to the DA gas limit being higher than the effective maximum`, {
67
+ gasLimits,
68
+ effectiveMaxDAGas: this.#effectiveMaxDAGas,
69
+ maxBlockDAGas: this.#maxBlockDAGas
45
70
  });
46
71
  return {
47
72
  result: 'invalid',
@@ -75,15 +100,20 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
75
100
  #publicDataSource;
76
101
  #feeJuiceAddress;
77
102
  #gasFees;
78
- constructor(publicDataSource, feeJuiceAddress, gasFees, bindings){
103
+ #gasLimitOpts;
104
+ constructor(publicDataSource, feeJuiceAddress, gasFees, bindings, opts){
79
105
  this.bindings = bindings;
80
106
  this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
81
107
  this.#publicDataSource = publicDataSource;
82
108
  this.#feeJuiceAddress = feeJuiceAddress;
83
109
  this.#gasFees = gasFees;
110
+ this.#gasLimitOpts = opts;
84
111
  }
85
112
  async validateTx(tx) {
86
- const gasLimitValidation = new GasLimitsValidator(this.bindings).validateGasLimit(tx);
113
+ const gasLimitValidation = new GasLimitsValidator({
114
+ ...this.#gasLimitOpts,
115
+ bindings: this.bindings
116
+ }).validateGasLimit(tx);
87
117
  if (gasLimitValidation.result === 'invalid') {
88
118
  return Promise.resolve(gasLimitValidation);
89
119
  }
@@ -12,4 +12,24 @@ export declare class PhasesTxValidator implements TxValidator<Tx> {
12
12
  validateTx(tx: Tx): Promise<TxValidationResult>;
13
13
  private checkAllowList;
14
14
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2VzX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9waGFzZXNfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUd2RixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFRTCxFQUFFLEVBRUYsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQscUJBQWEsaUJBQWtCLFlBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQzs7SUFNckQsT0FBTyxDQUFDLGNBQWM7SUFDdEIsT0FBTyxDQUFDLFNBQVM7SUFMbkIsT0FBTyxDQUFDLFdBQVcsQ0FBb0I7SUFFdkMsWUFDRSxTQUFTLEVBQUUsa0JBQWtCLEVBQ3JCLGNBQWMsRUFBRSxjQUFjLEVBQUUsRUFDaEMsU0FBUyxFQUFFLE1BQU0sRUFDekIsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUkxQjtJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQXNDcEQ7WUFHYSxjQUFjO0NBa0U3QiJ9
15
+ /** Structural interface for the allowed-setup-calls flag check. */
16
+ export interface HasAllowedSetupCallsData {
17
+ txHash: {
18
+ toString(): string;
19
+ };
20
+ allowedSetupCalls: boolean;
21
+ }
22
+ /**
23
+ * Validates that a transaction's setup-phase calls were allowed at receipt time.
24
+ *
25
+ * Checks the precomputed `allowedSetupCalls` flag on TxMetaData. The flag is
26
+ * computed by running the PhasesTxValidator on the full Tx when it first enters
27
+ * the pool. This lightweight validator is used during pending pool migration to
28
+ * reject txs whose setup calls are not on the allow list.
29
+ */
30
+ export declare class AllowedSetupCallsMetaValidator<T extends HasAllowedSetupCallsData> implements TxValidator<T> {
31
+ #private;
32
+ constructor(bindings?: LoggerBindings);
33
+ validateTx(tx: T): Promise<TxValidationResult>;
34
+ }
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2VzX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9waGFzZXNfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUd2RixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFRTCxFQUFFLEVBRUYsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQscUJBQWEsaUJBQWtCLFlBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQzs7SUFNckQsT0FBTyxDQUFDLGNBQWM7SUFDdEIsT0FBTyxDQUFDLFNBQVM7SUFMbkIsT0FBTyxDQUFDLFdBQVcsQ0FBb0I7SUFFdkMsWUFDRSxTQUFTLEVBQUUsa0JBQWtCLEVBQ3JCLGNBQWMsRUFBRSxjQUFjLEVBQUUsRUFDaEMsU0FBUyxFQUFFLE1BQU0sRUFDekIsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUkxQjtJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQXNDcEQ7WUFHYSxjQUFjO0NBa0U3QjtBQUVELG1FQUFtRTtBQUNuRSxNQUFNLFdBQVcsd0JBQXdCO0lBQ3ZDLE1BQU0sRUFBRTtRQUFFLFFBQVEsSUFBSSxNQUFNLENBQUE7S0FBRSxDQUFDO0lBQy9CLGlCQUFpQixFQUFFLE9BQU8sQ0FBQztDQUM1QjtBQUVEOzs7Ozs7O0dBT0c7QUFDSCxxQkFBYSw4QkFBOEIsQ0FBQyxDQUFDLFNBQVMsd0JBQXdCLENBQUUsWUFBVyxXQUFXLENBQUMsQ0FBQyxDQUFDOztJQUd2RyxZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFRCxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FNN0M7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"phases_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/phases_validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAGvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAQL,EAAE,EAEF,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,qBAAa,iBAAkB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAMrD,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,WAAW,CAAoB;IAEvC,YACE,SAAS,EAAE,kBAAkB,EACrB,cAAc,EAAE,cAAc,EAAE,EAChC,SAAS,EAAE,MAAM,EACzB,QAAQ,CAAC,EAAE,cAAc,EAI1B;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsCpD;YAGa,cAAc;CAkE7B"}
1
+ {"version":3,"file":"phases_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/phases_validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAGvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAQL,EAAE,EAEF,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,qBAAa,iBAAkB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAMrD,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,WAAW,CAAoB;IAEvC,YACE,SAAS,EAAE,kBAAkB,EACrB,cAAc,EAAE,cAAc,EAAE,EAChC,SAAS,EAAE,MAAM,EACzB,QAAQ,CAAC,EAAE,cAAc,EAI1B;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsCpD;YAGa,cAAc;CAkE7B;AAED,mEAAmE;AACnE,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAC;IAC/B,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,qBAAa,8BAA8B,CAAC,CAAC,SAAS,wBAAwB,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAGvG,YAAY,QAAQ,CAAC,EAAE,cAAc,EAEpC;IAED,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAM7C;CACF"}
@@ -21,7 +21,7 @@ export class PhasesTxValidator {
21
21
  // which are needed for public FPC flows, but fail if the account contract hasnt been deployed yet,
22
22
  // which is what we're trying to do as part of the current txs.
23
23
  // We only need to create/revert checkpoint here because of this addNewContracts call.
24
- await this.contractsDB.addNewContracts(tx);
24
+ this.contractsDB.addNewContracts(tx);
25
25
  if (!tx.data.forPublic) {
26
26
  this.#log.debug(`Tx ${tx.getTxHash().toString()} does not contain enqueued public functions. Skipping phases validation.`);
27
27
  return {
@@ -112,3 +112,30 @@ export class PhasesTxValidator {
112
112
  return TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED;
113
113
  }
114
114
  }
115
+ /**
116
+ * Validates that a transaction's setup-phase calls were allowed at receipt time.
117
+ *
118
+ * Checks the precomputed `allowedSetupCalls` flag on TxMetaData. The flag is
119
+ * computed by running the PhasesTxValidator on the full Tx when it first enters
120
+ * the pool. This lightweight validator is used during pending pool migration to
121
+ * reject txs whose setup calls are not on the allow list.
122
+ */ export class AllowedSetupCallsMetaValidator {
123
+ #log;
124
+ constructor(bindings){
125
+ this.#log = createLogger('sequencer:tx_validator:tx_phases_meta', bindings);
126
+ }
127
+ validateTx(tx) {
128
+ if (!tx.allowedSetupCalls) {
129
+ this.#log.verbose(`Rejecting tx ${tx.txHash} because its setup calls are not on the allow list`);
130
+ return Promise.resolve({
131
+ result: 'invalid',
132
+ reason: [
133
+ TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED
134
+ ]
135
+ });
136
+ }
137
+ return Promise.resolve({
138
+ result: 'valid'
139
+ });
140
+ }
141
+ }
@@ -2,6 +2,10 @@ import { TopicType } from '@aztec/stdlib/p2p';
2
2
  import type { RPC } from '@chainsafe/libp2p-gossipsub/message';
3
3
  import type { DataTransform } from '@chainsafe/libp2p-gossipsub/types';
4
4
  import type { Message } from '@libp2p/interface';
5
+ /** Thrown when a Snappy-compressed response exceeds the allowed decompressed size. */
6
+ export declare class OversizedSnappyResponseError extends Error {
7
+ constructor(decompressedSize: number, maxSizeKb: number);
8
+ }
5
9
  /**
6
10
  * The function used to generate a gossipsub message id
7
11
  * We use the first 8 bytes of SHA256(data) for content addressing
@@ -47,4 +51,4 @@ export declare function readSnappyPreamble(data: Uint8Array): {
47
51
  decompressedSize: number;
48
52
  bytesRead: number;
49
53
  };
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RpbmcuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9lbmNvZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQWtCLFNBQVMsRUFBc0IsTUFBTSxtQkFBbUIsQ0FBQztBQUVsRixPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRCxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWNqRDs7O0dBR0c7QUFDSCx3QkFBZ0IsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FLdkQ7QUFFRCx3QkFBZ0IsWUFBWSxDQUFDLEtBQUssRUFBRSxVQUFVLEdBQUcsTUFBTSxDQUl0RDtBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsd0JBQXNCLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUk5RTtBQWNEOztHQUVHO0FBQ0gscUJBQWEsZUFBZ0IsWUFBVyxhQUFhO0lBRWpELE9BQU8sQ0FBQyxVQUFVO0lBQ2xCLE9BQU8sQ0FBQyxnQkFBZ0I7SUFDeEIsT0FBTyxDQUFDLE1BQU07SUFIaEIsWUFDVSxVQUFVLEdBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQXFCLEVBQ3pELGdCQUFnQixHQUFFLE1BQWtCLEVBQ3BDLE1BQU0seUNBQXVDLEVBQ25EO0lBR0osZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxHQUFHLFVBQVUsQ0FHL0Q7SUFFTSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sR0FBRyxNQUFNLENBWS9GO0lBR0QsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxHQUFHLFVBQVUsQ0FFakU7SUFFTSxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FLakQ7Q0FDRjtBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsd0JBQWdCLGtCQUFrQixDQUFDLElBQUksRUFBRSxVQUFVLEdBQUc7SUFBRSxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7SUFBQyxTQUFTLEVBQUUsTUFBTSxDQUFBO0NBQUUsQ0FtQ3BHIn0=
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RpbmcuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9lbmNvZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQWtCLFNBQVMsRUFBc0IsTUFBTSxtQkFBbUIsQ0FBQztBQUVsRixPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRCxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUtqRCxzRkFBc0Y7QUFDdEYscUJBQWEsNEJBQTZCLFNBQVEsS0FBSztJQUNyRCxZQUFZLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUd0RDtDQUNGO0FBV0Q7OztHQUdHO0FBQ0gsd0JBQWdCLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBS3ZEO0FBRUQsd0JBQWdCLFlBQVksQ0FBQyxLQUFLLEVBQUUsVUFBVSxHQUFHLE1BQU0sQ0FJdEQ7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILHdCQUFzQixVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FJOUU7QUFjRDs7R0FFRztBQUNILHFCQUFhLGVBQWdCLFlBQVcsYUFBYTtJQUVqRCxPQUFPLENBQUMsVUFBVTtJQUNsQixPQUFPLENBQUMsZ0JBQWdCO0lBQ3hCLE9BQU8sQ0FBQyxNQUFNO0lBSGhCLFlBQ1UsVUFBVSxHQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFxQixFQUN6RCxnQkFBZ0IsR0FBRSxNQUFrQixFQUNwQyxNQUFNLHlDQUF1QyxFQUNuRDtJQUdKLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsR0FBRyxVQUFVLENBRy9EO0lBRU0sb0JBQW9CLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxNQUFNLEdBQUcsTUFBTSxDQVkvRjtJQUdELGlCQUFpQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsR0FBRyxVQUFVLENBRWpFO0lBRU0scUJBQXFCLENBQUMsSUFBSSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBS2pEO0NBQ0Y7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILHdCQUFnQixrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHO0lBQUUsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDO0lBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQTtDQUFFLENBbUNwRyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../src/services/encoding.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,SAAS,EAAsB,MAAM,mBAAmB,CAAC;AAElF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAcjD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAKvD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAItD;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAI9E;AAcD;;GAEG;AACH,qBAAa,eAAgB,YAAW,aAAa;IAEjD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,MAAM;IAHhB,YACU,UAAU,GAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAqB,EACzD,gBAAgB,GAAE,MAAkB,EACpC,MAAM,yCAAuC,EACnD;IAGJ,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAG/D;IAEM,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAY/F;IAGD,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAEjE;IAEM,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjD;CACF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAmCpG"}
1
+ {"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../src/services/encoding.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,SAAS,EAAsB,MAAM,mBAAmB,CAAC;AAElF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAKjD,sFAAsF;AACtF,qBAAa,4BAA6B,SAAQ,KAAK;IACrD,YAAY,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAGtD;CACF;AAWD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAKvD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAItD;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAI9E;AAcD;;GAEG;AACH,qBAAa,eAAgB,YAAW,aAAa;IAEjD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,MAAM;IAHhB,YACU,UAAU,GAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAqB,EACzD,gBAAgB,GAAE,MAAkB,EACpC,MAAM,yCAAuC,EACnD;IAGJ,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAG/D;IAEM,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAY/F;IAGD,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAEjE;IAEM,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjD;CACF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAmCpG"}
@@ -4,6 +4,12 @@ import { MAX_TX_SIZE_KB, TopicType, getTopicFromString } from '@aztec/stdlib/p2p
4
4
  import { webcrypto } from 'node:crypto';
5
5
  import { compressSync, uncompressSync } from 'snappy';
6
6
  import xxhashFactory from 'xxhash-wasm';
7
+ /** Thrown when a Snappy-compressed response exceeds the allowed decompressed size. */ export class OversizedSnappyResponseError extends Error {
8
+ constructor(decompressedSize, maxSizeKb){
9
+ super(`Decompressed size ${decompressedSize} exceeds maximum allowed size of ${maxSizeKb}kb`);
10
+ this.name = 'OversizedSnappyResponseError';
11
+ }
12
+ }
7
13
  // Load WASM
8
14
  const xxhash = await xxhashFactory();
9
15
  // Use salt to prevent msgId from being mined for collisions
@@ -75,7 +81,7 @@ const DefaultMaxSizesKb = {
75
81
  const { decompressedSize } = readSnappyPreamble(data);
76
82
  if (decompressedSize > maxSizeKb * 1024) {
77
83
  this.logger.warn(`Decompressed size ${decompressedSize} exceeds maximum allowed size of ${maxSizeKb}kb`);
78
- throw new Error(`Decompressed size ${decompressedSize} exceeds maximum allowed size of ${maxSizeKb}kb`);
84
+ throw new OversizedSnappyResponseError(decompressedSize, maxSizeKb);
79
85
  }
80
86
  return Buffer.from(uncompressSync(data, {
81
87
  asBuffer: true
@@ -6,7 +6,7 @@ import type { AztecAsyncKVStore } from '@aztec/kv-store';
6
6
  import type { EthAddress, L2Block, L2BlockSource } from '@aztec/stdlib/block';
7
7
  import type { ContractDataSource } from '@aztec/stdlib/contract';
8
8
  import type { ClientProtocolCircuitVerifier, PeerInfo, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
9
- import { BlockProposal, CheckpointAttestation, CheckpointProposal, type CheckpointProposalCore, type Gossipable, type ValidationResult as P2PValidationResult, TopicType } from '@aztec/stdlib/p2p';
9
+ import { BlockProposal, CheckpointAttestation, CheckpointProposal, type CheckpointProposalCore, type Gossipable, PeerErrorSeverity, TopicType } from '@aztec/stdlib/p2p';
10
10
  import { Tx, type TxValidator } from '@aztec/stdlib/tx';
11
11
  import type { UInt64 } from '@aztec/stdlib/types';
12
12
  import { type TelemetryClient, WithTracer } from '@aztec/telemetry-client';
@@ -29,6 +29,7 @@ type ReceivedMessageValidationResult<T, M = undefined> = {
29
29
  obj?: T;
30
30
  result: TopicValidatorResult.Reject;
31
31
  metadata?: M;
32
+ severity: PeerErrorSeverity;
32
33
  };
33
34
  /**
34
35
  * Lib P2P implementation of the P2PService interface.
@@ -166,6 +167,7 @@ export declare class LibP2PService extends WithTracer implements P2PService {
166
167
  */
167
168
  protected handleNewGossipMessage(msg: Message, msgId: string, source: PeerId): Promise<void>;
168
169
  protected validateReceivedMessage<T, M = undefined>(validationFunc: () => Promise<ReceivedMessageValidationResult<T, M>>, msgId: string, source: PeerId, topicType: TopicType): Promise<ReceivedMessageValidationResult<T, M>>;
170
+ private tryDeserialize;
169
171
  protected handleGossipedTx(payloadData: Buffer, msgId: string, source: PeerId): Promise<void>;
170
172
  private processCheckpointAttestationFromPeer;
171
173
  /** Validates a checkpoint attestation and adds it to the pool. Penalizes the peer if validation fails. */
@@ -234,17 +236,10 @@ export declare class LibP2PService extends WithTracer implements P2PService {
234
236
  protected createSecondStageMessageValidators(): Record<string, TransactionValidator>;
235
237
  private runValidations;
236
238
  private handleDoubleSpendFailure;
237
- /**
238
- * Validate a checkpoint attestation.
239
- *
240
- * @param attestation - The checkpoint attestation to validate.
241
- * @returns True if the checkpoint attestation is valid, false otherwise.
242
- */
243
- validateCheckpointAttestation(peerId: PeerId, attestation: CheckpointAttestation): Promise<P2PValidationResult>;
244
239
  getPeerScore(peerId: PeerId): number;
245
240
  handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
246
241
  private sendToPeers;
247
242
  private stopLibP2P;
248
243
  }
249
244
  export {};
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicDJwX3NlcnZpY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9saWJwMnAvbGlicDJwX3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFL0UsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBNkMsTUFBTSx1QkFBdUIsQ0FBQztBQUcvRixPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUUsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRSxPQUFPLEtBQUssRUFBRSw2QkFBNkIsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2SCxPQUFPLEVBQ0wsYUFBYSxFQUNiLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsS0FBSyxzQkFBc0IsRUFDM0IsS0FBSyxVQUFVLEVBRWYsS0FBSyxnQkFBZ0IsSUFBSSxtQkFBbUIsRUFHNUMsU0FBUyxFQUlWLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsT0FBTyxFQUFFLEVBQUUsRUFBd0MsS0FBSyxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5RixPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxPQUFPLEVBSUwsS0FBSyxlQUFlLEVBQ3BCLFVBQVUsRUFFWCxNQUFNLHlCQUF5QixDQUFDO0FBY2pDLE9BQU8s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
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicDJwX3NlcnZpY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9saWJwMnAvbGlicDJwX3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFL0UsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBNkMsTUFBTSx1QkFBdUIsQ0FBQztBQUcvRixPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUUsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRSxPQUFPLEtBQUssRUFBRSw2QkFBNkIsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2SCxPQUFPLEVBQ0wsYUFBYSxFQUNiLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsS0FBSyxzQkFBc0IsRUFDM0IsS0FBSyxVQUFVLEVBRWYsaUJBQWlCLEVBRWpCLFNBQVMsRUFJVixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE9BQU8sRUFBRSxFQUFFLEVBQXdDLEtBQUssV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUYsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUlMLEtBQUssZUFBZSxFQUNwQixVQUFVLEVBRVgsTUFBTSx5QkFBeUIsQ0FBQztBQWNqQyxPQUFPLEVBQUUsS0FBSyxPQUFPLEVB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