@ -2982,9 +2982,9 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
return NullUniValue ;
return NullUniValue ;
}
}
if ( request . fHelp | | request . params . size ( ) < 1 | | request . params . size ( ) > 2 )
if ( request . fHelp | | request . params . size ( ) < 1 | | request . params . size ( ) > 3 )
throw std : : runtime_error (
throw std : : runtime_error (
" fundrawtransaction \" hexstring \" ( options ) \n "
" fundrawtransaction \" hexstring \" ( options iswitness ) \n "
" \n Add inputs to a transaction until it has enough in value to meet its out value. \n "
" \n Add inputs to a transaction until it has enough in value to meet its out value. \n "
" This will not modify existing inputs, and will add at most one change output to the outputs. \n "
" This will not modify existing inputs, and will add at most one change output to the outputs. \n "
" No existing outputs will be modified unless \" subtractFeeFromOutputs \" is specified. \n "
" No existing outputs will be modified unless \" subtractFeeFromOutputs \" is specified. \n "
@ -3019,6 +3019,9 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
" \" CONSERVATIVE \" \n "
" \" CONSERVATIVE \" \n "
" } \n "
" } \n "
" for backward compatibility: passing in a true instead of an object will result in { \" includeWatching \" :true} \n "
" for backward compatibility: passing in a true instead of an object will result in { \" includeWatching \" :true} \n "
" 3. iswitness (boolean, optional) Whether the transaction hex is a serialized witness transaction \n "
" If iswitness is not present, heuristic tests will be used in decoding \n "
" \n Result: \n "
" \n Result: \n "
" { \n "
" { \n "
" \" hex \" : \" value \" , (string) The resulting raw transaction (hex-encoded string) \n "
" \" hex \" : \" value \" , (string) The resulting raw transaction (hex-encoded string) \n "
@ -3055,7 +3058,7 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
coinControl . fAllowWatchOnly = request . params [ 1 ] . get_bool ( ) ;
coinControl . fAllowWatchOnly = request . params [ 1 ] . get_bool ( ) ;
}
}
else {
else {
RPCTypeCheck ( request . params , { UniValue : : VSTR , UniValue : : VOBJ } ) ;
RPCTypeCheck ( request . params , { UniValue : : VSTR , UniValue : : VOBJ , UniValue : : VBOOL } ) ;
UniValue options = request . params [ 1 ] ;
UniValue options = request . params [ 1 ] ;
@ -3124,8 +3127,11 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
// parse hex string from parameter
// parse hex string from parameter
CMutableTransaction tx ;
CMutableTransaction tx ;
if ( ! DecodeHexTx ( tx , request . params [ 0 ] . get_str ( ) , true ) )
bool try_witness = request . params [ 2 ] . isNull ( ) ? true : request . params [ 2 ] . get_bool ( ) ;
bool try_no_witness = request . params [ 2 ] . isNull ( ) ? true : ! request . params [ 2 ] . get_bool ( ) ;
if ( ! DecodeHexTx ( tx , request . params [ 0 ] . get_str ( ) , try_no_witness , try_witness ) ) {
throw JSONRPCError ( RPC_DESERIALIZATION_ERROR , " TX decode failed " ) ;
throw JSONRPCError ( RPC_DESERIALIZATION_ERROR , " TX decode failed " ) ;
}
if ( tx . vout . size ( ) = = 0 )
if ( tx . vout . size ( ) = = 0 )
throw JSONRPCError ( RPC_INVALID_PARAMETER , " TX must have at least one output " ) ;
throw JSONRPCError ( RPC_INVALID_PARAMETER , " TX must have at least one output " ) ;
@ -3443,7 +3449,7 @@ extern UniValue rescanblockchain(const JSONRPCRequest& request);
static const CRPCCommand commands [ ] =
static const CRPCCommand commands [ ] =
{ // category name actor (function) argNames
{ // category name actor (function) argNames
// --------------------- ------------------------ ----------------------- ----------
// --------------------- ------------------------ ----------------------- ----------
{ " rawtransactions " , " fundrawtransaction " , & fundrawtransaction , { " hexstring " , " options " } } ,
{ " rawtransactions " , " fundrawtransaction " , & fundrawtransaction , { " hexstring " , " options " , " iswitness " } } ,
{ " hidden " , " resendwallettransactions " , & resendwallettransactions , { } } ,
{ " hidden " , " resendwallettransactions " , & resendwallettransactions , { } } ,
{ " wallet " , " abandontransaction " , & abandontransaction , { " txid " } } ,
{ " wallet " , " abandontransaction " , & abandontransaction , { " txid " } } ,
{ " wallet " , " abortrescan " , & abortrescan , { } } ,
{ " wallet " , " abortrescan " , & abortrescan , { } } ,