E09·Shall we build lightning?
曾汨: 听众朋友们大家好,欢迎收听《亿聪哲史》第九期。我是主播曾汨。
阿剑: 我是主播阿剑。这一期《亿聪哲史》有点特殊,因为这是第一次《亿聪哲史》有机会让两位主持人和一位嘉宾处在同一个物理空间里面展开这一期播客的录制。我们欢迎本期的嘉宾,YY。YY,你来介绍一下自己吧。
YY: 嗨,大家好,我是 YY。我现在是 Lightning Labs 的一名工程师,然后主要工作是负责 LND 的开发。
曾汨: 能给我们大家介绍一下你是怎么进入这个行业的吗?又为什么加入到了闪电网络的开发里面来?
YY: 进入这个行业这个故事会比较长,但是长话短说的话就是第一次应该是 2012 年然后听说到了比特币这个东西,一听说之后觉得跟我当时个人的对世界的理解也好,认知也好,非常契合,就觉得这个东西一定行。但是那个时候并不了解比特币的技术,因为我本人也并不是学计算机出身的,只是单纯地相信它会成功。后来就说想要知道这玩意儿到底能不能成功,想要自己实际验证一下,就开始慢慢地去学习计算机科学,学习软件工程这方面的内容和东西,一步一步走到这里。正式进入到这个行业大概应该算是 16 年吧,加入了北京的一家初创公司,也是专门做比特币的,在那边可能待了大概两年时间。第一次知道闪电网络也是那个时候,因为 17 年,当时闪电网络的算是几个白皮书的作者跑到了北京做了一次路演,然后那是第一次我知道了闪电网络这个东西,然后觉得这个东西非常有意思,但是以我当时的知识水平也并不足以完全理解它,而且那个时候也处于非常初始的阶段,然后后来跟我的一些前同事跑到杭州创业,创业的时候我们做了一家交易所,然后我是负责钱包充提那一块,叫 Wallet Engineer,那次是系统地了解到了闪电网络,因为当时我们想要支持和介入闪电网络,我就觉得这个东西非常可行,非常有意思,再到后来那个公司黄了,完了之后,我就是对整个币圈的状态就处在于我不想触碰任何其他跟比特币无关的东西。所以当时就其实也是有机缘巧合在里面了。当时去网上看了一下,在发展的一个就是闪电网络,另外一个叫 DLC,然后还有一个叫 Utreexo,就这三个东西,其实都是那个 MIT 教授做的。然后我其实就是一个一个的在做,先是了解了一下闪电网络,
就详细的了解一下它技术细节,写了几篇博客,然后开始贡献代码。然后紧接着去看了下那个 Utreexo 的 white paper,看完之后也贡献了一个一点代码。然后我还在贡献的时候呢,当时我们这个闪电网络实验室的人,我们 CEO 在那个 Twitter 上找到我,问我有没有在工作之类的,有没有兴趣加入他们,然后我就加入了他们。其实也有机缘巧合在里面,对。
曾汨: 其实比特币上有很多这种提升可扩展性的技术,闪电网络在你看到有什么魅力,比起其他的这些方案。
YY: 这个问题特别好,因为昨天晚上我还在想这个问题。我想了一圈,然后我觉得最尴尬的地方是,我好像不知道为什么其他的技术,这是最尴尬的地方。我的状态是自从 19 年完全进入闪电网络以后,我就很少再关注比特币怎么讲,甚至不是比特币生态以外,甚至闪电网络生态以外的发展。所以我其实是一个比较封闭的状态,说实话。因为作为一个工程师,我们可能大部分时间都在解决一些很枯燥的问题,解决一些 bug 啊,测试通不过啊这些,或者安全性问题。但是,我仔细的昨天想了一下这个问题,我觉得闪电网络很有意思的一个地方,我是把闪电网络和比特币做对比,就是一层和二层做对比的话,我觉得闪电网络是把一个多人大家的问题变成了两个人之间的问题,是我的理解。在早期,当时有一个叫 Omni,就是 USDT 的前身嘛,那个玩意儿其实也是跑在比特币上的,然后用 OP_RETURN 搞一个那个 hash,然后那个模型在我看来就是比较比较落后的模型,因为它就是要全网的人都在关心这样一个事情。然后到了闪电网络这里,我觉得这变得非常有意思,就是只有两个人之间需要关心这个事情,就是我跟你有个通道,我们关心这个通道就好,其他任何人都不需要来关心这个。我觉得这个模型在我看来是很有意思的模型。从理论上来讲的话,就往计算机理论扯一点,就比如说 CAP 那个模型,就是分布式的常用的讨论的不可能三角。然后比如说比特币这一层,我当时的理解就是它不会产生 partition,
也不会产生 consistency 的问题,它只是一个 availability 的问题,就是 infinite transaction,然后你需要等 10 分钟,或者早期的话甚至要等 6 个确认,等 60 分钟,它其实牺牲了一个你的 availability,然后来保证它整个交易的安全性。到了闪电网络这一层,它的 availability 特别高,consistency,也高,但它首先它就已经不是一个分布式的运算,它其实就是一个点对点的,我和你之间的问题。另外一个是它其实还是会产生 consistency 的问题或者说 partition 的问题,这一块我没想明白,因为我跟你两个状态是会有差别的,就任何时刻都会都可能有差别。这个差别我们就通过闪电网络的一些安全机制把它规避掉了。所以在我看来这个模型,从底层上来说我是非常认可的。所以我觉得它的优势可能也在于这里。还有一个优势就是,现在讲的比较多嘛,以前我们可能没有这个概念,现在叫做 Bitcoin Native,这就是完全的比特币原生态的东西。
阿剑: 但其实也有人认为如果用 CAP 来去理解比特币的共识的话,它更像是牺牲所谓的 consistency 来去保证它的 availability,因为 POW 共识是一个比如说我们现在刚有一个区块,但是这个区块它不是确定性的,不是说现在它一个区块一旦出现它的共识的一致性就不再可能被颠覆,它可能会后面会有一个区块给它竞争掉,但是它是有一个很强的 availability,就是它有一个很强的这个活性,对吧?我们可以有一种特别强大的力量可以保证的网络不分区的这个情况之下,它总是会不断地出现新的这个区块,并且让整个共识虽然它不会达到最终的那个 E,但是无限趋向的那个 E,这个是你刚刚说要用 CAP 来去解释比特币的这个共识。
YY: 对,这个理解也很有意思,我之前没有想过这样。对,如果从出块的角度来说,确实是你说的那样,consistency 就很大的概率就会有问题。对,当然现在可能概率比较小,早期的话概率就很大有问题,但其实我还想到另外一点,就比较天马行空了,就其实 partition 这一块我也想过,你说分叉币算不算 partition?
阿剑: 我觉得不算。就早期的 BTC 分叉出来一个 BCH 这种。我觉得不算,因为在我看来它等于是出现了一个新的共识的一个群体,或者说新的共识系统。它不再是原来那个,或者说它不尝试跟原来那群人达成共识,我是这么想的。
YY: OK,这么想也可以,就以共识的角度来说,它就分裂成了两个共识。对。OK,因为我的想法是它早期是一个比特币,后来还是你说的那个共识分裂了,可能共识分裂对我来讲就像那个 Network Partition 那种感觉一样。
阿剑: 其实 YY 刚刚对闪电网络的介绍当中其实有一些是我比较触动的一个点,就是 YY 自己说他可能压根就不太知道其他的一些扩展方案。可能对于一些听众来说他觉得这不可思议,但是对于我来说其实我完全能够理解。我首先声明我不觉得这有任何问题,我不觉得有任何问题,因为为什么?因为我们自己在了解比特币和闪电网络过程当中可以切身地体会到就是说你在这个事情上它是有多么大的工程的这个空间或者说改进的这个空间以及我们要去开发闪电网络它有一些非常 hardcore 非常坚实的理由。这些理由在我看来没有被任何其他东西挑战或者是打败过,包括我们现在其实已经可以看到哪怕有一些人他们提出一些新的在比特币上 native 的一些协议,就是基本上可以说跟 sharing UTXO 就是多人共享的 UTXO 这种概念是有关系,但是依然我们回看到各个具体的现实以及我们要解决的问题的话,闪电网络依然是毫无争议的目标的焦点。我也没有看到有任何东西可以掩盖它的这个闪亮的地方。
YY: 其实刚才那个我还想说一点就是因为闪电网络也是在不断地更新然后不断地升级过程中,其他的扩展性的方案我了解的不多嘛,但大概看了一点,就我的大概感觉就是如果大家所谓最后设计的方向都是把一个全网的网络的问题需要达成共识变成只需要两个人解决的问题,那这个是一个新的解决方案呢?还是说它只是一个闪电网络的?就因为我们内部在不断地不断地提升,包括你今天看我们闪电网络的协议,和他刚出来的协议的时候已经非常不一样了。然后从现在开始,再往两年之后吧,大概这个时间又会非常不一样。而这就出现了这样一个像经典的那个叫什么忒修斯之船的那个问题,这种不断地在改,不断地在改。这个问题我也觉得很有意思。其实我们内部是在不断地,外部看不到,但内部是在不断地讨论,然后也不断地在升级。
阿剑: 对,没错,我也认为这可以很大程度上解释为什么大家总是在低估闪电网络。就我跟 YY 的感觉是一样的,就是说你之所以会觉得闪电网络无趣或者是没有吸引力,完全就是因为你没有看到这些东西,没有看到它有这么大的一个改进提升的空间,而且这个空间已经被利用起来了。比如说现在我们回头去看从它刚刚上线到现在其实已经做了大量的更新和升级,而且这些升级其实后面还会再有。那 YY 不如你来聊一下你在 Lightning Labs 你的工作经历吧,就是你会参与哪一些开发,然后你们最近的工作的重点。
YY: 我来 Lightning Labs 大概今年是我第四年,然后刚开始的话我主要做的是 loop,我们有个潜水艇合约的一个实现的客户端和一个后端,刚开始主要在那边做,但因为我的重点重心还是闪电网络,但我们公司也非常好的地方就在于,如果你感兴趣做哪一块就做哪一块好,所以后来我就是全职在做还是做 LND 这一块,早期的话基本上就变成了一个修 bug 的机器,就是 LND 如果有什么 bug 的话我都会过来修,就是这样的情况。然后大块的项目的话,之前做的那些就不提了,因为说实话有点也记不太清了,但最近我们在关注,基本上整个 team 都在关注的一个就是我们需要构建一个新的我们叫 Sweeper,比如说在一个大家不想看到的情况,就是强制性关闭或非合作式关闭之后,你会出现你的这个通道里面有很多 UTXO,那些 UTXO 各有各的特征,有的是用 CSV 这种方式锁起来的,有的是用 CLTV 这种方式锁起来的,但最重要的是你需要及时的把这些 UTXO,特别是那个 HTLC 时间合约锁,把它立马的我们叫 Sweep 回来,就是收回来,因为不收回来的话会遇到很多安全性的问题,毕竟它是一个时间性的合约,如果你在一定时间内不把它收回的话,你的对方上游或下游的 peer 是有可能对你作恶,然后我一直在做的这个事情就是,一个是要及时地把它收回,第二是要高效地把它收回,高效的意思就是,因为这些 UTXO 其实是可以合在一起打包成一个交易的,但可能有一些比特币规则上的限制,比如说这个用的是这种签名的方式,然后他用的是 cash,不能跟另外一个合在一起,然后你就要想办法怎么样最合理的把这一堆 UTXO 合在一起打包成一笔交易,然后把它返还到用户钱包里。
对,我们在做的就是这样一个事情。
阿剑: OK,所以会有一个核心的难题是比如说有一些通道它是用传统方式构建的,一些是用这个 SigHash,就是那个 Single Anyone Can Pay 构建的,然后它会有一些差异。
YY: 差异在这里的话倒还好。当然还有一个天然的问题,就是 LND 自己的问题,就是我们支持的通道太多了。最开始我们有你刚才说的那种,我们现在叫 Legacy,就是原始模式,然后我们有 Anchor,这种锚定模式,然后我们还有自己开发一个叫 Lease Channel,就是合约式通道。包括现在我们又支持了 Simple Taproot Channel,所以这个做起来就非常有挑战性。另外一个有挑战性的其实还是涉及到如何去管理这个费率。你不想一开始不想用太高的费率,但你又不想在规定的时间内你那笔 HTLC 没有被收回。这个就是一个有一个工程取舍上的问题,然后就一直很麻烦。另外一个就是多大程度上要替用户做决定,就是我在发这笔交易的时候,我用什么样的 fee rate,是让用户来自己决定,还是我们帮用户决定。很多很细节的工程问题就很麻烦。这个问题其实要真的继续讲了,我可能就讲不完了,因为这个因为我们 LND 马上要出新版本了,就 18 要出来,0.18,然后 0.18 里很大的一个 feature 就是这个东西。然后关于费率那一块就是坑太多了,你知道吗,坑太多了。首先大家可能单纯的以为费率是一个很简单的东西,大家发一笔,比特币上发一笔交易,你交点钱就好了。但是在闪电网络里面,这个费率是一个很奇怪的东西。首先如果你用的是那种我们刚才说的 legacy channel,你基本上是处于一个非常不安全的状态。因为你的费率基本上是在你们刚开始建立通道的时候,就要定下来一个费率,后面还有机制,当然有机制让你把这个费率不断地更新,但这个就很麻烦。最重要的是,因为闪电通道关闭之后,你还要去收回你的 HTLC,它其实就是一个 output 嘛,在那上面。
但是那个 output,你用了 legacy 的那种 channel 的时候,因为它 sighash 用的叫 SIGHASH_ALL,所以你的那个费率也是定死的。我们经常遇到的问题就是没有办法预测 100 个区块之后我应该用什么费率比较合适。现在我们用的这个叫 Anchor Channel。它的好处就在于我的 HTLC 用的那种 SigHash,叫 SigHash,Single SigHash,Anyone Can Pay。这个好处就是它是一个 transaction,但它同时可以被理解为成一个 UTXO,因为这个 transaction 可以跟任意的其他的 input 结合在一起,所以你可以理解为它就是一个 UTXO,然后可以用其他的 input 或者 UTXO 吧,好理解一点,来弥补你这个费用。所以我们这个其实叫全称我忘了,但大概就是 anchor,zero,fee,htlc。这是比较主流的 htlc 现在用。然后这是费率,关于如何定费率的问题。另外一个就是在费率这一块我们也发现有很多坑。你想要一笔你的那个 Bitcoin transaction 顺利的交易广播出去,其实要过重重门槛。以前我们的理解是,如果我们跑了一个全节点,你可能看一下 mempool,然后看一下 mempool 里面有一个 Min Fee Rate,然后把那个 Min Fee Rate 拿过来,然后我们广播出去就 OK。这是我们通常的理解,但其实到后面,我们还发现有一个东西,叫 feefilter。feefilter 也是一个 BIP 协议,我忘了是 BIP 几还是什么,但重点就在于它也是个很简单的协议,就是我连接到你们两个节点,你们两个节点都要向我传播一个信息,我也会返回给你们信息,
就是你们必须告诉我你们愿意替我广播的那个交易最低费率应该是多少?然后这是我们基本上是最近的一个发现,也是做了不少的更新,因为如果你一个闪电网络通道背后的那个 bitcoind 连接了,因为一般会连接八个,我们叫 outbound peers,如果那八个人他的费率都很高的话,然后你就选择了一个 min fee rate,在那个 mempool 里的那个 min fee rate 的话,你这笔交易也是会广播不出去的,然后这个就是我们也是最近发现的一个坑嘛,算是,对,就是很多细节的坑在里面。
阿剑: 那我就总结一下吧,总结一下那 YY 老师你最近的这一段的工作经历,你说在开发这种我们称之为 Sweep 的话,那么它应该会涉及到这么几个层面的工作,就一方面是你要知道比如说每一个脚本它怎么去解锁,怎么把里面的价值再拿回来,然后也需要处理这些交易可能通过组合所谓的批处理来使得它获得手续费上的一些优势,那么还包括你可能需要处理一些让这笔交易能够顺利广播到整个网络当中的这样的一个传播路径的这样的一个问题。
YY: 对,其实这个还解决了一个很重要的安全问题,就是之前也是比较出圈的一个叫这个 Antoine 写的那个叫什么 replacement cycling attack,对,那个也是一个这个要解决的问题,就是如果能反复的把你的交易放到交易池里的话,这个问题就会被解决掉。当然,Sweep 还有一个最重要的功能,就是要做 RBF。然后 RBF 其实是一个非常头疼的问题。但是它主要的功能就是说,简单理解就是,比如说首先我这个通道强制关闭结束之后,可能有 10 个 UTXO,我们简单理解 10 个 UTXO,然后把它打包到一个交易里面。然后一笔交易放到了 mempool 里,然后在 mempool 里的话,理想情况是从开始我们用一个很低的费率开始试,不断地试,然后新的区块出现,它还没有被确认,我们提升一点费率,然后还没确认再提升一点费率,一直提升到一个可能用户觉得它设定的最大值,或者我们认定的最大值。然后在这个过程中,你就要保证每一笔提升都要去遵循 RBF 的规则,然后在这一块就又会遇到一些坑,但这些细节就不讲了,这些坑就太深了,因为可能会涉及到比特币最新的 V3 的一些升级,这个坑就太深了。
阿剑: 跟听众朋友们简单科普一下刚刚 YY 提到的一些概念。LND 是闪电网络的一个具体的客户端实现,也是目前最主要的闪电网络客户端实现之一。然后像 YY 刚刚提到的 CSV,CLTV,它其实是比特币网络中最常见的跟时间锁相关的一些脚本。这些我会在播客的底下提供一些链接,大家可以去学习了解一下。LND 只是闪电网络的实现方式之一,其他的其实还有 Core Lightning,大家应该也听说过,然后还有 LDK,像之前那个志宇还是 BDK 的,但其实他们那个公司也做 LDK,然后还有 Eclair,最大的一个节点就是 Phoenix,对,那个就是他们另外的一个商业模型了,但是也很成功目前看来,但只是说,以我在这个里面的了解的话,我的感觉,当然我的感觉不一定对啊,就是大家外界好像觉得我们之间是处于一种非常强烈的竞争关系,但其实还好,因为我们每周基本上都要在一起开会,就各个 team 的人都要在一起过来,因为毕竟大家要共同维护一个闪电网络的协议,然后协议要怎么更新怎么样,但那个会我不怎么参加,因为那个会议时间太晚了,因为是四点,差不多这边四点时间,但是我想说的就是大家还是会很心平气和的在一起聊天,包括每年我们都会一起见一次面,然后一起现场推动一些协议应该怎么更新,讨论一下怎么发展。虽然线上大家还是经常在推特上会有些 beef 会吵来吵去,但总体上来说还是挺好的一个状态。然后其实每个客户端的实现都各有千秋吧。我们其实在学习,至少我个人是在学习像 LDK 他们那种模式。因为我们 LND 最成功的地方在于用户很喜欢用它,然后会觉得用的比较简单,然后它是像一体式的傻瓜机一样,不用自己再去建其他的乱七八糟的东西,API 都给你提供了。但问题就在于它的可扩展性,包括它的模块化,
这些是没有像我个人感觉,虽然我没有用过 LDK,我听到的反馈是没有像 LDK 那么好。所以其实我们内部有另外一个哥们儿跟我们一起,我们会经常就是说 LND 可能会不断地向 LDK 那个方向靠近,就是各个模块之间不断地模块化、标准化,然后让开发者可以更好地在上面开发。LDK 可能会更向 LND 这边靠近,会提供一些一体化傻瓜式的解决方案。但是这是各个版本之间都会不断地学习,互相学习,是这样的一个状态。非常感谢 YY 给我们提供这个观察。
曾汨: 我来提一个可能用户更关心的问题吧就是大家都知道在闪电网络的用户体验当中有一个叫做流动性的概念一直饱受大家诟病有一个叫做收款额度或者入账流动性的概念也就是说如果我没有一定的收款额度我是没有办法在闪电网络当中接受支付的我想请问一下 YY 老师怎么看待这么一个问题然后 LND 针对这个问题有什么相应的解决方案吗?
YY: 这个其实是一个在我看来挺困难挺有挑战性的一个问题,包括我们团队内部也有人专门针对这个问题,包括 loop 我们为什么会有 loop 就是因为会有这种问题然后提供了这样可以说是一个商业机会也好。一个用户需要解决的痛点也好,但这个问题就是让人的头疼,说实话。从另外一个角度讲的话,这么说可能那些比特币死忠会觉得那什么,但是我的个人理解是,需要一个个人完全理解如何管理通道的情况下,再去跑一个闪电网络,我觉得是很不现实的。但是没有办法实现那种大规模的用户应用。我个人的感觉是,还是需要软件,自己去写更好的程序,然后去帮你管理你的流动性,channel liquidity。当然这不是替我们公司的推销,我们公司就是针对这个出了一系列的那种产品,就 Loop 是一个。然后还有一个叫 terminal,那个其实是面对用户的,但我自己也没有用过。它就是帮你管理通道的流动性,这样一个东西在里面。在我看来以后我希望看到的就是用户不需要关心这些问题。因为如果用户还需要关心这些问题使用闪电网络的话,我觉得闪电网络至少在应用层做的算比较失败。在 LND 这一块我们其实没有做太多的东西,因为我们 LND 只是说尽可能的把这些接口暴露给用户,然后用户可以很好的理解在某个地方可以做什么样的事情。这块 API 确实 LND 提供的特别多。
我们不仅可以管理 Channel,当然这个是靠 Loop In 和 Loop Out,我们也有所谓的 HTLC Interceptor,就是 HTLC 拦截器,你甚至可以控制一个 HTLC,你要不要接受,你要推迟多久接受到你那个通道里面。我们会提供很多细节这样的 API,但具体怎么操作怎么管理,首先必须承认它是个很难的问题,其次我们是觉得把这些 API 提供出来,然后让别人去解决。
阿剑: 让用户自己解决。
YY: 让用户或者有专业的人或者理解很深刻的人来解决这些问题。
阿剑: OK,那我们稍微详细一点吧,比如说你刚刚提到 Lightning Labs 推出了一些产品可以认为是也跟这个问题有关,比如说像你刚刚经常提到的 Loop,那你方便介绍一下包括 Loop 还有这样的一些。
YY: OK,其实首先要声明一下我是一个很底层的开发者,所以我对上层的应用其实我并不理解。我之所以了解点 loop 是因为当时在那工作过一段时间,然后 loop 的话,就首先它是一个潜水艇合约,所谓一个潜水艇合约它就是很简单,就是我在链上给你的这个人发一笔 transaction,然后你在链下如果我给你有一个通道,你给我发一笔 HTLC,就原理大概是这样,细节我们就不讲,然后 loop,我们叫 loop,但其实它就是一个 loop in 和 loop out 的两个动作,就是充值或者从通道里提现。然后它要解决的就是,比如说像刚才曾汨说的,如果这个通道里的流动性,你的 inbound liquidity 不够,然后你就去找 loop,然后让 loop 给你充一点 HTLC 过来,然后这样你的 channel 的 liquidity 就又上来就可以用。但是作为交换就是你可能需要向 loop 付一定的手续费,然后我个人的理解可能公司也是这样想的就是将来像 loop 这样的服务,我理解就是 LSP 嘛,就是流动性提供的这种服务商,是挺被市场需要的,因为确实不管是现在我们这种开通道的方式,因为我们现在 LND 只是单向通道开放,但是现在协议层已经更新了就是可以双向通道,但实际上以我们的观察来看,总会有钱从一个方向往另一个方向流动,然后这个单方向的流动就会导致基本上每个用户在某一个特定的时间点都会遇到这样流动性的问题,然后遇到这样流动性的问题就只能自己想办法找 loop 这种方式去解决,对,但是像其他的 terminal 这些我都不是很了解,对。
阿剑: 那我们现在录这期播客是在 2024 年的 4 月,在去年年底的时候我们已经看到一些活动,我们在庆祝比特币激活 Taproot 的升级两周年了,包括在各大的不管是媒体的宣传或者是在一些品牌的这个解释当中,我们会看到 Taproot 是最近大家在关心比特币的时候关注度特别高的一个词。大家会认为 Taproot 给比特币带来了很多新的东西,甚至可以说是新的活力。那么在我的印象当中给闪电网络带来一些好处似乎也是人们在推动 Taproot 升级的时候采取的或者说使用的其中一个理由。那么能否请 YY 来给我们介绍一下 Taproot 它会给闪电网络带来什么好处以及这些好处现在看它会离我们还有多远呢?
YY: OK。在我看来就是,在我看来,Taproot 这个升级是一个很大的升级。因为我其实个人也在学习,自从它升级以后,它其实是很多 BIP 协议在一起的,至少我看到的应该有 6 个我还在看的 BIP 协议,包括签名方式的升级,包括它那个 Script 的升级,乱七八糟。然后到了闪电网络里面,其实闪电网络就是严格去遵循 Taproot 升级,它带来的,在我理解的两条道路,一条道路就是它提供了一种新的签名方式,就是 Schnorr 签名的那个,然后利用那个公式,那个新的公式,因为它是一个线性的,其实你可以听众不明白的话,就可以列为等于 Y 等于 AX 加 B 这种形式,然后有这种形式的话,它就打开了一扇新的大门,因为它是一个线性的,这样意思就是你可以对它随便进行加减,乘除不行啊,但是你可以不断的加减加减,然后加减然后对应到应用层的话,就可以出现各式各样乱七八糟的,或者是说百花齐放的新的应用,这样到那个闪电网络上我们下一步想推的就是 PTLC。这个就是完全是因为它有这种新的签名方式,这种线性的签名方式,可以实现 PTLC 这种东西。然后另一方面就是它提供了那种叫 Pay-to-Contract 这种方式。其实理解起来的话很简单,可能像我们之前聊的那个 Omni,人们以前其实有这种愿望,想要把数据放到链上,然后他们放到链上的方式就是用 OP_RETURN 放一个 Hash 在那。但是这次 Taproot 升级之后,它其实最终放到链上的也是一个 hash。这个 hash 是一个树的树根,叫默克尔树的树根。这个默克尔树就是一个条件树,里面每个叶子都是一个可以执行的条件。有这样一个东西存在的话,又给大家打开了一个想象空间。
Sorry,错了,我说的是 Taproot Script 是一个默克尔树,但其实放到链上的 hash 可以是任何东西。这是一段没有意义的数字,重点是你只要放一个哈希在那,你就可以使用这种新的方式,就使用 Taproot,然后这个哈希是怎么生成的,是没有任何规则去限制你的,只不过说我们会觉得用 Merkle Tree 这种方式,把条件都放为叶子,这种方式生成一个 Tree Root 是最好的方式,但是我觉得肯定还有其他的方式,但重点在于,因为一个哈希在这儿,它可以有无数种生成方式,在我看来打开了无数种可以创新的可能,你可以完全设计一套自己想要的协议让它上面运行。对于闪电网络,我个人觉得在闪电网络上来说,Taproot 这一块对它的影响只能说有限,我当时是会觉得它的影响会巨大,因为首先你放到链上的就现在变成了一个 OPE,一个 Hash,然后没有人知道你是在开一个通道,或者在合作式的关一个通道,但其实这个隐私的提升是有限的,因为如果你出现那种我们刚才说非合作式的通道,那个就比较难看了,因为你要把整个 script 都放到链上,你要把那些 control block,各种 internal property 全都要放到链上之后,大家一眼就可以看出这是一个闪电网络通道的关闭交易。其实隐私方面我觉得如果好的情况下是有很大的提升,因为好的情况下没有人知道你们在开一个通道关一个通道,唯一的坏的情况就是在不好的情况下,跟原来相比没有太大的提升,当然另一个提升就是交易手续费肯定会,因为它确实那个交易的体积变小了,那个交易的 size 变小了之后,你的手续费相对来说会小一点,但是非合作式的关闭的那个手续费又会高一点,
对对对,就是不断的取舍有在里面这种感觉,对。
阿剑: 我还是挺想聊一个比较泛的一个话题,就是在很长一段时间里面,比特币的可编程性它是一个比较受批评的状态,就人们认为比特币上你是没有办法做太多事情的,或者说你能做事情是非常有限的,然后于是人们纷纷寻找,不管是一些其他的方式也好,它跟比特币有关联或者没有关联也好,就说我们要做更好的可编程性,或者说甚至于是我们要另起炉灶,我们要抛弃比特币,比特币这一套是有问题的,我们要用一种新的这种方式来去启用更广泛的更多样的这种可编程性。我不知道其实 YY 你对这件事情的想法是什么样的?
YY: 首先我觉得当然说一个惊为天人的言论就是我觉得好像没必要,就是你要那么多可编程性干嘛呢?你到底想在这上面做什么呢?当然你要放到 10 年前,我不会说比特币现在这个样子是最好的样子,但现在以我的理解来看,它这个样子就是最好的样子。对,就是并不能像以太坊那种模式,让大家都可以在上面跑一个 smart contract,然后你的 smart contract 要同步到每一个节点上,然后每一个节点为你的 smart contract 付出成本。比特币也并没有说完全的抛弃可编程性的这一点,一个是新的 Taproot 升级之后,就像我们之前聊到的,因为只要你保留在链上用的那个 Pay-to-Contract,一个哈希值放在那的话,你的这笔交易就可以成功,那你只要在这个哈希的那背后去做一些动作,你其实是可以做出很多有意思的事情。就比如说现在比较火的,当然我了解也不是很深,像 BitVM 这些,然后他们也在做,然后他们在做的事情我觉得也很有意思,对。但是话说回来,题外话就是其实原来我也是在以太坊上有过密集的开发,就是另一层的开发,我就是玩了很长一段时间那个 Solidity,我的感觉是特别好玩,当时 18 年的时候吧,因为跑合约,然后第一次意识到你的这个跑一个 function,它需要消耗那个 gas 的那个概念,然后你这个 function 写的不够有效,不够 efficient 的话,你的 gas 很快就跑完了,然后当时觉得这个概念很有意思,然后就在上面开始做各种合约玩,但是到后来发现当自己想要同步一个全节点的时候,我就意识到了大问题就是我同步一个节点已经基本上不可能了,然后就需要用到一些第三方的服务,我现在都忘了他们的名字了,
但是就是我是觉得他们对开发者特别友好,因为当时我去开发在上面玩的时候已经有什么 OpenZeppelin 这些做 contract 的一些 library 可以用了,然后本地跑一些测试环境,全都有可视化的操作,我觉得这些都太棒了,我觉得这些应该是比特币可能要学习的地方,就是对开发者特别友好。但是以太坊,怎么扯到以太坊了,就是我觉得它的核心就是错的,就是你怎么能把两个人的问题变成全网络的问题,就是我觉得这个方式我觉得很不好。对,不友好。但是到了回到比特币可编程性这一块,我就觉得这个问题确实很大。就首先要讨论的是,讨论可编程性就是这个程度到哪,大家会觉得合适呢?就是可编程性嘛,它又有个程度嘛,它既不是 0,也可能也不是 1,可能 1 可能就是图灵完备那种。但比特币肯定是可以在上面做一些,当然你需要对那些 opcode 特别了解之后,你可以做一些很有意思的应用出来的。我的理解是这样,而且重点它保证了就是,不管你怎么在上面造,你们两个人之间的问题不会影响到全网络,我觉得这个在我看来是非常好的一个设计。当然了,我们也看到会有些人投机取巧,比如说 BRC20 这种,或者 Ordinals 这种,只能说大家还是很希望可以在比特币上进行编程,然后用了一些奇怪的方式,好坏就不提了,但是我觉得重点就在于如果大家可以更进一步的去学习了解一下 Taproot 的更新,然后了解一下它那个 TapScript 是怎么运行的,包括 Pay-to-contract 怎么去构造,把这一套过完一遍之后,你其实可以做出更多更有意思,然后更符合比特币原生态的一些可编程性的合约出来,对,我的理解是这样。
阿剑: 其实 YY 也说了很多我想说的话。
YY: 其实我想补充一下刚才你们聊到的关于 Taproot 在 LN 上的问题,现在 LND 已经支持了所谓的 Simple Taproot Channel,然后其实应该是 LDK 他们也在做这个开发。但其实真正到落地的话可能还会有一到两年的时间是这样。Simple Taproot Channel 的意思就是我可以给你开一个 Private Channel,就我给你开一个私有通道,然后这个私有通道是以 Taproot 的形式来进行 Funding 或者 Closing,但通不到整个网络的话还是用传统的 HTLC,因为其他的节点并不会理解一个 Taproot Channel 它代表了什么,它并不理解这些。然后这也是我们公司现在 LND 这个团队在做的,就是已经有了 Simple Taproot Channel,但是 Simple Taproot Channel 之所以会出来也是为了我们的那个 Taproot Asset,包括 Taproot Asset Channel 做那个铺垫。但重点在于纯 Taproot Channel 这边升级的话,首先是要有 Taproot Channel 升级,然后需要网络整个 Gossip 那一块升级,然后要理解这些,这就涉及到几个协议的升级,然后我们协议升级一个叫 Quiescent,就一个 Rusty Russell 搞了一个很奇怪的名字叫 Quiescent,Quiescent 就是让我们在进行的那个通道突然安静下来,就暂停,喊暂停,然后 Quiescent 下面还有一个紧接的就叫 Dynamic Commitment,就是叫我们在有通道进行的时候,我们用那个 Quiescent 让我们通道变安静下来,
暂停下来之后,我们做一个所谓的 Dynamic Update,我们的通道可以从现在的比如说 Anchor Channel 直接升级到 Taproot Channel,因为我们现在任何在闪电网络上的升级都需要考虑就是如果现在两个人已经有通道了,我们怎么能保证他可以升级到新的通道,因为我们并不想让他通道关闭,所以就涉及到 Quiescent Dynamic Commitment,然后我们另外一个同事叫 Elle,Elle 他在做的就是在 Gossip 这一层,就是大家所谓所有的节点必须得明白,这个新的 Taproot Channel,我要怎么去理解它,怎么知道它是一个 Channel,怎么知道谁在这里面参与了。这个就涉及到我们一个叫 Gossip 1.75,就是 Gossip 1.75 的一个升级。所以光这三个升级,协议还没有弄完,但协议应该可能至少代码这一边,应该今年至少可以把它写完。写完之后,然后可能到明年,全网就可以进行一次升级,对。就大概的升级路线是这样的。但是,只 LND 这边升级肯定不行,所以这个就意味着大家又要一起开会嘛,开会然后说 OK,你那个 Core Lightning,LDK,Eclair 是不是都可以考虑赶紧把这个做一下,然后大家一起升级,对,就是这样。
曾汨: 这些会属于 BOLT 的一部分吗?
YY: 对,这就是 BOLT 的一部分。可能社区一旦变大,大家意见就会不一样,有各自各自的发展方向,比如说像 Phoenix,它 Eclair 那边就会主推叫拼接,splicing。
阿剑: 拼接。
YY: 对,拼接,会主推拼接那边,因为那个拼接更符合他们的那个 business model,因为它自己是一个巨大的 channel,然后它那个用户体验也确实很好,我也很喜欢用他们的产品。但是像我们这边就会推不一样的,当然 Quiescent 大家都想推,就让大家安静下来那个,到后面怎么升级到下一步大家意见就会不一样,我们就会推那个 Dynamic Commitment,就是所谓的在线升级吧,可以理解为动态升级,然后每个人的技术路线也会慢慢不一样,所以这个可能也是预埋了一个雷,就是看今年 9 月份大家开会会商量成什么样了,对。但是如果想要 Taproot 真正完成在闪电网络上的应用,就需要所有这些团队都过来说我们 OK,支持这个。我来问一个问题。我很好奇你们对于闪电网络的看法是怎样?就这样一个泛泛的问题。
曾汨: 我觉得闪电网络就是目前比特币可以实现的成为支付网络的最好的方式。
阿剑: 我认为它是一个跟互联网一样的奇迹。
曾汨: 哇,这个更加升华了。
阿剑: 对,我觉得它是跟互联网一样的奇迹,就是……我觉得很好。
曾汨: 就是让比特币成为魔法的互联网货币。
阿剑: 是。
曾汨: 之前阿剑说我们是 LNP/BP 神教。
阿剑: 对,对,对。
YY: 我觉得确实是这样,就是闪电网络其实大家还没有意识到它的潜能,我觉得它会让整个互联网变成一个新的样子,对。
阿剑: 我之前我有一个很强烈的信念就是我们站在今天 2024 年或者是早几个月都一样,当我们站在今天我们去看比特币的时候,闪电网络已经变成它的不可或缺的一部分了。然后当我们如果真的想在这个时代想理解,包括想在比特币上去做一些事情的话,我们也没有办法绕过闪电网络。相反闪电网络的存在让很多我们原来觉得就是说它不一定有应用场景,或者说它不一定能够存在这个东西都可以存在。仅仅因为我们有一个闪电网络,有一个这么多节点分布在整个世界当中,可以让我们瞬时的确认一些交易,确认一些支付,或者说瞬时的获得密码学签名的这样一种方式。有了它之后,很多东西就变得很顺理成章,或者说都变得可以是现实了,完全纯粹的基于互联网的支付,然后让每一个人都能够在一边接受支付的同时,一边可以验证整个网络当中的货币量,这是比特币本身给我们。它的本身的这个基础,然后包括但不限于我们可以有一些更小规模的,比如说像 e-cash 这个铸币厂,那它也要存活在一个闪电网络这个节点当中,以获得整个闪电网络来为它赋予的这个优势,然后还包括比如说像 YY 刚刚提到的,像 Phoenix 钱包,他们有一个很有趣的这个功能叫做 swap-in-potentiation,也是可能我们的一些听众会在我们之前的前几期播客当中听过,我们提到很多次,它基本上就是一种单向通道,那我作为一个普通的这个用户,我可以用单向通道来接收我在链上要接收的这个比特币支付。你一旦接收到这笔支付之后的话,你可以立即把它转成闪电网络通道当中的这个资金,或者立即把它用来用作闪电支付,发起闪电支付。这个单向通道在我们原来探索比特币的可扩展性的这个路径上的时候,
它是一个被我们当成一个里程碑一样的,但是远远不够的东西,因为我们很快意识到它有一些不足,我们要走向双向通道,也就是现在的闪电通道以及后来的这个闪电网络,但是有了闪电网络之后,这个东西它又重新焕发升级,让我们看到它有一个非常契合的应用场景。这都是闪电网络带来的,如果没有闪电网络,这一切全部都无从谈起。所以我说它是一个像互联网一样的奇迹,因为在它之前好像你根本看不到路在哪,但是有了它之后,OK,一切都很清楚了。这就是我们要走的路,这个就是我对闪电网络的想法。
YY: 我现在觉得闪电网络就像阿剑说的一样,已经变成比特币不可分割的部分。像之前我们说到那个 Bitcoin v3,Transaction v3,然后那个 mempool,cluster mempool,这些升级,其实他们用到的,通常用到的一个例子都是闪电网络,说闪电网络可能需要这样的功能,然后我们做这样的升级,然后我就看了一些,这不好像就是专门为闪电网络而造的升级,我就觉得这个很有意思。另外一个我觉得,被大家忽略的一个点,闪电网络在我看来其实是一个所谓的 paradigm shift,就是一个范式更新,它提供的 HTLC 时间锁,包括 revocation,就是惩罚性机制,它提供的这个惩罚性机制在我看来是一个很大的创新,包括这个在后面我用看到了大部分的更新里都会用到它,像还是刚才说的 BitVM,它其实也是基于这个惩罚性机制,然后搭建出来的一个新的一个 Circuit,然后我就觉得对这块确实是影响很深远,但大家可能慢慢就会感受到。
阿剑: 其实刚刚 YY 有一个关键词我觉得很重要,就是 YY 经常说闪电通道就是你们两个人之间的事情,你们两个人之间发生这个事情其实其他人不需要知道也不需要关心,你们两个自己能够达成一致或者你们自己能够确认。就好了我觉得这是可能很多人还没有想象到就是说这是一个多么强大的一个基本的一个元件在这种元件下面我们可以容纳很多很多的东西现在的闪电通道只是它的一个例子但是有了这个东西之后的话我们其实可以在通道当中做更多的这个事情然后我们在想象一定有一个由闪电通道构成的一个网络的话你会觉得非常激动你会觉得非常激动就是嗯就像你说的它是一个范式的这个转变它好像越过那个点之后前面就是星辰大海,前面就是星辰大海,然后我们就是所有这些都可以在基于一个我们已经有一个闪电网络这个大的背景大的这个前提之下去重新思考,或者说去重新去想象它们。这个是我觉得也是大家可能现在还没有感受到的事情,但是如果我们仔细去看的话,你会能看到的。
YY: 对,我觉得总结的很好。
曾汨: 我刚刚想到一个非常基础的问题,也是我最近看到很多人关于闪电网络的困惑,就是闪电网络的通道容量,整个公开的通道容量中,从可能是 21 年 22 年年底到现在一直维持在 5000 个比特币左右的状态一直没有增长,于是很多人说,闪电网络是不是停止增长了?我想问一下 YY 怎么样看待这个问题?用这一个指标去衡量闪电网络的活跃程度或者用户量是可靠的吗?
YY: 我觉得就是衡量闪电网络的增长的话确实有很多指标,然后这其实我觉得是挺重要的一个指标,在我看来,但是 again 就是我平时也没有太关注这些指标,所以我不太理解它所能代表的是什么,但我想说的是一个比特币,如果在闪电网络里,我给你有一个通道,这个通道有一个比特币的话,它所能交换的商品价值是远远超过一个比特币的,因为它是往复的嘛,就在一个网络里不断地转。所以,可能大家会要有一些新的观念,或者新的指标去理解,当五千个比特币在闪电网络里,它到底意味着什么?它并不是意味着它只是可以交换等额于五千个比特币的商品或者服务。理论上它取决于你们之间发生了多少笔交易,你们的交易越多,它所带来的实际价值就越大。我的理解大概是这样,但我们看到的就是一个是闪电网络的增长在我们看来是在一个爆发性增长的前夕,是我看到的,因为我们公司每周都会开一次那种周会,周会都会有一个 business 的那种概览,然后就会聊哪个公司在做什么,哪个公司在做什么,然后每次我都会看到一些新的公司,都没听过的,在做一些一个是我暂时理解不了的事情,但是又觉得很有意思的事情,就是经常会遇到这样的情况,然后就觉得这个行业里涌入进来的聪明的有想法的人越来越多,这是我看到的。但另外我没有看到的就是从亚洲地区或者说从中国地区出现的。我希望大家可以更多地去了解它,然后在这上面去发挥自己的才能,然后去搞一些新的开发,搞一些新的好玩的小项目这样。
曾汨: 那如果我们的听众中有人想加入闪电网络的开发里面来,或者在这个上面做点东西的话,你有什么建议?
YY: 如果是对基础协议感兴趣的话,我的建议是去看一下那个 BOLT,然后我是非常欢迎大家来,如果想做 LND 的开发,可以直接来联系我,这都没有关系的,然后其实整个在底层这一层的话,我们其实遵循的就是那个 POW 的那个哲学概念,如果你想参与到这里面来,很简单,你去做一点事情,然后我们都会看得到的。比如说你想做 LND 的开发,你哪怕去跟我们的 repo 提交一个 typo fix,你就拼写单词错误,我们把它改正了,我们也觉得 OK,这是很受欢迎的,然后我们不断地从简单的 issue 做到难的 issue 这样,我们就认定它是一个 POW 积累的过程,然后积累到一定时候,我们就会很欢迎你们这样的人加入我们一起,哪怕并不一定非要加入我们公司,因为像我现在每周一直开会的其实就是两个就是来自于 Open Source,就是完全独立的那种开发者,但是我们也会经常一起开会,然后给 LND 想下一步应该做什么,怎么样开发。如果再往上一层的话,我会推荐大家去,就是一个模仿学习创新的过程吧,可以看一下现有的那些 LND 的那些 apps 有什么,然后你们可以去学习模仿一下,也可以去看一下我们公司其实有很好的那个 API 的那个文档,可以看一下那些 API 怎么用,然后通过这 API 上可以搭一些很简单的应用出来,然后在应用之上,然后你再去下一层继续去摸索,然后不断地创新,对。
阿剑: 非常感谢 YY 的建议。非常感谢,非常感谢。
曾汨: 感谢 YY 给我们带来的精彩分享,我们本期播客到此结束,下期再见,拜拜。
YY: 拜拜,谢谢,谢谢邀请我来这里,谢谢。
