|
|
@ -21,7 +21,6 @@ |
|
|
|
*/ |
|
|
|
|
|
|
|
#include <boost/filesystem/path.hpp> |
|
|
|
#include <libdevcore/CommonIO.h> |
|
|
|
#include "vm.h" |
|
|
|
|
|
|
|
//#define FILL_TESTS
|
|
|
@ -63,7 +62,6 @@ h160 FakeExtVM::create(u256 _endowment, u256* _gas, bytesConstRef _init, OnOpFun |
|
|
|
|
|
|
|
bool FakeExtVM::call(Address _receiveAddress, u256 _value, bytesConstRef _data, u256* _gas, bytesRef _out, OnOpFunc const&, Address _myAddressOverride, Address _codeAddressOverride) |
|
|
|
{ |
|
|
|
|
|
|
|
u256 contractgas = 0xffff; |
|
|
|
|
|
|
|
Transaction t; |
|
|
@ -132,7 +130,7 @@ bool FakeExtVM::call(Address _receiveAddress, u256 _value, bytesConstRef _data, |
|
|
|
|
|
|
|
m_ms.internal.resize(m_ms.internal.size() + 1); |
|
|
|
|
|
|
|
auto ret = m_s.call(_receiveAddress,_codeAddressOverride ? _codeAddressOverride : _receiveAddress, _myAddressOverride ? _myAddressOverride : myAddress, _value, gasPrice, _data, _gas, _out, origin, &sub, &(m_ms.internal.back()), OnOpFunc(), 1); |
|
|
|
auto ret = m_s.call(_receiveAddress,_codeAddressOverride ? _codeAddressOverride : _receiveAddress, _myAddressOverride ? _myAddressOverride : myAddress, _value, gasPrice, _data, _gas, _out, origin, &sub, &(m_ms.internal.back()), simpleTrace<ExtVM>(), 1); |
|
|
|
|
|
|
|
if (!m_ms.internal.back().from) |
|
|
|
m_ms.internal.pop_back(); |
|
|
@ -423,27 +421,8 @@ void FakeExtVM::importCallCreates(mArray& _callcreates) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
OnOpFunc FakeExtVM::simpleTrace() |
|
|
|
{ |
|
|
|
return [](uint64_t steps, Instruction inst, bigint newMemSize, bigint gasCost, void* voidVM, void const* voidExt) |
|
|
|
{ |
|
|
|
FakeExtVM const& ext = *(FakeExtVM const*)voidExt; |
|
|
|
VM& vm = *(VM*)voidVM; |
|
|
|
|
|
|
|
ostringstream o; |
|
|
|
o << endl << " STACK" << endl; |
|
|
|
for (auto i: vm.stack()) |
|
|
|
o << (h256)i << endl; |
|
|
|
o << " MEMORY" << endl << memDump(vm.memory()); |
|
|
|
o << " STORAGE" << endl; |
|
|
|
for (auto const& i: ext.state().storage(ext.myAddress)) |
|
|
|
o << showbase << hex << i.first << ": " << i.second << endl; |
|
|
|
dev::LogOutputStream<VMTraceChannel, false>(true) << o.str(); |
|
|
|
dev::LogOutputStream<VMTraceChannel, false>(false) << " | " << dec << ext.depth << " | " << ext.myAddress << " | #" << steps << " | " << hex << setw(4) << setfill('0') << vm.curPC() << " : " << instructionInfo(inst).name << " | " << dec << vm.gas() << " | -" << dec << gasCost << " | " << newMemSize << "x32" << " ]"; |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
h160 FakeState::createNewAddress(Address _newAddress, Address _sender, u256 _endowment, u256 _gasPrice, u256* _gas, bytesConstRef _code, Address _origin, std::set<Address>* o_suicides, Manifest* o_ms, OnOpFunc const& _onOp, unsigned _level) |
|
|
|
// THIS IS BROKEN AND NEEDS TO BE REMOVED.
|
|
|
|
h160 FakeState::createNewAddress(Address _newAddress, Address _sender, u256 _endowment, u256 _gasPrice, u256* _gas, bytesConstRef _code, Address _origin, SubState* o_sub, Manifest* o_ms, OnOpFunc const& _onOp, unsigned _level) |
|
|
|
{ |
|
|
|
(void)o_sub; |
|
|
|
|
|
|
@ -541,7 +520,7 @@ void doTests(json_spirit::mValue& v, bool _fillin) |
|
|
|
VM vm(fev.gas); |
|
|
|
try |
|
|
|
{ |
|
|
|
output = vm.go(fev, fev.simpleTrace()).toVector(); |
|
|
|
output = vm.go(fev, fev.simpleTrace<FakeExtVM>()).toVector(); |
|
|
|
} |
|
|
|
catch (Exception const& _e) |
|
|
|
{ |
|
|
@ -784,6 +763,7 @@ BOOST_AUTO_TEST_CASE(userDefinedFile) |
|
|
|
if (boost::unit_test::framework::master_test_suite().argc == 2) |
|
|
|
{ |
|
|
|
string filename = boost::unit_test::framework::master_test_suite().argv[1]; |
|
|
|
int currentVerbosity = g_logVerbosity; |
|
|
|
g_logVerbosity = 12; |
|
|
|
try |
|
|
|
{ |
|
|
@ -802,5 +782,6 @@ BOOST_AUTO_TEST_CASE(userDefinedFile) |
|
|
|
{ |
|
|
|
BOOST_ERROR("Failed VM Test with Exception: " << _e.what()); |
|
|
|
} |
|
|
|
g_logVerbosity = currentVerbosity; |
|
|
|
} |
|
|
|
} |
|
|
|