20 for (
size_t i = 0; i < 4; ++i) {
24 return avm2::Fq(limbs[0], limbs[1], limbs[2], limbs[3]);
35 Fq scalar = random_fq_scalar(rng);
45 const std::vector<AztecAddress>& contract_addresses,
46 std::vector<bb::crypto::merkle_tree::PublicDataLeafValue>& public_data_writes,
52 if (contract_classes.empty()) {
66 size_t original_size =
bytecode.size();
67 size_t max_size = original_size * 2;
86 new_class.
id = new_class_id;
92 instance.current_contract_class_id = new_class_id;
95 contract_classes.push_back(new_class);
107 for (
size_t i = 0; i < 4; i++) {
108 FF storage_slot = delayed_public_mutable_slot + i;
117 std::vector<AztecAddress>& contract_addresses,
121 if (contract_classes.empty()) {
150 for (
size_t i = 0; i < contract_instances.size(); i++) {
152 if (contract_instances[i].original_contract_class_id == klass.
id) {
153 fuzz_info(
"Mutated original contract class ", klass.
id,
" at address ", contract_addresses[i]);
157 contract_instances[i].current_contract_class_id = new_class_id;
158 contract_instances[i].original_contract_class_id = new_class_id;
159 auto contract_addr = std::ranges::find_if(
160 contract_addresses, [&](
const AztecAddress& addr) {
return addr == original_address; });
164 if (contract_instances[i].current_contract_class_id == klass.
id) {
165 fuzz_info(
"Mutated current contract class ", klass.
id,
" at address ", contract_addresses[i]);
167 contract_instances[i].current_contract_class_id = new_class_id;
172 klass.
id = new_class_id;
176 std::vector<AztecAddress>& contract_addresses,
180 if (contract_instances.empty()) {
191 constexpr size_t num_mutable_fields = 7;
208 mutate_point(
instance.public_keys.nullifier_key, rng);
212 mutate_point(
instance.public_keys.incoming_viewing_key, rng);
216 mutate_point(
instance.public_keys.outgoing_viewing_key, rng);
220 mutate_point(
instance.public_keys.tagging_key, rng);
230 std::ranges::find_if(contract_addresses, [&](
const AztecAddress& addr) {
return addr == original_address; });
void mutate_field(bb::avm2::FF &value, std::mt19937_64 &rng, const FieldMutationConfig &config)
std::shared_ptr< Napi::ThreadSafeFunction > instance
std::shared_ptr< Napi::ThreadSafeFunction > bytecode
#define UPDATED_CLASS_IDS_SLOT
#define DOM_SEP__PUBLIC_LEAF_INDEX
#define CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS
size_t LLVMFuzzerMutate(uint8_t *Data, size_t Size, size_t MaxSize)
static FF hash(const std::vector< FF > &input)
Hashes a vector of field elements.
static constexpr element one
constexpr FieldMutationConfig BASIC_FIELD_MUTATION_CONFIGURATION
AztecAddress contract_address
size_t LLVMFuzzerMutate(uint8_t *Data, size_t Size, size_t MaxSize)
void hash(State &state) noexcept
void mutate_contract_instances(std::vector< ContractInstance > &contract_instances, std::vector< AztecAddress > &contract_addresses, std::mt19937_64 &rng)
void mutate_contract_classes(std::vector< ContractClassWithCommitment > &contract_classes, std::vector< ContractInstance > &contract_instances, std::vector< AztecAddress > &contract_addresses, std::mt19937_64 &rng)
void mutate_bytecode(std::vector< ContractClassWithCommitment > &contract_classes, std::vector< ContractInstance > &contract_instances, const std::vector< AztecAddress > &contract_addresses, std::vector< bb::crypto::merkle_tree::PublicDataLeafValue > &public_data_writes, std::mt19937_64 &rng)
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)
AvmFlavorSettings::G1::Fq Fq
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
FF private_functions_root
FF public_bytecode_commitment
std::vector< uint8_t > packed_bytecode