aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Howie <me@chrishowie.com>2011-07-06 16:19:52 -0400
committerChris Howie <me@chrishowie.com>2011-07-14 15:56:29 -0400
commit76aed0141cbc4827ef6f168b6af5b2894046ec0b (patch)
tree2e3e2d0c54b7b27a5febd2f35ebccc303306f389
parent5b2f35167f3060826e310145a34bc55bb2c8d3c1 (diff)
downloadbitcoin-76aed0141cbc4827ef6f168b6af5b2894046ec0b.tar.xz
listsinceblock now shows txns with 0 confirms, as well as allows the lastblock return property to be targeted to the block with the specified depth
-rw-r--r--src/rpc.cpp35
1 files changed, 32 insertions, 3 deletions
diff --git a/src/rpc.cpp b/src/rpc.cpp
index c6aa68d21e..09be63203a 100644
--- a/src/rpc.cpp
+++ b/src/rpc.cpp
@@ -1234,10 +1234,11 @@ Value listsinceblock(const Array& params, bool fHelp)
{
if (fHelp)
throw runtime_error(
- "listsinceblock [blockid]\n"
+ "listsinceblock [blockid] [target-confirmations]\n"
"Get all transactions in blocks since block [blockid], or all transactions if omitted");
CBlockIndex *pindex = NULL;
+ int target_confirms = 1;
if (params.size() > 0)
{
@@ -1247,6 +1248,14 @@ Value listsinceblock(const Array& params, bool fHelp)
pindex = CBlockLocator(blockId).GetBlockIndex();
}
+ if (params.size() > 1)
+ {
+ target_confirms = params[1].get_int();
+
+ if (target_confirms < 1)
+ throw JSONRPCError(-8, "Invalid parameter");
+ }
+
int depth = pindex ? (1 + nBestHeight - pindex->nHeight) : -1;
Array transactions;
@@ -1257,12 +1266,31 @@ Value listsinceblock(const Array& params, bool fHelp)
CWalletTx tx = (*it).second;
if (depth == -1 || tx.GetDepthInMainChain() < depth)
- ListTransactions(tx, "*", 1, true, transactions);
+ ListTransactions(tx, "*", 0, true, transactions);
+ }
+
+ uint256 lastblock;
+
+ if (target_confirms == 1)
+ {
+ printf("oops!\n");
+ lastblock = hashBestChain;
+ }
+ else
+ {
+ int target_height = pindexBest->nHeight + 1 - target_confirms;
+
+ CBlockIndex *block;
+ for (block = pindexBest;
+ block && block->nHeight > target_height;
+ block = block->pprev);
+
+ lastblock = block ? block->GetBlockHash() : 0;
}
Object ret;
ret.push_back(Pair("transactions", transactions));
- ret.push_back(Pair("lastblock", hashBestChain.GetHex()));
+ ret.push_back(Pair("lastblock", lastblock.GetHex()));
return ret;
}
@@ -2168,6 +2196,7 @@ int CommandLineRPC(int argc, char *argv[])
if (strMethod == "listtransactions" && n > 1) ConvertTo<boost::int64_t>(params[1]);
if (strMethod == "listtransactions" && n > 2) ConvertTo<boost::int64_t>(params[2]);
if (strMethod == "listaccounts" && n > 0) ConvertTo<boost::int64_t>(params[0]);
+ if (strMethod == "listsinceblock" && n > 1) ConvertTo<boost::int64_t>(params[1]);
if (strMethod == "sendmany" && n > 1)
{
string s = params[1].get_str();