# Lighting Network Timeout-Trees
## Metadata
**Status**:: #x
**Zettel**:: #zettel/literature
**Created**:: [[2023-11-21]]
## Synopsis
[[John Law - Scaling Lightning With Simple Covenants (Highlights)]] 是个很有趣的解决创建闪电通道受到区块链 TPS 限制的提案。它需要使用到 HTLC 和 Covenant。
- HTLC: 即在某个时间后才能执行
- Covenant: 简单说就是一个 UTXO 的解锁需要花费这个 UTXO 的交易满足一些条件
Timeout-Tree 就是一个特殊的 UTXO,有两种方式被花费:
- 使用 HTLC,在某个时间 T 之后可以由 Bob 单方解锁具没有其它 Covenant 限制条件
- 使用 Covenant,限制 UTXO 可以分裂出来一系统 Bob 和用户 Pi 之间的 channel UTXO,其中 Bob 拥有余额 Ni, Pi 拥有余额 0. 这里分裂的结构是可以优化的,比如做成树状结构,这样有用户退出里不需要把所有的 channel UTXO 都创建出来,可以减少链上的消耗。注意这里可以创建的 channels 必须要保证总额不超过 UTXO 本身的额度,不然可能会出现所有用户都足额退出时有人没有余额可退。

使用 Covenant 分裂出来的那些 channel UTXO 则能被用来做为 channel 用于 Bob 和 Pi 在链外调整余额。
对于用户 Pi 来说,有以下几种退出方法:
- 自己在 channel 里余额为 0,不需要任何操作。等 Timeout-Tree 到期 Bob 把所有余额回收。
- 自己在 channel 里余额不为 0
- 在 HTLC 到期前提款。把自己的 channel cell 创建出来然后走正常的 light network 退出的流程。
- 在 HTLC 到期前通过 lighting network 把 channel 里的钱转给自己的其它 channel,比如一个新的 HTLC 剩余时间更长的 channel 中。
- 虽然定期转到一个新的 Timeout-Tree 对用户来说有很大的负担,但是这一块是我觉得很神奇的地方,相当于用户临时租了一条 channel,到期之前再重新租一条 channel,把余额转到新的 channel 中,而这所以的操作都在链下。链上只需要定期刷新 Timeout-Tree。对于中间人 Bob 只需要维护两个 Timeout-Tree UTXOs 交替更新即可。
如果用户 Pi 忘记提款或者通过 lighting network 转移余额,那么在该 Timeout-Tree 中的余额就丢失了。
Timeout-Tree 在理想情况下,所有用户的余额都被转移到新和 Timeout-Tree 的 channel 中去了,Bob 只需要回收整个 Timeout-Tree UTXO 然后用于任何用途,比如创建新的 Timeout-Tree。而一个 Timeout-Tree 可以同时创建大量的 lighting channel。
## References
- [Timeout Trees: A Solution To Scaling Lightning Network LSPs](https://bitcoinmagazine.com/technical/timeout-trees-a-solution-to-scaling-lightning-network-lsps)
- [Scaling Lightning With Simple Covenants](https://lists.linuxfoundation.org/pipermail/lightning-dev/2023-September/004092.html)