Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
fuzzer_context.cpp
Go to the documentation of this file.
2
7
8namespace bb::avm2::fuzzer {
9
10namespace {
11
12// Helper function to create a default contract class from bytecode
13ContractClass create_default_class(const std::vector<uint8_t>& bytecode)
14{
15 // This isn't strictly needed for pure simulation, but if we want to re-use inputs in proving we need valid
16 // commitment
18 auto class_id =
19 simulation::compute_contract_class_id(/*artifact_hash=*/0, /*private_fn_root=*/0, bytecode_commitment);
20 return ContractClass{
21 .id = class_id,
22 .artifact_hash = 0,
23 .private_functions_root = 0,
24 .packed_bytecode = bytecode,
25 };
26}
27
28// Helper function to create a default contract instance from a class ID
29ContractInstance create_default_instance(const ContractClassId& class_id)
30{
31 // To avoid Assertion failed: (contract_instance.public_keys.incoming_viewing_key.on_curve())
32 auto affine_one = grumpkin::g1::affine_one;
33 return ContractInstance{
34 .salt = 0,
35 .deployer = MSG_SENDER,
36 .current_contract_class_id = class_id,
37 .original_contract_class_id = class_id,
38 .initialization_hash = 0,
39 .public_keys =
41 .nullifier_key = affine_one,
42 .incoming_viewing_key = affine_one,
43 .outgoing_viewing_key = affine_one,
44 .tagging_key = affine_one,
45 },
46 };
47}
48
49} // anonymous namespace
50
52{
53 auto default_class = create_default_class(bytecode);
54 auto default_instance = create_default_instance(default_class.id);
56
57 contract_db_->add_contract_class(default_class.id, default_class);
58 contract_db_->add_contract_instance(contract_address, default_instance);
60
61 try {
63 } catch (const std::exception& e) {
64 std::string msg = e.what();
65 // Ignore duplicates, the contract is already registered
66 if (msg.find("is already present") == std::string::npos) {
67 // Re-throw other errors
68 throw e;
69 }
70 }
71 return contract_address;
72}
73
79
80} // namespace bb::avm2::fuzzer
const FF MSG_SENDER
Definition constants.hpp:33
std::shared_ptr< Napi::ThreadSafeFunction > bytecode
FF register_contract_from_bytecode(const std::vector< uint8_t > &bytecode)
Register a contract from its bytecode.
void reset()
Clear all contract addresses and reset the contract DB.
std::unique_ptr< FuzzerContractDB > contract_db_
static FuzzerWorldStateManager * getInstance()
Definition dbs.hpp:80
void register_contract_address(const AztecAddress &contract_address)
Definition dbs.cpp:218
static constexpr affine_element affine_one
Definition group.hpp:48
FF compute_public_bytecode_commitment(std::span< const uint8_t > bytecode)
FF compute_contract_class_id(const FF &artifact_hash, const FF &private_fn_root, const FF &public_bytecode_commitment)
FF compute_contract_address(const ContractInstance &contract_instance)
FF ContractClassId
AvmFlavorSettings::FF FF
Definition field.hpp:10
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
AffinePoint nullifier_key