Skip to content

Commit

Permalink
rest: Use existing NodeContext
Browse files Browse the repository at this point in the history
  • Loading branch information
dongcarl committed Apr 5, 2021
1 parent 3f08934 commit d7824ac
Showing 1 changed file with 18 additions and 14 deletions.
32 changes: 18 additions & 14 deletions src/rest.cpp
Expand Up @@ -181,13 +181,14 @@ static bool rest_headers(const std::any& context,
headers.reserve(count);
{
LOCK(cs_main);
tip = ::ChainActive().Tip();
const CBlockIndex* pindex = g_chainman.m_blockman.LookupBlockIndex(hash);
while (pindex != nullptr && ::ChainActive().Contains(pindex)) {
ChainstateManager& chainman = EnsureChainman(context);
tip = chainman.ActiveChain().Tip();
const CBlockIndex* pindex = chainman.m_blockman.LookupBlockIndex(hash);
while (pindex != nullptr && chainman.ActiveChain().Contains(pindex)) {
headers.push_back(pindex);
if (headers.size() == (unsigned long)count)
break;
pindex = ::ChainActive().Next(pindex);
pindex = chainman.ActiveChain().Next(pindex);
}
}

Expand Down Expand Up @@ -250,8 +251,9 @@ static bool rest_block(const std::any& context,
CBlockIndex* tip = nullptr;
{
LOCK(cs_main);
tip = ::ChainActive().Tip();
pblockindex = g_chainman.m_blockman.LookupBlockIndex(hash);
ChainstateManager& chainman = EnsureChainman(context);
tip = chainman.ActiveChain().Tip();
pblockindex = chainman.m_blockman.LookupBlockIndex(hash);
if (!pblockindex) {
return RESTERR(req, HTTP_NOT_FOUND, hashStr + " not found");
}
Expand Down Expand Up @@ -536,6 +538,7 @@ static bool rest_getutxos(const std::any& context, HTTPRequest* req, const std::
std::string bitmapStringRepresentation;
std::vector<bool> hits;
bitmap.resize((vOutPoints.size() + 7) / 8);
ChainstateManager& chainman = EnsureChainman(context);
{
auto process_utxos = [&vOutPoints, &outs, &hits](const CCoinsView& view, const CTxMemPool& mempool) {
for (const COutPoint& vOutPoint : vOutPoints) {
Expand All @@ -551,12 +554,12 @@ static bool rest_getutxos(const std::any& context, HTTPRequest* req, const std::
if (!mempool) return false;
// use db+mempool as cache backend in case user likes to query mempool
LOCK2(cs_main, mempool->cs);
CCoinsViewCache& viewChain = ::ChainstateActive().CoinsTip();
CCoinsViewCache& viewChain = chainman.ActiveChainstate().CoinsTip();
CCoinsViewMemPool viewMempool(&viewChain, *mempool);
process_utxos(viewMempool, *mempool);
} else {
LOCK(cs_main); // no need to lock mempool!
process_utxos(::ChainstateActive().CoinsTip(), CTxMemPool());
process_utxos(chainman.ActiveChainstate().CoinsTip(), CTxMemPool());
}

for (size_t i = 0; i < hits.size(); ++i) {
Expand All @@ -571,7 +574,7 @@ static bool rest_getutxos(const std::any& context, HTTPRequest* req, const std::
// serialize data
// use exact same output as mentioned in Bip64
CDataStream ssGetUTXOResponse(SER_NETWORK, PROTOCOL_VERSION);
ssGetUTXOResponse << ::ChainActive().Height() << ::ChainActive().Tip()->GetBlockHash() << bitmap << outs;
ssGetUTXOResponse << chainman.ActiveChain().Height() << chainman.ActiveChain().Tip()->GetBlockHash() << bitmap << outs;
std::string ssGetUTXOResponseString = ssGetUTXOResponse.str();

req->WriteHeader("Content-Type", "application/octet-stream");
Expand All @@ -581,7 +584,7 @@ static bool rest_getutxos(const std::any& context, HTTPRequest* req, const std::

case RetFormat::HEX: {
CDataStream ssGetUTXOResponse(SER_NETWORK, PROTOCOL_VERSION);
ssGetUTXOResponse << ::ChainActive().Height() << ::ChainActive().Tip()->GetBlockHash() << bitmap << outs;
ssGetUTXOResponse << chainman.ActiveChain().Height() << chainman.ActiveChain().Tip()->GetBlockHash() << bitmap << outs;
std::string strHex = HexStr(ssGetUTXOResponse) + "\n";

req->WriteHeader("Content-Type", "text/plain");
Expand All @@ -594,8 +597,8 @@ static bool rest_getutxos(const std::any& context, HTTPRequest* req, const std::

// pack in some essentials
// use more or less the same output as mentioned in Bip64
objGetUTXOResponse.pushKV("chainHeight", ::ChainActive().Height());
objGetUTXOResponse.pushKV("chaintipHash", ::ChainActive().Tip()->GetBlockHash().GetHex());
objGetUTXOResponse.pushKV("chainHeight", chainman.ActiveChain().Height());
objGetUTXOResponse.pushKV("chaintipHash", chainman.ActiveChain().Tip()->GetBlockHash().GetHex());
objGetUTXOResponse.pushKV("bitmap", bitmapStringRepresentation);

UniValue utxos(UniValue::VARR);
Expand Down Expand Up @@ -639,10 +642,11 @@ static bool rest_blockhash_by_height(const std::any& context, HTTPRequest* req,
CBlockIndex* pblockindex = nullptr;
{
LOCK(cs_main);
if (blockheight > ::ChainActive().Height()) {
const CChain& active_chain = EnsureChainman(context).ActiveChain();
if (blockheight > active_chain.Height()) {
return RESTERR(req, HTTP_NOT_FOUND, "Block height out of range");
}
pblockindex = ::ChainActive()[blockheight];
pblockindex = active_chain[blockheight];
}
switch (rf) {
case RetFormat::BINARY: {
Expand Down

0 comments on commit d7824ac

Please sign in to comment.