diff --git a/libethereum/Executive.cpp b/libethereum/Executive.cpp index 5ec5f7313..cbb953ec5 100644 --- a/libethereum/Executive.cpp +++ b/libethereum/Executive.cpp @@ -151,7 +151,7 @@ bool Executive::call(CallParameters const& _p, u256 const& _gasPrice, Address co { m_outRef = _p.out; // Save ref to expected output buffer to be used in go() bytes const& c = m_s.code(_p.codeAddress); - m_ext = make_shared(m_s, m_lastHashes, _p.receiveAddress, _p.senderAddress, _origin, _p.value, _gasPrice, _p.data, &c, m_depth); + m_ext.reset(new ExtVM{m_s, m_lastHashes, _p.receiveAddress, _p.senderAddress, _origin, _p.value, _gasPrice, _p.data, &c, m_depth}); } } @@ -171,7 +171,7 @@ bool Executive::create(Address _sender, u256 _endowment, u256 _gasPrice, u256 _g // Execute _init. if (!_init.empty()) - m_ext = make_shared(m_s, m_lastHashes, m_newAddress, _sender, _origin, _endowment, _gasPrice, bytesConstRef(), _init, m_depth); + m_ext.reset(new ExtVM{m_s, m_lastHashes, m_newAddress, _sender, _origin, _endowment, _gasPrice, bytesConstRef(), _init, m_depth}); m_s.m_cache[m_newAddress] = Account(m_s.balance(m_newAddress), Account::ContractConception); m_s.transferBalance(_sender, m_newAddress, _endowment); diff --git a/libethereum/Executive.h b/libethereum/Executive.h index beeee3331..1872cf404 100644 --- a/libethereum/Executive.h +++ b/libethereum/Executive.h @@ -23,6 +23,7 @@ #include #include #include +#include "ExtVM.h" #include "Transaction.h" namespace dev @@ -32,7 +33,6 @@ namespace eth class State; class BlockChain; -class ExtVM; struct Manifest; struct VMTraceChannel: public LogChannel { static const char* name(); static const int verbosity = 11; }; @@ -65,8 +65,6 @@ public: Executive(State& _s, LastHashes const& _lh, unsigned _level = 0): m_s(_s), m_lastHashes(_lh), m_depth(_level) {} /// Basic constructor. Executive(State& _s, BlockChain const& _bc, unsigned _level = 0); - /// Basic destructor. - ~Executive() = default; Executive(Executive const&) = delete; void operator=(Executive) = delete; @@ -124,7 +122,7 @@ public: private: State& m_s; ///< The state to which this operation/transaction is applied. LastHashes m_lastHashes; - std::shared_ptr m_ext; ///< The VM externality object for the VM execution or null if no VM is required. + std::unique_ptr m_ext; ///< The VM externality object for the VM execution or null if no VM is required. bytesRef m_outRef; ///< Reference to "expected output" buffer. ExecutionResult* m_res = nullptr; ///< Optional storage for execution results. Address m_newAddress; ///< The address of the created contract in the case of create() being called.