Merge pull request #2747 from luke-jr/getblock_verbose0
Add verbose flag to getblock RPC so it is possible to get hex dumps of blocks
This commit is contained in:
commit
543d70a676
2 changed files with 18 additions and 3 deletions
|
@ -1187,6 +1187,7 @@ Array RPCConvertValues(const std::string &strMethod, const std::vector<std::stri
|
||||||
if (strMethod == "listunspent" && n > 0) ConvertTo<boost::int64_t>(params[0]);
|
if (strMethod == "listunspent" && n > 0) ConvertTo<boost::int64_t>(params[0]);
|
||||||
if (strMethod == "listunspent" && n > 1) ConvertTo<boost::int64_t>(params[1]);
|
if (strMethod == "listunspent" && n > 1) ConvertTo<boost::int64_t>(params[1]);
|
||||||
if (strMethod == "listunspent" && n > 2) ConvertTo<Array>(params[2]);
|
if (strMethod == "listunspent" && n > 2) ConvertTo<Array>(params[2]);
|
||||||
|
if (strMethod == "getblock" && n > 1) ConvertTo<bool>(params[1]);
|
||||||
if (strMethod == "getrawtransaction" && n > 1) ConvertTo<boost::int64_t>(params[1]);
|
if (strMethod == "getrawtransaction" && n > 1) ConvertTo<boost::int64_t>(params[1]);
|
||||||
if (strMethod == "createrawtransaction" && n > 0) ConvertTo<Array>(params[0]);
|
if (strMethod == "createrawtransaction" && n > 0) ConvertTo<Array>(params[0]);
|
||||||
if (strMethod == "createrawtransaction" && n > 1) ConvertTo<Object>(params[1]);
|
if (strMethod == "createrawtransaction" && n > 1) ConvertTo<Object>(params[1]);
|
||||||
|
|
|
@ -144,14 +144,20 @@ Value getblockhash(const Array& params, bool fHelp)
|
||||||
|
|
||||||
Value getblock(const Array& params, bool fHelp)
|
Value getblock(const Array& params, bool fHelp)
|
||||||
{
|
{
|
||||||
if (fHelp || params.size() != 1)
|
if (fHelp || params.size() < 1 || params.size() > 2)
|
||||||
throw runtime_error(
|
throw runtime_error(
|
||||||
"getblock <hash>\n"
|
"getblock <hash> [verbose=true]\n"
|
||||||
"Returns details of a block with given block-hash.");
|
"If verbose is false, returns a string that is serialized, hex-encoded data for block <hash>.\n"
|
||||||
|
"If verbose is true, returns an Object with information about block <hash>."
|
||||||
|
);
|
||||||
|
|
||||||
std::string strHash = params[0].get_str();
|
std::string strHash = params[0].get_str();
|
||||||
uint256 hash(strHash);
|
uint256 hash(strHash);
|
||||||
|
|
||||||
|
bool fVerbose = true;
|
||||||
|
if (params.size() > 1)
|
||||||
|
fVerbose = params[1].get_bool();
|
||||||
|
|
||||||
if (mapBlockIndex.count(hash) == 0)
|
if (mapBlockIndex.count(hash) == 0)
|
||||||
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Block not found");
|
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Block not found");
|
||||||
|
|
||||||
|
@ -159,6 +165,14 @@ Value getblock(const Array& params, bool fHelp)
|
||||||
CBlockIndex* pblockindex = mapBlockIndex[hash];
|
CBlockIndex* pblockindex = mapBlockIndex[hash];
|
||||||
block.ReadFromDisk(pblockindex);
|
block.ReadFromDisk(pblockindex);
|
||||||
|
|
||||||
|
if (!fVerbose)
|
||||||
|
{
|
||||||
|
CDataStream ssBlock(SER_NETWORK, PROTOCOL_VERSION);
|
||||||
|
ssBlock << block;
|
||||||
|
std::string strHex = HexStr(ssBlock.begin(), ssBlock.end());
|
||||||
|
return strHex;
|
||||||
|
}
|
||||||
|
|
||||||
return blockToJSON(block, pblockindex);
|
return blockToJSON(block, pblockindex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue