TL;DR
=====
* This post presents a channel protocol that's optimized for use within channel 
factories.
* The protocol allows HTLCs to be resolved on-chain:
* without making the expiry of the HTLC depend on the time to close the 
factory, and
* without closing the factory.
* The key ides is the use of separate value and control transactions like those 
used in the Tunable Penalties protocol.
* A version of the protocol that provides watchtower-freedom and one-shot 
receives for casual users is also given.

Overview
========

While the Lightning Network greatly improves Bitcoin's scalability, factories 
that allow multiple two-party channels to be created and closed with a small 
number of on-chain transactions are essential if Bitcoin is to be widely used 
in a trust-free manner [2].
Unfortunately, the existing channel protocols aren't optimized for use within 
factories, thus limiting the efficiency of both the channels and the factories.

The Lightning Network uses Hash Time-Locked Contracts (HTLCs) to implement 
payments across multiple channels.
If one of the parties to an HTLC is unresponsive, the other party must resolve 
the HTLC on-chain.
This creates two problems.

First, the HTLC's expiry must be delayed by the time required to close the 
factory and put the channel containing the HTLC on-chain.
The most efficient known factory [2] can be closed in O(log S) time using O(log 
S) on-chain transactions, assuming the factory supports S states.
If all the hops in a multi-hop payment use channels that are implemented with 
factories, the sum of the delays for closing all of those factories must be 
included in the HTLC expiry of the first hop.
As a result, this delay could become very large, thus leading to inefficient 
use of the channels' capital and long waits to obtain payment receipts.

Second, the requirement to close a factory due to the need to resolve an HTLC 
on-chain means that a single unresponsive party can force the closure of an 
entire factory, thus limiting the factory's ability to scale Bitcoin.

This post presents factory-optimized channel protocols that solve both of these 
problems.
The first protocol, called the Partially-Factory-Optimized (PFO) protocol, 
solves the first problem, while the second protocol, called the 
Fully-Factory-Optimized (FFO) protocol, solves both problems.
Both protocols are slight modifications of the Tunable-Penalties (TP) protocol 
[5] and they share many of its properties, including:
* tunable penalties for putting old transactions on-chain, and
* efficient watchtowers with O(log S) storage for supporting O(S) channel 
states.

In addition, a version of the FFO protocol, called the 
Fully-Factory-Optimized-Watchtower-Free (FFO-WF) protocol is presented that 
supports watchtower-freedom and one-shot receives for casual users [4].
No change to the underlying Bitcoin protocol is required.

A paper with a more complete description of the protocols, including figures, 
values for the timing parameters, and proofs of correctness, is available [6].

The Partially-Factory-Optimized (PFO) Protocol
==============================================

The PFO protocol is a slight modification of the TP protocol [5].
In the TP protocol, each party has their own on-chain Individual transaction, 
the output of which they spend with their State transaction.
This State transaction is a control transaction that establishes the channel's 
state and has an HTLC control output corresponding to each HTLC outstanding in 
the channel in that state.
Each HTLC control output is used to resolve an HTLC by spending the output with 
either an HTLC-success or an HTLC-timeout transaction.
Critically, the State, HTLC-success and HTLC-timeout transactions can be put 
on-chain without spending any of the channel's funds.
Therefore, the TP protocol almost solves the problem of resolving a channel's 
HTLCs without waiting for the Funding transaction to be put on-chain.

Unfortunately, there's one problem in trying to use the TP protocol to resolve 
the HTLCs of a factory-created channel before the factory is closed and its 
Funding transaction is on-chain.
The correctness of the TP protocol depends on the ability to put the current 
Commitment transaction (spending the output of the channel's Funding 
transaction) on-chain as soon as possible once the relative delay between it 
and its corresponding State transaction has been met.
This relative delay is set to tsdAB, which is the maximum of the two parties' 
to_self_delay parameters.
The problem is that the latency to close the factory and put the channel's 
Funding transaction on-chain could exceed tsdAB.
As a result, the TP protocol can't be used in such a factory.

The PFO protocol fixes this by simply setting the relative delay between the 
State transaction and its associated Commitment transaction to the maximum of 
the factory-close latency and tsdAB.

The Fully-Factory-Optimized (FFO) Protocol
==========================================

While the PFO protocol separates the latency to close the factory from the 
setting of the HTLCs' expiries, it still requires that the factory be closed in 
order to guarantee that the HTLCs have been resolved correctly.

The FFO protocol makes several changes to the PFO protocol in order to resolve 
HTLCs without requiring the closure of the factory.
Consider an HTLC offered by Alice to Bob.

