Browse Source

New fields in explorer for PoC-5.

Quick fix for ref count issue.
cl-refactor
Gav Wood 11 years ago
parent
commit
3ad5a21d77
  1. 9
      alethzero/MainWin.cpp
  2. 33
      libethcore/TrieDB.cpp
  3. 8
      libethcore/TrieDB.h
  4. 6
      libethereum/BlockChain.cpp
  5. 3
      libethereum/BlockChain.h
  6. 13
      libethereum/PeerSession.cpp

9
alethzero/MainWin.cpp

@ -662,15 +662,20 @@ void Main::on_blocks_currentItemChanged()
time_t rawTime = (time_t)(uint64_t)info.timestamp;
strftime(timestamp, 64, "%c", localtime(&rawTime));
s << "<h3>" << h << "</h3>";
s << "<h4>#" << details.number;
s << "<h4>#" << info.number;
s << "&nbsp;&emsp;&nbsp;<b>" << timestamp << "</b></h4>";
s << "<br/>D/TD: <b>2^" << log2((double)info.difficulty) << "</b>/<b>2^" << log2((double)details.totalDifficulty) << "</b>";
s << "&nbsp;&emsp;&nbsp;Children: <b>" << details.children.size() << "</b></h5>";
s << "<br/>Gas used/limit: <b>" << info.gasUsed << "</b>/<b>" << info.gasLimit << "</b>";
s << "&nbsp;&emsp;&nbsp;Minimum gas price: <b>" << formatBalance(info.minGasPrice) << "</b>";
s << "<br/>Coinbase: <b>" << pretty(info.coinbaseAddress).toStdString() << "</b> " << info.coinbaseAddress;
s << "<br/>State: <b>" << info.stateRoot << "</b>";
s << "<br/>Nonce: <b>" << info.nonce << "</b>";
s << "<br/>Transactions: <b>" << block[1].itemCount() << "</b> @<b>" << info.transactionsRoot << "</b>";
s << "<br/>Uncles: <b>" << block[2].itemCount() << "</b> @<b>" << info.sha3Uncles << "</b>";
s << "<br/>Pre: <b>" << BlockInfo(m_client->blockChain().block(info.parentHash)).stateRoot << "</b>";
for (auto const& i: block[1])
s << "<br/>" << sha3(i[0].data()).abridged() << ": <b>" << i[1].toHash<h256>() << "</b> [<b>" << i[2].toInt<u256>() << "</b> used]";
s << "<br/>Post: <b>" << info.stateRoot << "</b>";
}
else
{

33
libethcore/TrieDB.cpp

@ -35,4 +35,37 @@ Overlay::~Overlay()
cnote << "Closing state DB";
}
void Overlay::setDB(ldb::DB* _db, bool _clearOverlay)
{
m_db = std::shared_ptr<ldb::DB>(_db);
if (_clearOverlay)
m_over.clear();
}
void Overlay::commit()
{
if (m_db)
{
for (auto const& i: m_over)
// if (m_refCount[i.first])
m_db->Put(m_writeOptions, ldb::Slice((char const*)i.first.data(), i.first.size), ldb::Slice(i.second.data(), i.second.size()));
m_over.clear();
m_refCount.clear();
}
}
void Overlay::rollback()
{
m_over.clear();
m_refCount.clear();
}
std::string Overlay::lookup(h256 _h) const
{
std::string ret = BasicMap::lookup(_h);
if (ret.empty() && m_db)
m_db->Get(m_readOptions, ldb::Slice((char const*)_h.data(), 32), &ret);
return ret;
}
}

8
libethcore/TrieDB.h

