Ethereum  PoC-8
The C++ Implementation of Ethereum
TransactionReceipt.h
Go to the documentation of this file.
1 /*
2  This file is part of cpp-ethereum.
3 
4  cpp-ethereum is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 3 of the License, or
7  (at your option) any later version.
8 
9  cpp-ethereum is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
16 */
22 #pragma once
23 
24 #include <libethcore/Common.h>
25 #include <libethcore/LogEntry.h>
26 #include <libdevcore/RLP.h>
27 
28 #include <boost/variant/variant.hpp>
29 #include <array>
30 
31 namespace dev
32 {
33 namespace eth
34 {
35 
40 {
41 public:
43  TransactionReceipt(h256 const& _root, u256 const& _gasUsed, LogEntries const& _log);
44  TransactionReceipt(uint8_t _status, u256 const& _gasUsed, LogEntries const& _log);
45 
47  bool hasStatusCode() const;
50  h256 const& stateRoot() const;
53  uint8_t statusCode() const;
54  u256 const& cumulativeGasUsed() const { return m_gasUsed; }
55  LogBloom const& bloom() const { return m_bloom; }
56  LogEntries const& log() const { return m_log; }
57 
58  void streamRLP(RLPStream& _s) const;
59 
60  bytes rlp() const { RLPStream s; streamRLP(s); return s.out(); }
61 
62 private:
63  boost::variant<uint8_t,h256> m_statusCodeOrStateRoot;
64  u256 m_gasUsed;
65  LogBloom m_bloom;
66  LogEntries m_log;
67 };
68 
69 using TransactionReceipts = std::vector<TransactionReceipt>;
70 
71 std::ostream& operator<<(std::ostream& _out, eth::TransactionReceipt const& _r);
72 
74 {
75 public:
77  TransactionReceipt const& _t,
78  h256 const& _hash,
79  h256 const& _blockHash,
80  BlockNumber _blockNumber,
81  Address const& _from,
82  Address const& _to,
83  unsigned _transactionIndex,
84  u256 const& _gasUsed,
85  Address const& _contractAddress = Address()
86  ):
88  m_hash(_hash),
89  m_blockHash(_blockHash),
90  m_blockNumber(_blockNumber),
91  m_from(_from),
92  m_to(_to),
93  m_transactionIndex(_transactionIndex),
94  m_gasUsed(_gasUsed),
95  m_contractAddress(_contractAddress)
96  {
97  LogEntries entries = log();
98  for (unsigned i = 0; i < entries.size(); i++)
99  m_localisedLogs.push_back(LocalisedLogEntry(
100  entries[i],
101  m_blockHash,
102  m_blockNumber,
103  m_hash,
104  m_transactionIndex,
105  i
106  ));
107  }
108 
109  h256 const& hash() const { return m_hash; }
110  h256 const& blockHash() const { return m_blockHash; }
111  BlockNumber blockNumber() const { return m_blockNumber; }
112  Address const& from() const { return m_from; }
113  Address const& to() const { return m_to; }
114  unsigned transactionIndex() const { return m_transactionIndex; }
115  u256 const& gasUsed() const { return m_gasUsed; }
116  Address const& contractAddress() const { return m_contractAddress; }
117  LocalisedLogEntries const& localisedLogs() const { return m_localisedLogs; };
118 
119 private:
120  h256 m_hash;
121  h256 m_blockHash;
122  BlockNumber m_blockNumber;
123  Address m_from;
124  Address m_to;
125  unsigned m_transactionIndex = 0;
126  u256 m_gasUsed;
127  Address m_contractAddress;
128  LocalisedLogEntries m_localisedLogs;
129 };
130 
131 }
132 }
dev::eth::TransactionReceipt::stateRoot
h256 const & stateRoot() const
Definition: TransactionReceipt.cpp:94
dev::vector_ref< byte const >
dev::eth::LocalisedTransactionReceipt::blockNumber
BlockNumber blockNumber() const
Definition: TransactionReceipt.h:111
LogEntry.h
dev::eth::TransactionReceipt::cumulativeGasUsed
u256 const & cumulativeGasUsed() const
Definition: TransactionReceipt.h:54
dev::RLPStream::out
bytes const & out() const
Read the byte stream.
Definition: RLP.h:419
dev::eth::TransactionReceipt::streamRLP
void streamRLP(RLPStream &_s) const
Definition: TransactionReceipt.cpp:68
dev::FixedHash< 32 >
dev::eth::LocalisedTransactionReceipt::to
Address const & to() const
Definition: TransactionReceipt.h:113
dev::eth::LocalisedTransactionReceipt::contractAddress
Address const & contractAddress() const
Definition: TransactionReceipt.h:116
dev::eth::LocalisedTransactionReceipt::transactionIndex
unsigned transactionIndex() const
Definition: TransactionReceipt.h:114
dev::eth::LocalisedTransactionReceipt::localisedLogs
LocalisedLogEntries const & localisedLogs() const
Definition: TransactionReceipt.h:117
Common.h
dev::eth::LocalisedTransactionReceipt::blockHash
h256 const & blockHash() const
Definition: TransactionReceipt.h:110
dev::eth::LogEntries
std::vector< LogEntry > LogEntries
Definition: LogEntry.h:51
dev::bytes
std::vector< byte > bytes
Definition: Common.h:72
dev::eth::TransactionReceipt::TransactionReceipt
TransactionReceipt(bytesConstRef _rlp)
Definition: TransactionReceipt.cpp:31
dev::eth::TransactionReceipts
std::vector< TransactionReceipt > TransactionReceipts
Definition: TransactionReceipt.h:69
dev::eth::TransactionReceipt::statusCode
uint8_t statusCode() const
Definition: TransactionReceipt.cpp:86
dev::eth::LocalisedLogEntries
std::vector< LocalisedLogEntry > LocalisedLogEntries
Definition: LogEntry.h:94
dev::RLPStream
Class for writing to an RLP bytestream.
Definition: RLP.h:370
dev::eth::TransactionReceipt::hasStatusCode
bool hasStatusCode() const
Definition: TransactionReceipt.cpp:81
dev::eth::TransactionReceipt::rlp
bytes rlp() const
Definition: TransactionReceipt.h:60
dev::eth::BlockNumber
unsigned BlockNumber
Definition: Common.h:64
dev::u256
boost::multiprecision::number< boost::multiprecision::cpp_int_backend< 256, 256, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void > > u256
Definition: Common.h:121
dev::eth::LocalisedTransactionReceipt::from
Address const & from() const
Definition: TransactionReceipt.h:112
dev::eth::operator<<
std::ostream & operator<<(std::ostream &_out, BlockHeader const &_bi)
Definition: BlockHeader.h:217
dev::eth::TransactionReceipt::log
LogEntries const & log() const
Definition: TransactionReceipt.h:56
dev::eth::TransactionReceipt
Definition: TransactionReceipt.h:40
dev::eth::LocalisedTransactionReceipt::LocalisedTransactionReceipt
LocalisedTransactionReceipt(TransactionReceipt const &_t, h256 const &_hash, h256 const &_blockHash, BlockNumber _blockNumber, Address const &_from, Address const &_to, unsigned _transactionIndex, u256 const &_gasUsed, Address const &_contractAddress=Address())
Definition: TransactionReceipt.h:76
dev
Definition: Address.cpp:21
dev::eth::LocalisedTransactionReceipt::hash
h256 const & hash() const
Definition: TransactionReceipt.h:109
dev::eth::LocalisedTransactionReceipt
Definition: TransactionReceipt.h:74
dev::eth::LocalisedTransactionReceipt::gasUsed
u256 const & gasUsed() const
Definition: TransactionReceipt.h:115
dev::eth::LocalisedLogEntry
Definition: LogEntry.h:54
dev::eth::TransactionReceipt::bloom
LogBloom const & bloom() const
Definition: TransactionReceipt.h:55
dev::Address
h160 Address
Definition: Address.h:30
RLP.h