|
|
@ -34,6 +34,8 @@ void WalletTxToJSON(const CWalletTx& wtx, Object& entry) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int confirms = wtx.GetDepthInMainChain(); |
|
|
|
int confirms = wtx.GetDepthInMainChain(); |
|
|
|
entry.push_back(Pair("confirmations", confirms)); |
|
|
|
entry.push_back(Pair("confirmations", confirms)); |
|
|
|
|
|
|
|
if (wtx.IsCoinBase()) |
|
|
|
|
|
|
|
entry.push_back(Pair("generated", true)); |
|
|
|
if (confirms) |
|
|
|
if (confirms) |
|
|
|
{ |
|
|
|
{ |
|
|
|
entry.push_back(Pair("blockhash", wtx.hashBlock.GetHex())); |
|
|
|
entry.push_back(Pair("blockhash", wtx.hashBlock.GetHex())); |
|
|
@ -445,12 +447,12 @@ int64 GetAccountBalance(CWalletDB& walletdb, const string& strAccount, int nMinD |
|
|
|
if (!wtx.IsFinal()) |
|
|
|
if (!wtx.IsFinal()) |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
|
|
int64 nGenerated, nReceived, nSent, nFee; |
|
|
|
int64 nReceived, nSent, nFee; |
|
|
|
wtx.GetAccountAmounts(strAccount, nGenerated, nReceived, nSent, nFee); |
|
|
|
wtx.GetAccountAmounts(strAccount, nReceived, nSent, nFee); |
|
|
|
|
|
|
|
|
|
|
|
if (nReceived != 0 && wtx.GetDepthInMainChain() >= nMinDepth) |
|
|
|
if (nReceived != 0 && wtx.GetDepthInMainChain() >= nMinDepth) |
|
|
|
nBalance += nReceived; |
|
|
|
nBalance += nReceived; |
|
|
|
nBalance += nGenerated - nSent - nFee; |
|
|
|
nBalance -= nSent + nFee; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Tally internal accounting entries
|
|
|
|
// Tally internal accounting entries
|
|
|
@ -492,12 +494,11 @@ Value getbalance(const Array& params, bool fHelp) |
|
|
|
if (!wtx.IsFinal()) |
|
|
|
if (!wtx.IsFinal()) |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
|
|
int64 allGeneratedImmature, allGeneratedMature, allFee; |
|
|
|
int64 allFee; |
|
|
|
allGeneratedImmature = allGeneratedMature = allFee = 0; |
|
|
|
|
|
|
|
string strSentAccount; |
|
|
|
string strSentAccount; |
|
|
|
list<pair<CTxDestination, int64> > listReceived; |
|
|
|
list<pair<CTxDestination, int64> > listReceived; |
|
|
|
list<pair<CTxDestination, int64> > listSent; |
|
|
|
list<pair<CTxDestination, int64> > listSent; |
|
|
|
wtx.GetAmounts(allGeneratedImmature, allGeneratedMature, listReceived, listSent, allFee, strSentAccount); |
|
|
|
wtx.GetAmounts(listReceived, listSent, allFee, strSentAccount); |
|
|
|
if (wtx.GetDepthInMainChain() >= nMinDepth) |
|
|
|
if (wtx.GetDepthInMainChain() >= nMinDepth) |
|
|
|
{ |
|
|
|
{ |
|
|
|
BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64)& r, listReceived) |
|
|
|
BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64)& r, listReceived) |
|
|
@ -506,7 +507,6 @@ Value getbalance(const Array& params, bool fHelp) |
|
|
|
BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64)& r, listSent) |
|
|
|
BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64)& r, listSent) |
|
|
|
nBalance -= r.second; |
|
|
|
nBalance -= r.second; |
|
|
|
nBalance -= allFee; |
|
|
|
nBalance -= allFee; |
|
|
|
nBalance += allGeneratedMature; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
return ValueFromAmount(nBalance); |
|
|
|
return ValueFromAmount(nBalance); |
|
|
|
} |
|
|
|
} |
|
|
@ -877,35 +877,15 @@ Value listreceivedbyaccount(const Array& params, bool fHelp) |
|
|
|
|
|
|
|
|
|
|
|
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) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int64 nGeneratedImmature, nGeneratedMature, nFee; |
|
|
|
int64 nFee; |
|
|
|
string strSentAccount; |
|
|
|
string strSentAccount; |
|
|
|
list<pair<CTxDestination, int64> > listReceived; |
|
|
|
list<pair<CTxDestination, int64> > listReceived; |
|
|
|
list<pair<CTxDestination, int64> > listSent; |
|
|
|
list<pair<CTxDestination, int64> > listSent; |
|
|
|
|
|
|
|
|
|
|
|
wtx.GetAmounts(nGeneratedImmature, nGeneratedMature, listReceived, listSent, nFee, strSentAccount); |
|
|
|
wtx.GetAmounts(listReceived, listSent, nFee, strSentAccount); |
|
|
|
|
|
|
|
|
|
|
|
bool fAllAccounts = (strAccount == string("*")); |
|
|
|
bool fAllAccounts = (strAccount == string("*")); |
|
|
|
|
|
|
|
|
|
|
|
// Generated blocks assigned to account ""
|
|
|
|
|
|
|
|
if ((nGeneratedMature+nGeneratedImmature) != 0 && (fAllAccounts || strAccount == "")) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Object entry; |
|
|
|
|
|
|
|
entry.push_back(Pair("account", string(""))); |
|
|
|
|
|
|
|
if (nGeneratedImmature) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
entry.push_back(Pair("category", wtx.GetDepthInMainChain() ? "immature" : "orphan")); |
|
|
|
|
|
|
|
entry.push_back(Pair("amount", ValueFromAmount(nGeneratedImmature))); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
entry.push_back(Pair("category", "generate")); |
|
|
|
|
|
|
|
entry.push_back(Pair("amount", ValueFromAmount(nGeneratedMature))); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (fLong) |
|
|
|
|
|
|
|
WalletTxToJSON(wtx, entry); |
|
|
|
|
|
|
|
ret.push_back(entry); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Sent
|
|
|
|
// Sent
|
|
|
|
if ((!listSent.empty() || nFee != 0) && (fAllAccounts || strAccount == strSentAccount)) |
|
|
|
if ((!listSent.empty() || nFee != 0) && (fAllAccounts || strAccount == strSentAccount)) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -936,6 +916,16 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe |
|
|
|
Object entry; |
|
|
|
Object entry; |
|
|
|
entry.push_back(Pair("account", account)); |
|
|
|
entry.push_back(Pair("account", account)); |
|
|
|
entry.push_back(Pair("address", CBitcoinAddress(r.first).ToString())); |
|
|
|
entry.push_back(Pair("address", CBitcoinAddress(r.first).ToString())); |
|
|
|
|
|
|
|
if (wtx.IsCoinBase()) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (wtx.GetDepthInMainChain() < 1) |
|
|
|
|
|
|
|
entry.push_back(Pair("category", "orphan")); |
|
|
|
|
|
|
|
else if (wtx.GetBlocksToMaturity() > 0) |
|
|
|
|
|
|
|
entry.push_back(Pair("category", "immature")); |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
entry.push_back(Pair("category", "generate")); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
entry.push_back(Pair("category", "receive")); |
|
|
|
entry.push_back(Pair("category", "receive")); |
|
|
|
entry.push_back(Pair("amount", ValueFromAmount(r.second))); |
|
|
|
entry.push_back(Pair("amount", ValueFromAmount(r.second))); |
|
|
|
if (fLong) |
|
|
|
if (fLong) |
|
|
@ -1040,17 +1030,16 @@ Value listaccounts(const Array& params, bool fHelp) |
|
|
|
for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) |
|
|
|
for (map<uint256, CWalletTx>::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) |
|
|
|
{ |
|
|
|
{ |
|
|
|
const CWalletTx& wtx = (*it).second; |
|
|
|
const CWalletTx& wtx = (*it).second; |
|
|
|
int64 nGeneratedImmature, nGeneratedMature, nFee; |
|
|
|
int64 nFee; |
|
|
|
string strSentAccount; |
|
|
|
string strSentAccount; |
|
|
|
list<pair<CTxDestination, int64> > listReceived; |
|
|
|
list<pair<CTxDestination, int64> > listReceived; |
|
|
|
list<pair<CTxDestination, int64> > listSent; |
|
|
|
list<pair<CTxDestination, int64> > listSent; |
|
|
|
wtx.GetAmounts(nGeneratedImmature, nGeneratedMature, listReceived, listSent, nFee, strSentAccount); |
|
|
|
wtx.GetAmounts(listReceived, listSent, nFee, strSentAccount); |
|
|
|
mapAccountBalances[strSentAccount] -= nFee; |
|
|
|
mapAccountBalances[strSentAccount] -= nFee; |
|
|
|
BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64)& s, listSent) |
|
|
|
BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64)& s, listSent) |
|
|
|
mapAccountBalances[strSentAccount] -= s.second; |
|
|
|
mapAccountBalances[strSentAccount] -= s.second; |
|
|
|
if (wtx.GetDepthInMainChain() >= nMinDepth) |
|
|
|
if (wtx.GetDepthInMainChain() >= nMinDepth) |
|
|
|
{ |
|
|
|
{ |
|
|
|
mapAccountBalances[""] += nGeneratedMature; |
|
|
|
|
|
|
|
BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64)& r, listReceived) |
|
|
|
BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64)& r, listReceived) |
|
|
|
if (pwalletMain->mapAddressBook.count(r.first)) |
|
|
|
if (pwalletMain->mapAddressBook.count(r.first)) |
|
|
|
mapAccountBalances[pwalletMain->mapAddressBook[r.first]] += r.second; |
|
|
|
mapAccountBalances[pwalletMain->mapAddressBook[r.first]] += r.second; |
|
|
|