Skip to content

Commit caac1c9

Browse files
authored
refactor(avm): move interaction jobs to trace builders (#13621)
Next step is to make the tests use these, so that we are sure we are testing the way we generate lookups in prod. However this is not trivial because sometimes we want to use subsets, or we want to expect failures when running particular subsets. Will think more about how to do this. I have some ideas.
1 parent 71a408a commit caac1c9

31 files changed

+347
-151
lines changed

barretenberg/cpp/src/barretenberg/vm2/tracegen/address_derivation_trace.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
#include "barretenberg/vm2/tracegen/address_derivation_trace.hpp"
22

3+
#include <memory>
4+
35
#include "barretenberg/vm2/common/aztec_constants.hpp"
46
#include "barretenberg/vm2/common/aztec_types.hpp"
57
#include "barretenberg/vm2/common/field.hpp"
8+
#include "barretenberg/vm2/generated/relations/lookups_address_derivation.hpp"
69
#include "barretenberg/vm2/simulation/events/address_derivation_event.hpp"
710
#include "barretenberg/vm2/simulation/events/event_emitter.hpp"
11+
#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp"
12+
#include "barretenberg/vm2/tracegen/lib/lookup_builder.hpp"
13+
#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp"
814
#include "barretenberg/vm2/tracegen/trace_container.hpp"
915

1016
namespace bb::avm2::tracegen {
@@ -51,4 +57,28 @@ void AddressDerivationTraceBuilder::process(
5157
}
5258
}
5359

60+
std::vector<std::unique_ptr<InteractionBuilderInterface>> AddressDerivationTraceBuilder::lookup_jobs()
61+
{
62+
return make_jobs<std::unique_ptr<InteractionBuilderInterface>>(
63+
std::make_unique<LookupIntoDynamicTableSequential<
64+
lookup_address_derivation_salted_initialization_hash_poseidon2_0_settings>>(),
65+
std::make_unique<LookupIntoDynamicTableSequential<
66+
lookup_address_derivation_salted_initialization_hash_poseidon2_1_settings>>(),
67+
std::make_unique<
68+
LookupIntoDynamicTableSequential<lookup_address_derivation_partial_address_poseidon2_settings>>(),
69+
std::make_unique<
70+
LookupIntoDynamicTableSequential<lookup_address_derivation_public_keys_hash_poseidon2_0_settings>>(),
71+
std::make_unique<
72+
LookupIntoDynamicTableSequential<lookup_address_derivation_public_keys_hash_poseidon2_1_settings>>(),
73+
std::make_unique<
74+
LookupIntoDynamicTableSequential<lookup_address_derivation_public_keys_hash_poseidon2_2_settings>>(),
75+
std::make_unique<
76+
LookupIntoDynamicTableSequential<lookup_address_derivation_public_keys_hash_poseidon2_3_settings>>(),
77+
std::make_unique<
78+
LookupIntoDynamicTableSequential<lookup_address_derivation_public_keys_hash_poseidon2_4_settings>>(),
79+
std::make_unique<LookupIntoDynamicTableSequential<lookup_address_derivation_preaddress_poseidon2_settings>>(),
80+
std::make_unique<LookupIntoDynamicTableSequential<lookup_address_derivation_preaddress_scalar_mul_settings>>(),
81+
std::make_unique<LookupIntoDynamicTableSequential<lookup_address_derivation_address_ecadd_settings>>());
82+
}
83+
5484
} // namespace bb::avm2::tracegen

barretenberg/cpp/src/barretenberg/vm2/tracegen/address_derivation_trace.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include <memory>
4+
35
#include "barretenberg/vm2/generated/columns.hpp"
46
#include "barretenberg/vm2/simulation/events/address_derivation_event.hpp"
57
#include "barretenberg/vm2/simulation/events/event_emitter.hpp"
@@ -11,6 +13,8 @@ class AddressDerivationTraceBuilder final {
1113
public:
1214
void process(const simulation::EventEmitterInterface<simulation::AddressDerivationEvent>::Container& events,
1315
TraceContainer& trace);
16+
17+
static std::vector<std::unique_ptr<class InteractionBuilderInterface>> lookup_jobs();
1418
};
1519

1620
} // namespace bb::avm2::tracegen

barretenberg/cpp/src/barretenberg/vm2/tracegen/bitwise_trace.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@
22

33
#include <cstddef>
44
#include <cstdint>
5+
#include <memory>
56
#include <ranges>
67
#include <stdexcept>
78

