何时反转?盘点山寨币们即将面临的 10
63 2024-09-03
这可能是关于 Fiber 的研报中最系统的一篇,读过后你能明白 Fiber 在讲多么宏大的故事。
撰文:Faust & Nickqiao,极客 web3
8 月 23 日,CKB 官方发布了基于 CKB 的闪电网络方案——Fiber Network(光纤网络),这则新闻一经传播,很快便在社区里引发了热议,让 CKB 价格在一天内快速上涨了近 30%。新闻之所以会引起强烈反响,主要在于闪电网络具有强大的叙事魅力,而CKB 的 Fiber 对传统闪电网络进行了方案升级,针对后者做出了诸多改进。
比如,Fiber 可以原生支持多类型资产,如 CKB、BTC、稳定币等,而且 CKB 的手续费远比 BTC 低、响应速度快,Fiber 可以借此在 UX 方面取得突破。而在隐私和安全层面,Fiber 也做出了不少优化。
此外,Fiber 和 BTC 闪电网络可以互联互通,形成更大的 P2P 网络,此前的线下活动中,CKB 官方甚至表示,将在 Fiber 和闪电网络中设置 10 万个物理节点,以促进 P2P 支付网络的完善与进步。毫无疑问这是一个空前宏大的故事。
如果 CKB 官方的愿景得以在未来实现,无论对闪电网络还是对 CKB 乃至比特币生态而言,都将是巨大的利好。根据 mempool 的数据,当前 BTC 闪电网络中安置了 3 亿多美元的资金,节点数量约为 1.2 万个,彼此之间构建了近 5 万条支付通道。
而在 spendmybtc.com 上,我们还可以看到越来越多的商家在支持闪电网络收付款,只要 BTC 的被认可度越来越强,闪电网络和 Fiber 等链下支付方案的崛起势能必将与日俱增。
本着对 Fiber 的技术方案进行系统性解读的目的,《极客 Web3》写作了这篇关于 Fiber 整体方案的研报。作为基于 CKB 的闪电网络实现方案,Fiber 的原理与比特币闪电网络大面上一致,但在很多细节上进行了优化。
Fiber 的总体架构包括以下四个核心部分:支付通道、WatchTower、多跳路由、跨域支付。下面我们先展开解释下最重要的「支付通道」。
支付通道本质是将转账 / 交易都挪到链下处理,过段时间再将最终状态提交到链上进行「结算」。由于交易是在链下即时完成的,往往可以摆脱 BTC 等主链的性能限制。
假设 Alice 和 Bob 共同开启了一个通道,他们先在链上构建多签账户,向里面存一些钱,比如 Alice 和 Bob 各存入 100 块,作为在链下通道中各自的余额。接下来双方可以在通道里进行多笔转账,等退出通道时,再把最终的余额同步到链上,由多签账户给双方打款,即「结算」。
比如说,双方开始时各有 100 块,之后 Alice 向 Bob 转账 50,之后 Alice 又向 Bob 转了 10 块钱,而后 Bob 又给 Alice 转了 30 块,最终双方余额变为:Alice—70,Bob—130。大家不难发现,二人的余额总和不变,上图中算盘珠子来回推拉的案例可以很好解释这点。
如果有一方退出通道,就把当前的余额 Alice:70/Bob:130 同步到链上,把多签账户中的 200 块钱按各自余额转给二人,完成结算。上述流程看起来简单,但在实操中要考虑很多复杂情况。
首先,你其实并不知道对方想在何时退出通道,拿上面的例子来说,Bob 可以在第二笔转账完成后就退出,亦或是第一笔转账后就退出,而支付通道不会对此强制要求,是允许参与方自由退出的。要实现这一点,要假设随时会有人退出,任意一方都可能向链上提交最终余额,进行结算。
所以有一个「承诺交易」的设定,「承诺交易」用于声明通道内双方的最新余额,每笔转账发生时都会生成对应的「承诺交易」。你如果要退出通道,可以向链上提交最新的一笔「承诺交易」,把自己应得的钱从多签账户中抽出来。
我们可以记下这个结论:承诺交易用于对通道中双方的余额进行链上结算,任何一方随时可以把最新的承诺交易上链,然后退出通道。
但这里有一个重要的作恶场景:Bob 可以把过期的余额和承诺交易提交到链上,比如上图中的 Commit Tx3 生成后,Bob 的余额为 130,但 Bob 为了给自己牟利,把过期的 Commit Tx2 提交到链上,声明自己的余额是 160,而这个余额状态不是实时的,这就是典型的「双重支付」。
为了防止此类双花场景,要有相应的惩罚措施,关于惩罚措施的设计恰好是整个 1 对 1 支付通道的核心,理解了这部分才能真正理解支付通道。在通道的设计里,如果任何一方把过期的状态和 Commit Tx 提交到链上,不但不会如愿以偿,反而会被另一方把全部资金都抽走。
这里用到了「不对称的承诺交易」和「撤销密钥」,这两个概念非常重要。我们先对「不对称的承诺交易」进行解释。以前面的 Commit Tx3 为例,下图是承诺交易的示意图:
这笔承诺交易由 Bob 构造,然后发给 Alice 让对方自行处理。如图所示,这就是一笔比特币转账,声明把多签账户中 70 块钱给 Alice,130 块钱给 Bob,但钱的解锁条件「不对称」,Alice 面对的限制更苛刻,对 Bob 更有利。
Alice 收到 Bob 构造的承诺交易后,可以附上自己的签名满足 2/2 多签,之后 Alice 可以主动把「承诺交易」提交上链,这样就可以退出通道,如果她不这么做就可以继续在通道中转账。
这里我们要注意:这笔承诺交易是 Bob 主动构造的,其中条件对 Alice 不利,Alice 只能接受 / 拒绝,我们要想办法留给 Alice 一些自主权。在支付通道的设计中,只有 Alice 自己能把「对自己不利」的承诺交易放到链上触发,这是因为承诺交易要凑足 2/2 多签,Bob 在本地构造交易后只有自己的签名,没有 Alice 签名。
而 Alice 可以「只接收 Bob 的签名,但不把自己的签名发给他」,这就好比一份对你不利的合同,需要你和别人双签,对方先签名后把文件给你,你可以不让对方拿到签名。你想让合同生效就签名然后公示,不想生效就不签名或不公示。显然在上面的案例中,Alice 有办法限制 Bob。
然后到了重点:通道中每次有转账发生后,会有一对承诺交易出现,有两个类似镜像的版本,就像下面这样。Alice 和 Bob 可以分别构造对自己有利的承诺交易,在其中声明余额 / 退出时应得的金额,然后把交易内容发给对方处理。
有趣的是,这两笔承诺交易声明的「退出时所得金额」相同,但取款条件不同,这正是前文「不对称的承诺交易」的来历。
前面我们解释过,每笔承诺交易都要 2/2 多签才能生效,Bob 本地构造的、对自己有利的承诺交易不满足 2/2 多签,而满足 2/2 多签的承诺交易扣在 Alice 手上,Bob 没法提交,只能由 Alice 提交,这就形成了制衡。反过来也是类似的道理。
如此一来,Alice 和 Bob 只能主动提交对自己不利的承诺交易,只要双方中有一人把 Commit Tx 提交上链且生效,通道就被关闭。而回到最开始说的「双重支付」场景,如果有人把过期的承诺交易提交上链,会发生什么呢?
这里要提到一个叫「撤销密钥」的东西。假如 Bob 把过期的承诺交易提交上链,Alice 可以通过撤销密钥把 Bob 应得的钱提走。
我们看下面这张图,假设最新的承诺交易是 Commit Tx3,Commit Tx2 过期,如果 Bob 把过期的 Tx2 提交到链上,Alice 可以通过 Tx2 的撤销密钥把 Bob 的钱抽走(Alice 要赶在时间锁范围内行动)。
而对于最新的 Tx3,Alice 没有其撤销密钥,只有在未来 Tx4 出现后,Alice 才能获取 Tx3 的撤销密钥。这是由公私钥密码学和 UTXO 的特性决定的,碍于篇幅本文不会深入解释撤销密钥的实现原理。
我们可以记住结论:Bob 只要敢把过期的承诺交易提交上链,Alice 就可以用撤销密钥把 Bob 的钱拿走,作为惩罚。反过来如果 Alice 作恶了,Bob 也可以如此惩罚她。这样一来,1 对 1 的支付通道可以有效避免双重支付,只要参与方都是理性人,就都不敢作恶。
关于支付通道这块,基于 CKB 的 Fiber 相比于比特币闪电网络有大幅优化,能够原生支持多类型资产的转账 / 交易,比如 CKB、BTC 和 RGB++ 稳定币,而闪电网络只能原生支持比特币,Taproot Asset 上线后比特币闪电网络还是无法原生支持非 BTC 资产,只能间接支持稳定币。
图片来源:Dapangdun
此外,由于 Fiber 依赖的 Layer1 主链是 CKB,打开和关闭通道的操作消耗的手续费低得多,不会像 BTC 闪电网络那样磨掉用户很多手续费,这是其在 UX 上的明显优势。
上文中讲到的撤销密钥有个问题:通道参与方要时刻监视对方,防止对方偷摸把过期的承诺交易提交上链。但没人能保证 24 小时在线,如果你离线的时候对方作恶,该怎么办?
对此,Fiber 和比特币闪电网络都有 WatchTower 瞭望塔的设计,会帮用户全天候监视链上活动。一旦通道中有人提交了过期的承诺交易,WatchTower 会及时处理,从而确保通道和资金的安全。
具体的解释如下:对于每笔过期的承诺交易,Alice 或 Bob 可以事先把对应的惩罚交易构造好(用撤销密钥处理过期的承诺交易,受益人声明为自己),然后把惩罚交易的明文发给 WatchTower。一旦 WatchTower 监测到有人把过期的承诺交易提交上链,它就会把惩罚交易也提交上链,进行针对性的惩罚。
Fiber 为了保护通道参与者的隐私,只让用户把「过期承诺交易的 hash+ 惩罚交易明文」发给 WatchTower,这样 WatchTower 一开始并不知道承诺交易的明文,只知道其 hash。除非有人真的把过期承诺交易提交到链上,WatchTower 才会看到明文,然后紧随其后把惩罚交易提交上链。这样一来,除非真的有人作恶,否则 WatchTower 不会看到通道参与者的交易记录(即便看到了也只能看到其中一笔)。
这里我们要提一下 Fiber 相比于比特币闪电网络的优化。上述与撤销密钥相关的惩罚机制被称为「LN-Penalty」,而比特币闪电网络的 LN-Penalty 有明显缺点:WatchTower 要保存所有的过期承诺交易 Hash 和对应的撤销密钥,这会造成不小的存储压力。
早在 2018 年,比特币社区就提出了一种叫「eltoo」的方案来解决上述问题,但需要比特币分叉支持 SIGHASH_ANYPREVOUT 操作码。思路是当过期的承诺交易上链后,最新的承诺交易能对其进行惩罚,这样用户只保存最新的承诺交易即可。但是 SIGHASH_ANYPREVOUT 操作码至今还未激活,该方案迟迟不能落地。
而Fiber 实现了 Daric 协议,修改了撤销密钥的设计,让同一个撤销密钥适用于多笔过期的承诺交易。这样可以大幅减少 WatchTower 以及用户客户端的存储压力。
前面讲的支付通道仅适用于 1 对 1 交易的场景,而闪电网络支持多跳支付,即通过中间节点来路由,让未直接建立通道的两方间能够转账,比如说 Alice 和 Ken 没有通道,但 Ken 和 Bob 间有通道,Bob 和 Alice 间有通道,Bob 就可以作为 Alice 和 Ken 之间的中间节点,让 Alice 和 Ken 之间可以发生转账互动。而「多跳路由」就是指通过多个中间人搭建转账路径。
「多跳路由」能够增强网络的灵活性和覆盖范围。不过,发送方需要了解所有的公共节点和通道的状态。在 Fiber 中,所有公开通道即网络结构是完全公开的,任何一个节点都可以获知其它节点掌握的网络信息。由于闪电网络中整个网络的状态是不断变化的,Fiber 会使用 Dijkstra 最短路径算法找到最短路由路径,让中间人数量尽可能的少,然后在两方之间架设转账路径。
不过这里面要解决中间节点的信用问题:你怎么保证他是诚实的,比如前面提到 Alice 和 Ken 之间有中间人 Bob,Alice 现在要给 Ken 转账 100 块,Bob 随时可能扣住这笔钱。对此要有办法防止中间人作恶,HTLC 和 PTLC 便用于解决此类问题。
假设 Alice 要向 Daniel 付款 100 块,但他们之间没有建立通道。而 Alice 发现,可以通过 Bob 和 Carol 这两个中间人向 Daniel 付款。这里面要引入 HTLC 作为支付渠道,首先 Alice 向 Daniel 发起请求,然后 Daniel 发给 Alice 一个哈希 r,但 Alice 不知道 r 对应的明文 R。
之后,Alice 在与 Bob 的通道中,通过 HTLC 构造支付条款:Alice 愿意付给 Bob 102 块,但 Bob 要在 30 分钟内说出密钥 R,否则 Alice 会把钱撤回。同理 Bob 再跟 Carol 创建 HTLC:Bob 会向 Carol 支付 101 块,但 Carol 要在 25 分钟内说出密钥 R,否则 Bob 会把钱撤回。
Carol 如法炮制,在和 Daniel 的通道中创建 HTLC:Carol 愿意支付 100 块,但 Daniel 要在 20 分钟内告诉她 R 的明文,否则钱会被 Carol 收回。
Daniel 明白,Carol 索要的密钥 R 其实是 Alice 想要的,因为除了 Alice 没人会在意 R 的内容是啥。所以 Daniel 会配合 Carol,告诉她 R 的内容,并从 Carol 那拿到 100 块,这样子 Alice 就实现了目标:给 Daniel 100 块钱。
之后的事情不难想象:Carol 把密钥 R 告诉 Bob,拿到 101 块钱;Bob 再把密钥 R 告诉 Alice,拿到 102 块钱。我们观测所有人的得失,可以看出 Alice 失去 102 块钱,Bob 和 Carol 净赚 1 块钱,Daniel 得到 100 块。这里面 Bob 和 Carol 赚的 1 块钱就是它们从 Alice 那抽的手续费。
即使上面的支付路径中某个人卡住,比如 Carol 没有把密钥 R 告知下游的 Bob,也不会让 Bob 有损失:过时间后 Bob 可以把构建的 HTLC 撤回。对于 Alice 也是同理。
但闪电网络也有问题:路径不宜过长,如果路径太长中间人太多,会降低付款的可靠性:某些中间人可能离线,亦或是余额不足以构建特定 HTLC( 比如前面案例中每个中间人至少要有 100 多块钱 )。所以在路径中每增加一个中间节点,都会提高出错的可能性。
此外,HTLC 可能泄露隐私。虽然洋葱路由可以适当保护隐私,比如把每一跳的路由信息都加密,除了最初发起者 Alice 外,每个人只知道相邻的上下家,不知道完整的路径,但实际上 HTLC 还是容易被推断出关联性。我们以上帝视角看下面这个路径
假设 Bob 和 Daniel 是同一实体控制的两个节点,每天都会收到很多人发来的 HTLC。它们发现,Alice 和 Carol 每次发来 HTLC 后,要获知的密钥总是一致的,而与 Daniel 相连的下家 Eve 总是知道密钥 R 的内容。因此 Daniel 和 Bob 能猜到,Alice 和 Eve 之间存在支付路径,因为它们总是和相同的密钥扯上关系,借此推断出 Alice 和 Eve 之间的关系并施加监视。
对此,Fiber 采用了 PTLC,在 HTLC 基础上进行了隐私改良,支付路径中每道 PTLC 都用不同的密钥来解锁,单纯观测 PTLC 索要的密钥无法判断出彼此的关联性。通过将 PTLC 与洋葱路由结合,可以让 Fiber 成为隐私支付的理想方案。
此外,传统的闪电网络存在「替代交易循环攻击」(replacement cycling attack)场景,可以让支付路径中间人的资产被盗。这一发现甚至让开发者 Antoine Riard 退出了闪电网络的开发工作。到目前为止比特币闪电网络尚未有根本措施解决这个问题,已然成为一个痛点。
目前,CKB 官方通过在交易池层面进行改良,可以让 Fiber 解决上述攻击场景。由于替代交易循环攻击及解决方案比较烧脑,本文不打算继续占用篇幅做出解释,感兴趣的可以阅读 BTCStudy 的下述文章以及阅读 CKB 官方的相关资料。
总体而言,无论是在隐私还是在安全层面,Fiber 都比传统的闪电网络进行了大幅改良。
利用 HTLC 和 PTLC,Fiber 可以和比特币闪电网络实现跨域支付,且能够保证「跨域行为的原子性」,即跨域相关的全部步骤要么全成功,要么全失败,不会有部分成功部分失败的情况。
跨域原子性有了保障后,可以保证跨域本身不会导致财产损失,这样可以让 Fiber 与比特币闪电网络互联起来,比如可以在 Fiber 和闪电网络组成的混合网络中搭建支付路径,直接在 Fiber 中向 BTC 闪电网络中的用户转账(接收端仅限 BTC),还可以在 Fiber 中用 CKB 和 RGB++ 资产在 BTC 闪电网络中换取等价比特币。
我们简单说下原理:假设 Alice 在 Fiber 网络内运行了节点,而 Bob 在比特币闪电网络中运行节点,Alice 想向 Bob 转账一些钱,它可以通过跨域中转商 Ingrid 实现这笔转账。Ingrid 会分别在 Fiber 和 BTC 闪电网络内运行节点,充当转账路径中的中间人。
如果 Bob 想收到 1 个 BTC,Alice 可以与 Ingrid 协商兑换比率,用 1 个 CKB 换 1 个 BTC。然后 Alice 在 Fiber 中向 Ingrid 发送 1.1 个 CKB,而后 Ingrid 在 BTC 闪电网络中向 Bob 发 1 个 BTC,而 Ingrid 会留下 0.1 个 CKB 作为手续费。
这里面具体的操作方式,其实就是在 Alice 和 Bob 与 Ingrid 之间建立支付路径,即 Alice—>Ingrid—>Bob,然后会用到 HTLC。类似道理其实前面有讲过,Bob 为了收到钱,必须告诉 Ingrid 密钥 R 的内容。一旦 Ingrid 获取了密钥 R,就可以解锁 Alice 锁在 HTLC 里的钱。
需要注意,这两笔分别发生于 BTC 闪电网络和 Fiber 中的跨域行为是原子性的,意味着要么两个 HTLC 都被解锁,跨域支付顺利执行。要么都不解锁,跨域支付失败,而不会出现 Alice 给了钱而 Bob 收不到钱的情况。
(其实中间人 Ingrid 可以在知道密钥 R 后不去解锁 Alice 的 HTLC,但这样受损的是 Ingrid 这个中间人,而不是用户 Alice,所以 Fiber 的设计对于用户是安全的)
这种方式不需要信任第三方,即可在不同的 P2P 网络间实现转账行为,几乎不需要任何修改。
前面我们提到,Fiber 支持 CKB 原生资产,以及 RGB++ 资产(尤其是稳定币),这使得它在即时支付场景中有极大潜力,更适合日常小额支付需求。
此外,比特币闪电网络有一个主要痛点,就是是流动性管理问题。大家可能记得我们最开始说的,支付通道中总体余额是固定的,若其中一方的余额耗尽,就没法向对方转账,除非对方先转钱给他,这个时候就要重新注入资金或打开新的通道。
此外,如果是在复杂的多跳网络中,某些中间节点余额不足无法向外转账,可能导致整个支付路径失败。这是闪电网络的痛点之一,对此的解决方案无外乎提供高效的流动性注入方案,确保大多数节点都能随时注入资金。
但是,在 BTC 闪电网络中,注入流动性、打开或关闭通道的步骤都在 BTC 链上进行,若 BTC 网络手续费极高,会对支付通道的 UX 产生不良影响。假设你想开启一个容量为 100 美元的通道,但建立通道的操作花掉 10 美元手续费,那这个通道在初始化时就磨了你 10% 的资金,这是让大多数人无法接受的;对于流动性注入等工作也是同理。
对此 Fiber 拥有非常显著的优势。首先 CKB 的 TPS 远比 BTC 高得多,手续费可以达到美分级别;其次,为了应对流动性不足导致无法转账的问题,Fiber 计划与 Mercury layer 合作推出新的解决方案,使得流动性注入的工作可以摆脱链上操作,解决 UX 和成本问题。
至此,我们系统的梳理了 Fiber 的总体技术架构,其和比特币闪电网络的大致对比总结如上图所示。由于 Fiber 和闪电网络本身涉及的知识点太多太杂,单纯一篇文章可能无法覆盖到方方面面,未来我们将针对闪电网络和 Fiber 的话题推出系列文章,大家敬请期待。