diff --git a/close_tx.c b/close_tx.c index 1f43d43e5..c5b9b8883 100644 --- a/close_tx.c +++ b/close_tx.c @@ -10,9 +10,13 @@ struct bitcoin_tx *create_close_tx(const tal_t *ctx, const struct sha256_double *anchor_txid, unsigned int anchor_index, u64 anchor_satoshis, - uint64_t to_us, uint64_t to_them) + uint64_t to_us, uint64_t to_them, + uint64_t dust_limit) { struct bitcoin_tx *tx; + size_t num_outputs = 0; + + assert(to_us + to_them <= anchor_satoshis); /* Now create close tx: one input, two outputs. */ tx = bitcoin_tx(ctx, 1, 2); @@ -22,19 +26,28 @@ struct bitcoin_tx *create_close_tx(const tal_t *ctx, tx->input[0].index = anchor_index; tx->input[0].amount = tal_dup(tx->input, u64, &anchor_satoshis); - /* One output is to us. */ - tx->output[0].amount = to_us; - tx->output[0].script = tal_dup_arr(tx, u8, + if (to_us >= dust_limit) { + /* One output is to us. */ + tx->output[num_outputs].amount = to_us; + tx->output[num_outputs].script = tal_dup_arr(tx, u8, our_script, tal_count(our_script), 0); + num_outputs++; + } - /* Other output is to them. */ - tx->output[1].amount = to_them; - tx->output[1].script = tal_dup_arr(tx, u8, + if (to_them >= dust_limit) { + /* Other output is to them. */ + tx->output[num_outputs].amount = to_them; + tx->output[num_outputs].script = tal_dup_arr(tx, u8, their_script, tal_count(their_script), 0); + num_outputs++; + } - assert(tx->output[0].amount + tx->output[1].amount <= anchor_satoshis); + /* Can't have no outputs at all! */ + if (num_outputs == 0) + return tal_free(tx); + tal_resize(&tx->output, num_outputs); - permute_outputs(tx->output, 2, NULL); + permute_outputs(tx->output, num_outputs, NULL); return tx; } diff --git a/close_tx.h b/close_tx.h index 34ecc22f3..e1d9b775b 100644 --- a/close_tx.h +++ b/close_tx.h @@ -15,5 +15,6 @@ struct bitcoin_tx *create_close_tx(const tal_t *ctx, const struct sha256_double *anchor_txid, unsigned int anchor_index, u64 anchor_satoshis, - uint64_t to_us, uint64_t to_them); + uint64_t to_us, uint64_t to_them, + uint64_t dust_limit); #endif diff --git a/daemon/peer.c b/daemon/peer.c index a434e8e17..73f0fdd6b 100644 --- a/daemon/peer.c +++ b/daemon/peer.c @@ -4365,7 +4365,7 @@ struct bitcoin_tx *peer_create_close_tx(const tal_t *ctx, peer->anchor.index, peer->anchor.satoshis, cstate.side[LOCAL].pay_msat / 1000, - cstate.side[REMOTE].pay_msat / 1000); + cstate.side[REMOTE].pay_msat / 1000, 0); } /* Sets up the initial cstate and commit tx for both nodes: false if