-
Notifications
You must be signed in to change notification settings - Fork 513
Description
Should we require nodes to temporarily store signatures that they send during an interactive transaction construction session so they can be re-sent if nodes are disconnected before the session has completed ?
Context
Alice and Bob start an interactive transaction construction session.
Alice gets disconnected after she's sent commitment_signed
but before she's received Bob's tx_signatures
.
Alice Bob
| |
| <interactive-tx> |
| |
| tx_complete |
|----------------------------->|
| tx_complete |
|<-----------------------------|
| commit_sig |
|----------------------------->|
| commit_sig |
| XXXXX ---------|
Upon reconnection, Alice will ask Bob to retransmit his commit_sig and tx_signatures. Similarly, Bob will ask Alice to retransmit her tx_signatures (he has already received her commit_sig).
In order to retransmit commit_sig and/or tx_signatures, there are two possible strategies:
- store them along with interactive session data, re-send it if necessary and discard when the session completes
- re-compute them
Re-computing signatures is easy for the current commitment formats, but becomes more difficult with taproot channels which use musig2 signatures that require peer to first exchange nonces that match the commitment or funding transaction being signed.
With splicing, there can be multiple commitments that are valid at the same time (all with different funding transactions but with the same commitment number), which all need to be signed and revoked using different nonces (they cannot be reused accross splice commitment transactions, unlike commitment points for example). To easily identify which nonces should be used for a given commitment transaction, we propose to attach list of (funding tx id, verification nonce
) tuples to revoke_and_ack
and channel_reestablish
(this is not part of the simple taproot channel BOLT proposal yet), each of these nonces being used to sign and verify the "next" remote commitment transaction.
So we have 2 options:
-
If we require that implementations do indeed store the commitment signature that they've sent during the interactive session until it has been completed, then handling re-reconnection when a splice is in progress is the same for taproot and non-taproot channels: just re-send the stored signature.
-
If we don't, the above scheme is not enough: nodes will need to re-compute a signature for the current interactive session commitment transaction, but will have received a nonce for the next commitment transaction: we'll need to attach an optional
current remote nonce
TLV tochannel_reestablish
that matches the interrupted interactive session's funding tx id and current commitment number.
We have the exact same issue with tx_signatures
, which for taproot channel splices will include a partial signature for for the new funding transaction. tx_signatures
could either be stored or re-computed but in that case, nodes will also need to attach a funding_nonce
to channel_reestablish
.
Which one do you think is acceptable ?