Added argument to listtransactions and listsinceblock to include watchonly addresses
This commit is contained in:
parent
952877e01c
commit
d7d5d23b77
2 changed files with 42 additions and 23 deletions
|
@ -48,11 +48,13 @@ static const CRPCConvertParam vRPCConvertParams[] =
|
|||
{ "sendfrom", 3 },
|
||||
{ "listtransactions", 1 },
|
||||
{ "listtransactions", 2 },
|
||||
{ "listtransactions", 3 },
|
||||
{ "listaccounts", 0 },
|
||||
{ "listaccounts", 1 },
|
||||
{ "walletpassphrase", 1 },
|
||||
{ "getblocktemplate", 0 },
|
||||
{ "listsinceblock", 1 },
|
||||
{ "listsinceblock", 2 },
|
||||
{ "sendmany", 1 },
|
||||
{ "sendmany", 2 },
|
||||
{ "addmultisigaddress", 0 },
|
||||
|
@ -129,7 +131,6 @@ Array RPCConvertValues(const std::string &strMethod, const std::vector<std::stri
|
|||
throw runtime_error(string("Error parsing JSON:")+strVal);
|
||||
params.push_back(jVal);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return params;
|
||||
|
|
|
@ -1107,14 +1107,14 @@ static void MaybePushAddress(Object & entry, const CTxDestination &dest)
|
|||
entry.push_back(Pair("address", addr.ToString()));
|
||||
}
|
||||
|
||||
void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDepth, bool fLong, Array& ret)
|
||||
void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDepth, bool fLong, Array& ret, const isminefilter& filter=MINE_SPENDABLE)
|
||||
{
|
||||
int64_t nFee;
|
||||
string strSentAccount;
|
||||
list<pair<CTxDestination, int64_t> > listReceived;
|
||||
list<pair<CTxDestination, int64_t> > listSent;
|
||||
|
||||
wtx.GetAmounts(listReceived, listSent, nFee, strSentAccount);
|
||||
wtx.GetAmounts(listReceived, listSent, nFee, strSentAccount, filter);
|
||||
|
||||
bool fAllAccounts = (strAccount == string("*"));
|
||||
bool involvesWatchonly = wtx.IsFromMe(MINE_WATCH_ONLY);
|
||||
|
@ -1194,16 +1194,16 @@ void AcentryToJSON(const CAccountingEntry& acentry, const string& strAccount, Ar
|
|||
|
||||
Value listtransactions(const Array& params, bool fHelp)
|
||||
{
|
||||
if (fHelp || params.size() > 3)
|
||||
if (fHelp || params.size() > 4)
|
||||
throw runtime_error(
|
||||
"listtransactions ( \"account\" count from )\n"
|
||||
"listtransactions ( \"account\" count from includeWatchonly)\n"
|
||||
"\nReturns up to 'count' most recent transactions skipping the first 'from' transactions for account 'account'.\n"
|
||||
"\nArguments:\n"
|
||||
"1. \"account\" (string, optional) The account name. If not included, it will list all transactions for all accounts.\n"
|
||||
" If \"\" is set, it will list transactions for the default account.\n"
|
||||
"2. count (numeric, optional, default=10) The number of transactions to return\n"
|
||||
"3. from (numeric, optional, default=0) The number of transactions to skip\n"
|
||||
|
||||
"4. includeWatchonly (bool, optional, default=false) Include transactions to watchonly addresses (see 'importaddress')\n"
|
||||
"\nResult:\n"
|
||||
"[\n"
|
||||
" {\n"
|
||||
|
@ -1255,15 +1255,26 @@ Value listtransactions(const Array& params, bool fHelp)
|
|||
);
|
||||
|
||||
string strAccount = "*";
|
||||
if (params.size() > 0)
|
||||
strAccount = params[0].get_str();
|
||||
int nCount = 10;
|
||||
if (params.size() > 1)
|
||||
nCount = params[1].get_int();
|
||||
int nFrom = 0;
|
||||
if (params.size() > 2)
|
||||
nFrom = params[2].get_int();
|
||||
|
||||
isminefilter filter = MINE_SPENDABLE;
|
||||
if (params.size() > 0)
|
||||
{
|
||||
strAccount = params[0].get_str();
|
||||
if (params.size() > 1)
|
||||
{
|
||||
nCount = params[1].get_int();
|
||||
if (params.size() > 2)
|
||||
{
|
||||
nFrom = params[2].get_int();
|
||||
if(params.size() > 3)
|
||||
{
|
||||
if(params[3].get_bool())
|
||||
filter = filter | MINE_WATCH_ONLY;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (nCount < 0)
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Negative count");
|
||||
if (nFrom < 0)
|
||||
|
@ -1279,7 +1290,7 @@ Value listtransactions(const Array& params, bool fHelp)
|
|||
{
|
||||
CWalletTx *const pwtx = (*it).second.first;
|
||||
if (pwtx != 0)
|
||||
ListTransactions(*pwtx, strAccount, 0, true, ret);
|
||||
ListTransactions(*pwtx, strAccount, 0, true, ret, filter);
|
||||
CAccountingEntry *const pacentry = (*it).second.second;
|
||||
if (pacentry != 0)
|
||||
AcentryToJSON(*pacentry, strAccount, ret);
|
||||
|
@ -1386,11 +1397,12 @@ Value listsinceblock(const Array& params, bool fHelp)
|
|||
{
|
||||
if (fHelp)
|
||||
throw runtime_error(
|
||||
"listsinceblock ( \"blockhash\" target-confirmations )\n"
|
||||
"listsinceblock ( \"blockhash\" target-confirmations includeWatchonly)\n"
|
||||
"\nGet all transactions in blocks since block [blockhash], or all transactions if omitted\n"
|
||||
"\nArguments:\n"
|
||||
"1. \"blockhash\" (string, optional) The block hash to list transactions since\n"
|
||||
"2. target-confirmations: (numeric, optional) The confirmations required, must be 1 or more\n"
|
||||
"3. includeWatchonly: (bool, optional, default=false) Include transactions to watchonly addresses (see 'importaddress')"
|
||||
"\nResult:\n"
|
||||
"{\n"
|
||||
" \"transactions\": [\n"
|
||||
|
@ -1426,7 +1438,7 @@ Value listsinceblock(const Array& params, bool fHelp)
|
|||
|
||||
CBlockIndex *pindex = NULL;
|
||||
int target_confirms = 1;
|
||||
|
||||
isminefilter filter = MINE_SPENDABLE;
|
||||
if (params.size() > 0)
|
||||
{
|
||||
uint256 blockId = 0;
|
||||
|
@ -1435,14 +1447,20 @@ Value listsinceblock(const Array& params, bool fHelp)
|
|||
std::map<uint256, CBlockIndex*>::iterator it = mapBlockIndex.find(blockId);
|
||||
if (it != mapBlockIndex.end())
|
||||
pindex = it->second;
|
||||
}
|
||||
|
||||
if (params.size() > 1)
|
||||
{
|
||||
target_confirms = params[1].get_int();
|
||||
if (params.size() > 1)
|
||||
{
|
||||
target_confirms = params[1].get_int();
|
||||
|
||||
if (target_confirms < 1)
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter");
|
||||
if (target_confirms < 1)
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter");
|
||||
|
||||
if(params.size() > 2)
|
||||
{
|
||||
if(params[2].get_bool())
|
||||
filter = filter | MINE_WATCH_ONLY;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int depth = pindex ? (1 + chainActive.Height() - pindex->nHeight) : -1;
|
||||
|
@ -1454,7 +1472,7 @@ Value listsinceblock(const Array& params, bool fHelp)
|
|||
CWalletTx tx = (*it).second;
|
||||
|
||||
if (depth == -1 || tx.GetDepthInMainChain() < depth)
|
||||
ListTransactions(tx, "*", 0, true, transactions);
|
||||
ListTransactions(tx, "*", 0, true, transactions, filter);
|
||||
}
|
||||
|
||||
CBlockIndex *pblockLast = chainActive[chainActive.Height() + 1 - target_confirms];
|
||||
|
|
Loading…
Reference in a new issue