From fc17a0572fa448f9d5b5afbf0c5af8555de69d46 Mon Sep 17 00:00:00 2001 From: Sunny King Date: Sun, 26 Aug 2012 05:32:23 +0100 Subject: [PATCH] PPCoin: More detailed print of RPC command 'getblock' --- src/bitcoinrpc.cpp | 30 +++++++++++++++++++++--------- src/main.h | 17 +++++++++++++++++ 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp index e1f2285..aac2c50 100644 --- a/src/bitcoinrpc.cpp +++ b/src/bitcoinrpc.cpp @@ -136,7 +136,7 @@ string AccountFromValue(const Value& value) return strAccount; } -Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex) +Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool fPrintTransactionDetail) { Object result; result.push_back(Pair("hash", block.GetHash().GetHex())); @@ -148,15 +148,25 @@ Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex) result.push_back(Pair("nonce", (boost::uint64_t)block.nNonce)); result.push_back(Pair("bits", HexBits(block.nBits))); result.push_back(Pair("difficulty", GetDifficulty(blockindex))); - Array txhashes; - BOOST_FOREACH (const CTransaction&tx, block.vtx) - txhashes.push_back(tx.GetHash().GetHex()); - result.push_back(Pair("tx", txhashes)); - if (blockindex->pprev) result.push_back(Pair("previousblockhash", blockindex->pprev->GetBlockHash().GetHex())); if (blockindex->pnext) result.push_back(Pair("nextblockhash", blockindex->pnext->GetBlockHash().GetHex())); + Array txinfo; + BOOST_FOREACH (const CTransaction& tx, block.vtx) + { + if (fPrintTransactionDetail) + { + txinfo.push_back(tx.ToStringShort()); + BOOST_FOREACH(const CTxIn& txin, tx.vin) + txinfo.push_back(txin.ToStringShort()); + BOOST_FOREACH(const CTxOut& txout, tx.vout) + txinfo.push_back(txout.ToStringShort()); + } + else + txinfo.push_back(tx.GetHash().GetHex()); + } + result.push_back(Pair("tx", txinfo)); return result; } @@ -2000,9 +2010,10 @@ Value getblockhash(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( - "getblock \n" + "getblock [txinfo]\n" + "txinfo optional to print more detailed tx info\n" "Returns details of a block with given block-hash."); std::string strHash = params[0].get_str(); @@ -2015,7 +2026,7 @@ Value getblock(const Array& params, bool fHelp) CBlockIndex* pblockindex = mapBlockIndex[hash]; block.ReadFromDisk(pblockindex, true); - return blockToJSON(block, pblockindex); + return blockToJSON(block, pblockindex, params.size() > 1 ? params[1].get_bool() : false); } @@ -2890,6 +2901,7 @@ int CommandLineRPC(int argc, char *argv[]) if (strMethod == "listreceivedbyaccount" && n > 1) ConvertTo(params[1]); if (strMethod == "getbalance" && n > 1) ConvertTo(params[1]); if (strMethod == "getblockhash" && n > 0) ConvertTo(params[0]); + if (strMethod == "getblock" && n > 1) ConvertTo(params[1]); if (strMethod == "move" && n > 2) ConvertTo(params[2]); if (strMethod == "move" && n > 3) ConvertTo(params[3]); if (strMethod == "sendfrom" && n > 2) ConvertTo(params[2]); diff --git a/src/main.h b/src/main.h index c7f518a..92ed8dd 100644 --- a/src/main.h +++ b/src/main.h @@ -290,6 +290,11 @@ public: return !(a == b); } + std::string ToStringShort() const + { + return strprintf(" %s %d", prevout.hash.ToString().c_str(), prevout.n); + } + std::string ToString() const { std::string str; @@ -378,6 +383,11 @@ public: return !(a == b); } + std::string ToStringShort() const + { + return strprintf(" out amount %s", FormatMoney(nValue).c_str()); + } + std::string ToString() const { if (IsEmpty()) return "CTxOut(empty)"; @@ -660,6 +670,13 @@ public: } + std::string ToStringShort() const + { + std::string str; + str += strprintf("%s %s", GetHash().ToString().c_str(), IsCoinBase()? "base" : (IsCoinStake()? "stake" : "user")); + return str; + } + std::string ToString() const { std::string str; -- 1.7.1