First, in the FFO protocol only Bob's State transaction has an HTLC control 
output that determines the resolution of this HTLC, regardless of which party's 
Commitment transaction is put on-chain.
As a result, there's no race to put one's Commitment transaction on-chain, and 
thus no need to close the factory in order to resolve HTLCs.
As another result, it eliminates the possibility of this HTLC being resolved 
with Alice's State and associated HTLC-timeout transactions being put on-chain 
late relative to the HTLC's expiry.

Second, because the HTLC is always resolved based on an HTLC control output in 
Bob's State transaction, Bob has to be incentivized to put his correct State 
transaction on-chain (or else he could prevent the HTLC from timing out by not 
putting his State transaction on-chain).
This is solved by requiring Bob's State and HTLC-success transactions in order 
to pay the HTLC, and to refund the HTLC to Alice (after a suitable relative 
delay) if Bob's State and HTLC-success transactions are not on-chain.

Third, Bob is prevented from putting his State transaction on-chain late 
relative to the HTLC's expiry by adding a relative delay of tsdA (Alice's 
to_self_delay parameter) before he can put his HTLC-success transaction 
on-chain.
This guarantees that Alice will have time to respond with a conflicting 
transaction that prevents Bob's HTLC-success transaction from being put 
on-chain late relative to the HTLC's expiry.

Finally, if the HTLC's secret were not revealed until the HTLC-success 
transaction is put on-chain, the worst-case latency for obtaining a secret from 
a successful HTLC would depend on tsdA, which would greatly increase Bob's 
cltv_expiry_delta parameter, in turn increasing the cost of capital reserved 
for the HTLC and the delay for obtaining a payment receipt.
This problem is solved by introducing a new transaction, called an HTLC-kickoff 
transaction, that spends the HTLC control output in Bob's State transaction and 
reveals the HTLC's secret, with the HTLC-success transaction spending the 
HTLC-kickoff transaction's output.
Thus,the revelation of the HTLC's secret is performed first, followed by the 
resolution of the HTLC approximately tsdA later.

The FFO protocol is shown below:

+-+ AB +----+ A
|F|----+-----------------------------| CC |----
+-+ | | |
. | | B
. | |----
. +----+
| +----+ A
+-----------------------------|C_Ai|----
| | |
| | | B
| | |----
| tsdB & A | | tsdAB & A
| +---------------| |-----+------------
| | +----+ |
| | | AB +-----+ B
| | +--------------|Hp_Bi|----
| | | |
| | +--| |
| | | +-----+
| | +----+ A |
+-----------------------------|C_Bi|---- |
| | | | |
. | | | B |
. | | |---- |
. | tsdA & B | | tsdAB & A |
| +-----------------| |-----+--------------
V | | +----+ | |
| | | AB | +-----+ B
+----+ A +-----+ | | pckeyAi +--------------|Hp_Bi|----
|In_A|----|St_Ai|----+---------- | | |
+----+ | | | +--| |
| | | | +-----+
| | | |
+-----+ | |
| (eAB+tsdA) & A |
+----+ B +-----+ | pckeyBi +----------------- |
|In_B|----|St_Bi|--+------------ | |
+----+ | | | |
| | hp(X) & B +-----+ | tsdA & B +-----+ B |
| |------------|Hk_Bi|-+-----------|Hs_Bi|----+
+-----+ +-----+ +-----+

where:
F is the Funding transaction,
CC is the Cooperative Close transaction,
In_{A|B} is {Alice's|Bob's} Individual transaction,
St_{A|B}i is {Alice's|Bob's} State transaction for state i,
C_{A|B}i is {Alice's|Bob's} Commitment transaction for state i,
Hk_Bi is Bob's HTLC-kickoff transaction for state i,
Hs_Bi is Bob's HTLC-success transaction for state i, and
Hp_Bi is Bob's HTLC-payment transaction for state i.

Requirements for output cases are as follows:
A: Alice's signature,
B: Bob's signature,
AB: Alice's and Bob's signatures,
pckey{A|B}i: a signature using a per-commitment key for revoking
{Alice's|Bob's} state i transaction,
hp(X): the hash preimage of X,
tsd{A|B}: a relative delay equal to {Alice's|Bob's} to_self_delay
parameter,
tsdAB: a relative delay equal to max(tsdA, tsdB), and
eAB: an absolute timelock equal to the expiry of the HTLC in this hop.

Extensions
==========

