#include "main.h"
#include "net.h"
#include "wallet.h"
+#include "script.h"
+#include "util.h"
using namespace std;
using namespace boost;
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)));
- 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)
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.");
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());