From c1dc0e54fa39b4262878aedf66e8602776e82ad6 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 4 May 2016 16:03:10 +0930 Subject: [PATCH] daemon/bitcoind: bitcoind_sendrawtx to send hex string. This can fail. Real cases include both sides dumping their commitment txs in testing (only one can succeed). Signed-off-by: Rusty Russell --- daemon/bitcoind.c | 27 +++++++++++++++++++++++++-- daemon/bitcoind.h | 14 ++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/daemon/bitcoind.c b/daemon/bitcoind.c index cd2e3aa2d..ba75d7743 100644 --- a/daemon/bitcoind.c +++ b/daemon/bitcoind.c @@ -220,7 +220,7 @@ void bitcoind_estimate_fee_(struct lightningd_state *dstate, "estimatefee", "2", NULL); } -static void process_sendrawrx(struct bitcoin_cli *bcli) +static void process_sendtx(struct bitcoin_cli *bcli) { struct sha256_double txid; const char *out = (char *)bcli->output; @@ -243,11 +243,34 @@ void bitcoind_send_tx(struct lightningd_state *dstate, u8 *raw = linearize_tx(dstate, tx); char *hex = tal_hexstr(raw, raw, tal_count(raw)); - start_bitcoin_cli(dstate, process_sendrawrx, false, NULL, NULL, + start_bitcoin_cli(dstate, process_sendtx, false, NULL, NULL, "sendrawtransaction", hex, NULL); tal_free(raw); } +static void process_sendrawtx(struct bitcoin_cli *bcli) +{ + void (*cb)(struct lightningd_state *dstate, + const char *msg, void *) = bcli->cb; + const char *msg = tal_strndup(bcli, (char *)bcli->output, + bcli->output_bytes); + + log_debug(bcli->dstate->base_log, "sendrawtx exit %u, gave %s", + *bcli->exitstatus, msg); + + cb(bcli->dstate, msg, bcli->cb_arg); +} + +void bitcoind_sendrawtx_(struct lightningd_state *dstate, + const char *hextx, + void (*cb)(struct lightningd_state *dstate, + const char *msg, void *), + void *arg) +{ + start_bitcoin_cli(dstate, process_sendrawtx, true, cb, arg, + "sendrawtransaction", hextx, NULL); +} + static void process_chaintips(struct bitcoin_cli *bcli) { const jsmntok_t *tokens, *t, *end; diff --git a/daemon/bitcoind.h b/daemon/bitcoind.h index 881c4816a..d28933bdf 100644 --- a/daemon/bitcoind.h +++ b/daemon/bitcoind.h @@ -30,6 +30,20 @@ void bitcoind_estimate_fee_(struct lightningd_state *dstate, void bitcoind_send_tx(struct lightningd_state *dstate, const struct bitcoin_tx *tx); +void bitcoind_sendrawtx_(struct lightningd_state *dstate, + const char *hextx, + void (*cb)(struct lightningd_state *dstate, + const char *msg, void *), + void *arg); + +#define bitcoind_sendrawtx(dstate, hextx, cb, arg) \ + bitcoind_sendrawtx_((dstate), (hextx), \ + typesafe_cb_preargs(void, void *, \ + (cb), (arg), \ + struct lightningd_state *, \ + const char *), \ + (arg)) + void bitcoind_get_chaintips_(struct lightningd_state *dstate, void (*cb)(struct lightningd_state *dstate, struct sha256_double *blockids,