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