89
#include "barretenberg/vm2/common/memory_types.hpp"
10+
#include "barretenberg/vm2/generated/relations/lookups_bitwise.hpp"
911
#include "barretenberg/vm2/simulation/events/bitwise_event.hpp"
1012
#include "barretenberg/vm2/simulation/events/event_emitter.hpp"
13+
#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp"
14+
#include "barretenberg/vm2/tracegen/lib/lookup_into_bitwise.hpp"
15+
#include "barretenberg/vm2/tracegen/lib/lookup_into_indexed_by_clk.hpp"
16+
#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp"
1117

1218
namespace bb::avm2::tracegen {
1319

@@ -60,4 +66,11 @@ void BitwiseTraceBuilder::process(const simulation::EventEmitterInterface<simula
6066
}
6167
}
6268

69+
std::vector<std::unique_ptr<InteractionBuilderInterface>> BitwiseTraceBuilder::lookup_jobs()
70+
{
71+
return make_jobs<std::unique_ptr<InteractionBuilderInterface>>(
72+
std::make_unique<LookupIntoBitwise<lookup_bitwise_byte_operations_settings>>(),
73+
std::make_unique<LookupIntoIndexedByClk<lookup_bitwise_integral_tag_length_settings>>());
74+
}
75+
6376
} // namespace bb::avm2::tracegen

barretenberg/cpp/src/barretenberg/vm2/tracegen/bitwise_trace.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include <memory>
4+
35
#include "barretenberg/vm2/generated/columns.hpp"
46
#include "barretenberg/vm2/simulation/events/bitwise_event.hpp"
57
#include "barretenberg/vm2/simulation/events/event_emitter.hpp"
@@ -11,6 +13,8 @@ class BitwiseTraceBuilder final {
1113
public:
1214
void process(const simulation::EventEmitterInterface<simulation::BitwiseEvent>::Container& events,
1315
TraceContainer& trace);
16+
17+
static std::vector<std::unique_ptr<class InteractionBuilderInterface>> lookup_jobs();
1418
};
1519

16-
} // namespace bb::avm2::tracegen
20+
} // namespace bb::avm2::tracegen

barretenberg/cpp/src/barretenberg/vm2/tracegen/bytecode_trace.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,23 @@
33
#include <cmath>
44
#include <cstddef>
55
#include <cstdint>
6+
#include <memory>
67
#include <ranges>
78
#include <stdexcept>
89
#include <vector>
910

1011
#include "barretenberg/crypto/poseidon2/poseidon2.hpp"
1112
#include "barretenberg/vm2/common/aztec_constants.hpp"
1213
#include "barretenberg/vm2/common/instruction_spec.hpp"
14+
#include "barretenberg/vm2/generated/relations/lookups_bc_decomposition.hpp"
15+
#include "barretenberg/vm2/generated/relations/lookups_bc_hashing.hpp"
16+
#include "barretenberg/vm2/generated/relations/lookups_bc_retrieval.hpp"
17+
#include "barretenberg/vm2/generated/relations/lookups_instr_fetching.hpp"
1318
#include "barretenberg/vm2/simulation/events/bytecode_events.hpp"
1419
#include "barretenberg/vm2/simulation/events/event_emitter.hpp"
20+
#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp"
21+
#include "barretenberg/vm2/tracegen/lib/lookup_into_indexed_by_clk.hpp"
22+
#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp"
1523
#include "barretenberg/vm2/tracegen/precomputed_trace.hpp"
1624

1725
using Poseidon2 = bb::crypto::Poseidon2<bb::crypto::Poseidon2Bn254ScalarFieldParams>;
@@ -370,4 +378,31 @@ void BytecodeTraceBuilder::process_instruction_fetching(
370378
}
371379
}
372380

