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;