Files
lightning/onchaind/onchaind_wire.csv
Rusty Russell 956e6c4055 lightningd: handle first case of onchaind handing a tx to us to create.
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>
2023-04-07 11:49:09 +09:30

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.
8msgtype,onchaind_init,5001
9msgdata,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.
12msgdata,onchaind_init,chainparams,chainparams,
13msgdata,onchaind_init,funding_amount_satoshi,amount_sat,
14# Our current balance (of funding amount, not counting any pending htlcs)
15msgdata,onchaind_init,our_msat,amount_msat,
16# Remote per commit point for committed tx.
17msgdata,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).
19msgdata,onchaind_init,remote_per_commitment_point,pubkey,
20msgdata,onchaind_init,local_to_self_delay,u32,
21msgdata,onchaind_init,remote_to_self_delay,u32,
22msgdata,onchaind_init,delayed_to_us_feerate,u32,
23msgdata,onchaind_init,htlc_feerate,u32,
24msgdata,onchaind_init,penalty_feerate,u32,
25msgdata,onchaind_init,max_penalty_feerate,u32,
26msgdata,onchaind_init,local_dust_limit_satoshi,amount_sat,
27# Gives an easy way to tell if it's our unilateral close or theirs...
28msgdata,onchaind_init,our_broadcast_txid,bitcoin_txid,
29msgdata,onchaind_init,local_scriptpubkey_len,u16,
30msgdata,onchaind_init,local_scriptpubkey,u8,local_scriptpubkey_len
31msgdata,onchaind_init,remote_scriptpubkey_len,u16,
32msgdata,onchaind_init,remote_scriptpubkey,u8,remote_scriptpubkey_len
33msgdata,onchaind_init,ourwallet_index,u32,
34msgdata,onchaind_init,ourwallet_ext_key,ext_key,
35msgdata,onchaind_init,ourwallet_pubkey,pubkey,
36# We need these two for commit number obscurer
37msgdata,onchaind_init,opener,enum side,
38msgdata,onchaind_init,local_basepoints,basepoints,
39msgdata,onchaind_init,remote_basepoints,basepoints,
40msgdata,onchaind_init,tx_parts,tx_parts,
41msgdata,onchaind_init,locktime,u32,
42msgdata,onchaind_init,tx_blockheight,u32,
43msgdata,onchaind_init,reasonable_depth,u32,
44msgdata,onchaind_init,num_htlc_sigs,u16,
45msgdata,onchaind_init,htlc_signature,bitcoin_signature,num_htlc_sigs
46msgdata,onchaind_init,min_possible_feerate,u32,
47msgdata,onchaind_init,max_possible_feerate,u32,
48msgdata,onchaind_init,possible_remote_per_commit_point,?pubkey,
49msgdata,onchaind_init,local_funding_pubkey,pubkey,
50msgdata,onchaind_init,remote_funding_pubkey,pubkey,
51msgdata,onchaind_init,local_static_remotekey_start,u64,
52msgdata,onchaind_init,remote_static_remotekey_start,u64,
53msgdata,onchaind_init,option_anchor_outputs,bool,
54# We need this for BIP125 rule 4
55msgdata,onchaind_init,min_relay_feerate,u32,
56# This says we're ready; give us htlcs and preimages.
57msgtype,onchaind_init_reply,5101
58msgdata,onchaind_init_reply,commit_num,u64,
59#include <onchaind/onchaind_wire.h>
60msgtype,onchaind_htlcs,5002
61msgdata,onchaind_htlcs,num_htlcs,u32,
62msgdata,onchaind_htlcs,htlc,htlc_stub,num_htlcs
63# If it's not in the commitment tx, tell us (immediately or htlc_missing_depth)
64msgdata,onchaind_htlcs,tell_if_missing,bool,num_htlcs
65msgdata,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.
70msgtype,onchaind_broadcast_tx,5003
71msgdata,onchaind_broadcast_tx,tx,bitcoin_tx,
72msgdata,onchaind_broadcast_tx,is_rbf,bool,
73# master->onchaind: Notifier that an output has been spent by input_num of tx.
74msgtype,onchaind_spent,5004
75msgdata,onchaind_spent,tx,tx_parts,
76msgdata,onchaind_spent,input_num,u32,
77msgdata,onchaind_spent,blockheight,u32,
78# master->onchaind: We will receive more than one of these, as depth changes.
79msgtype,onchaind_depth,5005
80msgdata,onchaind_depth,txid,bitcoin_txid,
81msgdata,onchaind_depth,depth,u32,
82# onchaind->master: We don't want to watch this tx, or its outputs
83msgtype,onchaind_unwatch_tx,5006
84msgdata,onchaind_unwatch_tx,txid,bitcoin_txid,
85# master->onchaind: We know HTLC preimage
86msgtype,onchaind_known_preimage,5007
87msgdata,onchaind_known_preimage,preimage,preimage,
88# onchaind->master: We discovered HTLC preimage
89msgtype,onchaind_extracted_preimage,5008
90msgdata,onchaind_extracted_preimage,preimage,preimage,
91# onchaind->master: this HTLC was missing from commit tx.
92msgtype,onchaind_missing_htlc_output,5009
93msgdata,onchaind_missing_htlc_output,htlc,htlc_stub,
94# onchaind->master: this HTLC has timed out (after reasonable_depth)
95msgtype,onchaind_htlc_timeout,5010
96msgdata,onchaind_htlc_timeout,htlc,htlc_stub,
97# onchaind->master: this peer can be forgotten
98msgtype,onchaind_all_irrevocably_resolved,5011
99# onchaind->master: hey, I identified an UTXO you'll want to track
100msgtype,onchaind_add_utxo,5012
101msgdata,onchaind_add_utxo,prev_out,bitcoin_outpoint,
102msgdata,onchaind_add_utxo,per_commit_point,?pubkey,
103msgdata,onchaind_add_utxo,value,amount_sat,
104msgdata,onchaind_add_utxo,blockheight,u32,
105msgdata,onchaind_add_utxo,len,u16,
106msgdata,onchaind_add_utxo,scriptpubkey,u8,len
107msgdata,onchaind_add_utxo,csv_lock,u32,
108# master -> onchaind: do you have a memleak?
109msgtype,onchaind_dev_memleak,5033
110msgtype,onchaind_dev_memleak_reply,5133
111msgdata,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.
115msgtype,onchaind_annotate_txout,5035
116msgdata,onchaind_annotate_txout,outpoint,bitcoin_outpoint,
117msgdata,onchaind_annotate_txout,type,enum wallet_tx_type,
118msgtype,onchaind_annotate_txin,5036
119msgdata,onchaind_annotate_txin,txid,bitcoin_txid,
120msgdata,onchaind_annotate_txin,innum,u32,
121msgdata,onchaind_annotate_txin,type,enum wallet_tx_type,
122msgtype,onchaind_notify_coin_mvt,5037
123msgdata,onchaind_notify_coin_mvt,mvt,chain_coin_mvt,
124# We tell lightningd to create, sign and broadcast this tx:
125msgtype,onchaind_spend_to_us,5040
126msgdata,onchaind_spend_to_us,outpoint,bitcoin_outpoint,
127msgdata,onchaind_spend_to_us,outpoint_amount,amount_sat,
128msgdata,onchaind_spend_to_us,minblock,u32,
129msgdata,onchaind_spend_to_us,commit_num,u64,
130msgdata,onchaind_spend_to_us,wscript_len,u32,
131msgdata,onchaind_spend_to_us,wscript,u8,wscript_len
132subtype,onchain_witness_element
133subtypedata,onchain_witness_element,is_signature,bool,
134subtypedata,onchain_witness_element,len,u32,
135subtypedata,onchain_witness_element,witness,u8,len
136# lightningd replies; if it considers it uneconomic, it tells onchaind
137# so it doesn't wait forever!
138msgtype,onchaind_spend_created,5140
139msgdata,onchaind_spend_created,expect_to_succeed,bool,
140msgdata,onchaind_spend_created,num_witnesses,u32,
141msgdata,onchaind_spend_created,witness,onchain_witness_element,num_witnesses