381+
std::vector<std::unique_ptr<InteractionBuilderInterface>> BytecodeTraceBuilder::lookup_jobs()
382+
{
383+
return make_jobs<std::unique_ptr<InteractionBuilderInterface>>(
384+
// Bytecode Hashing
385+
std::make_unique<LookupIntoDynamicTableSequential<lookup_bc_hashing_get_packed_field_settings>>(),
386+
std::make_unique<LookupIntoDynamicTableSequential<lookup_bc_hashing_iv_is_len_settings>>(),
387+
std::make_unique<LookupIntoDynamicTableSequential<lookup_bc_hashing_poseidon2_hash_settings>>(),
388+
// Bytecode Retrieval
389+
std::make_unique<LookupIntoDynamicTableSequential<lookup_bc_retrieval_bytecode_hash_is_correct_settings>>(),
390+
std::make_unique<LookupIntoDynamicTableSequential<lookup_bc_retrieval_class_id_derivation_settings>>(),
391+
std::make_unique<LookupIntoDynamicTableSequential<lookup_bc_retrieval_address_derivation_settings>>(),
392+
std::make_unique<LookupIntoDynamicTableSequential<lookup_bc_retrieval_update_check_settings>>(),
393+
std::make_unique<
394+
LookupIntoDynamicTableSequential<lookup_bc_retrieval_silo_deployment_nullifier_poseidon2_settings>>(),
395+
std::make_unique<LookupIntoDynamicTableSequential<lookup_bc_retrieval_deployment_nullifier_read_settings>>(),
396+
// Bytecode Decomposition
397+
std::make_unique<LookupIntoIndexedByClk<lookup_bc_decomposition_bytes_are_bytes_settings>>(),
398+
std::make_unique<LookupIntoIndexedByClk<lookup_bc_decomposition_abs_diff_is_u16_settings>>(),
399+
// Instruction Fetching
400+
std::make_unique<LookupIntoDynamicTableGeneric<lookup_instr_fetching_bytes_from_bc_dec_settings>>(),
401+
std::make_unique<LookupIntoDynamicTableGeneric<lookup_instr_fetching_bytecode_size_from_bc_dec_settings>>(),
402+
std::make_unique<LookupIntoIndexedByClk<lookup_instr_fetching_wire_instruction_info_settings>>(),
403+
std::make_unique<LookupIntoIndexedByClk<lookup_instr_fetching_instr_abs_diff_positive_settings>>(),
404+
std::make_unique<LookupIntoIndexedByClk<lookup_instr_fetching_tag_value_validation_settings>>(),
405+
std::make_unique<LookupIntoDynamicTableGeneric<lookup_instr_fetching_pc_abs_diff_positive_settings>>());
406+
}
407+
373408
} // namespace bb::avm2::tracegen

barretenberg/cpp/src/barretenberg/vm2/tracegen/bytecode_trace.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include <memory>
4+
35
#include "barretenberg/vm2/generated/columns.hpp"
46
#include "barretenberg/vm2/simulation/events/bytecode_events.hpp"
57
#include "barretenberg/vm2/simulation/events/event_emitter.hpp"
@@ -25,6 +27,8 @@ class BytecodeTraceBuilder final {
2527
void process_instruction_fetching(
2628
const simulation::EventEmitterInterface<simulation::InstructionFetchingEvent>::Container& events,
2729
TraceContainer& trace);
30+
31+
static std::vector<std::unique_ptr<class InteractionBuilderInterface>> lookup_jobs();
2832
};
2933

30-
} // namespace bb::avm2::tracegen
34+
} // namespace bb::avm2::tracegen

barretenberg/cpp/src/barretenberg/vm2/tracegen/class_id_derivation_trace.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
#include "barretenberg/vm2/tracegen/class_id_derivation_trace.hpp"
22

3+
#include <memory>
4+
35
#include "barretenberg/vm2/common/aztec_constants.hpp"
6+
#include "barretenberg/vm2/generated/relations/lookups_class_id_derivation.hpp"
47
#include "barretenberg/vm2/simulation/events/class_id_derivation_event.hpp"
58
#include "barretenberg/vm2/simulation/events/event_emitter.hpp"
9+
#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp"
10+
#include "barretenberg/vm2/tracegen/lib/lookup_builder.hpp"
11+
#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp"
612
#include "barretenberg/vm2/tracegen/trace_container.hpp"
713

814
namespace bb::avm2::tracegen {
@@ -29,4 +35,11 @@ void ClassIdDerivationTraceBuilder::process(
2935
row++;
3036
}
3137
}
38+
39+
std::vector<std::unique_ptr<InteractionBuilderInterface>> ClassIdDerivationTraceBuilder::lookup_jobs()
40+
{
41+
return make_jobs<std::unique_ptr<InteractionBuilderInterface>>(
42+
std::make_unique<LookupIntoDynamicTableSequential<lookup_class_id_derivation_class_id_poseidon2_0_settings>>(),
43+
std::make_unique<LookupIntoDynamicTableSequential<lookup_class_id_derivation_class_id_poseidon2_1_settings>>());
44+
}
3245
} // namespace bb::avm2::tracegen

