|
|
@ -856,6 +856,41 @@ UniValue gettxoutsetinfo(const UniValue& params, bool fHelp, const CPubKey& mypk |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
UniValue getblockmerkletree(const UniValue& params, bool fHelp, const CPubKey& mypk) |
|
|
|
{ |
|
|
|
if (fHelp || params.size() != 1 ) |
|
|
|
throw runtime_error( |
|
|
|
"getblockmerkletree height\n" |
|
|
|
"\nGet full merkletree for a given Hush or HSC block height.\n" |
|
|
|
"\nArguments:\n" |
|
|
|
"1. height (int, required) block height\n" |
|
|
|
"\nResult:\n" |
|
|
|
"\"hex\" (string) the merkle tree hex encoded\n" |
|
|
|
+ HelpExampleCli("getblockmerkletree", "290000") |
|
|
|
+ HelpExampleRpc("getblockmerkletree", "290000") |
|
|
|
); |
|
|
|
|
|
|
|
CBlockIndex* phushblockindex; |
|
|
|
uint256 blockRoot; |
|
|
|
SaplingMerkleTree tree; |
|
|
|
|
|
|
|
int nHeight = params[0].get_int(); |
|
|
|
if ( (nHeight < 1) || (nHeight > chainActive.LastTip()->GetHeight()) ) { |
|
|
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid Hush or HSC block height parameter"); |
|
|
|
} |
|
|
|
|
|
|
|
phushblockindex = chainActive[nHeight]; |
|
|
|
blockRoot = phushblockindex->pprev->hashFinalSaplingRoot; |
|
|
|
if( pcoinsTip->GetSaplingAnchorAt(blockRoot, tree) ) { |
|
|
|
CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); |
|
|
|
ss << tree.path(); |
|
|
|
std::vector<unsigned char> merklepath(ss.begin(), ss.end()); |
|
|
|
//TODO: this returns the same, wrong data for all heights
|
|
|
|
return HexStr(merklepath); |
|
|
|
} else { |
|
|
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "Could not find merkletree"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
UniValue kvsearch(const UniValue& params, bool fHelp, const CPubKey& mypk) |
|
|
|
{ |
|
|
@ -1877,6 +1912,7 @@ static const CRPCCommand commands[] = |
|
|
|
{ "blockchain", "getblockcount", &getblockcount, true }, |
|
|
|
{ "blockchain", "getblock", &getblock, true }, |
|
|
|
{ "blockchain", "getblockhash", &getblockhash, true }, |
|
|
|
{ "blockchain", "getblockmerkletree", &getblockmerkletree, true }, |
|
|
|
{ "blockchain", "getblockheader", &getblockheader, true }, |
|
|
|
{ "blockchain", "getchaintips", &getchaintips, true }, |
|
|
|
{ "blockchain", "getchaintxstats", &getchaintxstats, true }, |
|
|
|