Gav Wood
10 years ago
20 changed files with 52 additions and 493 deletions
@ -1,46 +0,0 @@ |
|||||
/*
|
|
||||
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 Manifest.cpp
|
|
||||
* @author Gav Wood <i@gavwood.com> |
|
||||
* @date 2014 |
|
||||
*/ |
|
||||
|
|
||||
#include "Manifest.h" |
|
||||
using namespace std; |
|
||||
using namespace dev; |
|
||||
using namespace dev::eth; |
|
||||
|
|
||||
Manifest::Manifest(bytesConstRef _r) |
|
||||
{ |
|
||||
RLP r(_r); |
|
||||
from = r[0].toHash<Address>(); |
|
||||
to = r[1].toHash<Address>(); |
|
||||
value = r[2].toInt<u256>(); |
|
||||
altered = r[3].toVector<u256>(); |
|
||||
input = r[4].toBytes(); |
|
||||
output = r[5].toBytes(); |
|
||||
for (auto const& i: r[6]) |
|
||||
internal.emplace_back(i.data()); |
|
||||
} |
|
||||
|
|
||||
void Manifest::streamRLP(RLPStream& _s) const |
|
||||
{ |
|
||||
_s.appendList(7) << from << to << value << altered << input << output; |
|
||||
_s.appendList(internal.size()); |
|
||||
for (auto const& i: internal) |
|
||||
i.streamRLP(_s); |
|
||||
} |
|
@ -1,73 +0,0 @@ |
|||||
/*
|
|
||||
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 Manifest.h
|
|
||||
* @author Gav Wood <i@gavwood.com> |
|
||||
* @date 2014 |
|
||||
*/ |
|
||||
|
|
||||
#pragma once |
|
||||
|
|
||||
#include <iostream> |
|
||||
#include <sstream> |
|
||||
#include <libdevcore/RLP.h> |
|
||||
#include <libethcore/CommonEth.h> |
|
||||
|
|
||||
namespace dev |
|
||||
{ |
|
||||
namespace eth |
|
||||
{ |
|
||||
|
|
||||
struct Manifest; |
|
||||
using Manifests = std::vector<Manifest>; |
|
||||
|
|
||||
/**
|
|
||||
* @brief A record of the state-interaction of a transaction/call/create. |
|
||||
*/ |
|
||||
struct Manifest |
|
||||
{ |
|
||||
Manifest() {} |
|
||||
Manifest(bytesConstRef _r); |
|
||||
void streamRLP(RLPStream& _s) const; |
|
||||
|
|
||||
h256 bloom() const { h256 ret = from.bloom() | to.bloom(); for (auto const& i: internal) ret |= i.bloom(); for (auto const& i: altered) ret |= h256(i).bloom(); return ret; } |
|
||||
|
|
||||
std::string toString(unsigned _indent = 0) const |
|
||||
{ |
|
||||
std::ostringstream oss; |
|
||||
oss << std::string(_indent * 3, ' ') << from << " -> " << to << " [" << value << "]: {"; |
|
||||
if (internal.size()) |
|
||||
{ |
|
||||
oss << std::endl; |
|
||||
for (auto const& m: internal) |
|
||||
oss << m.toString(_indent + 1) << std::endl; |
|
||||
oss << std::string(_indent * 3, ' '); |
|
||||
} |
|
||||
oss << "} I:" << toHex(input) << "; O:" << toHex(output); |
|
||||
return oss.str(); |
|
||||
} |
|
||||
|
|
||||
Address from; |
|
||||
Address to; |
|
||||
u256 value; |
|
||||
u256s altered; |
|
||||
bytes input; |
|
||||
bytes output; |
|
||||
Manifests internal; |
|
||||
}; |
|
||||
|
|
||||
} |
|
||||
} |
|
@ -1,28 +0,0 @@ |
|||||
/*
|
|
||||
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 PastMessage.cpp
|
|
||||
* @author Gav Wood <i@gavwood.com> |
|
||||
* @date 2014 |
|
||||
*/ |
|
||||
|
|
||||
#include "PastMessage.h" |
|
||||
using namespace std; |
|
||||
using namespace dev; |
|
||||
using namespace dev::eth; |
|
||||
|
|
||||
#pragma GCC diagnostic ignored "-Wunused-variable" |
|
||||
namespace { char dummy; }; |
|
@ -1,56 +0,0 @@ |
|||||
/*
|
|
||||
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 PastMessage.h
|
|
||||
* @author Gav Wood <i@gavwood.com> |
|
||||
* @date 2014 |
|
||||
*/ |
|
||||
|
|
||||
#pragma once |
|
||||
|
|
||||
#include <libdevcore/Common.h> |
|
||||
#include <libethcore/CommonEth.h> |
|
||||
#include "Manifest.h" |
|
||||
|
|
||||
namespace dev |
|
||||
{ |
|
||||
namespace eth |
|
||||
{ |
|
||||
|
|
||||
struct PastMessage |
|
||||
{ |
|
||||
PastMessage(Manifest const& _m, std::vector<unsigned> _path, Address _o): to(_m.to), from(_m.from), value(_m.value), input(_m.input), output(_m.output), path(_path), origin(_o) {} |
|
||||
|
|
||||
PastMessage& polish(h256 _b, u256 _ts, unsigned _n, Address _coinbase) { block = _b; timestamp = _ts; number = _n; coinbase = _coinbase; return *this; } |
|
||||
|
|
||||
Address to; ///< The receiving address of the transaction. Address() in the case of a creation.
|
|
||||
Address from; ///< The receiving address of the transaction. Address() in the case of a creation.
|
|
||||
u256 value; ///< The value associated with the call.
|
|
||||
bytes input; ///< The data associated with the message, or the initialiser if it's a creation transaction.
|
|
||||
bytes output; ///< The data returned by the message, or the body code if it's a creation transaction.
|
|
||||
|
|
||||
std::vector<unsigned> path; ///< Call path into the block transaction. size() is always > 0. First item is the transaction index in the block.
|
|
||||
Address origin; ///< Originating sender of the transaction.
|
|
||||
Address coinbase; ///< Block coinbase.
|
|
||||
h256 block; ///< Block hash.
|
|
||||
u256 timestamp; ///< Block timestamp.
|
|
||||
unsigned number; ///< Block number.
|
|
||||
}; |
|
||||
|
|
||||
typedef std::vector<PastMessage> PastMessages; |
|
||||
|
|
||||
} |
|
||||
} |
|
Loading…
Reference in new issue