barretenberg/cpp/src/barretenberg/vm2/tracegen/class_id_derivation_trace.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include <memory>
4+
35
#include "barretenberg/vm2/generated/columns.hpp"
46
#include "barretenberg/vm2/simulation/events/class_id_derivation_event.hpp"
57
#include "barretenberg/vm2/simulation/events/event_emitter.hpp"
@@ -11,6 +13,8 @@ class ClassIdDerivationTraceBuilder final {
1113
public:
1214
void process(const simulation::EventEmitterInterface<simulation::ClassIdDerivationEvent>::Container& events,
1315
TraceContainer& trace);
16+
17+
static std::vector<std::unique_ptr<class InteractionBuilderInterface>> lookup_jobs();
1418
};
1519

1620
} // namespace bb::avm2::tracegen

barretenberg/cpp/src/barretenberg/vm2/tracegen/ecc_trace.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
#include "barretenberg/vm2/tracegen/ecc_trace.hpp"
22

33
#include <cassert>
4+
#include <memory>
45

56
#include "barretenberg/vm2/common/aztec_types.hpp"
67
#include "barretenberg/vm2/common/field.hpp"
8+
#include "barretenberg/vm2/generated/relations/lookups_scalar_mul.hpp"
79
#include "barretenberg/vm2/simulation/events/ecc_events.hpp"
810
#include "barretenberg/vm2/simulation/events/event_emitter.hpp"
11+
#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp"
12+
#include "barretenberg/vm2/tracegen/lib/lookup_builder.hpp"
13+
#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp"
914

1015
namespace bb::avm2::tracegen {
1116

@@ -153,4 +158,12 @@ void EccTraceBuilder::process_scalar_mul(
153158
}
154159
}
155160

161+
std::vector<std::unique_ptr<InteractionBuilderInterface>> EccTraceBuilder::lookup_jobs()
162+
{
163+
return make_jobs<std::unique_ptr<InteractionBuilderInterface>>(
164+
std::make_unique<LookupIntoDynamicTableGeneric<lookup_scalar_mul_double_settings>>(),
165+
std::make_unique<LookupIntoDynamicTableGeneric<lookup_scalar_mul_add_settings>>(),
166+
std::make_unique<LookupIntoDynamicTableGeneric<lookup_scalar_mul_to_radix_settings>>());
167+
}
168+
156169
} // namespace bb::avm2::tracegen

barretenberg/cpp/src/barretenberg/vm2/tracegen/ecc_trace.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include <memory>
4+
35
#include "barretenberg/vm2/generated/columns.hpp"
46
#include "barretenberg/vm2/simulation/events/ecc_events.hpp"
57
#include "barretenberg/vm2/simulation/events/event_emitter.hpp"
@@ -13,6 +15,8 @@ class EccTraceBuilder final {
1315
TraceContainer& trace);
1416
void process_scalar_mul(const simulation::EventEmitterInterface<simulation::ScalarMulEvent>::Container& events,
1517
TraceContainer& trace);
18+
19+
static std::vector<std::unique_ptr<class InteractionBuilderInterface>> lookup_jobs();
1620
};
1721

1822
} // namespace bb::avm2::tracegen

barretenberg/cpp/src/barretenberg/vm2/tracegen/field_gt_trace.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
#include "barretenberg/vm2/tracegen/field_gt_trace.hpp"
2+
3+
#include <memory>
4+
25
#include "barretenberg/vm2/common/field.hpp"
6+
#include "barretenberg/vm2/generated/relations/lookups_ff_gt.hpp"
37
#include "barretenberg/vm2/simulation/lib/u256_decomposition.hpp"
8+
#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp"
9+
#include "barretenberg/vm2/tracegen/lib/lookup_builder.hpp"
10+
#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp"
411

512
namespace bb::avm2::tracegen {
613

@@ -76,4 +83,11 @@ void FieldGreaterThanTraceBuilder::process(
7683
}
7784
}
7885

86+
std::vector<std::unique_ptr<InteractionBuilderInterface>> FieldGreaterThanTraceBuilder::lookup_jobs()
87+
{
88+
return make_jobs<std::unique_ptr<InteractionBuilderInterface>>(
89+
std::make_unique<LookupIntoDynamicTableGeneric<lookup_ff_gt_a_lo_range_settings>>(),
90+
std::make_unique<LookupIntoDynamicTableGeneric<lookup_ff_gt_a_hi_range_settings>>());
91+
}
92+
7993
} // namespace bb::avm2::tracegen

