Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
contract_instance_manager.cpp
Go to the documentation of this file.
3
4namespace bb::avm2::simulation {
5
15
28{
29 // If the instance is found, we validate that with a nullifier check, perform address derivation, and update
30 // checking. If it is not found, we validate its NON-membership with a nullifier check, and skip the rest.
31 // Note: this call to get_contract_instance performs address derivation.
33
34 // Note: skip canonical/magic address handling for now.
35 // TODO(dbanks12): Add magic address handling and skip other checks if it is a magic address.
36
38 // Emit error event
39 const auto& tree_state = merkle_db.get_tree_state();
40 event_emitter.emit(
41 { .address = contract_address,
42 .contract_instance = {}, // Empty instance for error case
43 .nullifier_tree_root = tree_state.nullifierTree.tree.root,
44 .public_data_tree_root = tree_state.publicDataTree.tree.root,
45 .deployment_nullifier = contract_address,
46 .nullifier_exists = false, // Nullifier not found!
47 .deployer_protocol_contract_address = AztecAddress(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS),
48 .error = true });
49
50 return std::nullopt;
51 }
52
53 assert(maybe_instance.has_value() && "Contract instance should be found if nullifier exists");
54 const ContractInstance& instance = maybe_instance.value();
55
56 // Validate that the contract instance is the latest if there have been any updates.
57 update_check.check_current_class_id(contract_address, instance);
58
59 const auto& tree_state = merkle_db.get_tree_state();
60 event_emitter.emit(
61 { .address = contract_address,
62 .contract_instance = instance,
63 // Tree context
64 .nullifier_tree_root = tree_state.nullifierTree.tree.root,
65 .public_data_tree_root = tree_state.publicDataTree.tree.root,
66 .deployment_nullifier = contract_address, // Contract address nullifier
67 .nullifier_exists = true, // Nullifier found!
68 .deployer_protocol_contract_address = AztecAddress(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS),
69 .error = false });
70
71 return instance;
72}
73
74} // namespace bb::avm2::simulation
#define CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS
StrictMock< MockHighLevelMerkleDB > merkle_db
StrictMock< MockContractDB > contract_db
virtual std::optional< ContractInstance > get_contract_instance(const AztecAddress &address) const =0
std::optional< ContractInstance > get_contract_instance(const FF &contract_address) override
Retrieves a contract instance from the contract database.
EventEmitterInterface< ContractInstanceRetrievalEvent > & event_emitter
ContractInstanceManager(ContractDBInterface &contract_db, HighLevelMerkleDBInterface &merkle_db, UpdateCheckInterface &update_check, EventEmitterInterface< ContractInstanceRetrievalEvent > &event_emitter)
virtual bool nullifier_exists(const AztecAddress &contract_address, const FF &nullifier) const =0
virtual TreeStates get_tree_state() const =0
EventEmitter< DataCopyEvent > event_emitter
AvmFlavorSettings::FF FF
Definition field.hpp:10
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13