25 #include <boost/variant/get.hpp> 35 BOOST_THROW_EXCEPTION(InvalidTransactionReceiptFormat());
38 BOOST_THROW_EXCEPTION(InvalidTransactionReceiptFormat());
40 if (r[0].size() == 32)
41 m_statusCodeOrStateRoot = (
h256)r[0];
42 else if (r[0].isInt())
43 m_statusCodeOrStateRoot = (uint8_t)r[0];
45 BOOST_THROW_EXCEPTION(InvalidTransactionReceiptFormat());
47 m_gasUsed = (
u256)r[1];
49 for (
auto const& i : r[3])
50 m_log.emplace_back(i);
54 TransactionReceipt::TransactionReceipt(
h256 const& _root,
u256 const& _gasUsed,
LogEntries const& _log):
55 m_statusCodeOrStateRoot(_root),
57 m_bloom(eth::
bloom(_log)),
62 m_statusCodeOrStateRoot(_status),
64 m_bloom(eth::
bloom(_log)),
75 _s << m_gasUsed << m_bloom;
83 return m_statusCodeOrStateRoot.which() == 0;
89 return boost::get<uint8_t>(m_statusCodeOrStateRoot);
91 BOOST_THROW_EXCEPTION(TransactionReceiptVersionError());
97 BOOST_THROW_EXCEPTION(TransactionReceiptVersionError());
99 return boost::get<h256>(m_statusCodeOrStateRoot);
105 _out <<
"Status: " << _r.
statusCode() << std::endl;
107 _out <<
"Root: " << _r.
stateRoot() << std::endl;
109 _out <<
"Logs: " << _r.
log().size() <<
" entries:" << std::endl;
112 _out <<
"Address " << i.address <<
". Topics:" << std::endl;
113 for (
auto const& j: i.topics)
114 _out <<
" " << j << std::endl;
115 _out <<
" Data: " <<
toHex(i.data) << std::endl;
117 _out <<
"Bloom: " << _r.
bloom() << std::endl;
bool hasStatusCode() const
std::ostream & operator<<(std::ostream &_out, BlockHeader const &_bi)
uint8_t statusCode() const
LogEntries const & log() const
LogBloom const & bloom() const
RLPStream & appendList(size_t _items)
Appends a list.
u256 const & cumulativeGasUsed() const
h256 const & stateRoot() const
boost::multiprecision::number< boost::multiprecision::cpp_int_backend< 256, 256, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void > > u256
h2048 LogBloom
The log bloom's size (2048-bit).
std::string toHex(Iterator _it, Iterator _end, std::string const &_prefix)
Class for writing to an RLP bytestream.
void streamRLP(RLPStream &_s) const
std::vector< LogEntry > LogEntries
LogBloom bloom(LogEntries const &_logs)
bool isList() const
List value.
TransactionReceipt(bytesConstRef _rlp)