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