Browse Source

WIP optional min branch length argument to getchaintips, which makes it easier to see mining attacks

size_on_disk
Jonathan "Duke" Leto 6 years ago
parent
commit
4e66ca4026
  1. 1
      qa/rpc-tests/getchaintips.py
  2. 10
      src/rpcblockchain.cpp

1
qa/rpc-tests/getchaintips.py

@ -16,6 +16,7 @@ class GetChainTipsTest (BitcoinTestFramework):
BitcoinTestFramework.run_test (self)
tips = self.nodes[0].getchaintips ()
print tips
assert_equal (len (tips), 1)
assert_equal (tips[0]['branchlen'], 0)
assert_equal (tips[0]['height'], 200)

10
src/rpcblockchain.cpp

@ -998,6 +998,10 @@ UniValue getchaintips(const UniValue& params, bool fHelp)
LOCK(cs_main);
int minBranchLen = 0;
if (params.size() > 0)
minBranchLen = params[0].get_int();
/* Build up a list of chain tips. We start with the list of all
known blocks, and successively remove blocks that appear as pprev
of another block. */
@ -1018,11 +1022,13 @@ UniValue getchaintips(const UniValue& params, bool fHelp)
UniValue res(UniValue::VARR);
BOOST_FOREACH(const CBlockIndex* block, setTips)
{
const int branchLen = block->nHeight - chainActive.FindFork(block)->nHeight;
if (branchLen < minBranchLen)
continue;
UniValue obj(UniValue::VOBJ);
obj.push_back(Pair("height", block->nHeight));
obj.push_back(Pair("hash", block->phashBlock->GetHex()));
const int branchLen = block->nHeight - chainActive.FindFork(block)->nHeight;
obj.push_back(Pair("branchlen", branchLen));
string status;

Loading…
Cancel
Save