88
99namespace
1010{
11- void destroy (evmc_instance * _instance)
11+ void destroy (evmc_vm * _instance)
1212{
1313 (void )_instance;
1414}
1515
16- evmc_capabilities_flagset getCapabilities (evmc_instance * _instance) noexcept
16+ evmc_capabilities_flagset getCapabilities (evmc_vm * _instance) noexcept
1717{
1818 (void )_instance;
1919 return EVMC_CAPABILITY_EVM1;
@@ -24,7 +24,7 @@ void delete_output(const evmc_result* result)
2424 delete[] result->output_data ;
2525}
2626
27- evmc_result execute (evmc_instance * _instance, evmc_context * _context, evmc_revision _rev,
27+ evmc_result execute (evmc_vm * _instance, evmc_host_context * _context, evmc_revision _rev,
2828 const evmc_message* _msg, uint8_t const * _code, size_t _codeSize) noexcept
2929{
3030 (void )_instance;
@@ -100,23 +100,17 @@ evmc_result execute(evmc_instance* _instance, evmc_context* _context, evmc_revis
100100}
101101} // namespace
102102
103- extern " C" evmc_instance * evmc_create_interpreter () noexcept
103+ extern " C" evmc_vm * evmc_create_interpreter () noexcept
104104{
105105 // TODO: Allow creating multiple instances with different configurations.
106- static evmc_instance s_instance{
107- EVMC_ABI_VERSION,
108- " interpreter" ,
109- aleth_version,
110- ::destroy,
111- ::execute,
112- getCapabilities,
113- nullptr , // set_tracer
106+ static evmc_vm s_vm{
107+ EVMC_ABI_VERSION, " interpreter" , aleth_version, ::destroy, ::execute, getCapabilities,
114108 nullptr , // set_option
115109 };
116110 static bool metricsInited = dev::eth::VM::initMetrics ();
117111 (void )metricsInited;
118112
119- return &s_instance ;
113+ return &s_vm ;
120114}
121115
122116
@@ -176,17 +170,16 @@ uint64_t VM::decodeJumpvDest(const byte* const _code, uint64_t& _pc, byte _voff)
176170//
177171// set current SP to SP', adjust SP' per _removed and _added items
178172//
179- void VM::adjustStack (int _removed , int _added )
173+ void VM::adjustStack (int _required , int _change )
180174{
181175 m_SP = m_SPP;
182176
183177 // adjust stack and check bounds
184- m_SPP += _removed;
185- if (m_stackEnd < m_SPP)
186- throwBadStack (_removed, _added);
187- m_SPP -= _added;
178+ if (m_stackEnd < m_SP + _required)
179+ throwBadStack (_required, _change);
180+ m_SPP -= _change;
188181 if (m_SPP < m_stack)
189- throwBadStack (_removed, _added );
182+ throwBadStack (_required, _change );
190183}
191184
192185uint64_t VM::gasForMem (u512 const & _size)
@@ -234,7 +227,7 @@ void VM::fetchInstruction()
234227{
235228 m_OP = Instruction (m_code[m_PC]);
236229 auto const metric = (*m_metrics)[static_cast <size_t >(m_OP)];
237- adjustStack (metric.num_stack_arguments , metric.num_stack_returned_items );
230+ adjustStack (metric.stack_height_required , metric.stack_height_change );
238231
239232 // FEES...
240233 m_runGas = metric.gas_cost ;
@@ -254,7 +247,7 @@ evmc_tx_context const& VM::getTxContext()
254247//
255248// interpreter entry point
256249
257- owning_bytes_ref VM::exec (evmc_context * _context, evmc_revision _rev, const evmc_message* _msg,
250+ owning_bytes_ref VM::exec (evmc_host_context * _context, evmc_revision _rev, const evmc_message* _msg,
258251 uint8_t const * _code, size_t _codeSize)
259252{
260253 m_context = _context;
0 commit comments