使用 Statechains 的链下闪电通道

本文档描述了如何使用 MercuryWallet 中实现的 statechain 方法构建 Poon-Dryja 闪电通道,而无需依赖链上交易。该协议不需要对闪电网络协议进行任何更改,只需要对 MercuryWallet statechain API 进行简单的增强。该方案结合statechain和闪电网络,实现链下UTXO转移和闪电通道转移。

bLIP: XXXX 标题:状态通道 状态:草案 作者:Nicholas Gregory <nicholas@commerceblock.com> Ruben Somsen <rsomsen@gmail.com> Tom Trevethan <tom@commerceblock.com> 创建时间:2022-XX-XX 许可证:GPL 3.0


## 摘要

本文档描述了如何使用在 MercuryWallet 中实现的 statechain 方法,在不依赖链上交易的情况下构建 Poon-Dryja 闪电通道(lightning network)。该协议不需要对 lightning network 协议进行任何更改,只需要对 MercuryWallet statechain API 进行简单的增强。

## 动机

MercuryWallet statechain 系统有助于在各方之间转移比特币(或基于 Elements 的)未花费交易输出(UTXO)的所有权,而无需执行链上交易。这是通过在所有者和 statechain 实体 (SE) 之间共享 UTXO 的单个密钥,并提供一个 time-locked 的备份交易来实现的,该交易将 UTXO 返回给所有者的完全保管。

将此功能与支付通道结合使用可提供两个潜在的好处:
1. 能够“展开”一次固定大小的 state coin UTXO。
2. 能够随时离线转移闪电通道。

## 原理

statechain 的安全模型基于某些假设。最初,存在一个 SE 和一个所有者(Alice),他们都没有完整的底层 UTXO 私钥。在将资金存入 statechain UTXO 之前,Alice 将与 SE 合作生成一个备份交易,该交易被 timelocked 到未来的区块高度。如果 SE 离线,Alice 可以在 timelock 到期时收回她的资金。当 Alice 将 UTXO 转移给新的所有者(Bob)时,Alice 和 SE 协同生成一个新的备份交易,该交易将 coin 支付给 Bob,其 timelock 在 Alice 最初的 timelock 之前到期,并且 SE 使用 Bob 更新其密钥份额。每次新的 peg-out 交易时,timelock 都会递减。虽然这确实限制了 statecoin 可以转移的总次数,但此 timelock 确保 Bob 的 peg-out 交易可以在 Alice 的交易之前得到确认。最终,Bob 相信 SE 和 Alice 不会勾结,或者 SE 和 Alice 不是同一个人。

此 BLIP 侧重于在 statecoin peg-out 交易中创建闪电通道的模型。由于此通道在链上不可见,因此将被视为存在于零确认通道的子类别中。

然后,“statechannel”将具有以下属性:
1. state chain peg-out(提款或备份)交易将打开一个闪电通道。
2. 闪电通道将被 timelocked。
3. 在没有 SE 合作的情况下关闭通道将需要 timelock 到期(即备份 tx 被确认)。
4. 每次更新 peg-out 交易都会导致 timelock 递减。
5. 没有 timelock 的 peg-out 交易可以与 SE 合作签署,但必须经过双方授权(同意通道余额)。SE 被信任来执行此操作。
6. 如果任何一方拥有完整的通道余额,则可以将 statecoin 离线转移给新的所有者(Alice 或 Bob)。

## 规范

以下序列指定了“state channel”的创建和关闭过程:

1. Alice (A) 将一个 statecoin 存入 SE。A 有一个密钥份额 (`S_A`),SE 有另一个密钥份额 (`S_SE`) - 完整的私钥是 `S_A*S_SE`。SE 和 A 合作共同签署(通过 2 方 ECDSA)Alice 的备份交易,`nLocktime` 的区块高度为 `b0`。
2. A 找到支持 `option_state_channel` 的通道交易对手 Bob (B)。
3. A 和 B 分别生成密钥 `A_T` 和 `B_T`。
4. A 和 B 交互以生成共享密钥 `T`,通过 Diffie-Helman 密钥交换(使用 `A_T` 和 `B_T`)。
5. A 和 B 与 SE 共享公共值 `A_T.G`、`B_T.G` 和 `T.G`(其中 `G` 是 secp256k1 生成点)。这些用于验证 SE 的共同签名。
6. A 和 SE 合作生成 statechannel peg-out 交易(由 B 授权),`nLocktime` 为 `b0 - d`(其中 `d` 是递减值)。此交易创建通道(即 2-of-2 多重签名输出,用于 `A_T.G`、`B_T.G`)。
7. A、B 和 SE 完成 statecoin 转移(即 SE 密钥份额已更新以与 `T` 组合)。
8. A 和 B 现在可以向网络宣布通道已打开。在 `open_channel` 消息中,`temporary_channel_id` 应指定 timelocked 的 peg-out 交易,并且 `open_channel_tlvs` 必须反映此通道是一个 `option_state_channel`。

A 和 B 可以随时请求 SE 共同签署没有 timelock 的 peg-out 交易。SE 确保 A 和 B 都授权输出地址和金额。如果将非 timelocked 的 peg-out 交易广播到网络,Alice 或 Bob 必须在 `funding_created` 消息中指定新的通道 outpoint,因为 `txid` 已更改。

如果 Alice 和 Bob 希望以虚拟方式关闭他们的 statechannel(并且所有资金都已转移到通道的一侧),则 A 和 B 可以使用 `A_T` 和 `B_T` 签署 statecoin 转移消息。一旦 SE 验证了此消息,就可以使用正常的 statecoin 转移协议将 statecoin 从传输到 `SE+A` 或 `SE+B`。当接收方验证转移时,他们将向公共 lightning network 宣布 `SE+T` SC 的关闭。

State Channel (SC) 步骤:
 _______           S_A*S_SE              _____________
|       |&lt;----------------------------->|             |
|       |          backup_tx (S_A)      |             |
|   A   |&lt;----------------------------->|     SE      |       &lt;-  A 存款 statecoin
|       |          nLocktime = b0       |             |
|_______|                               |_____________|

 _______                                     A_T.G                                     _______ 
|       |---------------------------------------------------------------------------->|       |
|       |                                    B_T.G                                    |       |
|   A   |&lt;----------------------------------------------------------------------------|   B   |     &lt;- 创建共享密钥 (T)
|       |                                T = A_T*B_T.G                                |       |
|       |&lt;--------------------------------------------------------------------------->|       |
|       |                                                                             |       |
|       |             A_T.G              _____________             B_T.G              |       |
|       |------------------------------>|             |&lt;------------------------------|       |
|       |        backup_tx (A+B)        |             |         backup_tx (A+B)       |       |     &lt;- 创建 state_channel (S_SE*T)
|   A   |&lt;----------------------------->|     SE      |&lt;----------------------------->|       |
|       |        nLocktime = b0 - d     |             |         nLocktime = b0 - d    |       |
|_______|                               |_____________|                               |_______|

 _______                                                                               _______ 
|       |                                                                             |       |
|       |                                     A+B                                     |       |
|   A   |&lt;--------------------------------------------------------------------------->|   B   |     &lt;- 更新 state_channel
|       |                                                                             |       |
|_______|                                                                             |_______|   

 _______          Auth Sig(A_T)          _____________           Auth Sig(B_T)         _______ 
|       |------------------------------>|             |&lt;------------------------------|       |
|       |          Sig (S_SE+T)         |             |           Sig (S_SE+T)        |       |
|   A   |&lt;----------------------------->|     SE      |&lt;----------------------------->|   B   |      &lt;- 关闭 state_channel
|       |                               |             |                               |       |
|_______|                               |_____________|                               |_______|


## 普遍性

大多数节点可能对 State Channels 不感兴趣,但这没关系,因为对于这种方法有用,只需要两方有兴趣建立这样的通道来支持它,并且它们直接相互连接。

## 向后兼容性

State Channel 协议不向后兼容。

## 致谢

特别感谢 Antoine Riard & Shinobi 审查并为此提案提供反馈。

## 参考实现

待办事项

[Original Statechains Paper]: https://github.com/RubenSomsen/rubensomsen.github.io/blob/master/img/statechains.pdf

>- 原文链接: [github.com/commerceblock...](https://github.com/commerceblock/blip-XXXX/blob/main/blip-XXXX.md)
>- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
commerceblock
commerceblock
江湖只有他的大名,没有他的介绍。