@ -18,28 +18,31 @@
namespace wallet {
static CAmount GetReceived ( const CWallet & wallet , const UniValue & params , bool by_label ) EXCLUSIVE_LOCKS_REQUIRED ( wallet . cs_wallet )
{
std : : set < CScript > output_scripts ;
std : : set < CTxDestination > addresses ;
if ( by_label ) {
// Get the set of addresses assigned to label
std : : string label = LabelFromValue ( params [ 0 ] ) ;
for ( const auto & address : wallet . GetLabelAddresses ( label ) ) {
auto output_script { GetScriptForDestination ( address ) } ;
if ( wallet . IsMine ( output_script ) ) {
output_scripts . insert ( output_script ) ;
}
}
addresses = wallet . GetLabelAddresses ( LabelFromValue ( params [ 0 ] ) ) ;
if ( addresses . empty ( ) ) throw JSONRPCError ( RPC_WALLET_ERROR , " Label not found in wallet " ) ;
} else {
// Get the address
CTxDestination dest = DecodeDestination ( params [ 0 ] . get_str ( ) ) ;
if ( ! IsValidDestination ( dest ) ) {
throw JSONRPCError ( RPC_INVALID_ADDRESS_OR_KEY , " Invalid Bitcoin address " ) ;
}
CScript script_pub_key = GetScriptForDestination ( dest ) ;
if ( ! wallet . IsMine ( script_pub_key ) ) {
throw JSONRPCError ( RPC_WALLET_ERROR , " Address not found in wallet " ) ;
addresses . insert ( dest ) ;
}
// Filter by own scripts only
std : : set < CScript > output_scripts ;
for ( const auto & address : addresses ) {
auto output_script { GetScriptForDestination ( address ) } ;
if ( wallet . IsMine ( output_script ) ) {
output_scripts . insert ( output_script ) ;
}
output_scripts . insert ( script_pub_key ) ;
}
if ( output_scripts . empty ( ) ) {
throw JSONRPCError ( RPC_WALLET_ERROR , " Address not found in wallet " ) ;
}
// Minimum confirmations