aboutsummaryrefslogtreecommitdiff
path: root/src/rpc/blockchain.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/rpc/blockchain.cpp')
-rw-r--r--src/rpc/blockchain.cpp42
1 files changed, 41 insertions, 1 deletions
diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp
index fd8f52a5c..92601a5ec 100644
--- a/src/rpc/blockchain.cpp
+++ b/src/rpc/blockchain.cpp
@@ -9,6 +9,7 @@
#include "checkpoints.h"
#include "coins.h"
#include "consensus/validation.h"
+#include "core_io.h"
#include "validation.h"
#include "policy/policy.h"
#include "primitives/transaction.h"
@@ -74,6 +75,42 @@ double GetDifficulty(const CBlockIndex* blockindex)
return dDiff;
}
+UniValue AuxpowToJSON(const CAuxPow& auxpow)
+{
+ UniValue result(UniValue::VOBJ);
+
+ {
+ UniValue tx(UniValue::VOBJ);
+ tx.push_back(Pair("hex", EncodeHexTx(auxpow)));
+ TxToJSON(auxpow, auxpow.parentBlock.GetHash(), tx);
+ result.push_back(Pair("tx", tx));
+ }
+
+ result.push_back(Pair("index", auxpow.nIndex));
+ result.push_back(Pair("chainindex", auxpow.nChainIndex));
+
+ {
+ UniValue branch(UniValue::VARR);
+ BOOST_FOREACH(const uint256& node, auxpow.vMerkleBranch)
+ branch.push_back(node.GetHex());
+ result.push_back(Pair("merklebranch", branch));
+ }
+
+ {
+ UniValue branch(UniValue::VARR);
+ BOOST_FOREACH(const uint256& node, auxpow.vChainMerkleBranch)
+ branch.push_back(node.GetHex());
+ result.push_back(Pair("chainmerklebranch", branch));
+ }
+
+ CDataStream ssParent(SER_NETWORK, PROTOCOL_VERSION);
+ ssParent << auxpow.parentBlock;
+ const std::string strHex = HexStr(ssParent.begin(), ssParent.end());
+ result.push_back(Pair("parentblock", strHex));
+
+ return result;
+}
+
UniValue blockheaderToJSON(const CBlockIndex* blockindex)
{
UniValue result(UniValue::VOBJ);
@@ -138,6 +175,9 @@ UniValue blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool tx
result.push_back(Pair("difficulty", GetDifficulty(blockindex)));
result.push_back(Pair("chainwork", blockindex->nChainWork.GetHex()));
+ if (block.auxpow)
+ result.push_back(Pair("auxpow", AuxpowToJSON(*block.auxpow)));
+
if (blockindex->pprev)
result.push_back(Pair("previousblockhash", blockindex->pprev->GetBlockHash().GetHex()));
CBlockIndex *pnext = chainActive.Next(blockindex);
@@ -680,7 +720,7 @@ UniValue getblockheader(const JSONRPCRequest& request)
if (!fVerbose)
{
CDataStream ssBlock(SER_NETWORK, PROTOCOL_VERSION);
- ssBlock << pblockindex->GetBlockHeader();
+ ssBlock << pblockindex->GetBlockHeader(Params().GetConsensus());
std::string strHex = HexStr(ssBlock.begin(), ssBlock.end());
return strHex;
}