diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 2b801c4c8d..c3a51ad469 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -5386,48 +5386,41 @@ void CWalletTx::GetBlindingData(const unsigned int map_index, const std::vector< if (asset_out) *asset_out = asset_tag; } -CAmount CWalletTx::GetOutputValueOut(unsigned int output_index) const { +void CWalletTx::GetNonIssuanceBlindingData(const unsigned int output_index, CPubKey* blinding_pubkey_out, CAmount* value_out, uint256* value_factor_out, CAsset* asset_out, uint256* asset_factor_out) const { assert(output_index < tx->vout.size()); const CTxOut& out = tx->vout[output_index]; const CTxWitness& wit = tx->witness; + GetBlindingData(output_index, wit.vtxoutwit.size() <= output_index ? std::vector() : wit.vtxoutwit[output_index].vchRangeproof, out.nValue, out.nAsset, out.nNonce, out.scriptPubKey, + blinding_pubkey_out, value_out, value_factor_out, asset_out, asset_factor_out); +} + +CAmount CWalletTx::GetOutputValueOut(unsigned int output_index) const { CAmount ret; - GetBlindingData(output_index, wit.vtxoutwit.size() <= output_index ? std::vector() : wit.vtxoutwit[output_index].vchRangeproof, out.nValue, out.nAsset, out.nNonce, out.scriptPubKey, nullptr, &ret, nullptr, nullptr, nullptr); + GetNonIssuanceBlindingData(output_index, nullptr, &ret, nullptr, nullptr, nullptr); return ret; } uint256 CWalletTx::GetOutputAmountBlindingFactor(unsigned int output_index) const { - assert(output_index < tx->vout.size()); - const CTxOut& out = tx->vout[output_index]; - const CTxWitness& wit = tx->witness; uint256 ret; - GetBlindingData(output_index, wit.vtxoutwit.size() <= output_index ? std::vector() : wit.vtxoutwit[output_index].vchRangeproof, out.nValue, out.nAsset, out.nNonce, out.scriptPubKey, nullptr, nullptr, &ret, nullptr, nullptr); + GetNonIssuanceBlindingData(output_index, nullptr, nullptr, &ret, nullptr, nullptr); return ret; } uint256 CWalletTx::GetOutputAssetBlindingFactor(unsigned int output_index) const { - assert(output_index < tx->vout.size()); - const CTxOut& out = tx->vout[output_index]; - const CTxWitness& wit = tx->witness; uint256 ret; - GetBlindingData(output_index, wit.vtxoutwit.size() <= output_index ? std::vector() : wit.vtxoutwit[output_index].vchRangeproof, out.nValue, out.nAsset, out.nNonce, out.scriptPubKey, nullptr, nullptr, nullptr, nullptr, &ret); + GetNonIssuanceBlindingData(output_index, nullptr, nullptr, nullptr, nullptr, &ret); return ret; } CAsset CWalletTx::GetOutputAsset(unsigned int output_index) const { - assert(output_index < tx->vout.size()); - const CTxOut& out = tx->vout[output_index]; - const CTxWitness& wit = tx->witness; CAsset ret; - GetBlindingData(output_index, wit.vtxoutwit.size() <= output_index ? std::vector() : wit.vtxoutwit[output_index].vchRangeproof, out.nValue, out.nAsset, out.nNonce, out.scriptPubKey, nullptr, nullptr, nullptr, &ret, nullptr); + GetNonIssuanceBlindingData(output_index, nullptr, nullptr, nullptr, &ret, nullptr); return ret; } CPubKey CWalletTx::GetOutputBlindingPubKey(unsigned int output_index) const { - assert(output_index < tx->vout.size()); - const CTxOut& out = tx->vout[output_index]; - const CTxWitness& wit = tx->witness; CPubKey ret; - GetBlindingData(output_index, wit.vtxoutwit.size() <= output_index ? std::vector() : wit.vtxoutwit[output_index].vchRangeproof, out.nValue, out.nAsset, out.nNonce, out.scriptPubKey, &ret, nullptr, nullptr, nullptr, nullptr); + GetNonIssuanceBlindingData(output_index, &ret, nullptr, nullptr, nullptr, nullptr); return ret; } diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index 7fa912b20d..4262744a9a 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -573,6 +573,9 @@ public: // Unneeded for issuance. void SetBlindingData(const unsigned int output_index, const CPubKey& blinding_pubkey, const CAmount value, const uint256& value_factor, const CAsset& asset, const uint256& asset_factor); + // Convenience method to retrieve all blinding data at once, for an ordinary non-issuance tx + void GetNonIssuanceBlindingData(const unsigned int output_index, CPubKey* blinding_pubkey_out, CAmount* value_out, uint256* value_factor_out, CAsset* asset_out, uint256* asset_factor_out) const; + //! Returns either the value out (if it is known) or -1 CAmount GetOutputValueOut(unsigned int ouput_index) const;