143 uint16_t message_size,
144 bool is_debug_logging_enabled);
162 uint8_t member_enum);
202 template <
typename... Ts>
205 const
std::vector<
Operand>& resolved_operands);
void lt(ContextInterface &context, MemoryAddress a_addr, MemoryAddress b_addr, MemoryAddress dst_addr)
void emit_note_hash(ContextInterface &context, MemoryAddress note_hash_addr)
void mov(ContextInterface &context, MemoryAddress src_addr, MemoryAddress dst_addr)
const TaggedValue & get_output() const
void static_call(ContextInterface &context, MemoryAddress l2_gas_offset, MemoryAddress da_gas_offset, MemoryAddress addr, MemoryAddress cd_size_offset, MemoryAddress cd_offset)
EventEmitterInterface< ExecutionEvent > & events
Execution(AluInterface &alu, BitwiseInterface &bitwise, DataCopyInterface &data_copy, Poseidon2Interface &poseidon2, EccInterface &ecc, ToRadixInterface &to_radix, Sha256Interface &sha256, ExecutionComponentsProviderInterface &execution_components, ContextProviderInterface &context_provider, const InstructionInfoDBInterface &instruction_info_db, ExecutionIdManagerInterface &execution_id_manager, EventEmitterInterface< ExecutionEvent > &event_emitter, EventEmitterInterface< ContextStackEvent > &ctx_stack_emitter, KeccakF1600Interface &keccakf1600, GreaterThanInterface &greater_than, GetContractInstanceInterface &get_contract_instance_component, EmitUnencryptedLogInterface &emit_unencrypted_log_component, HighLevelMerkleDBInterface &merkle_db)
void cd_copy(ContextInterface &context, MemoryAddress cd_size_offset, MemoryAddress cd_offset, MemoryAddress dst_addr)
std::unique_ptr< GasTrackerInterface > gas_tracker
void dispatch_opcode(ExecutionOpCode opcode, ContextInterface &context, const std::vector< Operand > &resolved_operands)
ExecutionComponentsProviderInterface & execution_components
void set(ContextInterface &context, MemoryAddress dst_addr, uint8_t tag, const FF &value)
void internal_return(ContextInterface &context)
void set_output(ExecutionOpCode opcode, TaggedValue output)
KeccakF1600Interface & keccakf1600
virtual GasTrackerInterface & get_gas_tracker()
ToRadixInterface & to_radix
void poseidon2_permutation(ContextInterface &context, MemoryAddress src_addr, MemoryAddress dst_addr)
void success_copy(ContextInterface &context, MemoryAddress dst_addr)
void fdiv(ContextInterface &context, MemoryAddress a_addr, MemoryAddress b_addr, MemoryAddress dst_addr)
void jumpi(ContextInterface &context, MemoryAddress cond_addr, uint32_t loc)
void sub(ContextInterface &context, MemoryAddress a_addr, MemoryAddress b_addr, MemoryAddress dst_addr)
void rd_copy(ContextInterface &context, MemoryAddress rd_size_offset, MemoryAddress rd_offset, MemoryAddress dst_addr)
void div(ContextInterface &context, MemoryAddress a_addr, MemoryAddress b_addr, MemoryAddress dst_addr)
EventEmitterInterface< ContextStackEvent > & ctx_stack_events
void set_execution_result(ExecutionResult exec_result)
ExecutionResult exec_result
void ecc_add(ContextInterface &context, MemoryAddress p_x_addr, MemoryAddress p_y_addr, MemoryAddress p_inf_addr, MemoryAddress q_x_addr, MemoryAddress q_y_addr, MemoryAddress q_inf_addr, MemoryAddress dst_addr)
void keccak_permutation(ContextInterface &context, MemoryAddress dst_addr, MemoryAddress src_addr)
void jump(ContextInterface &context, uint32_t loc)
void sha256_compression(ContextInterface &context, MemoryAddress output_addr, MemoryAddress state_addr, MemoryAddress input_addr)
void ret(ContextInterface &context, MemoryAddress ret_size_offset, MemoryAddress ret_offset)
std::vector< TaggedValue > inputs
EccInterface & embedded_curve
void op_not(ContextInterface &context, MemoryAddress src_addr, MemoryAddress dst_addr)
void handle_exceptional_halt(ContextInterface &context)
void handle_enter_call(ContextInterface &parent_context, std::unique_ptr< ContextInterface > child_context)
void note_hash_exists(ContextInterface &context, MemoryAddress unique_note_hash_addr, MemoryAddress leaf_index_addr, MemoryAddress dst_addr)
void debug_log(ContextInterface &context, MemoryAddress message_offset, MemoryAddress fields_offset, MemoryAddress fields_size_offset, uint16_t message_size, bool is_debug_logging_enabled)
ContextProviderInterface & context_provider
ExecutionResult execute(std::unique_ptr< ContextInterface > enqueued_call_context) override
void shl(ContextInterface &context, MemoryAddress a_addr, MemoryAddress b_addr, MemoryAddress c_addr)
void cast(ContextInterface &context, MemoryAddress src_addr, MemoryAddress dst_addr, uint8_t dst_tag)
void to_radix_be(ContextInterface &context, MemoryAddress value_addr, MemoryAddress radix_addr, MemoryAddress num_limbs_addr, MemoryAddress is_output_bits_addr, MemoryAddress dst_addr)
BitwiseInterface & bitwise
EmitUnencryptedLogInterface & emit_unencrypted_log_component
void eq(ContextInterface &context, MemoryAddress a_addr, MemoryAddress b_addr, MemoryAddress dst_addr)
std::vector< Operand > resolve_operands(const Instruction &instruction, const ExecInstructionSpec &spec)
void call(ContextInterface &context, MemoryAddress l2_gas_offset, MemoryAddress da_gas_offset, MemoryAddress addr, MemoryAddress cd_size_offset, MemoryAddress cd_offset)
DataCopyInterface & data_copy
std::stack< std::unique_ptr< ContextInterface > > external_call_stack
GreaterThanInterface & greater_than
void set_and_validate_inputs(ExecutionOpCode opcode, std::vector< TaggedValue > inputs)
void revert(ContextInterface &context, MemoryAddress rev_size_offset, MemoryAddress rev_offset)
void rd_size(ContextInterface &context, MemoryAddress dst_addr)
void mul(ContextInterface &context, MemoryAddress a_addr, MemoryAddress b_addr, MemoryAddress dst_addr)
void or_op(ContextInterface &context, MemoryAddress a_addr, MemoryAddress b_addr, MemoryAddress dst_addr)
const std::vector< TaggedValue > & get_inputs() const
void xor_op(ContextInterface &context, MemoryAddress a_addr, MemoryAddress b_addr, MemoryAddress dst_addr)
ExecutionResult get_execution_result() const
Poseidon2Interface & poseidon2
GetContractInstanceInterface & get_contract_instance_component
void lte(ContextInterface &context, MemoryAddress a_addr, MemoryAddress b_addr, MemoryAddress dst_addr)
const InstructionInfoDBInterface & instruction_info_db
HighLevelMerkleDBInterface & merkle_db
void and_op(ContextInterface &context, MemoryAddress a_addr, MemoryAddress b_addr, MemoryAddress dst_addr)
void shr(ContextInterface &context, MemoryAddress a_addr, MemoryAddress b_addr, MemoryAddress c_addr)
ExecutionIdManagerInterface & execution_id_manager
void add(ContextInterface &context, MemoryAddress a_addr, MemoryAddress b_addr, MemoryAddress dst_addr)
void call_with_operands(void(Execution::*f)(ContextInterface &, Ts...), ContextInterface &context, const std::vector< Operand > &resolved_operands)
virtual ExecutionResult execute(std::unique_ptr< ContextInterface > context)=0
virtual ~ExecutionInterface()=default
EventEmitter< DataCopyEvent > event_emitter
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
SideEffectStates side_effect_states