6

When we open a lightning channel using eltoo / LN symmetry (standard 2/2 multisig), the setup/funding transaction must be recorded on-chain in order to prevent a "double spend" of the funding inputs (and effectively stealing the channel balance).

However, what I do not understand is why that UTXO, now recorded on-chain, cannot be spent via the settlement transaction after the relative timelock has expired. This timelock would otherwise, the way I (miss-)understand it, define the ultimate lifetime of the channel which would be very inconvenient.

What am I missing here?

Including the (great) graphic from Richard Myers to illustrate what I mean:

enter image description here

3 Answers 3

7

Yes, you’re reading it right. The construction presented here has a limited lifetime since the Settle_0 transaction becomes valid at some point. However, later in the paper, the authors introduce an additional trigger step.

From section “4.2 Settling a contract”:

In its current form the off-chain protocol has a limited lifetime since the shared output script has a settlement branch that becomes active after a timeout. […] In order to avoid having to refresh the contract on-chain simply to keep the timeouts from expiring, we introduce an additional step in-between the setup phase and the settlement phase: the trigger step.

The time-lock for the Settle_0 is then defined relative to the confirmation of the Trigger transaction. Both Settle_0 and the Update transactions then spend the output of the Trigger transaction rather than the output of the Setup transaction. That way channels no longer have a limited lifespan, but an additional transaction is required to close channels unilaterally.

2
  • Thanks! So with the above construction, you could then just choose an extra long delay for the first state, right? It's unlikely the channel partner "disappears" right after opening a channel anyway.
    – sutterseba
    Mar 7, 2023 at 8:59
  • 1
    Yes, but you don't want to give too much time, since a malicious counterparty can lock up your funds at whim.
    – Murch
    Mar 7, 2023 at 11:47
4

Thanks for the feedback! I replaced "Update: 0" with a "Funding: 0" which is put on-chain when the channel is opened and the channel parties have both signed the first off-chain "Update: 1". Note that "Funding: 0" does not have a settlement path, but can be spent by any of the updates (or cooperatively closed).

This diagram does not yet show all of the features of the current design, but hopefully still helps give the general idea.

Updated Diagram

3

Current thinking is (I believe) just to have a funding utxo on chain ("Setup_0") which is always spent by some update transaction ("Update_1" etc; there is no "Settle_0") which in turn can be spent either by a later update transaction, or, after a relative timelock, by a settlement transaction ("Settle_1" etc). (In this model the update transaction is acting as the trigger step)

See https://github.com/instagibbs/bolts/blob/505ab7997bd72708266689a97dcdce9a8f727045/XX-eltoo-transactions.md eg.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.