Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
get_contract_instance_trace.cpp
Go to the documentation of this file.
2
3#include <cstddef>
4#include <cstdint>
5
17
18namespace bb::avm2::tracegen {
19
20using C = Column;
21
25{
26 // Set the selector to 0 at row 0 to enable skippable gadget
27 trace.set(C::get_contract_instance_sel, 0, 0);
28
29 uint32_t row = 1;
30 for (const auto& event : events) {
31
32 // Bounds checking logic for new constraint
33 bool writes_are_in_bounds = event.dst_offset != AVM_HIGHEST_MEM_ADDRESS;
34 FF dst_offset_diff_max = FF(AVM_HIGHEST_MEM_ADDRESS) - FF(event.dst_offset);
35 // dstOffset+1 out of bounds <==> `DST_OFFSET_DIFF_MAX = 0`
36 // Generate `dst_offset_diff_max_inv` as `inverse(DST_OFFSET_DIFF_MAX)`
37 FF dst_offset_diff_max_inv;
38 if (dst_offset_diff_max.is_zero()) {
39 dst_offset_diff_max_inv = FF(0);
40 } else {
41 dst_offset_diff_max_inv = dst_offset_diff_max.invert();
42 }
43
44 bool is_valid_member_enum = false;
45 bool is_deployer = false;
46 bool is_class_id = false;
47 bool is_init_hash = false;
48
49 if (writes_are_in_bounds) {
50 // Get precomputed table values for this member enum
51 const auto spec = GetContractInstanceSpec::get_table(event.member_enum);
52
53 is_valid_member_enum = spec.is_valid_member_enum;
54 is_deployer = spec.is_deployer;
55 is_class_id = spec.is_class_id;
56 is_init_hash = spec.is_init_hash;
57 }
58
59 bool has_error = !(writes_are_in_bounds && is_valid_member_enum);
60
61 FF selected_member = is_deployer ? event.retrieved_deployer_addr
62 : is_class_id ? event.retrieved_class_id
63 : is_init_hash ? event.retrieved_init_hash
64 : FF(0);
65
66 trace.set(
67 row,
68 { {
69 // Interface columns
70 { C::get_contract_instance_sel, 1 },
71 { C::get_contract_instance_clk, event.execution_clk },
72 { C::get_contract_instance_contract_address, event.contract_address },
73 { C::get_contract_instance_dst_offset, event.dst_offset },
74 { C::get_contract_instance_member_enum, event.member_enum },
75 { C::get_contract_instance_space_id, event.space_id },
76 { C::get_contract_instance_public_data_tree_root, event.public_data_tree_root },
77 { C::get_contract_instance_nullifier_tree_root, event.nullifier_tree_root },
78 { C::get_contract_instance_sel_error, has_error ? 1 : 0 },
79 // Intermediate selectors and error flags
80 { C::get_contract_instance_is_valid_writes_in_bounds, writes_are_in_bounds ? 1 : 0 },
81 { C::get_contract_instance_dst_offset_diff_max_inv, dst_offset_diff_max_inv },
82 // Columns from precomputed table
83 { C::get_contract_instance_is_valid_member_enum, is_valid_member_enum ? 1 : 0 },
84 { C::get_contract_instance_is_deployer, is_deployer ? 1 : 0 },
85 { C::get_contract_instance_is_class_id, is_class_id ? 1 : 0 },
86 { C::get_contract_instance_is_init_hash, is_init_hash ? 1 : 0 },
87 // Retrieval results
88 { C::get_contract_instance_instance_exists, event.instance_exists ? 1 : 0 },
89 { C::get_contract_instance_retrieved_deployer_addr, event.retrieved_deployer_addr },
90 { C::get_contract_instance_retrieved_class_id, event.retrieved_class_id },
91 { C::get_contract_instance_retrieved_init_hash, event.retrieved_init_hash },
92 { C::get_contract_instance_selected_member, selected_member },
93 // Memory writing
94 { C::get_contract_instance_member_write_offset, event.dst_offset + 1 },
95 { C::get_contract_instance_exists_tag, writes_are_in_bounds ? static_cast<uint8_t>(ValueTag::U1) : 0 },
96 { C::get_contract_instance_member_tag, writes_are_in_bounds ? static_cast<uint8_t>(ValueTag::FF) : 0 },
97 } });
98
99 row++;
100 }
101}
102
106 .add<lookup_get_contract_instance_contract_instance_retrieval_settings, InteractionType::LookupSequential>()
111
112} // namespace bb::avm2::tracegen
#define AVM_HIGHEST_MEM_ADDRESS
void process(const simulation::EventEmitterInterface< simulation::GetContractInstanceEvent >::Container &events, TraceContainer &trace)
InteractionDefinition & add(auto &&... args)
TestTraceContainer trace
lookup_settings< lookup_get_contract_instance_precomputed_info_settings_ > lookup_get_contract_instance_precomputed_info_settings
lookup_settings< lookup_get_contract_instance_mem_write_contract_instance_exists_settings_ > lookup_get_contract_instance_mem_write_contract_instance_exists_settings
AvmFlavorSettings::FF FF
Definition field.hpp:10
simulation::PublicDataTreeReadWriteEvent event