|
6 | 6 | #include "barretenberg/avm_fuzzer/mutations/fuzzer_data.hpp" |
7 | 7 | #include "barretenberg/avm_fuzzer/mutations/instructions/instruction_block.hpp" |
8 | 8 | #include "barretenberg/avm_fuzzer/mutations/tx_types/accumulated_data.hpp" |
| 9 | +#include "barretenberg/avm_fuzzer/mutations/tx_types/gas.hpp" |
9 | 10 | #include "barretenberg/avm_fuzzer/mutations/tx_types/public_call_request.hpp" |
10 | 11 | #include "barretenberg/vm2/common/avm_io.hpp" |
11 | 12 | #include "barretenberg/vm2/common/aztec_constants.hpp" |
@@ -58,20 +59,6 @@ void mutate_teardown(std::optional<PublicCallRequestWithCalldata>& teardown_call |
58 | 59 |
|
59 | 60 | namespace bb::avm2::fuzzer { |
60 | 61 |
|
61 | | -// Gas bounds for mutation |
62 | | -constexpr uint32_t MIN_GAS = 1000; |
63 | | -constexpr uint32_t MAX_GAS = 10000000; |
64 | | - |
65 | | -// Fee bounds for mutation |
66 | | -constexpr uint128_t MIN_FEE = 1; |
67 | | -constexpr uint128_t MAX_FEE = 1000; |
68 | | - |
69 | | -constexpr uint32_t AVM_MAX_PROCESSABLE_DA_GAS = (MAX_NOTE_HASHES_PER_TX * AVM_EMITNOTEHASH_BASE_DA_GAS) + |
70 | | - (MAX_NULLIFIERS_PER_TX * AVM_EMITNULLIFIER_BASE_DA_GAS) + |
71 | | - (MAX_L2_TO_L1_MSGS_PER_TX * AVM_SENDL2TOL1MSG_BASE_DA_GAS) + |
72 | | - (MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * AVM_SSTORE_DYN_DA_GAS) + |
73 | | - (PUBLIC_LOGS_LENGTH * AVM_EMITUNENCRYPTEDLOG_BASE_DA_GAS); |
74 | | - |
75 | 62 | void mutate_tx(Tx& tx, std::vector<AztecAddress>& contract_addresses, std::mt19937_64& rng) |
76 | 63 | { |
77 | 64 | auto choice = TX_MUTATION_CONFIGURATION.select(rng); |
@@ -102,98 +89,35 @@ void mutate_tx(Tx& tx, std::vector<AztecAddress>& contract_addresses, std::mt199 |
102 | 89 | fuzz_info("Mutating revertible accumulated data"); |
103 | 90 | mutate_revertible_accumulated_data(tx.revertible_accumulated_data, rng); |
104 | 91 | break; |
105 | | - |
106 | | - // case 2: |
107 | | - // // Mutate gas_settings |
108 | | - // mutate_gas_settings(tx.gas_settings, rng); |
109 | | - // break; |
110 | | - // case 3: |
111 | | - // // Mutate effective_gas_fees |
112 | | - // mutate_gas_fees(tx.effective_gas_fees, rng); |
113 | | - // break; |
114 | | - // case 4: |
115 | | - // // Mutate Deployment data |
116 | | - // break; |
117 | | - // case 8: |
118 | | - // // Mutate gas_used_by_private |
119 | | - // break; |
120 | | - // case 9: |
121 | | - // // Mutate fee_payer |
122 | | - // break; |
123 | | - //} |
124 | | - } |
125 | | -} |
126 | | - |
127 | | -void mutate_gas_settings(GasSettings& gas_settings, std::mt19937_64& rng) |
128 | | -{ |
129 | | - auto choice = std::uniform_int_distribution<uint8_t>(0, 3)(rng); |
130 | | - |
131 | | - switch (choice) { |
132 | | - case 0: |
133 | | - // Pick a Gas Limit between [0, AVM_MAX_PROCESSABLE_L2_GAS] |
134 | | - // fixme: probably should not mutate both l2_gas and da_gas to max in one go |
135 | | - gas_settings.gas_limits.l2_gas = std::uniform_int_distribution<uint32_t>(0, AVM_MAX_PROCESSABLE_L2_GAS)(rng); |
136 | | - gas_settings.gas_limits.da_gas = std::uniform_int_distribution<uint32_t>(0, AVM_MAX_PROCESSABLE_DA_GAS)(rng); |
137 | | - break; |
138 | | - case 1: |
139 | | - // Mutate teardown_gas_limits |
140 | | - gas_settings.teardown_gas_limits.l2_gas = |
141 | | - std::uniform_int_distribution<uint32_t>(0, AVM_MAX_PROCESSABLE_L2_GAS)(rng); |
142 | | - gas_settings.teardown_gas_limits.da_gas = |
143 | | - std::uniform_int_distribution<uint32_t>(0, AVM_MAX_PROCESSABLE_DA_GAS)(rng); |
144 | | - break; |
145 | | - case 2: |
146 | | - // Mutate max_fees_per_gas |
147 | | - // mutate_gas_fees(gas_settings.max_fees_per_gas, rng); |
148 | | - break; |
149 | | - case 3: |
150 | | - // Mutate max_priority_fees_per_gas |
151 | | - // mutate_gas_fees(gas_settings.max_priority_fees_per_gas, rng); |
152 | | - break; |
153 | | - } |
154 | | -} |
155 | | - |
156 | | -void mutate_gas(Gas& gas, std::mt19937_64& rng) |
157 | | -{ |
158 | | - auto choice = std::uniform_int_distribution<uint8_t>(0, 2)(rng); |
159 | | - |
160 | | - switch (choice) { |
161 | | - case 0: |
162 | | - // Mutate l2_gas |
163 | | - gas.l2_gas = std::uniform_int_distribution<uint32_t>(MIN_GAS, MAX_GAS)(rng); |
164 | | - break; |
165 | | - case 1: |
166 | | - // Mutate da_gas |
167 | | - gas.da_gas = std::uniform_int_distribution<uint32_t>(MIN_GAS, MAX_GAS)(rng); |
168 | | - break; |
169 | | - case 2: |
170 | | - // Set both to same value |
171 | | - gas.l2_gas = gas.da_gas = std::uniform_int_distribution<uint32_t>(MIN_GAS, MAX_GAS)(rng); |
172 | | - break; |
173 | | - } |
174 | | -} |
175 | | - |
176 | | -void mutate_gas_fees(GasFees& fees, std::mt19937_64& rng) |
177 | | -{ |
178 | | - auto choice = std::uniform_int_distribution<uint8_t>(0, 3)(rng); |
179 | | - |
180 | | - switch (choice) { |
181 | | - case 0: |
182 | | - // Mutate fee_per_da_gas |
183 | | - fees.fee_per_da_gas = std::uniform_int_distribution<uint64_t>(MIN_FEE, MAX_FEE)(rng); |
184 | | - break; |
185 | | - case 1: |
186 | | - // Mutate fee_per_l2_gas |
187 | | - fees.fee_per_l2_gas = std::uniform_int_distribution<uint64_t>(MIN_FEE, MAX_FEE)(rng); |
188 | | - break; |
189 | | - case 2: |
190 | | - // Set both to zero |
191 | | - fees.fee_per_da_gas = 0; |
192 | | - fees.fee_per_l2_gas = 0; |
193 | | - break; |
194 | | - case 3: |
195 | | - // Set both to same non-zero value |
196 | | - fees.fee_per_da_gas = fees.fee_per_l2_gas = std::uniform_int_distribution<uint64_t>(1, MAX_FEE)(rng); |
| 92 | + case TxMutationOptions::GasSettings: |
| 93 | + // Mutate gas_settings |
| 94 | + fuzz_info("Mutating gas settings"); |
| 95 | + mutate_gas_settings(tx.gas_settings, rng); |
| 96 | + // Ensure effective_gas_fees <= max_fees_per_gas after mutation |
| 97 | + tx.effective_gas_fees.fee_per_da_gas = |
| 98 | + std::min(tx.effective_gas_fees.fee_per_da_gas, tx.gas_settings.max_fees_per_gas.fee_per_da_gas); |
| 99 | + tx.effective_gas_fees.fee_per_l2_gas = |
| 100 | + std::min(tx.effective_gas_fees.fee_per_l2_gas, tx.gas_settings.max_fees_per_gas.fee_per_l2_gas); |
| 101 | + break; |
| 102 | + case TxMutationOptions::GasFees: |
| 103 | + // Mutate effective_gas_fees |
| 104 | + fuzz_info("Mutating effective gas fees"); |
| 105 | + mutate_gas_fees(tx.effective_gas_fees, rng); |
| 106 | + // Ensure effective_gas_fees <= max_fees_per_gas after mutation |
| 107 | + tx.effective_gas_fees.fee_per_da_gas = |
| 108 | + std::min(tx.effective_gas_fees.fee_per_da_gas, tx.gas_settings.max_fees_per_gas.fee_per_da_gas); |
| 109 | + tx.effective_gas_fees.fee_per_l2_gas = |
| 110 | + std::min(tx.effective_gas_fees.fee_per_l2_gas, tx.gas_settings.max_fees_per_gas.fee_per_l2_gas); |
| 111 | + break; |
| 112 | + case TxMutationOptions::GasUsedByPrivate: |
| 113 | + // Mutate gas_used_by_private |
| 114 | + fuzz_info("Mutating gas used by private"); |
| 115 | + mutate_gas(tx.gas_used_by_private, rng); |
| 116 | + break; |
| 117 | + case TxMutationOptions::FeePayer: |
| 118 | + // Mutate fee_payer |
| 119 | + fuzz_info("Mutating fee payer"); |
| 120 | + mutate_field(tx.fee_payer, rng, BASIC_FIELD_MUTATION_CONFIGURATION); |
197 | 121 | break; |
198 | 122 | } |
199 | 123 | } |
|
0 commit comments