@ -138,24 +138,40 @@ Value getrawtransaction(const Array& params, bool fHelp)
@@ -138,24 +138,40 @@ Value getrawtransaction(const Array& params, bool fHelp)
Value listunspent ( const Array & params , bool fHelp )
{
if ( fHelp | | params . size ( ) > 2 )
if ( fHelp | | params . size ( ) > 3 )
throw runtime_error (
" listunspent [minconf=1] [maxconf=999999] \n "
" listunspent [minconf=1] [maxconf=9999999] ['addr1','addr2',... ] \n "
" Returns array of unspent transaction outputs \n "
" with between minconf and maxconf (inclusive) confirmations. \n "
" Optionally filtered to only include txouts paid to specified addresses. \n "
" Results are an array of Objects, each of which has: \n "
" {txid, vout, scriptPubKey, amount, confirmations} " ) ;
RPCTypeCheck ( params , list_of ( int_type ) ( int_type ) ) ;
RPCTypeCheck ( params , list_of ( int_type ) ( int_type ) ( array_type ) ) ;
int nMinDepth = 1 ;
if ( params . size ( ) > 0 )
nMinDepth = params [ 0 ] . get_int ( ) ;
int nMaxDepth = 999999 ;
int nMaxDepth = 9999999 ;
if ( params . size ( ) > 1 )
nMaxDepth = params [ 1 ] . get_int ( ) ;
set < CBitcoinAddress > setAddress ;
if ( params . size ( ) > 2 )
{
Array inputs = params [ 2 ] . get_array ( ) ;
BOOST_FOREACH ( Value & input , inputs )
{
CBitcoinAddress address ( input . get_str ( ) ) ;
if ( ! address . IsValid ( ) )
throw JSONRPCError ( - 5 , string ( " Invalid Bitcoin address: " ) + input . get_str ( ) ) ;
if ( setAddress . count ( address ) )
throw JSONRPCError ( - 8 , string ( " Invalid parameter, duplicated address: " ) + input . get_str ( ) ) ;
setAddress . insert ( address ) ;
}
}
Array results ;
vector < COutput > vecOutputs ;
pwalletMain - > AvailableCoins ( vecOutputs , false ) ;
@ -164,6 +180,9 @@ Value listunspent(const Array& params, bool fHelp)
@@ -164,6 +180,9 @@ Value listunspent(const Array& params, bool fHelp)
if ( out . nDepth < nMinDepth | | out . nDepth > nMaxDepth )
continue ;
if ( setAddress . size ( ) & & ! setAddress . count ( out . tx - > GetAddressOfTxOut ( out . i ) ) )
continue ;
int64 nValue = out . tx - > vout [ out . i ] . nValue ;
const CScript & pk = out . tx - > vout [ out . i ] . scriptPubKey ;
Object entry ;