mirror of
https://github.com/aljazceru/lightning.git
synced 2026-01-17 04:44:22 +01:00
We add code for the case of spending a (timelocked) to-us output of an HTLC output, so lightningd can do it (rather than onchaind doing all the work itself). onchaind still needs to know whether we bothered to create the tx (fees might have caused it to evaporate, so it should consider it immediately resolved rather than waiting for it), and what the witnesses were, and which parts of the witnesses were signatures (as these parts might change, with RBF or in future, combining other txs). The inputs (known to onchaind) and the witnesses (told by lightningd) uniquely identify the spend for the purposes of onchaind. In particular, they definitely distinguish HTLC-timeout and HTLC-success cases. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
6.7 KiB
6.7 KiB
| 1 | #include <bitcoin/tx_parts.h> |
|---|---|
| 2 | #include <common/bip32.h> |
| 3 | #include <common/coin_mvt.h> |
| 4 | #include <common/derive_basepoints.h> |
| 5 | #include <common/htlc_wire.h> |
| 6 | #include <common/wallet.h> |
| 7 | # Begin! Here's the onchain tx which spends funding tx, followed by all HTLCs. |
| 8 | msgtype,onchaind_init,5001 |
| 9 | msgdata,onchaind_init,shachain,shachain, |
| 10 | # This needs to be set explicitly since the same message also contains a |
| 11 | # transaction that we need to parse correctly. |
| 12 | msgdata,onchaind_init,chainparams,chainparams, |
| 13 | msgdata,onchaind_init,funding_amount_satoshi,amount_sat, |
| 14 | # Our current balance (of funding amount, not counting any pending htlcs) |
| 15 | msgdata,onchaind_init,our_msat,amount_msat, |
| 16 | # Remote per commit point for committed tx. |
| 17 | msgdata,onchaind_init,old_remote_per_commitment_point,pubkey, |
| 18 | # Remote per commit point for current tx (needed if we haven't got revoke_and_ack yet). |
| 19 | msgdata,onchaind_init,remote_per_commitment_point,pubkey, |
| 20 | msgdata,onchaind_init,local_to_self_delay,u32, |
| 21 | msgdata,onchaind_init,remote_to_self_delay,u32, |
| 22 | msgdata,onchaind_init,delayed_to_us_feerate,u32, |
| 23 | msgdata,onchaind_init,htlc_feerate,u32, |
| 24 | msgdata,onchaind_init,penalty_feerate,u32, |
| 25 | msgdata,onchaind_init,max_penalty_feerate,u32, |
| 26 | msgdata,onchaind_init,local_dust_limit_satoshi,amount_sat, |
| 27 | # Gives an easy way to tell if it's our unilateral close or theirs... |
| 28 | msgdata,onchaind_init,our_broadcast_txid,bitcoin_txid, |
| 29 | msgdata,onchaind_init,local_scriptpubkey_len,u16, |
| 30 | msgdata,onchaind_init,local_scriptpubkey,u8,local_scriptpubkey_len |
| 31 | msgdata,onchaind_init,remote_scriptpubkey_len,u16, |
| 32 | msgdata,onchaind_init,remote_scriptpubkey,u8,remote_scriptpubkey_len |
| 33 | msgdata,onchaind_init,ourwallet_index,u32, |
| 34 | msgdata,onchaind_init,ourwallet_ext_key,ext_key, |
| 35 | msgdata,onchaind_init,ourwallet_pubkey,pubkey, |
| 36 | # We need these two for commit number obscurer |
| 37 | msgdata,onchaind_init,opener,enum side, |
| 38 | msgdata,onchaind_init,local_basepoints,basepoints, |
| 39 | msgdata,onchaind_init,remote_basepoints,basepoints, |
| 40 | msgdata,onchaind_init,tx_parts,tx_parts, |
| 41 | msgdata,onchaind_init,locktime,u32, |
| 42 | msgdata,onchaind_init,tx_blockheight,u32, |
| 43 | msgdata,onchaind_init,reasonable_depth,u32, |
| 44 | msgdata,onchaind_init,num_htlc_sigs,u16, |
| 45 | msgdata,onchaind_init,htlc_signature,bitcoin_signature,num_htlc_sigs |
| 46 | msgdata,onchaind_init,min_possible_feerate,u32, |
| 47 | msgdata,onchaind_init,max_possible_feerate,u32, |
| 48 | msgdata,onchaind_init,possible_remote_per_commit_point,?pubkey, |
| 49 | msgdata,onchaind_init,local_funding_pubkey,pubkey, |
| 50 | msgdata,onchaind_init,remote_funding_pubkey,pubkey, |
| 51 | msgdata,onchaind_init,local_static_remotekey_start,u64, |
| 52 | msgdata,onchaind_init,remote_static_remotekey_start,u64, |
| 53 | msgdata,onchaind_init,option_anchor_outputs,bool, |
| 54 | # We need this for BIP125 rule 4 |
| 55 | msgdata,onchaind_init,min_relay_feerate,u32, |
| 56 | # This says we're ready; give us htlcs and preimages. |
| 57 | msgtype,onchaind_init_reply,5101 |
| 58 | msgdata,onchaind_init_reply,commit_num,u64, |
| 59 | #include <onchaind/onchaind_wire.h> |
| 60 | msgtype,onchaind_htlcs,5002 |
| 61 | msgdata,onchaind_htlcs,num_htlcs,u32, |
| 62 | msgdata,onchaind_htlcs,htlc,htlc_stub,num_htlcs |
| 63 | # If it's not in the commitment tx, tell us (immediately or htlc_missing_depth) |
| 64 | msgdata,onchaind_htlcs,tell_if_missing,bool,num_htlcs |
| 65 | msgdata,onchaind_htlcs,tell_immediately,bool,num_htlcs |
| 66 | # onchaind->master: Send out a tx. |
| 67 | # If is_rbf is false then master should rebroadcast the tx. |
| 68 | # If is_rbf is true then onchaind is responsible for rebroadcasting |
| 69 | # it with a higher fee. |
| 70 | msgtype,onchaind_broadcast_tx,5003 |
| 71 | msgdata,onchaind_broadcast_tx,tx,bitcoin_tx, |
| 72 | msgdata,onchaind_broadcast_tx,is_rbf,bool, |
| 73 | # master->onchaind: Notifier that an output has been spent by input_num of tx. |
| 74 | msgtype,onchaind_spent,5004 |
| 75 | msgdata,onchaind_spent,tx,tx_parts, |
| 76 | msgdata,onchaind_spent,input_num,u32, |
| 77 | msgdata,onchaind_spent,blockheight,u32, |
| 78 | # master->onchaind: We will receive more than one of these, as depth changes. |
| 79 | msgtype,onchaind_depth,5005 |
| 80 | msgdata,onchaind_depth,txid,bitcoin_txid, |
| 81 | msgdata,onchaind_depth,depth,u32, |
| 82 | # onchaind->master: We don't want to watch this tx, or its outputs |
| 83 | msgtype,onchaind_unwatch_tx,5006 |
| 84 | msgdata,onchaind_unwatch_tx,txid,bitcoin_txid, |
| 85 | # master->onchaind: We know HTLC preimage |
| 86 | msgtype,onchaind_known_preimage,5007 |
| 87 | msgdata,onchaind_known_preimage,preimage,preimage, |
| 88 | # onchaind->master: We discovered HTLC preimage |
| 89 | msgtype,onchaind_extracted_preimage,5008 |
| 90 | msgdata,onchaind_extracted_preimage,preimage,preimage, |
| 91 | # onchaind->master: this HTLC was missing from commit tx. |
| 92 | msgtype,onchaind_missing_htlc_output,5009 |
| 93 | msgdata,onchaind_missing_htlc_output,htlc,htlc_stub, |
| 94 | # onchaind->master: this HTLC has timed out (after reasonable_depth) |
| 95 | msgtype,onchaind_htlc_timeout,5010 |
| 96 | msgdata,onchaind_htlc_timeout,htlc,htlc_stub, |
| 97 | # onchaind->master: this peer can be forgotten |
| 98 | msgtype,onchaind_all_irrevocably_resolved,5011 |
| 99 | # onchaind->master: hey, I identified an UTXO you'll want to track |
| 100 | msgtype,onchaind_add_utxo,5012 |
| 101 | msgdata,onchaind_add_utxo,prev_out,bitcoin_outpoint, |
| 102 | msgdata,onchaind_add_utxo,per_commit_point,?pubkey, |
| 103 | msgdata,onchaind_add_utxo,value,amount_sat, |
| 104 | msgdata,onchaind_add_utxo,blockheight,u32, |
| 105 | msgdata,onchaind_add_utxo,len,u16, |
| 106 | msgdata,onchaind_add_utxo,scriptpubkey,u8,len |
| 107 | msgdata,onchaind_add_utxo,csv_lock,u32, |
| 108 | # master -> onchaind: do you have a memleak? |
| 109 | msgtype,onchaind_dev_memleak,5033 |
| 110 | msgtype,onchaind_dev_memleak_reply,5133 |
| 111 | msgdata,onchaind_dev_memleak_reply,leak,bool, |
| 112 | # Tell the main daemon what we've been watching, mainly used for transactions |
| 113 | # that we tracked automatically but only onchaind knows how to classify their |
| 114 | # transactions. |
| 115 | msgtype,onchaind_annotate_txout,5035 |
| 116 | msgdata,onchaind_annotate_txout,outpoint,bitcoin_outpoint, |
| 117 | msgdata,onchaind_annotate_txout,type,enum wallet_tx_type, |
| 118 | msgtype,onchaind_annotate_txin,5036 |
| 119 | msgdata,onchaind_annotate_txin,txid,bitcoin_txid, |
| 120 | msgdata,onchaind_annotate_txin,innum,u32, |
| 121 | msgdata,onchaind_annotate_txin,type,enum wallet_tx_type, |
| 122 | msgtype,onchaind_notify_coin_mvt,5037 |
| 123 | msgdata,onchaind_notify_coin_mvt,mvt,chain_coin_mvt, |
| 124 | # We tell lightningd to create, sign and broadcast this tx: |
| 125 | msgtype,onchaind_spend_to_us,5040 |
| 126 | msgdata,onchaind_spend_to_us,outpoint,bitcoin_outpoint, |
| 127 | msgdata,onchaind_spend_to_us,outpoint_amount,amount_sat, |
| 128 | msgdata,onchaind_spend_to_us,minblock,u32, |
| 129 | msgdata,onchaind_spend_to_us,commit_num,u64, |
| 130 | msgdata,onchaind_spend_to_us,wscript_len,u32, |
| 131 | msgdata,onchaind_spend_to_us,wscript,u8,wscript_len |
| 132 | subtype,onchain_witness_element |
| 133 | subtypedata,onchain_witness_element,is_signature,bool, |
| 134 | subtypedata,onchain_witness_element,len,u32, |
| 135 | subtypedata,onchain_witness_element,witness,u8,len |
| 136 | # lightningd replies; if it considers it uneconomic, it tells onchaind |
| 137 | # so it doesn't wait forever! |
| 138 | msgtype,onchaind_spend_created,5140 |
| 139 | msgdata,onchaind_spend_created,expect_to_succeed,bool, |
| 140 | msgdata,onchaind_spend_created,num_witnesses,u32, |
| 141 | msgdata,onchaind_spend_created,witness,onchain_witness_element,num_witnesses |