[Lightning-dev] Allowing acknowledgement via commit messages
Rusty Russell
rusty at rustcorp.com.au
Thu Oct 13 19:15:36 UTC 2016
Hi all,
I've been trying to write the spec part about the
propose/commitsig/revoke cycle. We agreed that the commitsig message
would include an extra "I included these updates from you" field. This
has two side-effects I hadn't appreciated.
1. Without it, the state of updates is always linear:
RECEIVER-PENDING: update pending on receiver side
RECEIVER-COMMITTED: update included in receiver commit tx
RECEIVER-LOCKEDIN-SENDER-PENDING: and previous receiver commit
tx preimage revealed, update now pending on sender.
RECEIVER-LOCKEDIN-SENDER-COMMITTED: update included in sender commit tx
BOTH-LOCKEDIN: and previous sender commit tx preimage revealed.
This means you trigger forwarding on the final state, since both sides
are fully committed at that point.
With the ability to push proposed received updates to the other side
by including them in your own commit message, these changes are
unordered. It's no longer a linear state machine (and certainly has
many more states).
2. We can't do fail-fast in future. There was an idea that if the
receiver knew it was going to immediately fail an HTLC, it could
reply with a "this HTLC is going to fail"; if the sender receives
that message before it sends "commit", it can send a "undo that
HTLC add" and cancel it out immediately. It's an easy extension.
If the receiver can push the uncommitted changes into the sender's
commit tx, the receiver can't "undo" before commit, and this scheme
fails.
I feel bound by decisions we already made, but I am struggling to write
the spec clearly enough with this addition.
Thoughts?
Rusty.
More information about the Lightning-dev
mailing list