Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
contract_instance_retrieval_trace.cpp
Go to the documentation of this file.
2
3#include <memory>
4
14
15namespace bb::avm2::tracegen {
16
20{
21 using C = Column;
22
23 // Set the selector to 0 at row 0 to enable skippable gadget
24 trace.set(C::contract_instance_retrieval_sel, 0, 0);
25
26 uint32_t row = 1;
27 for (const auto& event : events) {
28 AztecAddress derived_address = event.address;
29 FF protocol_contract_derived_address = 0;
30 uint32_t derived_address_pi_index = 0;
31
32 if (event.is_protocol_contract) {
33 derived_address = event.exists ? simulation::compute_contract_address(event.contract_instance) : 0;
34 protocol_contract_derived_address = derived_address;
35 derived_address_pi_index =
36 AVM_PUBLIC_INPUTS_PROTOCOL_CONTRACTS_ROW_IDX + static_cast<uint32_t>(event.address - 1);
37 }
38
39 // No update check for protocol contract instances
40 bool check_update = event.exists && !event.is_protocol_contract;
41
42 trace.set(
43 row,
44 { {
45 { C::contract_instance_retrieval_sel, 1 },
46 { C::contract_instance_retrieval_address, event.address },
47 { C::contract_instance_retrieval_exists, event.exists ? 1 : 0 },
48
49 // Contract instance members
50 { C::contract_instance_retrieval_salt, event.contract_instance.salt },
51 { C::contract_instance_retrieval_deployer_addr, event.contract_instance.deployer_addr },
52 { C::contract_instance_retrieval_current_class_id, event.contract_instance.current_class_id },
53 { C::contract_instance_retrieval_original_class_id, event.contract_instance.original_class_id },
54 { C::contract_instance_retrieval_init_hash, event.contract_instance.initialisation_hash },
55
56 // Public keys (hinted)
57 { C::contract_instance_retrieval_nullifier_key_x, event.contract_instance.public_keys.nullifier_key.x },
58 { C::contract_instance_retrieval_nullifier_key_y, event.contract_instance.public_keys.nullifier_key.y },
59 { C::contract_instance_retrieval_incoming_viewing_key_x,
60 event.contract_instance.public_keys.incoming_viewing_key.x },
61 { C::contract_instance_retrieval_incoming_viewing_key_y,
62 event.contract_instance.public_keys.incoming_viewing_key.y },
63 { C::contract_instance_retrieval_outgoing_viewing_key_x,
64 event.contract_instance.public_keys.outgoing_viewing_key.x },
65 { C::contract_instance_retrieval_outgoing_viewing_key_y,
66 event.contract_instance.public_keys.outgoing_viewing_key.y },
67 { C::contract_instance_retrieval_tagging_key_x, event.contract_instance.public_keys.tagging_key.x },
68 { C::contract_instance_retrieval_tagging_key_y, event.contract_instance.public_keys.tagging_key.y },
69
70 // Tree context
71 { C::contract_instance_retrieval_public_data_tree_root, event.public_data_tree_root },
72 { C::contract_instance_retrieval_nullifier_tree_root, event.nullifier_tree_root },
73
74 // Deployer protocol contract address constant
75 { C::contract_instance_retrieval_deployer_protocol_contract_address,
77
78 // Columns conditional on protocol contract instance
79 { C::contract_instance_retrieval_address_sub_one, event.address - 1 },
80 { C::contract_instance_retrieval_max_protocol_contracts, MAX_PROTOCOL_CONTRACTS },
81 { C::contract_instance_retrieval_derived_address_pi_index, derived_address_pi_index },
82 { C::contract_instance_retrieval_protocol_contract_derived_address_inv,
83 protocol_contract_derived_address }, // Will be inverted in batch later
84 { C::contract_instance_retrieval_derived_address, derived_address },
85 { C::contract_instance_retrieval_is_protocol_contract, event.is_protocol_contract ? 1 : 0 },
86 { C::contract_instance_retrieval_should_check_nullifier, !event.is_protocol_contract ? 1 : 0 },
87 { C::contract_instance_retrieval_should_check_for_update, check_update ? 1 : 0 },
88 } });
89 row++;
90 }
91
92 // Batch invert the columns.
93 trace.invert_columns({ { C::contract_instance_retrieval_protocol_contract_derived_address_inv } });
94}
95
99 .add<lookup_contract_instance_retrieval_address_derivation_settings, InteractionType::LookupGeneric>()
101 .add<lookup_contract_instance_retrieval_check_protocol_address_range_settings, InteractionType::LookupGeneric>()
104
105} // namespace bb::avm2::tracegen
#define AVM_PUBLIC_INPUTS_PROTOCOL_CONTRACTS_ROW_IDX
#define MAX_PROTOCOL_CONTRACTS
#define CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS
void process(const simulation::EventEmitterInterface< simulation::ContractInstanceRetrievalEvent >::Container &events, TraceContainer &trace)
InteractionDefinition & add(auto &&... args)
TestTraceContainer trace
FF compute_contract_address(const ContractInstance &contract_instance)
lookup_settings< lookup_contract_instance_retrieval_read_derived_address_from_public_inputs_settings_ > lookup_contract_instance_retrieval_read_derived_address_from_public_inputs_settings
lookup_settings< lookup_contract_instance_retrieval_update_check_settings_ > lookup_contract_instance_retrieval_update_check_settings
lookup_settings< lookup_contract_instance_retrieval_deployment_nullifier_read_settings_ > lookup_contract_instance_retrieval_deployment_nullifier_read_settings
AvmFlavorSettings::FF FF
Definition field.hpp:10
simulation::PublicDataTreeReadWriteEvent event