Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- From 4de74efdcfc0e6da6cda365774ea3530adc49035 Mon Sep 17 00:00:00 2001
- From: Fahrzin Hemmati <fahhem@fahhem.com>
- Date: Sat, 23 Apr 2011 16:07:36 -0700
- Subject: [PATCH] getblock
- ---
- rpc.cpp | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 114 insertions(+), 0 deletions(-)
- diff --git a/rpc.cpp b/rpc.cpp
- index 90e7f15..7bb9a30 100644
- --- a/rpc.cpp
- +++ b/rpc.cpp
- @@ -181,6 +181,118 @@ Value getblocknumber(const Array& params, bool fHelp)
- return nBestHeight;
- }
- +Value getblock(const Array& params, bool fHelp)
- +{
- + if (fHelp || params.size() != 1)
- + throw runtime_error(
- + "getblock height\n"
- + "Dumps the block existing at specified height");
- +
- + int64 height = params[0].get_int64();
- + if (height > nBestHeight)
- + throw runtime_error(
- + "getblock height\n"
- + "Dumps the block existing at specified height");
- +
- + string blkname = strprintf("blk%d", height);
- +
- + CBlockIndex* pindex;
- + bool found = false;
- +
- + for (map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.begin();
- + mi != mapBlockIndex.end(); ++mi)
- + {
- + pindex = (*mi).second;
- + if (pindex->nHeight == height) {
- + found = true;
- + break;
- + }
- + }
- +
- + if (!found)
- + throw runtime_error(
- + "getblock height\n"
- + "Dumps the block existing at specified height");
- +
- + CBlock block;
- + block.ReadFromDisk(pindex);
- + block.BuildMerkleTree();
- +
- + Object obj;
- + obj.push_back(Pair("hash", block.GetHash().ToString().c_str()));
- + obj.push_back(Pair("ver", block.nVersion));
- + obj.push_back(Pair("prev_block", block.hashPrevBlock.ToString().c_str()));
- + obj.push_back(Pair("mrkl_root", block.hashMerkleRoot.ToString().c_str()));
- + obj.push_back(Pair("time", (uint64_t)block.nTime));
- + obj.push_back(Pair("bits", (uint64_t)block.nBits));
- + obj.push_back(Pair("nonce", (uint64_t)block.nNonce));
- + obj.push_back(Pair("n_tx", (int)block.vtx.size()));
- +
- + Array tx;
- + for (int i = 0; i < block.vtx.size(); i++) {
- + Object txobj;
- +
- + txobj.push_back(Pair("hash", block.vtx[i].GetHash().ToString().c_str()));
- + txobj.push_back(Pair("ver", block.vtx[i].nVersion));
- + txobj.push_back(Pair("vin_sz", (int)block.vtx[i].vin.size()));
- + txobj.push_back(Pair("vout_sz", (int)block.vtx[i].vout.size()));
- + txobj.push_back(Pair("lock_time", (uint64_t)block.vtx[i].nLockTime));
- +
- + Array tx_vin;
- + for (int j = 0; j < block.vtx[i].vin.size(); j++) {
- + Object vino;
- +
- + Object vino_outpt;
- +
- + vino_outpt.push_back(Pair("hash",
- + block.vtx[i].vin[j].prevout.hash.ToString().c_str()));
- + vino_outpt.push_back(Pair("n", (uint64_t)block.vtx[i].vin[j].prevout.n));
- +
- + vino.push_back(Pair("prev_out", vino_outpt));
- +
- + if (block.vtx[i].vin[j].prevout.IsNull())
- + vino.push_back(Pair("coinbase", HexStr(
- + block.vtx[i].vin[j].scriptSig.begin(),
- + block.vtx[i].vin[j].scriptSig.end(), false).c_str()));
- + else
- + vino.push_back(Pair("scriptSig",
- + block.vtx[i].vin[j].scriptSig.ToString().c_str()));
- + if (block.vtx[i].vin[j].nSequence != UINT_MAX)
- + vino.push_back(Pair("sequence", (uint64_t)block.vtx[i].vin[j].nSequence));
- +
- + tx_vin.push_back(vino);
- + }
- +
- + Array tx_vout;
- + for (int j = 0; j < block.vtx[i].vout.size(); j++) {
- + Object vouto;
- +
- + vouto.push_back(Pair("value",
- + (double)block.vtx[i].vout[j].nValue / (double)COIN));
- + vouto.push_back(Pair("scriptPubKey",
- + block.vtx[i].vout[j].scriptPubKey.ToString().c_str()));
- +
- + tx_vout.push_back(vouto);
- + }
- +
- + txobj.push_back(Pair("in", tx_vin));
- + txobj.push_back(Pair("out", tx_vout));
- +
- + tx.push_back(txobj);
- + }
- +
- + obj.push_back(Pair("tx", tx));
- +
- + Array mrkl;
- + for (int i = 0; i < block.vMerkleTree.size(); i++)
- + mrkl.push_back(block.vMerkleTree[i].ToString().c_str());
- +
- + obj.push_back(Pair("mrkl_tree", mrkl));
- +
- + return obj;
- +}
- +
- +
- Value getconnectioncount(const Array& params, bool fHelp)
- {
- @@ -1402,6 +1514,7 @@ pair<string, rpcfn_type> pCallTable[] =
- {
- make_pair("help", &help),
- make_pair("stop", &stop),
- + make_pair("getblock", &getblock),
- make_pair("getblockcount", &getblockcount),
- make_pair("getblocknumber", &getblocknumber),
- make_pair("getconnectioncount", &getconnectioncount),
- @@ -2097,6 +2210,7 @@ int CommandLineRPC(int argc, char *argv[])
- params[1] = v.get_obj();
- }
- if (strMethod == "sendmany" && n > 2) ConvertTo<boost::int64_t>(params[2]);
- + if (strMethod == "getblock" && n > 0) ConvertTo<boost::int64_t>(params[0]);
- // Execute
- Object reply = CallRPC(strMethod, params);
- --
- 1.7.2.3
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement