@@ -146,17 +146,18 @@ void show_trace_info(const auto& trace)
146
146
} // namespace
147
147
148
148
// Needed for dependency injection in tests.
149
- Execution::TraceBuilderConstructor Execution::trace_builder_constructor = [](VmPublicInputs public_inputs,
150
- ExecutionHints execution_hints,
151
- uint32_t side_effect_counter,
152
- std::vector<FF> calldata,
153
- std::vector<uint8_t > contract_bytecode) {
154
- return AvmTraceBuilder (std::move (public_inputs),
155
- std::move (execution_hints),
156
- side_effect_counter,
157
- std::move (calldata),
158
- contract_bytecode);
159
- };
149
+ Execution::TraceBuilderConstructor Execution::trace_builder_constructor =
150
+ [](VmPublicInputs public_inputs,
151
+ ExecutionHints execution_hints,
152
+ uint32_t side_effect_counter,
153
+ std::vector<FF> calldata,
154
+ std::vector<std::vector<uint8_t >> all_contract_bytecode) {
155
+ return AvmTraceBuilder (std::move (public_inputs),
156
+ std::move (execution_hints),
157
+ side_effect_counter,
158
+ std::move (calldata),
159
+ all_contract_bytecode);
160
+ };
160
161
161
162
/* *
162
163
* @brief Temporary routine to generate default public inputs (gas values) until we get
@@ -253,7 +254,7 @@ bool Execution::verify(AvmFlavor::VerificationKey vk, HonkProof const& proof)
253
254
std::copy (returndata_offset, raw_proof_offset, std::back_inserter (returndata));
254
255
std::copy (raw_proof_offset, proof.end (), std::back_inserter (raw_proof));
255
256
256
- VmPublicInputs public_inputs = convert_public_inputs (public_inputs_vec);
257
+ VmPublicInputs public_inputs = avm_trace:: convert_public_inputs (public_inputs_vec);
257
258
std::vector<std::vector<FF>> public_inputs_columns =
258
259
copy_public_inputs_columns (public_inputs, calldata, returndata);
259
260
return verifier.verify_proof (raw_proof, public_inputs_columns);
@@ -279,13 +280,19 @@ std::vector<Row> Execution::gen_trace(std::vector<uint8_t> const& bytecode,
279
280
vinfo (" ------- GENERATING TRACE -------" );
280
281
// TODO(https://github.com/AztecProtocol/aztec-packages/issues/6718): construction of the public input columns
281
282
// should be done in the kernel - this is stubbed and underconstrained
282
- VmPublicInputs public_inputs = convert_public_inputs (public_inputs_vec);
283
+ VmPublicInputs public_inputs = avm_trace:: convert_public_inputs (public_inputs_vec);
283
284
uint32_t start_side_effect_counter =
284
285
!public_inputs_vec.empty () ? static_cast <uint32_t >(public_inputs_vec[PCPI_START_SIDE_EFFECT_COUNTER_OFFSET])
285
286
: 0 ;
286
-
287
+ std::vector<std::vector<uint8_t >> all_contract_bytecode;
288
+ all_contract_bytecode.reserve (execution_hints.externalcall_hints .size () + 1 );
289
+ // Start with the main, top-level contract bytecode
290
+ all_contract_bytecode.push_back (bytecode);
291
+ for (const auto & externalcall_hint : execution_hints.externalcall_hints ) {
292
+ all_contract_bytecode.emplace_back (externalcall_hint.bytecode );
293
+ }
287
294
AvmTraceBuilder trace_builder = Execution::trace_builder_constructor (
288
- public_inputs, execution_hints, start_side_effect_counter, calldata, bytecode );
295
+ public_inputs, execution_hints, start_side_effect_counter, calldata, all_contract_bytecode );
289
296
290
297
// Copied version of pc maintained in trace builder. The value of pc is evolving based
291
298
// on opcode logic and therefore is not maintained here. However, the next opcode in the execution
0 commit comments