Browse Source
Minor fix for uncle rewards. Assembler for EC-1 assembly. Not-quite Test code for the VM.cl-refactor
14 changed files with 509 additions and 41 deletions
@ -0,0 +1,58 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
|
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file Instruction.cpp
|
||||
|
* @author Gav Wood <i@gavwood.com> |
||||
|
* @date 2014 |
||||
|
*/ |
||||
|
|
||||
|
#include "Instruction.h" |
||||
|
|
||||
|
#include <boost/algorithm/string.hpp> |
||||
|
using namespace std; |
||||
|
using namespace eth; |
||||
|
|
||||
|
u256s eth::assemble(std::string const& _code) |
||||
|
{ |
||||
|
u256s ret; |
||||
|
char const* d = _code.data(); |
||||
|
char const* e = _code.data() + _code.size(); |
||||
|
while (d != e) |
||||
|
{ |
||||
|
// skip to next token
|
||||
|
for (; d != e && !isalnum(*d); ++d) {} |
||||
|
if (d == e) |
||||
|
break; |
||||
|
|
||||
|
char const* s = d; |
||||
|
for (; d != e && isalnum(*d); ++d) {} |
||||
|
|
||||
|
string t = string(s, d - s); |
||||
|
if (isdigit(t[0])) |
||||
|
ret.push_back(u256(t)); |
||||
|
else |
||||
|
{ |
||||
|
boost::algorithm::to_upper(t); |
||||
|
auto it = c_instructions.find(t); |
||||
|
if (it != c_instructions.end()) |
||||
|
ret.push_back((u256)it->second); |
||||
|
else |
||||
|
cwarn << "Unknown assembler token" << t; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
return ret; |
||||
|
} |
@ -0,0 +1,85 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
|
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file state.cpp
|
||||
|
* @author Gav Wood <i@gavwood.com> |
||||
|
* @date 2014 |
||||
|
* State test functions. |
||||
|
*/ |
||||
|
|
||||
|
#include <boost/algorithm/string.hpp> |
||||
|
#include <secp256k1.h> |
||||
|
#include <BlockChain.h> |
||||
|
#include <State.h> |
||||
|
#include <Defaults.h> |
||||
|
#include <Instruction.h> |
||||
|
using namespace std; |
||||
|
using namespace eth; |
||||
|
|
||||
|
namespace eth |
||||
|
{ |
||||
|
template <> class UnitTest<1> |
||||
|
{ |
||||
|
public: |
||||
|
int operator()() |
||||
|
{ |
||||
|
KeyPair p = KeyPair::create(); |
||||
|
Overlay o; |
||||
|
State s(p.address(), o); |
||||
|
|
||||
|
cout << s; |
||||
|
|
||||
|
s.addBalance(p.address(), Uether); |
||||
|
|
||||
|
cout << s; |
||||
|
|
||||
|
Transaction c; |
||||
|
|
||||
|
c.receiveAddress = Address(); |
||||
|
c.nonce = 0; |
||||
|
c.data = assemble("txsender load txvalue add txsender store stop"); |
||||
|
c.value = ether; |
||||
|
c.sign(p.secret()); |
||||
|
s.execute(c.rlp()); |
||||
|
Address ca = right160(c.sha3()); |
||||
|
|
||||
|
cout << s; |
||||
|
|
||||
|
s.commit(); |
||||
|
|
||||
|
cout << s; |
||||
|
|
||||
|
cout << s.m_db; |
||||
|
|
||||
|
c.receiveAddress = ca; |
||||
|
c.nonce = 1; |
||||
|
c.data = {}; |
||||
|
c.value = 69 * wei; |
||||
|
c.sign(p.secret()); |
||||
|
s.execute(c.rlp()); |
||||
|
|
||||
|
cout << s; |
||||
|
|
||||
|
return 0; |
||||
|
} |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
int vmTest() |
||||
|
{ |
||||
|
return UnitTest<1>()(); |
||||
|
} |
||||
|
|
Loading…
Reference in new issue