|
|
@ -2359,3 +2359,57 @@ UniValue listunspent(const UniValue& params, bool fHelp) |
|
|
|
|
|
|
|
|
|
|
|
return results; |
|
|
|
return results; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UniValue fundrawtransaction(const UniValue& params, bool fHelp) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (!EnsureWalletIsAvailable(fHelp)) |
|
|
|
|
|
|
|
return NullUniValue; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (fHelp || params.size() != 1) |
|
|
|
|
|
|
|
throw runtime_error( |
|
|
|
|
|
|
|
"fundrawtransaction \"hexstring\"\n" |
|
|
|
|
|
|
|
"\nAdd 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 one change output to the outputs.\n" |
|
|
|
|
|
|
|
"Note that inputs which were signed may need to be resigned after completion since in/outputs have been added.\n" |
|
|
|
|
|
|
|
"The inputs added will not be signed, use signrawtransaction for that.\n" |
|
|
|
|
|
|
|
"\nArguments:\n" |
|
|
|
|
|
|
|
"1. \"hexstring\" (string, required) The hex string of the raw transaction\n" |
|
|
|
|
|
|
|
"\nResult:\n" |
|
|
|
|
|
|
|
"{\n" |
|
|
|
|
|
|
|
" \"hex\": \"value\", (string) The resulting raw transaction (hex-encoded string)\n" |
|
|
|
|
|
|
|
" \"fee\": n, (numeric) The fee added to the transaction\n" |
|
|
|
|
|
|
|
" \"changepos\": n (numeric) The position of the added change output, or -1\n" |
|
|
|
|
|
|
|
"}\n" |
|
|
|
|
|
|
|
"\"hex\" \n" |
|
|
|
|
|
|
|
"\nExamples:\n" |
|
|
|
|
|
|
|
"\nCreate a transaction with no inputs\n" |
|
|
|
|
|
|
|
+ HelpExampleCli("createrawtransaction", "\"[]\" \"{\\\"myaddress\\\":0.01}\"") + |
|
|
|
|
|
|
|
"\nAdd sufficient unsigned inputs to meet the output value\n" |
|
|
|
|
|
|
|
+ HelpExampleCli("fundrawtransaction", "\"rawtransactionhex\"") + |
|
|
|
|
|
|
|
"\nSign the transaction\n" |
|
|
|
|
|
|
|
+ HelpExampleCli("signrawtransaction", "\"fundedtransactionhex\"") + |
|
|
|
|
|
|
|
"\nSend the transaction\n" |
|
|
|
|
|
|
|
+ HelpExampleCli("sendrawtransaction", "\"signedtransactionhex\"") |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RPCTypeCheck(params, boost::assign::list_of(UniValue::VSTR)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// parse hex string from parameter
|
|
|
|
|
|
|
|
CTransaction origTx; |
|
|
|
|
|
|
|
if (!DecodeHexTx(origTx, params[0].get_str())) |
|
|
|
|
|
|
|
throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "TX decode failed"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CMutableTransaction tx(origTx); |
|
|
|
|
|
|
|
CAmount nFee; |
|
|
|
|
|
|
|
string strFailReason; |
|
|
|
|
|
|
|
int nChangePos = -1; |
|
|
|
|
|
|
|
if(!pwalletMain->FundTransaction(tx, nFee, nChangePos, strFailReason)) |
|
|
|
|
|
|
|
throw JSONRPCError(RPC_INTERNAL_ERROR, strFailReason); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UniValue result(UniValue::VOBJ); |
|
|
|
|
|
|
|
result.push_back(Pair("hex", EncodeHexTx(tx))); |
|
|
|
|
|
|
|
result.push_back(Pair("changepos", nChangePos)); |
|
|
|
|
|
|
|
result.push_back(Pair("fee", ValueFromAmount(nFee))); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
|
|
} |
|
|
|