X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Frpcrawtransaction.cpp;h=4bcf911fb3014257e070810cd85b528112316737;hb=c69eb1bd70e0dc94095d63b0de50dc8d2910ea0e;hp=bd9880c57c4cc6b3a673bea707ee42d62fea64b8;hpb=749faf6d4decb3b364cc981060fd4a26dab82df8;p=novacoin.git diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp index bd9880c..4bcf911 100644 --- a/src/rpcrawtransaction.cpp +++ b/src/rpcrawtransaction.cpp @@ -35,16 +35,33 @@ void ScriptPubKeyToJSON(const CScript& scriptPubKey, Object& out, bool fIncludeH return; } - out.push_back(Pair("reqSigs", nRequired)); - out.push_back(Pair("type", GetTxnOutputType(type))); + if (type != TX_NULL_DATA) + { + out.push_back(Pair("reqSigs", nRequired)); + out.push_back(Pair("type", GetTxnOutputType(type))); + + if (type == TX_PUBKEY_DROP) + { + vector vSolutions; + if (!Solver(scriptPubKey, type, vSolutions)) + { + out.push_back(Pair("keyVariant", HexStr(vSolutions[0]))); + out.push_back(Pair("R", HexStr(vSolutions[1]))); + } + } - Array a; - BOOST_FOREACH(const CTxDestination& addr, addresses) - a.push_back(CBitcoinAddress(addr).ToString()); - out.push_back(Pair("addresses", a)); + Array a; + BOOST_FOREACH(const CTxDestination& addr, addresses) + a.push_back(CBitcoinAddress(addr).ToString()); + out.push_back(Pair("addresses", a)); + } + else + { + out.push_back(Pair("type", GetTxnOutputType(type))); + } } -void TxToJSON(const CTransaction& tx, const uint256 hashBlock, Object& entry) +void TxToJSON(const CTransaction& tx, const uint256& hashBlock, Object& entry) { entry.push_back(Pair("txid", tx.GetHash().GetHex())); entry.push_back(Pair("version", tx.nVersion)); @@ -226,12 +243,13 @@ Value listunspent(const Array& params, bool fHelp) Value createrawtransaction(const Array& params, bool fHelp) { - if (fHelp || params.size() != 2) + if (fHelp || params.size() > 3 || params.size() < 2) throw runtime_error( - "createrawtransaction '[{\"txid\":txid,\"vout\":n},...]' '{address:amount,...}'\n" + "createrawtransaction <'[{\"txid\":txid,\"vout\":n},...]'> <'{address:amount,...}'> [hex data]\n" "Create a transaction spending given inputs\n" "(array of objects containing transaction id and output number),\n" - "sending to given address(es).\n" + "sending to given address(es),\n" + "optional data to add into data-carrying output.\n" "Returns hex-encoded raw transaction.\n" "Note that the transaction's inputs are not signed, and\n" "it is not stored in the wallet or transmitted to the network."); @@ -284,6 +302,15 @@ Value createrawtransaction(const Array& params, bool fHelp) rawTx.vout.push_back(out); } + if (params.size() == 3) + { + // Data carrying output + CScript scriptPubKey; + scriptPubKey << OP_RETURN << ParseHex(params[2].get_str()); + CTxOut out(0, scriptPubKey); + rawTx.vout.push_back(out); + } + CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); ss << rawTx; return HexStr(ss.begin(), ss.end());