21#include <evmc/evmc.hpp>
22#include <evmc/mocked_host.hpp>
24#include <evmc/hex.hpp>
26#include <evmone/evmone.h>
29 #define interface __STRUCT__
32#include <spdlog/spdlog.h>
33#include <absl/container/flat_hash_map.h>
49 EVM(asio::io_context & io_context, evmc_revision rev, std::filesystem::path solc_path, std::filesystem::path pt_path);
61 asio::awaitable<bool>
compile(std::filesystem::path code_path,
62 std::filesystem::path out_dir,
63 std::filesystem::path base_path = {},
64 std::filesystem::path includes = {})
const noexcept;
66 asio::awaitable<std::expected<chain::Address, chain::DeployError>>
deploy(
67 std::istream & code_stream,
69 std::vector<std::uint8_t> constructor_args,
70 std::uint64_t gas_limit,
71 std::uint64_t value)
noexcept;
73 asio::awaitable<std::expected<chain::Address, chain::DeployError>>
deploy(
74 std::filesystem::path code_path,
76 std::vector<uint8_t> constructor_args,
77 std::uint64_t gas_limit,
78 std::uint64_t value)
noexcept;
83 std::vector<std::uint8_t> input_bytes,
84 std::uint64_t gas_limit,
85 std::uint64_t value)
noexcept;
87 asio::awaitable<std::vector<EmittedLogRecord>>
getLogsSince(std::uint64_t after_seq, std::size_t limit)
noexcept;
94 const std::filesystem::path &
getPTPath() const;
97 asio::awaitable<
bool>
loadPT();
100 asio::strand<asio::io_context::executor_type> _strand;
105 std::filesystem::path _solc_path;
106 std::filesystem::path _pt_path;
110 chain::Address _genesis_address;
111 chain::Address _console_log_address;
113 chain::Address _registry_address;
114 chain::Address _runner_address;
117 asio::awaitable<std::expected<std::vector<std::uint8_t>, chain::ExecuteError>>
fetchOwner(EVM & evm, const chain::Address & address);
123 std::vector<std::uint8_t>
encodeAsArg<chain::Address>(const chain::Address & address);
126 std::vector<std::uint8_t>
encodeAsArg<std::uint32_t>(const std::uint32_t & value);
129 std::vector<std::uint8_t>
encodeAsArg<std::vector<std::uint32_t>>(const std::vector<std::uint32_t> & vec);
132 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);
135 std::vector<std::uint8_t>
encodeAsArg<std::vector<std::tuple<std::uint32_t, std::uint32_t, std::uint32_t>>>(const std::vector<std::tuple<std::uint32_t, std::uint32_t, std::uint32_t>>& vec);
138 std::vector<std::uint8_t>
encodeAsArg<std::
string>(const std::
string& str);
asio::awaitable< std::int64_t > getHeadBlockNumber() noexcept
Definition evm.cpp:518
asio::awaitable< bool > loadPT()
Definition evm.cpp:524
const std::filesystem::path & getPTPath() const
Definition evm.cpp:247
chain::Address getRegistryAddress() const
Definition evm.cpp:232
asio::awaitable< bool > addAccount(chain::Address address, std::uint64_t initial_gas) noexcept
Definition evm.cpp:252
chain::Address getRunnerAddress() const
Definition evm.cpp:237
asio::awaitable< std::vector< EmittedLogRecord > > getLogsSince(std::uint64_t after_seq, std::size_t limit) noexcept
Definition evm.cpp:510
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:336
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:441
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:288
asio::awaitable< bool > setGas(chain::Address address, std::uint64_t gas) noexcept
Definition evm.cpp:274
const std::filesystem::path & getSolcPath() const
Definition evm.cpp:242
EVM & operator=(const EVM &)=delete
evmc::address Address
Definition address.hpp:18
Definition events_runtime.hpp:20
asio::awaitable< std::expected< std::vector< std::uint8_t >, chain::ExecuteError > > fetchOwner(EVM &evm, const chain::Address &address)
Definition evm.cpp:177
std::vector< std::uint8_t > encodeAsArg(const T &val)
Definition execute.hpp:21
Definition evm_storage.hpp:38