diff --git a/src/wallet/rpchushwallet.cpp b/src/wallet/rpchushwallet.cpp index 89b5b5dcc..e45ba71e7 100644 --- a/src/wallet/rpchushwallet.cpp +++ b/src/wallet/rpchushwallet.cpp @@ -131,104 +131,6 @@ void zsTxSpendsToJSON(const CWalletTx& wtx, UniValue& spends, CAmount& totalSpen } } - -void zsTxReceivedToJSON(const CWalletTx& wtx, UniValue& received, CAmount& totalReceived, const std::string& strAddress, bool filterByAddress) { - - LOCK2(cs_main, pwalletMain->cs_wallet); - - //Check address - bool isTAddress = false; - bool isZsAddress = false; - - CTxDestination tAddress = DecodeDestination(strAddress); - auto zAddress = DecodePaymentAddress(strAddress); - SaplingPaymentAddress zsAddress; - - if (filterByAddress) { - - if (IsValidDestination(tAddress)) - isTAddress = true; - - if (IsValidPaymentAddress(zAddress)) { - if (boost::get(&zAddress) != nullptr) { - zsAddress = boost::get(zAddress); - isZsAddress = true; - } - } - } - - - //Transparent Received txos belonging to the wallet - UniValue tReceived(UniValue::VARR); - if (isTAddress || !filterByAddress) { - for (int i = 0; i < wtx.vout.size(); i++) { - const CTxOut& txout = wtx.vout[i]; - UniValue obj(UniValue::VOBJ); - CTxDestination address; - ExtractDestination(txout.scriptPubKey, address); - if(IsMine(*pwalletMain, address)){ - obj.push_back(Pair("address",EncodeDestination(address))); - obj.push_back(Pair("scriptPubKey",HexStr(txout.scriptPubKey.begin(), txout.scriptPubKey.end()))); - obj.push_back(Pair("amount",ValueFromAmount(txout.nValue))); - obj.push_back(Pair("vout", i)); - if (address == tAddress || !filterByAddress) { - totalReceived += CAmount(txout.nValue); - tReceived.push_back(obj); - } - } - } - } - received.push_back(Pair("transparentReceived",tReceived)); - - - //Sapling Sends belonging to the wallet - UniValue zsReceived(UniValue::VARR); - if (isZsAddress || !filterByAddress) { - for (int i = 0; i < wtx.vShieldedOutput.size(); i++) { - const OutputDescription& outputDesc = wtx.vShieldedOutput[i]; - UniValue obj(UniValue::VOBJ); - bool changeTx = false; - //Decrypt sapling incoming commitments using IVK - std::set addresses; - pwalletMain->GetSaplingPaymentAddresses(addresses); - for (auto addr : addresses) { - libzcash::SaplingExtendedSpendingKey extsk; - if (pwalletMain->GetSaplingExtendedSpendingKey(addr, extsk)) { - auto pt = libzcash::SaplingNotePlaintext::decrypt( - outputDesc.encCiphertext, extsk.expsk.full_viewing_key().in_viewing_key(), outputDesc.ephemeralKey, outputDesc.cm); - - if (pt) { - auto note = pt.get(); - obj.push_back(Pair("address",EncodePaymentAddress(addr))); - obj.push_back(Pair("amount", ValueFromAmount(CAmount(note.value())))); - obj.push_back(Pair("shieldedOutputIndex",i)); - - //Check Change Status - if (wtx.vShieldedSpend.size()!=0) { - std::set> nullifierSet; - nullifierSet = pwalletMain->GetNullifiersForAddresses({addr}); - BOOST_FOREACH(const SpendDescription& spendDesc, wtx.vShieldedSpend) { - if (nullifierSet.count(std::make_pair(addr, spendDesc.nullifier))) { - changeTx = true; - } - } - } - obj.push_back(Pair("change",changeTx)); - if (addr == zsAddress || !filterByAddress) { - totalReceived += CAmount(note.value()); - zsReceived.push_back(obj); - } - } - } - } - } - } - received.push_back(Pair("saplingReceived",zsReceived)); - - received.push_back(Pair("totalReceived",ValueFromAmount(totalReceived))); -} - - void zsTxSendsToJSON(const CWalletTx& wtx, UniValue& sends, CAmount& totalSends, const std::string& strAddress, bool filterByAddress) { LOCK2(cs_main, pwalletMain->cs_wallet); @@ -371,7 +273,7 @@ void zsTxSendsToJSON(const CWalletTx& wtx, UniValue& sends, CAmount& totalSends, } } } - sends.push_back(Pair("saplingSends",zsSends)); + sends.push_back(Pair("saplingSends",zsSends)); if (shieldedOutputCount != shieldedOutputDecryptedCount) { sends.push_back(Pair("missingSaplingOVK", true)); @@ -382,7 +284,6 @@ void zsTxSendsToJSON(const CWalletTx& wtx, UniValue& sends, CAmount& totalSends, sends.push_back(Pair("totalSends",ValueFromAmount(totalSends))); } - void zsWalletTxJSON(const CWalletTx& wtx, UniValue& ret, const std::string strAddress, bool fBool, const int returnType) { LOCK2(cs_main, pwalletMain->cs_wallet); @@ -448,14 +349,8 @@ void zsWalletTxJSON(const CWalletTx& wtx, UniValue& ret, const std::string strAd if ((!fBool || filteredSpends != 0) && (returnType == 0 || returnType == 1)) { tx.push_back(Pair("spends",spends)); } - } - // Get Received - if (returnType == 0 || returnType == 2) { - zsTxReceivedToJSON(wtx, received, totalReceived, strAddress, fBool); - if (!fBool || totalReceived != 0) { - tx.push_back(Pair("received",received)); - } - } + } + // Get Sends if (returnType == 0 || returnType == 3) { @@ -468,13 +363,11 @@ void zsWalletTxJSON(const CWalletTx& wtx, UniValue& ret, const std::string strAd } } - if ((returnType == 0 && (!fBool || filteredSpends != 0 || totalReceived != 0 || totalSends != 0)) + if ((returnType == 0 && (!fBool || filteredSpends != 0 || totalSends != 0)) || (returnType == 1 && (!fBool || filteredSpends != 0)) - || (returnType == 2 && (!fBool || totalReceived != 0)) - || (returnType == 3 && (!fBool || totalSends != 0))) { + || (returnType == 2 && (!fBool || totalSends != 0))) { ret.push_back(tx); } - } UniValue z_listsentbyaddress(const UniValue& params, bool fHelp,const CPubKey&) { @@ -617,7 +510,6 @@ UniValue z_listsentbyaddress(const UniValue& params, bool fHelp,const CPubKey&) zsWalletTxJSON(wtx, ret, "*", false, 0); - if (ret.size() >= nCount) break; } diff --git a/src/wallet/rpchushwallet.h b/src/wallet/rpchushwallet.h index 2276f3f8b..3e8d942d1 100644 --- a/src/wallet/rpchushwallet.h +++ b/src/wallet/rpchushwallet.h @@ -13,7 +13,6 @@ struct balancestruct { }; void zsTxSpendsToJSON(const CWalletTx& wtx, UniValue& spends, CAmount& totalSpends, CAmount& filteredSpends, const std::string& strAddress, bool filterByAddress); -void zsTxReceivedToJSON(const CWalletTx& wtx, UniValue& received, CAmount& totalReceived, const std::string& strAddress, bool filterByAddress); void zsTxSendsToJSON(const CWalletTx& wtx, UniValue& sends, CAmount& totalSends, const std::string& strAddress, bool filterByAddress); void zsWalletTxJSON(const CWalletTx& wtx, UniValue& ret, const std::string strAddress, bool fBool, const int returnType);