Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
update_check_trace.cpp
Go to the documentation of this file.
2
7
8namespace bb::avm2::tracegen {
9
24{
25 using C = Column;
26
27 uint32_t row = 0;
28
29 for (const auto& event : events) {
30 uint256_t update_metadata = static_cast<uint256_t>(event.update_preimage_metadata);
31 uint256_t update_metadata_hi = update_metadata >> TIMESTAMP_OF_CHANGE_BIT_SIZE;
32
33 // Note that the code below no longer works after 2106 as by that time the timestamp will overflow u32. The 64
34 // bit timestamp being packed in 32 bits is a tech debt that is not worth tackling.
35 uint64_t timestamp_of_change = static_cast<uint64_t>(static_cast<uint32_t>(update_metadata & 0xffffffff));
36
37 bool hash_not_zero = event.update_hash != 0;
38 bool timestamp_is_lt_timestamp_of_change = event.current_timestamp < timestamp_of_change;
39 bool update_pre_class_id_is_zero = event.update_preimage_pre_class_id == 0;
40 bool update_post_class_id_is_zero = event.update_preimage_post_class_id == 0;
41
42 trace.set(
43 row,
44 { {
45 { C::update_check_sel, 1 },
46 { C::update_check_const_three, 3 },
47 { C::update_check_address, event.address },
48 { C::update_check_current_class_id, event.current_class_id },
49 { C::update_check_original_class_id, event.original_class_id },
50 { C::update_check_public_data_tree_root, event.public_data_tree_root },
51 { C::update_check_timestamp, event.current_timestamp },
52 { C::update_check_timestamp_pi_offset, AVM_PUBLIC_INPUTS_GLOBAL_VARIABLES_TIMESTAMP_ROW_IDX },
53 { C::update_check_update_hash, event.update_hash },
54 { C::update_check_update_hash_inv, event.update_hash }, // Will be inverted in batch later
55 { C::update_check_hash_not_zero, hash_not_zero },
56 { C::update_check_update_preimage_metadata, event.update_preimage_metadata },
57 { C::update_check_update_preimage_pre_class_id, event.update_preimage_pre_class_id },
58 { C::update_check_update_preimage_post_class_id, event.update_preimage_post_class_id },
59 { C::update_check_updated_class_ids_slot, UPDATED_CLASS_IDS_SLOT },
60 { C::update_check_dom_sep_public_storage_map_slot, DOM_SEP__PUBLIC_STORAGE_MAP_SLOT },
61 { C::update_check_delayed_public_mutable_slot, event.delayed_public_mutable_slot },
62 { C::update_check_delayed_public_mutable_hash_slot,
63 event.delayed_public_mutable_slot + UPDATES_DELAYED_PUBLIC_MUTABLE_VALUES_LEN },
64 { C::update_check_contract_instance_registry_address, CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS },
65 { C::update_check_timestamp_of_change, timestamp_of_change },
66 { C::update_check_update_hi_metadata, update_metadata_hi },
67 { C::update_check_update_hi_metadata_bit_size,
69 { C::update_check_timestamp_of_change_bit_size, TIMESTAMP_OF_CHANGE_BIT_SIZE },
70 { C::update_check_timestamp_is_lt_timestamp_of_change, timestamp_is_lt_timestamp_of_change },
71 { C::update_check_update_pre_class_id_is_zero, update_pre_class_id_is_zero },
72 { C::update_check_update_pre_class_inv,
73 event.update_preimage_pre_class_id }, // Will be inverted in batch later
74 { C::update_check_update_post_class_id_is_zero, update_post_class_id_is_zero },
75 { C::update_check_update_post_class_inv,
76 event.update_preimage_post_class_id }, // Will be inverted in batch later
77 } });
78 row++;
79 }
80
81 // Batch invert the columns.
82 trace.invert_columns({ {
83 C::update_check_update_hash_inv,
84 C::update_check_update_pre_class_inv,
85 C::update_check_update_post_class_inv,
86 } });
87}
88
92 .add<lookup_update_check_update_hash_poseidon2_settings, InteractionType::LookupSequential>()
94 .add<lookup_update_check_update_hash_public_data_read_settings, InteractionType::LookupGeneric>()
96 .add<lookup_update_check_update_lo_metadata_range_settings, InteractionType::LookupGeneric>()
98 Column::gt_sel);
99
100} // namespace bb::avm2::tracegen
#define UPDATES_DELAYED_PUBLIC_MUTABLE_METADATA_BIT_SIZE
#define UPDATES_DELAYED_PUBLIC_MUTABLE_VALUES_LEN
#define DOM_SEP__PUBLIC_STORAGE_MAP_SLOT
#define UPDATED_CLASS_IDS_SLOT
#define TIMESTAMP_OF_CHANGE_BIT_SIZE
#define AVM_PUBLIC_INPUTS_GLOBAL_VARIABLES_TIMESTAMP_ROW_IDX
#define CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS
InteractionDefinition & add(auto &&... args)
void process(const simulation::EventEmitterInterface< simulation::UpdateCheckEvent >::Container &events, TraceContainer &trace)
Process the UpdateCheck events and populate the relevant columns in the trace.
static const InteractionDefinition interactions
TestTraceContainer trace
lookup_settings< lookup_update_check_delayed_public_mutable_slot_poseidon2_settings_ > lookup_update_check_delayed_public_mutable_slot_poseidon2_settings
lookup_settings< lookup_update_check_timestamp_is_lt_timestamp_of_change_settings_ > lookup_update_check_timestamp_is_lt_timestamp_of_change_settings
lookup_settings< lookup_update_check_timestamp_from_public_inputs_settings_ > lookup_update_check_timestamp_from_public_inputs_settings
lookup_settings< lookup_update_check_update_hi_metadata_range_settings_ > lookup_update_check_update_hi_metadata_range_settings
simulation::PublicDataTreeReadWriteEvent event