系统解读Fiber:把闪电网络嫁接到CKB上的宏大实验
文摘
2024-09-01 14:59
广东
作者:Faust & Nickqiao,极客web38月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资产,只能间接支持稳定币。此外,由于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的话题推出系列文章,大家敬请期待。