Regarding your proposal to make peer backups symmetric, with a first
message that commits to the current state, and then a second message
that reveals the state: I think it could work, but I see the following
issue:

If Alice reveals that she has lost her state, Bob might be tempted to
disconnect, because he expects that Alice will forget his already sent
state commitment. For example this would happen if the user is frustrated
and uninstalls/re-installs the app, or if she decides to try from another
device because the first device "failed" to restore her wallet). Thus,
Bob could try to send a different commitment the next time.

A possible way to prevent that: Alice could, if Bob does not reveal his
state, write Bob's state commitment on-chain, in an OP_RETURN. That way,
Bob cannot expect her to have forgotten his state commitment.

Thomas




On 17.08.23 20:43, SomberNight wrote:

Symmetric resumable channels
----------------------------

Alice and Bob could have a channel where they both provide state backups
to each other. Regarding who goes first in channel_reestablish, we need
an extra preliminary round where both Alice and Bob commit to what they
will send in channel_reestablish:

Round 1:
1. Alice sends hashA = hash(bobs_backup, nonceA)
2. Bob sends hashB = hash(alices_backup, nonceB)

Alice persists hashB to disk upon receiving it, and enforces that even
if there is a disconnection, Bob cannot arbitrarily send a different
commitment next time. (if the channel gets reestablished fully and
Alice sends a new backup to Bob, the stored hashB can be cleared)

Round 2:
3. Alice sends channel_reestablish containing bobs_backup, and nonceA
4. Bob sends channel_reestablish containing alices_backup, and nonceB

Alice checks that the commitment received from Bob in round1 matches
what was received in round2.

Regarding the opening post OP_CHECKSIGFROMSTACK on-chain enforcement,
that can be made symmetric as well! The channel funding output script
needs one taproot branch each for both Alice and Bob lying. The protocol
needs to be tweaked a bit so as to allow a party to legitimately admit
having lost state and commit to the hash of that in round1, and then
reveal they lost state in round2 (e.g. send null data). In which case
the other party would not be able to use the fraud proof taproot branch.

Though note that user-error and manual copying/restoring of DBs could
lead to catastrophic failure with the on-chain enforcement:
if you restore an old db and launch your client, the client won't know
it is running an old state and happily participate in the two round
dance, giving a fraud proof to the counterparty in the process.

Regards,
ghost43

_______________________________________________
Lightning-dev mailing list
Lightning-dev@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev

Reply via email to