aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaweł Bylica <pawel.bylica@imapp.pl>2014-10-20 23:36:26 +0800
committerPaweł Bylica <pawel.bylica@imapp.pl>2014-10-22 17:46:14 +0800
commit05a8e41d5d5bf58de008bbd77dab702a4d5b7e0a (patch)
tree46e08387a5efc65e20a2fb3751db522a7922e7ca
parentb2e085c7d6f272d2b06a66ebce01259ac99ac9c6 (diff)
downloaddexon-solidity-05a8e41d5d5bf58de008bbd77dab702a4d5b7e0a.tar.gz
dexon-solidity-05a8e41d5d5bf58de008bbd77dab702a4d5b7e0a.tar.zst
dexon-solidity-05a8e41d5d5bf58de008bbd77dab702a4d5b7e0a.zip
Another round of fixing ExtVM interface
-rw-r--r--vm.cpp19
-rw-r--r--vm.h18
2 files changed, 24 insertions, 13 deletions
diff --git a/vm.cpp b/vm.cpp
index 7306ef32..582c3c41 100644
--- a/vm.cpp
+++ b/vm.cpp
@@ -35,7 +35,7 @@ using namespace dev::test;
FakeExtVM::FakeExtVM(eth::BlockInfo const& _previousBlock, eth::BlockInfo const& _currentBlock, unsigned _depth): /// TODO: XXX: remove the default argument & fix.
ExtVMFace(Address(), Address(), Address(), 0, 1, bytesConstRef(), bytesConstRef(), _previousBlock, _currentBlock, _depth) {}
-h160 FakeExtVM::create(u256 _endowment, u256* _gas, bytesConstRef _init, OnOpFunc)
+h160 FakeExtVM::create(u256 _endowment, u256* _gas, bytesConstRef _init, OnOpFunc const&)
{
Transaction t;
t.value = _endowment;
@@ -45,7 +45,7 @@ h160 FakeExtVM::create(u256 _endowment, u256* _gas, bytesConstRef _init, OnOpFun
m_s.noteSending(myAddress);
m_ms.internal.resize(m_ms.internal.size() + 1);
- auto ret = m_s.create(myAddress, _endowment, gasPrice, _gas, _init, origin, &suicides, &m_ms ? &(m_ms.internal.back()) : nullptr, OnOpFunc(), 1);
+ auto ret = m_s.create(myAddress, _endowment, gasPrice, _gas, _init, origin, &suicides, &m_ms ? &(m_ms.internal.back()) : nullptr, {}, 1);
if (!m_ms.internal.back().from)
m_ms.internal.pop_back();
@@ -61,7 +61,7 @@ h160 FakeExtVM::create(u256 _endowment, u256* _gas, bytesConstRef _init, OnOpFun
return ret;
}
-bool FakeExtVM::call(Address _receiveAddress, u256 _value, bytesConstRef _data, u256* _gas, bytesRef _out, OnOpFunc, Address _myAddressOverride = Address(), Address _codeAddressOverride = Address())
+bool FakeExtVM::call(Address _receiveAddress, u256 _value, bytesConstRef _data, u256* _gas, bytesRef _out, OnOpFunc const&, Address _myAddressOverride = Address(), Address _codeAddressOverride = Address())
{
u256 contractgas = 0xffff;
@@ -91,7 +91,7 @@ bool FakeExtVM::call(Address _receiveAddress, u256 _value, bytesConstRef _data,
if (!m_s.addresses().count(myAddress))
{
m_ms.internal.resize(m_ms.internal.size() + 1);
- auto na = m_s.createNewAddress(myAddress, myAddress, balance(myAddress), gasPrice, &contractgas, init, origin, &suicides, &m_ms ? &(m_ms.internal.back()) : nullptr, OnOpFunc(), 1);
+ auto na = m_s.createNewAddress(myAddress, myAddress, balance(myAddress), gasPrice, &contractgas, init, origin, &suicides, &m_ms ? &(m_ms.internal.back()) : nullptr, {}, 1);
if (!m_ms.internal.back().from)
m_ms.internal.pop_back();
if (na != myAddress)
@@ -578,6 +578,17 @@ void doTests(json_spirit::mValue& v, bool _fillin)
else
BOOST_CHECK(output == fromHex(o["out"].get_str()));
+ //auto a = fev.addresses.at(fev.myAddress);
+ //auto b = test.addresses.at(fev.myAddress);
+
+ //auto t = a == b;
+ //auto t0 = get<0>(a) == get<0>(b);
+ //auto t1 = get<1>(a) == get<1>(b);
+ //auto t2 = get<2>(a) == get<2>(b);
+ //auto t3 = get<3>(a) == get<3>(b);
+
+ //BOOST_CHECK_EQUAL(get<0>(a), get<0>(b));
+
BOOST_CHECK(test.toInt(o["gas"]) == gas);
BOOST_CHECK(test.addresses == fev.addresses);
BOOST_CHECK(test.callcreates == fev.callcreates);
diff --git a/vm.h b/vm.h
index 34e0e855..a9897bee 100644
--- a/vm.h
+++ b/vm.h
@@ -53,15 +53,15 @@ public:
FakeExtVM() {}
FakeExtVM(eth::BlockInfo const& _previousBlock, eth::BlockInfo const& _currentBlock, unsigned _depth = 0);
- u256 store(u256 _n) { return std::get<2>(addresses[myAddress])[_n]; }
- void setStore(u256 _n, u256 _v) { std::get<2>(addresses[myAddress])[_n] = _v; }
- u256 balance(Address _a) { return std::get<0>(addresses[_a]); }
- void subBalance(u256 _a) { std::get<0>(addresses[myAddress]) -= _a; }
- u256 txCount(Address _a) { return std::get<1>(addresses[_a]); }
- void suicide(Address _a) { std::get<0>(addresses[_a]) += std::get<0>(addresses[myAddress]); addresses.erase(myAddress); }
- bytes const& codeAt(Address _a) { return std::get<3>(addresses[_a]); }
- h160 create(u256 _endowment, u256* _gas, bytesConstRef _init, eth::OnOpFunc);
- bool call(Address _receiveAddress, u256 _value, bytesConstRef _data, u256* _gas, bytesRef _out, eth::OnOpFunc, Address, Address);
+ u256 store(u256 _n) override { return std::get<2>(addresses[myAddress])[_n]; }
+ void setStore(u256 _n, u256 _v) override { std::get<2>(addresses[myAddress])[_n] = _v; }
+ u256 balance(Address _a) override { return std::get<0>(addresses[_a]); }
+ void subBalance(u256 _a) override { std::get<0>(addresses[myAddress]) -= _a; }
+ u256 txCount(Address _a) override { return std::get<1>(addresses[_a]); }
+ void suicide(Address _a) override { std::get<0>(addresses[_a]) += std::get<0>(addresses[myAddress]); addresses.erase(myAddress); }
+ bytes const& codeAt(Address _a) override { return std::get<3>(addresses[_a]); }
+ h160 create(u256 _endowment, u256* _gas, bytesConstRef _init, eth::OnOpFunc const&) override;
+ bool call(Address _receiveAddress, u256 _value, bytesConstRef _data, u256* _gas, bytesRef _out, eth::OnOpFunc const&, Address, Address) override;
void setTransaction(Address _caller, u256 _value, u256 _gasPrice, bytes const& _data);
void setContract(Address _myAddress, u256 _myBalance, u256 _myNonce, std::map<u256, u256> const& _storage, bytes const& _code);
void set(Address _a, u256 _myBalance, u256 _myNonce, std::map<u256, u256> const& _storage, bytes const& _code);