16 .
operand(
static_cast<uint16_t
>(0))
51 for (
const auto& param : params) {
56 if (
tag.has_value()) {
65#ifdef DISABLE_ADD_8_INSTRUCTION
71 if (!
a.has_value() || !
b.has_value() || !result.has_value()) {
89#ifdef DISABLE_SUB_8_INSTRUCTION
95 if (!
a.has_value() || !
b.has_value() || !result.has_value()) {
104 .
operand(result.value().second)
112#ifdef DISABLE_MUL_8_INSTRUCTION
118 if (!
a.has_value() || !
b.has_value() || !result.has_value()) {
127 .
operand(result.value().second)
135#ifdef DISABLE_DIV_8_INSTRUCTION
141 if (!
a.has_value() || !
b.has_value() || !result.has_value()) {
150 .
operand(result.value().second)
158#ifdef DISABLE_EQ_8_INSTRUCTION
164 if (!
a.has_value() || !
b.has_value() || !result.has_value()) {
173 .
operand(result.value().second)
181#ifdef DISABLE_LT_8_INSTRUCTION
187 if (!
a.has_value() || !
b.has_value() || !result.has_value()) {
196 .
operand(result.value().second)
204#ifdef DISABLE_LTE_8_INSTRUCTION
210 if (!
a.has_value() || !
b.has_value() || !result.has_value()) {
219 .
operand(result.value().second)
227#ifdef DISABLE_AND_8_INSTRUCTION
233 if (!
a.has_value() || !
b.has_value() || !result.has_value()) {
243 .
operand(result.value().second)
251#ifdef DISABLE_OR_8_INSTRUCTION
257 if (!
a.has_value() || !
b.has_value() || !result.has_value()) {
267 .
operand(result.value().second)
275#ifdef DISABLE_XOR_8_INSTRUCTION
281 if (!
a.has_value() || !
b.has_value() || !result.has_value()) {
291 .
operand(result.value().second)
299#ifdef DISABLE_SHL_8_INSTRUCTION
305 if (!
a.has_value() || !
b.has_value() || !result.has_value()) {
315 .
operand(result.value().second)
323#ifdef DISABLE_SHR_8_INSTRUCTION
329 if (!
a.has_value() || !
b.has_value() || !result.has_value()) {
339 .
operand(result.value().second)
347#ifdef DISABLE_SET_8_INSTRUCTION
351 if (!effective_address_operand.has_value()) {
356 .operand(effective_address_operand.value().second)
361 effective_address_operand.value().first.absolute_address);
366#ifdef DISABLE_SET_16_INSTRUCTION
370 if (!effective_address_operand.has_value()) {
375 .operand(effective_address_operand.value().second)
380 effective_address_operand.value().first.absolute_address);
385#ifdef DISABLE_SET_32_INSTRUCTION
389 if (!effective_address_operand.has_value()) {
394 .operand(effective_address_operand.value().second)
399 effective_address_operand.value().first.absolute_address);
404#ifdef DISABLE_SET_64_INSTRUCTION
408 if (!effective_address_operand.has_value()) {
413 .operand(effective_address_operand.value().second)
418 effective_address_operand.value().first.absolute_address);
423#ifdef DISABLE_SET_128_INSTRUCTION
427 if (!effective_address_operand.has_value()) {
434 .operand(effective_address_operand.value().second)
439 effective_address_operand.value().first.absolute_address);
444#ifdef DISABLE_SET_FF_INSTRUCTION
448 if (!effective_address_operand.has_value()) {
453 .operand(effective_address_operand.value().second)
458 effective_address_operand.value().first.absolute_address);
463#ifdef DISABLE_MOV_8_INSTRUCTION
468 if (!src_address_operand.has_value() || !result_address_operand.has_value()) {
474 .
operand(src_address_operand.value().second)
475 .
operand(result_address_operand.value().second)
483#ifdef DISABLE_MOV_16_INSTRUCTION
488 if (!src_address_operand.has_value() || !result_address_operand.has_value()) {
495 .
operand(src_address_operand.value().second)
496 .
operand(result_address_operand.value().second)
504#ifdef DISABLE_FDIV_8_INSTRUCTION
510 if (!a_address_operand.has_value() || !b_address_operand.has_value() || !result_address_operand.has_value()) {
518 .
operand(a_address_operand.value().second)
519 .
operand(b_address_operand.value().second)
520 .
operand(result_address_operand.value().second)
524 result_address_operand.value().first);
529#ifdef DISABLE_NOT_8_INSTRUCTION
534 if (!a_address_operand.has_value() || !result_address_operand.has_value()) {
541 .
operand(a_address_operand.value().second)
542 .
operand(result_address_operand.value().second)
550#ifdef DISABLE_ADD_16_INSTRUCTION
556 if (!a_address_operand.has_value() || !b_address_operand.has_value() || !result_address_operand.has_value()) {
564 .
operand(a_address_operand.value().second)
565 .
operand(b_address_operand.value().second)
566 .
operand(result_address_operand.value().second)
570 result_address_operand.value().first);
575#ifdef DISABLE_SUB_16_INSTRUCTION
581 if (!a_address_operand.has_value() || !b_address_operand.has_value() || !result_address_operand.has_value()) {
589 .
operand(a_address_operand.value().second)
590 .
operand(b_address_operand.value().second)
591 .
operand(result_address_operand.value().second)
595 result_address_operand.value().first);
600#ifdef DISABLE_MUL_16_INSTRUCTION
606 if (!a_address_operand.has_value() || !b_address_operand.has_value() || !result_address_operand.has_value()) {
614 .
operand(a_address_operand.value().second)
615 .
operand(b_address_operand.value().second)
616 .
operand(result_address_operand.value().second)
620 result_address_operand.value().first);
625#ifdef DISABLE_DIV_16_INSTRUCTION
631 if (!a_address_operand.has_value() || !b_address_operand.has_value() || !result_address_operand.has_value()) {
639 .
operand(a_address_operand.value().second)
640 .
operand(b_address_operand.value().second)
641 .
operand(result_address_operand.value().second)
645 result_address_operand.value().first);
650#ifdef DISABLE_FDIV_16_INSTRUCTION
656 if (!a_address_operand.has_value() || !b_address_operand.has_value() || !result_address_operand.has_value()) {
664 .
operand(a_address_operand.value().second)
665 .
operand(b_address_operand.value().second)
666 .
operand(result_address_operand.value().second)
670 result_address_operand.value().first);
675#ifdef DISABLE_EQ_16_INSTRUCTION
681 if (!a_address_operand.has_value() || !b_address_operand.has_value() || !result_address_operand.has_value()) {
689 .
operand(a_address_operand.value().second)
690 .
operand(b_address_operand.value().second)
691 .
operand(result_address_operand.value().second)
699#ifdef DISABLE_LT_16_INSTRUCTION
705 if (!a_address_operand.has_value() || !b_address_operand.has_value() || !result_address_operand.has_value()) {
713 .
operand(a_address_operand.value().second)
714 .
operand(b_address_operand.value().second)
715 .
operand(result_address_operand.value().second)
723#ifdef DISABLE_LTE_16_INSTRUCTION
729 if (!a_address_operand.has_value() || !b_address_operand.has_value() || !result_address_operand.has_value()) {
737 .
operand(a_address_operand.value().second)
738 .
operand(b_address_operand.value().second)
739 .
operand(result_address_operand.value().second)
747#ifdef DISABLE_AND_16_INSTRUCTION
753 if (!a_address_operand.has_value() || !b_address_operand.has_value() || !result_address_operand.has_value()) {
761 .
operand(a_address_operand.value().second)
762 .
operand(b_address_operand.value().second)
763 .
operand(result_address_operand.value().second)
767 result_address_operand.value().first);
772#ifdef DISABLE_OR_16_INSTRUCTION
778 if (!a_address_operand.has_value() || !b_address_operand.has_value() || !result_address_operand.has_value()) {
786 .
operand(a_address_operand.value().second)
787 .
operand(b_address_operand.value().second)
788 .
operand(result_address_operand.value().second)
792 result_address_operand.value().first);
797#ifdef DISABLE_XOR_16_INSTRUCTION
803 if (!a_address_operand.has_value() || !b_address_operand.has_value() || !result_address_operand.has_value()) {
811 .
operand(a_address_operand.value().second)
812 .
operand(b_address_operand.value().second)
813 .
operand(result_address_operand.value().second)
817 result_address_operand.value().first);
822#ifdef DISABLE_NOT_16_INSTRUCTION
827 if (!a_address_operand.has_value() || !result_address_operand.has_value()) {
834 .
operand(a_address_operand.value().second)
835 .
operand(result_address_operand.value().second)
843#ifdef DISABLE_SHL_16_INSTRUCTION
849 if (!a_address_operand.has_value() || !b_address_operand.has_value() || !result_address_operand.has_value()) {
857 .
operand(a_address_operand.value().second)
858 .
operand(b_address_operand.value().second)
859 .
operand(result_address_operand.value().second)
863 result_address_operand.value().first);
868#ifdef DISABLE_SHR_16_INSTRUCTION
874 if (!a_address_operand.has_value() || !b_address_operand.has_value() || !result_address_operand.has_value()) {
882 .
operand(a_address_operand.value().second)
883 .
operand(b_address_operand.value().second)
884 .
operand(result_address_operand.value().second)
888 result_address_operand.value().first);
893#ifdef DISABLE_CAST_8_INSTRUCTION
898 if (!src_address_operand.has_value() || !result_address_operand.has_value()) {
905 .
operand(src_address_operand.value().second)
906 .
operand(result_address_operand.value().second)
911 result_address_operand.value().first.absolute_address);
916#ifdef DISABLE_CAST_16_INSTRUCTION
921 if (!src_address_operand.has_value() || !result_address_operand.has_value()) {
928 .
operand(src_address_operand.value().second)
929 .
operand(result_address_operand.value().second)
934 result_address_operand.value().first.absolute_address);
939#ifdef DISABLE_SSTORE_INSTRUCTION
944 if (!src_address_operand.has_value() || !result_address_operand.has_value()) {
954 .
operand(src_address_operand.value().second)
955 .
operand(result_address_operand.value().second)
963#ifdef DISABLE_SLOAD_INSTRUCTION
967 if (!slot_addr.has_value()) {
973 .value = *slot_addr };
977 if (!slot_address_operand.has_value() || !result_address_operand.has_value()) {
984 .
operand(slot_address_operand.value().second)
985 .
operand(result_address_operand.value().second)
993#ifdef DISABLE_GETENVVAR_INSTRUCTION
996 auto instruction_type =
static_cast<uint8_t
>(
instruction.type % 12);
998 if (!result_address_operand.has_value()) {
1003 .
operand(result_address_operand.value().second)
1008 if (instruction_type == 6) {
1010 result_address_operand.value().first.absolute_address);
1013 result_address_operand.value().first.absolute_address);
1019#ifdef DISABLE_EMITNULLIFIER_INSTRUCTION
1023 if (!nullifier_address_operand.has_value()) {
1028 .
operand(nullifier_address_operand.value().second)
1035#ifdef DISABLE_NULLIFIEREXISTS_INSTRUCTION
1039 auto contract_address_operand =
1042 if (!nullifier_address_operand.has_value() || !contract_address_operand.has_value() ||
1043 !result_address_operand.has_value()) {
1050 auto get_contract_address_instruction =
1055 .
operand(nullifier_address_operand.value().second)
1056 .
operand(contract_address_operand.value().second)
1057 .
operand(result_address_operand.value().second)
1065#ifdef DISABLE_EMITNOTEHASH_INSTRUCTION
1075 if (!note_hash_address_operand.has_value()) {
1081 .
operand(note_hash_address_operand.value().second)
1089#ifdef DISABLE_NOTEHASHEXISTS_INSTRUCTION
1097 if (!leaf_index.has_value()) {
1101 auto note_hash_counter =
static_cast<uint64_t
>(*leaf_index);
1108 .value = unique_note_computed_hash };
1112 .value = *leaf_index };
1116 auto leaf_index_address_operand =
1119 if (!notehash_address_operand.has_value() || !leaf_index_address_operand.has_value() ||
1120 !result_address_operand.has_value()) {
1128 .
operand(notehash_address_operand.value().second)
1129 .
operand(leaf_index_address_operand.value().second)
1130 .
operand(result_address_operand.value().second)
1138#ifdef DISABLE_CALLDATACOPY_INSTRUCTION
1153 if (!copy_size_address_operand.has_value() || !cd_start_address_operand.has_value() ||
1154 !dst_address_operand.has_value()) {
1162 .
operand(copy_size_address_operand.value().second)
1163 .
operand(cd_start_address_operand.value().second)
1164 .
operand(dst_address_operand.value().second)
1169 uint32_t calldata_base_offset = dst_address_operand.value().first.absolute_address;
1170 auto loop_upper_bound =
static_cast<uint32_t
>(std::min((calldata_base_offset) +
instruction.copy_size, 65535U));
1171 for (uint32_t calldata_addr = calldata_base_offset; calldata_addr < loop_upper_bound; calldata_addr++) {
1178#ifdef DISABLE_SENDL2TOL1MSG_INSTRUCTION
1192 if (!recipient_address_operand.has_value() || !content_address_operand.has_value()) {
1198 .
operand(recipient_address_operand.value().second)
1199 .
operand(content_address_operand.value().second)
1206#ifdef DISABLE_EMITUNENCRYPTEDLOG_INSTRUCTION
1210 auto log_values_address_operand =
1212 if (!log_size_address_operand.has_value() || !log_values_address_operand.has_value()) {
1217 auto emitunencryptedlog_instruction =
1219 .
operand(log_size_address_operand.value().second)
1220 .
operand(log_values_address_operand.value().second)
1222 instructions.push_back(emitunencryptedlog_instruction);
1227#ifdef DISABLE_CALL_INSTRUCTION
1247 .result_address =
instruction.calldata_size_address,
1248 .value =
static_cast<uint32_t
>(
instruction.calldata_size) });
1250 auto call_instruction_builder =
instruction.is_static_call
1253 auto call_instruction = call_instruction_builder.operand(
l2_gas.value().second)
1254 .operand(
da_gas.value().second)
1265#ifdef DISABLE_RETURNDATASIZE_WITH_RETURNDATACOPY_INSTRUCTION
1272 auto rd_start_set_instruction =
1290#ifdef DISABLE_GETCONTRACTINSTANCE_INSTRUCTION
1303 auto get_contract_instance_instruction =
1309 instructions.push_back(get_contract_instance_instruction);
1316#ifdef DISABLE_SUCCESSCOPY_INSTRUCTION
1320 if (!dst_address_operand.has_value()) {
1325 .
operand(dst_address_operand.value().second)
1333#ifdef DISABLE_ECADD_INSTRUCTION
1344 if (!p1_x.has_value() || !p1_y.has_value() || !p1_inf.has_value() || !p2_x.has_value() || !p2_y.has_value() ||
1345 !p2_inf.has_value() || !result.has_value()) {
1360 .
operand(p1_inf.value().second)
1363 .
operand(p2_inf.value().second)
1364 .
operand(result.value().second)
1376#ifdef DISABLE_POSEIDON2PERM_INSTRUCTION
1382 if (!src.has_value() || !dst.has_value()) {
1396 for (uint32_t i = 0; i < 4; i++) {
1403#ifdef DISABLE_KECCAKF1600_INSTRUCTION
1409 if (!src.has_value() || !dst.has_value()) {
1423 for (uint32_t i = 0; i < 25; i++) {
1430#ifdef DISABLE_SHA256COMPRESSION_INSTRUCTION
1437 if (!state.has_value() || !input.has_value() || !dst.has_value()) {
1447 .
operand(state.value().second)
1448 .
operand(input.value().second)
1453 for (uint32_t i = 0; i < 8; i++) {
1464 if (!msg_hash_operand.has_value() || !leaf_index_operand.has_value() || !result_operand.has_value()) {
1473 .
operand(msg_hash_operand.value().second)
1474 .
operand(leaf_index_operand.value().second)
1475 .
operand(result_operand.value().second)
1489 if (!value_operand.has_value() || !radix_operand.has_value() || !num_limbs_operand.has_value() ||
1490 !output_bits_operand.has_value() || !dst_operand.has_value()) {
1501 .
operand(dst_operand.value().second)
1502 .
operand(value_operand.value().second)
1503 .
operand(radix_operand.value().second)
1504 .
operand(num_limbs_operand.value().second)
1505 .
operand(output_bits_operand.value().second)
1521 auto internalreturn_instruction =
1528 if (!return_addr.has_value()) {
1534 uint16_t return_size_offset = 5U;
1544 .
operand(
static_cast<uint16_t
>(return_size_offset))
1552 uint16_t revert_value_offset_index)
1557 if (!revert_addr.has_value()) {
1562 uint16_t revert_size_offset = 5U;
1567 .
operand(
static_cast<uint16_t
>(revert_size))
1572 .
operand(
static_cast<uint16_t
>(revert_size_offset))
1584 if (copy_memory_manager) {
1592 bool copy_memory_manager)
1602 if (copy_memory_manager) {
1610 auto internalcall_instruction =
1622 auto internalcall_instruction =
instructions.at(instruction_index);
1623 if (target_block->offset == -1) {
1624 throw std::runtime_error(
"Target block offset is not set, should not happen");
1626 auto internalcall_instruction_builder =
1628 .
operand(
static_cast<uint32_t
>(target_block->offset));
1637 if (!condition_addr.has_value()) {
1640 return condition_addr;
1734 [](
auto) {
throw std::runtime_error(
"Unknown instruction"); },
::FuzzInstruction FuzzInstruction
const FF CONTRACT_ADDRESS
std::optional< uint16_t > get_memory_offset_16(bb::avm2::MemoryTag tag, uint32_t address_index)
std::optional< std::pair< ResolvedAddress, bb::avm2::testing::OperandBuilder > > get_resolved_address_and_operand_8(ParamRef address)
std::optional< bb::avm2::FF > get_emitted_note_hash(uint16_t note_hash_index)
std::optional< bb::avm2::FF > get_slot(uint16_t slot_offset_index)
bool is_memory_address_set(uint16_t address)
std::optional< uint16_t > get_leaf_index(uint16_t note_hash_index)
void set_memory_address(bb::avm2::MemoryTag tag, uint32_t address)
void append_slot(bb::avm2::FF slot)
void append_emitted_note_hash(bb::avm2::FF note_hash)
std::optional< std::pair< ResolvedAddress, bb::avm2::testing::OperandBuilder > > get_resolved_address_and_operand_16(ParamRef address)
void process_shr_16_instruction(SHR_16_Instruction instruction)
void process_set_8_instruction(SET_8_Instruction instruction)
void process_poseidon2perm_instruction(POSEIDON2PERM_Instruction instruction)
void process_returndatasize_with_returndatacopy_instruction(RETURNDATASIZE_WITH_RETURNDATACOPY_Instruction instruction)
std::vector< ProgramBlock * > predecessors
void process_sload_instruction(SLOAD_Instruction instruction)
void finalize_with_return(uint8_t return_size, MemoryTagWrapper return_value_tag, uint16_t return_value_offset_index)
finalize the program block with a return instruction Tries to find memory address with the given retu...
std::vector< bb::avm2::simulation::Instruction > get_instructions()
void preprocess_memory_addresses(ResolvedAddress resolved_address)
preprocess the memory addresses Sets M[0] = base_offset for Relative/IndirectRelative modes Sets M[po...
void insert_internal_call(ProgramBlock *target_block)
insert INTERNALCALL instruction with 0 offset
bool is_memory_address_set(uint16_t address)
void process_emitnotehash_instruction(EMITNOTEHASH_Instruction instruction)
void process_xor_16_instruction(XOR_16_Instruction instruction)
ProgramBlock * caller
the block that called this block by INTERNALCALL This field is copied to predecessors on every CFG in...
void process_or_16_instruction(OR_16_Instruction instruction)
void patch_internal_calls()
in insert_internal_call we insert INTERNALCALL instruction with 0 offset, because we don't know the r...
void finalize_with_jump(ProgramBlock *target_block, bool copy_memory_manager=true)
finalize the block with a jump Sets the terminator type to JUMP, adds the target block to the success...
uint16_t condition_offset_index
the offset index of the condition variable (for JUMP_IF)
void process_lte_16_instruction(LTE_16_Instruction instruction)
void process_eq_8_instruction(EQ_8_Instruction instruction)
void process_keccakf1600_instruction(KECCAKF1600_Instruction instruction)
void process_fdiv_8_instruction(FDIV_8_Instruction instruction)
void process_nullifierexists_instruction(NULLIFIEREXISTS_Instruction instruction)
void process_not_8_instruction(NOT_8_Instruction instruction)
void process_add_8_instruction(ADD_8_Instruction instruction)
void finalize_with_revert(uint8_t revert_size, MemoryTagWrapper revert_value_tag, uint16_t revert_value_offset_index)
finalize the program block with a revert instruction Similar to finalize_with_return but uses REVERT ...
void process_and_16_instruction(AND_16_Instruction instruction)
MemoryManager memory_manager
void process_sub_8_instruction(SUB_8_Instruction instruction)
void process_shl_8_instruction(SHL_8_Instruction instruction)
void process_notehashexists_instruction(NOTEHASHEXISTS_Instruction instruction)
void process_div_16_instruction(DIV_16_Instruction instruction)
void process_instruction(FuzzInstruction instruction)
process the instruction
void process_toradixbe_instruction(TORADIXBE_Instruction instruction)
void process_emitnulifier_instruction(EMITNULLIFIER_Instruction instruction)
void process_fdiv_16_instruction(FDIV_16_Instruction instruction)
void process_shl_16_instruction(SHL_16_Instruction instruction)
void process_mul_16_instruction(MUL_16_Instruction instruction)
void process_set_ff_instruction(SET_FF_Instruction instruction)
void process_sstore_instruction(SSTORE_Instruction instruction)
std::map< size_t, ProgramBlock * > internal_call_instruction_indicies_to_patch
void process_ecadd_instruction(ECADD_Instruction instruction)
void record_result_tag_from_param_tags(std::initializer_list< ParamRef > params, ResolvedAddress result_address)
void process_div_8_instruction(DIV_8_Instruction instruction)
void process_and_8_instruction(AND_8_Instruction instruction)
void process_lt_16_instruction(LT_16_Instruction instruction)
std::vector< ProgramBlock * > successors
void process_sub_16_instruction(SUB_16_Instruction instruction)
void process_or_8_instruction(OR_8_Instruction instruction)
void process_cast_8_instruction(CAST_8_Instruction instruction)
void process_call_instruction(CALL_Instruction instruction)
void process_cast_16_instruction(CAST_16_Instruction instruction)
void process_not_16_instruction(NOT_16_Instruction instruction)
void process_set_64_instruction(SET_64_Instruction instruction)
void process_calldatacopy_instruction(CALLDATACOPY_Instruction instruction)
void process_successcopy_instruction(SUCCESSCOPY_Instruction instruction)
void process_l1tol2msgexists_instruction(L1TOL2MSGEXISTS_Instruction instruction)
void process_sendl2tol1msg_instruction(SENDL2TOL1MSG_Instruction instruction)
void process_mov_8_instruction(MOV_8_Instruction instruction)
std::optional< uint16_t > get_terminating_condition_value()
void process_emitunencryptedlog_instruction(EMITUNENCRYPTEDLOG_Instruction instruction)
void process_sha256compression_instruction(SHA256COMPRESSION_Instruction instruction)
void process_mul_8_instruction(MUL_8_Instruction instruction)
void process_set_16_instruction(SET_16_Instruction instruction)
void process_add_16_instruction(ADD_16_Instruction instruction)
void process_xor_8_instruction(XOR_8_Instruction instruction)
void process_eq_16_instruction(EQ_16_Instruction instruction)
void process_lte_8_instruction(LTE_8_Instruction instruction)
void process_getcontractinstance_instruction(GETCONTRACTINSTANCE_Instruction instruction)
void finalize_with_jump_if(ProgramBlock *target_then_block, ProgramBlock *target_else_block, uint16_t condition_offset, bool copy_memory_manager=true)
finalize the block with a jump if Sets the terminator type to JUMP_IF, adds the target blocks to the ...
void process_set_32_instruction(SET_32_Instruction instruction)
void process_getenvvar_instruction(GETENVVAR_Instruction instruction)
TerminatorType terminator_type
void process_lt_8_instruction(LT_8_Instruction instruction)
std::vector< bb::avm2::simulation::Instruction > instructions
void process_shr_8_instruction(SHR_8_Instruction instruction)
void process_mov_16_instruction(MOV_16_Instruction instruction)
void process_set_128_instruction(SET_128_Instruction instruction)
simulation::Instruction build() const
InstructionBuilder & relative()
InstructionBuilder & operand(OperandBuilder operand)
@ return_value_offset_index
@ contract_address_address
AztecAddress contract_address
overloaded(Ts...) -> overloaded< Ts... >
FF unconstrained_make_unique_note_hash(const FF &siloed_note_hash, const FF &first_nullifier, uint64_t note_hash_counter)
FF unconstrained_silo_note_hash(const AztecAddress &contract_address, const FF ¬e_hash)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
unsigned __int128 uint128_t
mem[result_offset] = mem[a_address] + mem[b_address] (16-bit)
mem[result_offset] = mem[a_address] + mem[b_address]
mem[result_offset] = mem[a_address] & mem[b_address] (16-bit)
mem[result_offset] = mem[a_address] & mem[b_address]
CALLDATACOPY: M[dstOffset:dstOffset+M[copySizeOffset]] = calldata[M[cdStartOffset]:M[cdStartOffset]+M...
CAST_16: cast mem[src_offset_index] to target_tag and store at dst_offset.
CAST_8: cast mem[src_offset_index] to target_tag and store at dst_offset.
mem[result_offset] = mem[a_address] / mem[b_address] (16-bit)
mem[result_offset] = mem[a_address] / mem[b_address]
EMITNOTEHASH: M[note_hash_offset] = note_hash; emit note hash to the note hash tree.
EMITNULIFIER: inserts new nullifier to the nullifier tree.
mem[result_offset] = mem[a_address] == mem[b_address] (16-bit)
mem[result_offset] = mem[a_address] == mem[b_address]
GETENVVAR: M[result_offset] = getenvvar(type)
AddressRef result_address
KECCAKF1600: Perform Keccak-f[1600] permutation on 25 U64 values M[dst_address:dst_address+25] = kecc...
L1TOL2MSGEXISTS: Check if a L1 to L2 message exists M[result_address] = L1TOL2MSGEXISTS(M[msg_hash_ad...
mem[result_offset] = mem[a_address] < mem[b_address] (16-bit)
mem[result_offset] = mem[a_address] < mem[b_address]
mem[result_offset] = mem[a_address] <= mem[b_address] (16-bit)
mem[result_offset] = mem[a_address] <= mem[b_address]
MOV_16 instruction: mem[dst_offset] = mem[src_offset].
MOV_8 instruction: mem[dst_offset] = mem[src_offset].
mem[result_offset] = mem[a_address] * mem[b_address] (16-bit)
mem[result_offset] = mem[a_address] * mem[b_address]
Wrapper for MemoryTag to allow for msgpack packing and unpacking.
NOTEHASHEXISTS: M[result_offset] = NOTEHASHEXISTS(M[notehash_offset], M[leaf_index_offset]) len = len...
NULLIFIEREXISTS: checks if nullifier exists in the nullifier tree Gets contract's address by GETENVVA...
mem[result_offset] = mem[a_address] | mem[b_address] (16-bit)
mem[result_offset] = mem[a_address] | mem[b_address]
POSEIDON2PERM: Perform Poseidon2 permutation on 4 FF values M[dst_address:dst_address+4] = poseidon2_...
: RETURNDATASIZE + RETURNDATACOPY:
Output of resolving an address in the memory manager In order to resolve a given absolute address wit...
std::optional< uint32_t > base_pointer
uint32_t absolute_address
std::optional< uint32_t > pointer_address
MemoryTagWrapper value_tag
MemoryTagWrapper value_tag
SHA256COMPRESSION: Perform SHA256 compression M[dst_address:dst_address+8] = sha256_compression(M[sta...
mem[result_offset] = mem[a_address] << mem[b_address] (16-bit)
mem[result_offset] = mem[a_address] << mem[b_address]
mem[result_offset] = mem[a_address] >> mem[b_address] (16-bit)
mem[result_offset] = mem[a_address] >> mem[b_address]
SLOAD: M[slot_offset] = slot; M[result_offset] = S[M[slotOffset]].
SSTORE: M[slot_offset_index] = slot; S[M[slotOffset]] = M[srcOffset].
mem[result_offset] = mem[a_address] - mem[b_address] (16-bit)
mem[result_offset] = mem[a_address] - mem[b_address]
TORADIXBE: Convert a field element to a vector of limbs in big-endian radix representation M[dst_addr...
mem[result_offset] = mem[a_address] ^ mem[b_address] (16-bit)
mem[result_offset] = mem[a_address] ^ mem[b_address]