aboutsummaryrefslogtreecommitdiff
path: root/src/bitcoinrpc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bitcoinrpc.cpp')
-rw-r--r--src/bitcoinrpc.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp
index 24fa97588c..8f4fb93a5a 100644
--- a/src/bitcoinrpc.cpp
+++ b/src/bitcoinrpc.cpp
@@ -2217,6 +2217,40 @@ Value getblock(const Array& params, bool fHelp)
(params.size() > 1) ? params[1].get_obj() : emptyobj);
}
+Value sendrawtx(const Array& params, bool fHelp)
+{
+ if (fHelp || params.size() < 1 || params.size() > 1)
+ throw runtime_error(
+ "sendrawtx <hex string>\n"
+ "Submits raw transaction (serialized, hex-encoded) to local node and network.");
+
+ // parse hex string from parameter
+ vector<unsigned char> txData(ParseHex(params[0].get_str()));
+ CDataStream ssData(txData, SER_NETWORK, PROTOCOL_VERSION);
+ CTransaction tx;
+
+ // deserialize binary data stream
+ try {
+ ssData >> tx;
+ }
+ catch (std::exception &e) {
+ throw JSONRPCError(-22, "TX decode failed");
+ }
+
+ // push to local node
+ CTxDB txdb("r");
+ if (!tx.AcceptToMemoryPool(txdb))
+ throw JSONRPCError(-22, "TX rejected");
+
+ SyncWithWallets(tx, NULL, true);
+
+ // relay to network
+ CInv inv(MSG_TX, tx.GetHash());
+ RelayInventory(inv);
+
+ return true;
+}
+
@@ -2280,6 +2314,7 @@ static const CRPCCommand vRPCCommands[] =
{ "listsinceblock", &listsinceblock, false },
{ "dumpprivkey", &dumpprivkey, false },
{ "importprivkey", &importprivkey, false },
+ { "sendrawtx", &sendrawtx, false },
};
CRPCTable::CRPCTable()