19#include <evmc/evmc.hpp>
20#include <evmc/mocked_host.hpp>
22#include <evmc/hex.hpp>
24#include <evmone/evmone.h>
27 #define interface __STRUCT__
30#include <spdlog/spdlog.h>
31#include <absl/container/flat_hash_map.h>
45 EVM(asio::io_context & io_context, evmc_revision rev, std::filesystem::path solc_path, std::filesystem::path pt_path);
57 asio::awaitable<bool>
compile(std::filesystem::path code_path,
58 std::filesystem::path out_dir,
59 std::filesystem::path base_path = {},
60 std::filesystem::path includes = {})
const noexcept;
62 asio::awaitable<std::expected<chain::Address, chain::DeployError>>
deploy(
63 std::istream & code_stream,
65 std::vector<std::uint8_t> constructor_args,
66 std::uint64_t gas_limit,
67 std::uint64_t value)
noexcept;
69 asio::awaitable<std::expected<chain::Address, chain::DeployError>>
deploy(
70 std::filesystem::path code_path,
72 std::vector<uint8_t> constructor_args,
73 std::uint64_t gas_limit,
74 std::uint64_t value)
noexcept;
79 std::vector<std::uint8_t> input_bytes,
80 std::uint64_t gas_limit,
81 std::uint64_t value)
noexcept;
87 const std::filesystem::path &
getPTPath()
const;
90 asio::awaitable<bool>
loadPT();
93 asio::strand<asio::io_context::executor_type> _strand;
98 std::filesystem::path _solc_path;
99 std::filesystem::path _pt_path;
110 asio::awaitable<std::expected<std::vector<std::uint8_t>, chain::ExecuteError>>
fetchOwner(EVM & evm,
const chain::Address & address);
122 std::vector<std::uint8_t> encodeAsArg<std::vector<std::uint32_t>>(
const std::vector<std::uint32_t> & vec);
125 std::vector<std::uint8_t> encodeAsArg<std::vector<std::tuple<std::uint32_t, std::uint32_t>>>(
const std::vector<std::tuple<std::uint32_t, std::uint32_t>>& vec);
asio::awaitable< bool > loadPT()
Definition evm.cpp:469
const std::filesystem::path & getPTPath() const
Definition evm.cpp:206
chain::Address getRegistryAddress() const
Definition evm.cpp:191
asio::awaitable< bool > addAccount(chain::Address address, std::uint64_t initial_gas) noexcept
Definition evm.cpp:211
chain::Address getRunnerAddress() const
Definition evm.cpp:196
asio::awaitable< std::expected< chain::Address, chain::DeployError > > deploy(std::istream &code_stream, chain::Address sender, std::vector< std::uint8_t > constructor_args, std::uint64_t gas_limit, std::uint64_t value) noexcept
Definition evm.cpp:295
EVM & operator=(EVM &&)=delete
asio::awaitable< std::expected< std::vector< std::uint8_t >, chain::ExecuteError > > execute(chain::Address sender, chain::Address recipient, std::vector< std::uint8_t > input_bytes, std::uint64_t gas_limit, std::uint64_t value) noexcept
Definition evm.cpp:400
asio::awaitable< bool > compile(std::filesystem::path code_path, std::filesystem::path out_dir, std::filesystem::path base_path={}, std::filesystem::path includes={}) const noexcept
Definition evm.cpp:247
asio::awaitable< bool > setGas(chain::Address address, std::uint64_t gas) noexcept
Definition evm.cpp:233
const std::filesystem::path & getSolcPath() const
Definition evm.cpp:201
EVM & operator=(const EVM &)=delete
evmc::address Address
Definition address.hpp:18
std::vector< std::uint8_t > encodeAsArg< std::string >(const std::string &str)
Definition evm.cpp:115
asio::awaitable< std::expected< std::vector< std::uint8_t >, chain::ExecuteError > > fetchOwner(EVM &evm, const chain::Address &address)
Definition evm.cpp:136
std::vector< std::uint8_t > encodeAsArg(const T &val)
std::vector< std::uint8_t > encodeAsArg< std::uint32_t >(const std::uint32_t &value)
Definition evm.cpp:32
std::vector< std::uint8_t > encodeAsArg< chain::Address >(const chain::Address &address)
Definition evm.cpp:24
Definition execute.hpp:21