If a party accidentally puts on old State transaction on-chain, they only lose 
the penalty amount that is the output of that transaction (and potentially some 
of the minimal values of that transaction's HTLC control outputs).
However, once their State transaction has been revoked, they've lost the 
ability to force a unilateral close of the channel after the Funding 
transaction is on-chain.
To address this, it's possible to add a Trigger [2] transaction that spends the 
output of the Funding transaction.
After the Trigger transaction has been on-chain for 3tsdAB (in order to allow 
the other party to put their Commitment transaction on-chain), the 
Decker-Wattenhofer protocol [3] can be used to settle the channel.

The FFO protocol shows how a channel's HTLCs can be resolved on-chain without 
putting its Funding transaction on-chain, and thus without closing the channel 
factory.
The party that went on-chain can settle the channel and its HTLCs correctly, 
even if their partner is malicious.
However, the most likely reason a party goes on-chain is that their partner is 
unintentionally unavailable, rather than malicious.
When the unavailable partner becomes available again, the two parties could 
choose to re-start operating the channel, and that's possible because the 
channel's funds haven't been distributed.
In particular, the party that went on-chain can use the unspent first output of 
their State transaction to play the role of their Individiual transaction's 
output as they resume operating the channel.
This output has slightly less value, as it's sized for the penalty amount and 
doesn't have additional funds for HTLC control outputs, but it seems reasonable 
to reduce the penalty amount that they will have to pay, given that it was the 
other party's unavailability that forced them to go on-chain.

Watchtower-Freedom And One-Shot Receives For Casual Users
=========================================================

The WF protocol modified the current Lightning protocol to allow casual users 
to operate without watchtowers and to perform one-shot receives.
A similar approach can be used to modify the FFO protocol to achieve the same 
goals, resulting in the FFO-WF protocol.

Consider a casual user Alice and her dedicated channel partner Bob.
Like the WF protocol, the FFO-WF protocol adds a relative delay before Alice 
can time out an HTLC offered to Bob, allowing Bob to stay off-chain after the 
HTLC's expiry, thus tolerating Alice's intentional unavailability.
As in the FFO protocol, in the FFO-WF protocol only one of the two parties' 
State transactions has an HTLC control output for each HTLC that is outstanding.
However, unlike the FFO protocol, Alice's State transaction has the HTLC 
control outputs for all HTLCs, even those offered to Bob.
The control of the HTLCs offered to Bob is moved to Alice's State transaction 
in order to allow Alice to force Bob to produce a receipt (or to not receive 
payment) by putting her State transaction on-chain.
While this solves the problem of forcing receipts, it creates a risk that Alice 
will never put her State transaction on-chain, thus preventing Bob from 
receiving payment for HTLCs offered to him.
This risk is solved by modifying Bob's Commitment transaction to ignore the 
HTLC control results and to pay all HTLC amounts (both those offered by him and 
those offered to him) to Bob, but delaying Bob's State and Commitment 
transactions enough that Alice can always get her State and Commitment 
transactions on-chain, thus resolving the HTLCs correctly (as she is 
incentivized to do, given Bob's Commitment transaction).

In order to support one-shot receives for Alice, she is able to submit her 
State and HTLC-success transactions as a single package, without any relative 
delay between them.
This creates a risk that she will submit them well after the HTLC's expiry, 
thus allowing her to receive payment without meeting the terms of the HTLC.
This risk is solved by requiring Alice's HTLC-success transaction to also spend 
a new control output in Bob's Individual transaction, and allowing Bob to spend 
that new control output with an HTLC-timeout transaction after the HTLC's 
expiry (thus blocking Alice's HTLC-success transaction).
This design creates another issue, namely the possibility of Bob using an old 
HTLC-timeout transaction (or any other transaction) to spend the new control 
output and block Alice's HTLC-success transaction before the HTLC's expiry.
This final issue is solved by having each HTLC output in Alice's Commitment 
transaction default (after a sufficient relative delay) to paying her for the 
HTLC offered to her unless Bob's corresponding HTLC-timeout transaction is 
on-chain.

The FFO-WF protocol, with a single HTLC outstanding from dedicated user Bob to 
casual user Alice, is shown below:

+-+ AB +----+ A
|F|----+-----------------------------| CC |----
+-+ | | |
. | | B
. | |----
. +----+
| tsdB & AB +----+ A
+-----------------------------|C_Ai|----
| | |
| | | B
| | |----
| tsdB & A | | tsdAB & A
| +-----------------| |-----+------------
| | +----+ |
| | | AB +-----+ B
| | +-----------|Hr_Bi|----
| | | |
| | B | |
| | +--| |
| | | +-----+
| tA+B & AB | +----+ A |
+-----------------------------|C_Bi|---- |
| | | | |
. | | | B |
. | | |---- |
. | tA+B & B | | |
| | +-------------| | |
V | | +----+ |
| | |
+----+ A +-----+ | | pckeyAi |
|In_A|----|St_Ai|--+-------------- |
+----+ | | | |
| | | hp(X) & A +-----+ A |
| | ---------------------|Hs_Ai|---- |
+-----+ | | | |
| B | | |
| +--| | |
| | +-----+ |
+----+ (Li)&B +-----+ | pckeyBi | |
|In_B|---------|St_Bi|-+---------- | |
| | +-----+ | |
| | | (eAB) & B +-----+ |
| |------------------------------+------------|Ht_Bi|-+
+----+ +-----+

where notation matches the figure above, plus:
Hs_Ai is Alice's HTLC-success transaction for state i,
Ht_Bi is Bob's HTLC-timeout transaction for state i,
Hr_Bi is Bob's HTLC-refund transaction for state i,
tA+B equals tsdA + tsdB, and
Li is an absolute locktime that is tsdA in the future when state i is
created.

Related Work
============

The protocols presented here are designed to make efficient use of channel 
factories for Lightning.
The concept of channel factories and the most efficient published protocol for 
a channel factory were created by Burchert, Decker and Wattenhofer [2].

Towns proposed adding a new opcode to Bitcoin, called TAPLEAF_UPDATE_VERIFY 
(TLUV), that would support (among other things) the ability to remove one party 
from a CoinPool without having to close the CoinPool [7], and ZmnSCPxj noted 
that this opcode could also be used to remove one channel from a factory 
without closing the factory [8].
Those proposals differ from the protocols presented here in that they require a 
change to Bitcoin.

The protocols presented here use HTLC-timeout and HTLC-success transactions to 
resolve HTLCs before the channel's Funding transaction has been put on-chain, 
thus reducing the expiry of those HTLCs.
This idea is analogous to, and inspired by, the Lightning protocol's use of 
HTLC-timeout and HTLC-success transactions to resolve HTLCs before their 
associated Commitment transaction has been verified to be unrevoked [1].

The PFO, FFO and FFO-WF protocols are based on the TP protocol presented by Law 
[5].
The techniques for supporting watchtower-freedom and one-shot receives in the 
FFO-WF protocol are based on those presented by Law in [4] and [5].

Conclusions
===========

This post presents channel protocols that are optimized for use within channel 
factories.
The protocols make the resolution of HTLCs in the channels independent of the 
latency to close the channel factory.
The FFO and FFO-WF protocols also allows HTLCs to be resolved on-chain without 
closing the channel factory.

If the FFO protocol is used in channels owned by pairs of dedicated users and 
the FFO-WF protocol is used in channels with a casual user:
* casual users do not require watchtowers,
* casual users can use one-shot receives,
* dedicated users can use watchtowers with logarithmic storage,
* all users can have tunable penalties,
* all channels can have HTLCs with expiries that are independent of the latency 
of closing the factory that created them, and
* all channels can resolve their HTLCs without closing the factories that 
created them.

It's hoped that these factory-optimized protocols will allow channel factories 
to become commonly-used, thus improving Bitcoin's scalability.

Regards,
John

References
==========

[1] BOLT specifications, available at 
https://github.com/lightningnetwork/lightning-rfc.
[2] Burchert, Decker and Wattenhofer, "Scalable Funding of Bitcoin Micropayment 
Channel Networks", available at http://dx.doi.org/10.1098/rsos.180089.
[3] Decker and Wattenhofer, "A Fast and Scalable Payment Network with Bitcoin 
Duplex Micropayment Channels", available at 
https://tik-old.ee.ethz.ch/file/716b955c130e6c703fac336ea17b1670/duplex-micropayment-channels.pdf.
[4] Law, "Watchtower-Free Lightning Channels For Casual Users", available at 
https://github.com/JohnLaw2/ln-watchtower-free.
[5] Law, "Lightning Channels With Tunable Penalties", available at 
https://github.com/JohnLaw2/ln-tunable-penalties.
[6] Law, "Factory-Optimized Channel Protocols For Lightning", available at 
https://github.com/JohnLaw2/ln-factory-optimized.
[7] Towns, "TAPLEAF_UPDATE_VERIFY covenant opcode", available at 
https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019419.html.
[8] ZmnSCPxj, "Channel Eviction From Channel Factories By New Covenant 
Operations", available at 
https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-February/003479.html.

Sent with [Proton Mail](https://proton.me/) secure email.
_______________________________________________
Lightning-dev mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev

Reply via email to