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
9
10namespace bb::avm2::tracegen {
11
28 TraceContainer& trace)
29{
30 using C = Column;
31
32 // Set the selector to 0 at row 0 to enable skippable gadget
33 trace.set(C::contract_instance_retrieval_sel, 0, 0);
34
35 uint32_t row = 1;
36 for (const auto& event : events) {
37 AztecAddress derived_address = event.address;
38 FF protocol_contract_derived_address = 0;
39 uint32_t derived_address_pi_index = 0;
40
41 if (event.is_protocol_contract) {
42 derived_address = event.exists ? simulation::compute_contract_address(event.contract_instance) : 0;
43 protocol_contract_derived_address = derived_address;
44 derived_address_pi_index =
45 AVM_PUBLIC_INPUTS_PROTOCOL_CONTRACTS_ROW_IDX + static_cast<uint32_t>(event.address - 1);
46 }
47
48 // No update check for protocol contract instances
49 bool check_update = event.exists && !event.is_protocol_contract;
50
51 trace.set(
52 row,
53 { {
54 { C::contract_instance_retrieval_sel, 1 },
55 { C::contract_instance_retrieval_address, event.address },
56 { C::contract_instance_retrieval_exists, event.exists ? 1 : 0 },
57
58 // Contract instance members
59 { C::contract_instance_retrieval_salt, event.contract_instance.salt },
60 { C::contract_instance_retrieval_deployer_addr, event.contract_instance.deployer },
61 { C::contract_instance_retrieval_current_class_id, event.contract_instance.current_contract_class_id },
62 { C::contract_instance_retrieval_original_class_id,
63 event.contract_instance.original_contract_class_id },
64 { C::contract_instance_retrieval_init_hash, event.contract_instance.initialization_hash },
65
66 // Public keys (hinted)
67 { C::contract_instance_retrieval_nullifier_key_x, event.contract_instance.public_keys.nullifier_key.x },
68 { C::contract_instance_retrieval_nullifier_key_y, event.contract_instance.public_keys.nullifier_key.y },
69 { C::contract_instance_retrieval_incoming_viewing_key_x,
70 event.contract_instance.public_keys.incoming_viewing_key.x },
71 { C::contract_instance_retrieval_incoming_viewing_key_y,
72 event.contract_instance.public_keys.incoming_viewing_key.y },
73 { C::contract_instance_retrieval_outgoing_viewing_key_x,
74 event.contract_instance.public_keys.outgoing_viewing_key.x },
75 { C::contract_instance_retrieval_outgoing_viewing_key_y,
76 event.contract_instance.public_keys.outgoing_viewing_key.y },
77 { C::contract_instance_retrieval_tagging_key_x, event.contract_instance.public_keys.tagging_key.x },
78 { C::contract_instance_retrieval_tagging_key_y, event.contract_instance.public_keys.tagging_key.y },
79
80 // Tree context
81 { C::contract_instance_retrieval_public_data_tree_root, event.public_data_tree_root },
82 { C::contract_instance_retrieval_nullifier_tree_root, event.nullifier_tree_root },
83
84 // Deployer protocol contract address constant
85 { C::contract_instance_retrieval_deployer_protocol_contract_address,
87
88 // Columns conditional on protocol contract instance
89 { C::contract_instance_retrieval_address_sub_one, event.address - 1 },
90 { C::contract_instance_retrieval_max_protocol_contracts, MAX_PROTOCOL_CONTRACTS },
91 { C::contract_instance_retrieval_derived_address_pi_index, derived_address_pi_index },
92 { C::contract_instance_retrieval_protocol_contract_derived_address_inv,
93 protocol_contract_derived_address }, // Will be inverted in batch later
94 { C::contract_instance_retrieval_derived_address, derived_address },
95 { C::contract_instance_retrieval_is_protocol_contract, event.is_protocol_contract ? 1 : 0 },
96 { C::contract_instance_retrieval_should_check_nullifier, !event.is_protocol_contract ? 1 : 0 },
97 { C::contract_instance_retrieval_nullifier_tree_height, NULLIFIER_TREE_HEIGHT },
98 { C::contract_instance_retrieval_nullifier_merkle_separator, DOM_SEP__NULLIFIER_MERKLE },
99 { C::contract_instance_retrieval_siloing_separator, DOM_SEP__SILOED_NULLIFIER },
100 { C::contract_instance_retrieval_should_check_for_update, check_update ? 1 : 0 },
101 } });
102 row++;
103 }
104
105 // Batch invert the columns.
106 trace.invert_columns({ { C::contract_instance_retrieval_protocol_contract_derived_address_inv } });
107}
108
112 .add<InteractionType::LookupGeneric, lookup_contract_instance_retrieval_address_derivation_settings>()
114 .add<InteractionType::LookupGeneric, lookup_contract_instance_retrieval_check_protocol_address_range_settings>()
117
118} // namespace bb::avm2::tracegen
#define AVM_PUBLIC_INPUTS_PROTOCOL_CONTRACTS_ROW_IDX
#define DOM_SEP__SILOED_NULLIFIER
#define NULLIFIER_TREE_HEIGHT
#define MAX_PROTOCOL_CONTRACTS
#define DOM_SEP__NULLIFIER_MERKLE
#define CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS
void process(const simulation::EventEmitterInterface< simulation::ContractInstanceRetrievalEvent >::Container &events, TraceContainer &trace)
Process the contract instance retrieval events and populate the relevant columns in the trace.
InteractionDefinition & add(auto &&... args)
TestTraceContainer trace
FF compute_contract_address(const ContractInstance &contract_instance)
AvmFlavorSettings::FF FF
Definition field.hpp:10
simulation::PublicDataTreeReadWriteEvent event
Settings to be passed ot GenericLookupRelationImpl.