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
19 TraceContainer& trace)
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 },
52 { C::contract_instance_retrieval_current_class_id, event.contract_instance.current_contract_class_id },
53 { C::contract_instance_retrieval_original_class_id,
54 event.contract_instance.original_contract_class_id },
55 { C::contract_instance_retrieval_init_hash, event.contract_instance.initialization_hash },
56
57 // Public keys (hinted)
58 { C::contract_instance_retrieval_nullifier_key_x, event.contract_instance.public_keys.nullifier_key.x },
59 { C::contract_instance_retrieval_nullifier_key_y, event.contract_instance.public_keys.nullifier_key.y },
60 { C::contract_instance_retrieval_incoming_viewing_key_x,
61 event.contract_instance.public_keys.incoming_viewing_key.x },
62 { C::contract_instance_retrieval_incoming_viewing_key_y,
63 event.contract_instance.public_keys.incoming_viewing_key.y },
64 { C::contract_instance_retrieval_outgoing_viewing_key_x,
65 event.contract_instance.public_keys.outgoing_viewing_key.x },
66 { C::contract_instance_retrieval_outgoing_viewing_key_y,
67 event.contract_instance.public_keys.outgoing_viewing_key.y },
68 { C::contract_instance_retrieval_tagging_key_x, event.contract_instance.public_keys.tagging_key.x },
69 { C::contract_instance_retrieval_tagging_key_y, event.contract_instance.public_keys.tagging_key.y },
70
71 // Tree context
72 { C::contract_instance_retrieval_public_data_tree_root, event.public_data_tree_root },
73 { C::contract_instance_retrieval_nullifier_tree_root, event.nullifier_tree_root },
74
75 // Deployer protocol contract address constant
76 { C::contract_instance_retrieval_deployer_protocol_contract_address,
78
79 // Columns conditional on protocol contract instance
80 { C::contract_instance_retrieval_address_sub_one, event.address - 1 },
81 { C::contract_instance_retrieval_max_protocol_contracts, MAX_PROTOCOL_CONTRACTS },
82 { C::contract_instance_retrieval_derived_address_pi_index, derived_address_pi_index },
83 { C::contract_instance_retrieval_protocol_contract_derived_address_inv,
84 protocol_contract_derived_address }, // Will be inverted in batch later
85 { C::contract_instance_retrieval_derived_address, derived_address },
86 { C::contract_instance_retrieval_is_protocol_contract, event.is_protocol_contract ? 1 : 0 },
87 { C::contract_instance_retrieval_should_check_nullifier, !event.is_protocol_contract ? 1 : 0 },
88 { C::contract_instance_retrieval_should_check_for_update, check_update ? 1 : 0 },
89 } });
90 row++;
91 }
92
93 // Batch invert the columns.
94 trace.invert_columns({ { C::contract_instance_retrieval_protocol_contract_derived_address_inv } });
95}
96
100 .add<lookup_contract_instance_retrieval_address_derivation_settings, InteractionType::LookupGeneric>()
102 .add<lookup_contract_instance_retrieval_check_protocol_address_range_settings, InteractionType::LookupGeneric>()
105
106} // 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