diff --git a/src/rpc.cpp b/src/rpc.cpp index c6aa68d21..09be63203 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(params[1]); if (strMethod == "listtransactions" && n > 2) ConvertTo(params[2]); if (strMethod == "listaccounts" && n > 0) ConvertTo(params[0]); + if (strMethod == "listsinceblock" && n > 1) ConvertTo(params[1]); if (strMethod == "sendmany" && n > 1) { string s = params[1].get_str();