@ -68,12 +68,12 @@ public:
~Overlay();
ldb::DB* db() const { return m_db.get(); }
void setDB(ldb::DB* _db, bool _clearOverlay = true) { m_db = std::shared_ptr<ldb::DB>(_db); if (_clearOverlay) m_over.clear(); }
void setDB(ldb::DB* _db, bool _clearOverlay = true);
void commit() { if (m_db) { for (auto const& i: m_over) if (m_refCount[i.first]) m_db->Put(m_writeOptions, ldb::Slice((char const*)i.first.data(), i.first.size), ldb::Slice(i.second.data(), i.second.size())); m_over.clear(); m_refCount.clear(); } }
void rollback() { m_over.clear(); m_refCount.clear(); }
void commit();
void rollback();
std::string lookup(h256 _h) const { std::string ret = BasicMap::lookup(_h); if (ret.empty() && m_db) m_db->Get(m_readOptions, ldb::Slice((char const*)_h.data(), 32), &ret); return ret; }
std::string lookup(h256 _h) const;
private:
using BasicMap::clear;

6
libethereum/BlockChain.cpp

@ -37,6 +37,7 @@ using namespace eth;
namespace eth
{
std::ostream& operator<<(std::ostream& _out, BlockChain const& _bc)
{
string cmp = toBigEndianString(_bc.m_lastBlockHash);
@ -282,6 +283,11 @@ bytesConstRef BlockChain::block(h256 _hash) const
}
}
eth::uint BlockChain::number(h256 _hash) const
{
return details(_hash).number;
}
BlockDetails const& BlockChain::details(h256 _h) const
{
BlockDetailsHash::const_iterator it;

3
libethereum/BlockChain.h

@ -91,6 +91,9 @@ public:
bytesConstRef block(h256 _hash) const;
bytesConstRef block() const { return block(currentHash()); }
uint number(h256 _hash) const;
uint number() const { return number(currentHash()); }
/// Get a given block (RLP format). Thread-safe.
h256 currentHash() const { return m_lastBlockHash; }

13
libethereum/PeerSession.cpp

@ -108,8 +108,9 @@ bool PeerSession::interpret(RLP const& _r)
// Grab their block chain off them.
{
clogS(NetAllDetail) << "Want chain. Latest:" << m_server->m_latestBlockSent << ", number:" << m_server->m_chain->details(m_server->m_latestBlockSent).number;
uint count = std::min(c_maxHashes, m_server->m_chain->details(m_server->m_latestBlockSent).number + 1);
uint n = m_server->m_chain->number(m_server->m_latestBlockSent);
clogS(NetAllDetail) << "Want chain. Latest:" << m_server->m_latestBlockSent << ", number:" << n;
uint count = std::min(c_maxHashes, n + 1);
RLPStream s;
prep(s).appendList(2 + count);
s << GetChainPacket;
@ -282,15 +283,15 @@ bool PeerSession::interpret(RLP const& _r)
if (m_server->m_chain->details(parent))
{
latestNumber = m_server->m_chain->details(latest).number;
parentNumber = m_server->m_chain->details(parent).number;
latestNumber = m_server->m_chain->number(latest);
parentNumber = m_server->m_chain->number(parent);
uint count = min<uint>(latestNumber - parentNumber, baseCount);
clogS(NetAllDetail) << "Requires " << dec << (latestNumber - parentNumber) << " blocks from " << latestNumber << " to " << parentNumber;
clogS(NetAllDetail) << latest << " - " << parent;
prep(s);
s.appendList(1 + count) << BlocksPacket;
uint endNumber = m_server->m_chain->details(parent).number;
uint endNumber = m_server->m_chain->number(parent);
uint startNumber = endNumber + count;
clogS(NetAllDetail) << "Sending " << dec << count << " blocks from " << startNumber << " to " << endNumber;
@ -346,7 +347,7 @@ bool PeerSession::interpret(RLP const& _r)
}
else
{
uint count = std::min(c_maxHashes, m_server->m_chain->details(noGood).number);
uint count = std::min(c_maxHashes, m_server->m_chain->number(noGood));
RLPStream s;
prep(s).appendList(2 + count);
s << GetChainPacket;

Loading…
Cancel
Save