barretenberg/cpp/src/barretenberg/vm2/tracegen/field_gt_trace.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include <memory>
4+
35
#include "barretenberg/vm2/generated/columns.hpp"
46
#include "barretenberg/vm2/simulation/events/event_emitter.hpp"
57
#include "barretenberg/vm2/simulation/events/field_gt_event.hpp"
@@ -11,6 +13,8 @@ class FieldGreaterThanTraceBuilder final {
1113
public:
1214
void process(const simulation::EventEmitterInterface<simulation::FieldGreaterThanEvent>::Container& events,
1315
TraceContainer& trace);
16+
17+
static std::vector<std::unique_ptr<class InteractionBuilderInterface>> lookup_jobs();
1418
};
1519

1620
} // namespace bb::avm2::tracegen

barretenberg/cpp/src/barretenberg/vm2/tracegen/lib/interaction_builder.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ template <typename LookupSettings> void SetDummyInverses(TraceContainer& trace)
2020
[&](uint32_t row, const FF&) { trace.set(LookupSettings::INVERSES, row, 0xdeadbeef); });
2121
}
2222

23-
} // namespace bb::avm2::tracegen
23+
} // namespace bb::avm2::tracegen
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#pragma once
2+
3+
#include <memory>
4+
#include <vector>
5+
6+
namespace bb::avm2::tracegen {
7+
8+
// Helper function to create a vector of unique_ptrs.
9+
template <typename R, typename... Ts> std::vector<R> make_jobs(Ts&&... args)
10+
{
11+
std::vector<R> jobs;
12+
jobs.reserve(sizeof...(Ts));
13+
(jobs.push_back(std::move(args)), ...);
14+
return jobs;
15+
}
16+
17+
} // namespace bb::avm2::tracegen

barretenberg/cpp/src/barretenberg/vm2/tracegen/merkle_check_trace.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
#include <cstdint>
2+
#include <memory>
23

34
#include "barretenberg/crypto/poseidon2/poseidon2.hpp"
5+
#include "barretenberg/vm2/generated/relations/lookups_merkle_check.hpp"
46
#include "barretenberg/vm2/simulation/events/event_emitter.hpp"
57
#include "barretenberg/vm2/simulation/events/merkle_check_event.hpp"
8+
#include "barretenberg/vm2/tracegen/lib/interaction_builder.hpp"
9+
#include "barretenberg/vm2/tracegen/lib/lookup_builder.hpp"
10+
#include "barretenberg/vm2/tracegen/lib/make_jobs.hpp"
611
#include "barretenberg/vm2/tracegen/merkle_check_trace.hpp"
712

813
namespace bb::avm2::tracegen {
@@ -89,4 +94,11 @@ void MerkleCheckTraceBuilder::process(
8994
}
9095
}
9196

97+
std::vector<std::unique_ptr<InteractionBuilderInterface>> MerkleCheckTraceBuilder::lookup_jobs()
98+
{
99+
return make_jobs<std::unique_ptr<InteractionBuilderInterface>>(
100+
std::make_unique<LookupIntoDynamicTableSequential<lookup_merkle_check_merkle_poseidon2_read_settings>>(),
101+
std::make_unique<LookupIntoDynamicTableSequential<lookup_merkle_check_merkle_poseidon2_write_settings>>());
102+
}
103+
92104
} // namespace bb::avm2::tracegen

barretenberg/cpp/src/barretenberg/vm2/tracegen/merkle_check_trace.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include <memory>
4+
35
#include "barretenberg/vm2/generated/columns.hpp"
46
#include "barretenberg/vm2/simulation/events/event_emitter.hpp"
57
#include "barretenberg/vm2/simulation/events/merkle_check_event.hpp"
@@ -11,6 +13,8 @@ class MerkleCheckTraceBuilder final {
1113
public:
1214
void process(const simulation::EventEmitterInterface<simulation::MerkleCheckEvent>::Container& events,
1315
TraceContainer& trace);
16+
17+
static std::vector<std::unique_ptr<class InteractionBuilderInterface>> lookup_jobs();
1418
};
1519

1620
} // namespace bb::avm2::tracegen

0 commit comments

Comments
 (0)