比特币闪电网络是什么?闪电网络是如何工作的?作为构建在比特币区块链之上的 p2p 网络,闪电网络不仅能够有效解决比特币 “又慢又贵” 的难题,而且在加密支付领域有着其他解决方案无可比拟的优势,是我们实现 p2p 经济的基础,也是我们憧憬的 web5 世界的重要组成部分。
今天代码网小编给大家分享的这篇文章,将为我们详细介绍闪电网络,讲清楚闪电网络的运行原理和相关技术。下面一起看看吧!
闪电网络的基本原理
闪电网络(lightning network,以下简称 ln)是最古早的比特币二层拓展方案之一,其主要应用场景在于实现快速且低成本的比特币点对点支付。
闪电网络的技术核心是状态通道,状态通道是中本聪在比特币白皮书提到的比特币拓展方案。比特币开发者 joseph poon 和 thaddeus dryja 基于状态通道发布了闪电网络的相关论文,最终,由 lightning labs、blockstream、acinq 等团队开发落地,并受到 jack dorsey 等一众比特币 og 的支持和追捧。
状态通道应用于闪电网络,实现了快速的、近乎零成本的点对点支付功能。
现在,我们先梳理下状态通道的基本运作原理:
当交易双方建立状态通道进行交易,只有第一笔(建立状态通道)和最后一笔交易(关闭状态通道)会在比特币链上进行,剩余的所有交易都在比特币链外进行,也就是在状态通道内进行。
在状态通道内进行的比特币交易(可以理解为此时的 btc 并非比特币一层的 btc,而是在状态通道这个 “比特币二层上的 btc”),交易快速便捷,成本几乎为零,这里交易双方的账本会出现实时变化的 “btc 资产负债表”,而且每次交易都需要签名,以保障交易的合法性和准确性。
当双方任意一方关闭状态通道,系统就会把最新的 “btc 资产负债表” 提交到比特币一层去验证,这个验证一般会设置 7 天的验证期,或者叫 “检举期”,本质就是双方在这 7 天内都可以发起检举,时间到期后,a、b 双方将根据最新的 ‘btc 资产负债表” 拿到属于自己的 btc 数量。如果双方都能及时确认,则交易可以立即完成。(以太坊的二层拓展方案 op-rollup 就是仿照了状态通道的原理,所有交易在二层进行,然后再向以太坊一层提交验证 , 同时有 7 天的挑战期)
我们举例说明:
假设有 a、b 两个 ln 节点要使用状态通道进行 btc 交易,具体步骤如下:
1、a、b 两个 ln 节点建立状态通道。
a、b 双方都需要向状态通道存入预先设定的 btc 数量,比如,a 存入 10 个 btc,b 存入 5 个 btc,此时,会生成一个新的比特币多签地址,a、b 双方锁定的 btc 数量就在 c 地址体现出来(c 地址是 ab 双方生成的多签地址,类似一个无私钥的智能合约地址)。
此时 a、b 双方的 “btc 资产负债表” 是:
a:10btc
b: 5btc
c:15btc
2、当 a 和 b 之间开始交易,a、b 的 “btc 资产负债表 “开始更新
假设,第一笔交易,a 执行签名向 b 发送 1 个 btc,
btc 资产负债表更新为:
a :9btc
b :6btc
c :15btc
第二笔交易,b 执行签名向 a 发送 5 个 btc
btc 资产负债表更新为:
a:14btc
b:1btc
c:15btc
以此类推,随着 a、b 双方的不断交易,btc 资产负债表不断更新(本质就是二层账本不断更新,只是还没有回到一层验证)
3、关闭状态通道
a、b 双方任意一方都可以随时关闭状态通道
假设,关闭状态通道时,btc 资产负债表是:
a:12btc
b:3btc
c:15btc
在关闭状态通道的同时,最新的 “btc 资产负债表” 将被提交到比特币一层,同时,启动为期 7 天的验证,假设,a、b 双方都无异议则交易完成。假设,任意一方没有及时验证确认,7 天到期后,按照 “btc 资产负债表” 来分配 a、b 双方应该得到的 btc 数量。
以上,就是状态通道的基本运作原理。
总结就是:状态通道采用互相签名 + 时间锁的机制设计,在没有第三方托管的情况下,可以安全的实现比特币的点对点支付,同时,通过链外交易 + 主链验证的方式来实现快捷、低成本的交易。
闪电网络的基石:支付通道
闪电网络本质上是一个精心设计的支付通道系统。以 alice 和 bob 之间的交易为例,他们使用闪电网络进行结算时,会经历以下三个关键阶段:开启通道、进行交易、关闭通道。
1、开启通道:构建信任的桥梁
所谓开启通道,实质上是创建一个由参与双方共同控制的多签钱包,并向该钱包注入资金。这个钱包接收的资金总额即为这个通道的余额。
我们假设 alice 和 bob 各自持有 10 万聪 btc。首先,他们需要将各自的 10 万聪转入一个由两人共同控制的多签钱包地址,作为建立通道的质押金。这笔交易,被称为 “funding transaction(充值交易)” 或者 “anchor transaction(锚点交易)”,需要广播到网络并记录在比特币区块链上,以表明通道的正式开启。在这个例子中,连接 alice 和 bob 的支付通道实质就是一个普通的 2-of-2 多签名钱包,里面包含 20 万聪的余额(为简化说明,我们暂不考虑开启通道时需要支付的矿工费)。
2、开始交易:链下交易的艺术
通道开启后,参与双方的后续交易将全部在比特币区块链之外进行,实现了高效的链下结算。让我们假设 alice 和 bob 之间进行了以下 3 次交易:
alice 向 bob 转账 1 万聪,此时 alice 拥有 9 万聪,bob 拥有 11 万聪。
alice 继续向 bob 转账 2 万聪,此时 alice 拥有 7 万聪,bob 拥有 13 万聪。
bob 向 alice 转账 1 万聪,此时 alice 拥有 8 万聪,bob 拥有 12 万聪。
从上面的例子中,我们可以看到,无论 alice 和 bob 之间进行多少次转账,他们之间的通道余额始终保持不变,都是 20 万聪。
每次 alice 和 bob 发生交易时,双方需要更新通道中各自的余额,并交换经过签名的 “承诺交易(commitment transaction)”。这些交易本身都是有效的,可以随时发送到比特币网络中,但双方通常会将其保存而不广播,除非他们打算关闭通道。如此一来,通道内 alice 和 bob 的余额状态,一秒内变动几十次、几百次都没问题,更新的速度仅受限于双方创建、签名和向对方发送承诺交易的速度。
3、关闭通道:最终结算的时刻
关闭通道可以通过两种方式进行:一是双方一致同意关闭,将一笔结算交易(settlement transaction)发送到比特币网络中;二是单方决定关闭,将最后一笔承诺交易(commitment transaction)发送到比特币网络中。后者的设计是为了防止某一方离线导致另一方在通道中的余额一直被锁定的情形。
在 alice 和 bob 的例子中,他们在进行了3 笔交易后决定关闭通道。关闭后,alice 取回 8 万聪,bob 取回 12 万聪(同样,为简化说明,我们不考虑关闭通道时产生的矿工费)。
双向支付通道的安全保障:从 ln-penalty 到 eltoo 再到 daric
上文提到,关闭通道既可以双方一致同意关闭,也可以是单方决定关闭。那么,在双向支付通道中,如何防止某一方欺诈呢?比如上面的例子中,如何防止 bob 拿着第 2 次而不是第 3 次承诺交易来关闭通道呢?如果使用第 2 次的承诺交易关闭通道,bob 可以抵赖掉最后付给 alice 的 1 万聪付款,这显然看上去很有诱惑力。
比特币闪电网络引入了 ln-penalty 机制来防止某一方把一个过时的但对自己有利的状态发送的链上来关闭通道。ln-penalty 使用 “不对称的承诺交易” 和 “撤销密钥” 等复杂技术,确保如果 bob 试图使用过时的承诺交易关闭通道,alice 将有权获得通道内的全部资金 —— 20 万聪。这种惩罚机制有效遏制了潜在的欺诈行为。
然而,ln-penalty 也存在一些不足,除了自身的复杂性之外,还造成了存储负担 —— 用户必须保存过去每一次更新通道状态时候的资料,还有一些罕见的情形可能会导致它意外地惩罚诚实的用户。
为了克服这些缺点,早在 2018 年,比特币社区就提出了名为 “eltoo” 的解决方案,来消除存储负担和意外惩罚的风险。在这个方案中,用户只需保存最新一笔承诺交易及其结算交易即可。然而,eltoo 方案至今还不可用,因为它的实施需要对比特币进行软分叉,引入一个新的签名哈希类型 —— sighash_anyprevout。
nervos ckb 推出的闪电网络 fiber network 则选择了 2022 年提出的 daric 方案。daric 在 eltoo 的基础之上,有效解决了瞭望塔(watchtower)的成本和安全性问题。瞭望塔是运行在独立机器和网络上的闪电网络节点,会监控支付通道,并在检测到恶意行为时帮助受害方执行罚没交易,从而保护用户的资金。节点操作者通常会运行自己的瞭望塔,以保护自己的节点。
将双向支付通道扩展成闪电网络:多跳路由技术
我们同样使用 alice 和 bob 建立通道作为基本背景,但这个世界上除了 alice 和 bob,其他人也想接入闪电网络该怎么办?有什么办法可以把所有人都接入网络并保证可以向网络中的任一一个人发起支付?
为了解决这一问题,我们需要将双向支付通道扩展成闪电网络,并使用多跳路由技术。“路由(routing)” 的字面意思是 “寻找路径”,在闪电网络中,就是要找出由通道前后连接而成的、给特定对象支付的路径。
以 alice 向 david 支付 2000 聪为例,假设他们之间没有建立支付通道,不过 alice 和 bob 之间、bob 和 carol 之间、 carol 和 david 之间都已经建立了支付通道。在这种情况下,alice 可以先把钱转给 bob ,再由 bob 转给 carol,最后 carol 转给 david,这样看起来就实现了从 alice 到 david 间的支付通道,其中 bob 和 carol 充当了网络中的路由节点。如果 alice 和 eva 之间、eva 和 david 之间也建立了支付通道,那么 alice 也可以选择先把钱转给 eva,再由 eva 转给 david。
从路径上来看,显然 alice 通过 eva 转钱给 david 是路径最短的选择,但在实际操作过程中,看上去最短的路径并不总是最佳选择,因为还需要考虑其他因素,比如通道的容量、路由节点的收费标准、路由节点是否在线,等等。
目前,主流的比特币闪电网络实现(客户端),如 lightning labs 开发的 lnd 和 blockstream 开发的 cln(core lightning),在路由算法上都使用了 dijkstra 算法的某个变种,nervos ckb 推出的闪电网络 fiber network 同样会使用 dijkstra 算法来寻找最优路由路径。
保障路由安全:从 htlc 到 ptlc
在上面 alice 要给 david 付款的例子中,我们如何保证中间的路由节点不会耍赖,不会恶意扣留资金呢?传统金融系统通常依赖大型知名金融中介机构的信用担保,但闪电网络是一个 p2p 网络,并没有这样一个独立于交易者的第三方去提供信用担保,我们需要一种不同的机制来保障交易安全。这就是 htlc(哈希时间锁合约)的作用所在。
htlc 由两部分组成:哈希验证和过期验证。让我们以 alice 要给 david 支付 2000 聪,选择 bob 和 carol 充当网络中的路由节点为例,理解 htlc 的工作原理:
首先,david 要生成一个秘密值 r,任何词语、任何数字都可以充当这个秘密值,然后计算出其哈希值 h 并把它发给 alice。这个哈希值 h 会放在交易输出的锁定脚本中,只有知道 h 所对应的秘密值 r 的人才能使用这个输出,而 r 在闪电网络中被称为 “原像(preimage)”。如果秘密值 r 没有及时地公开,这笔支付就用不了了,发送者会收回所有的资金。
然后,alice 使用收到的哈希值 h 创建一个 htlc,时间锁设置成未来 5 个区块,输出的数额是 2020 聪,其中 20 聪是给路由节点 bob 的手续费。用大白话来表述就是,alice 会给 bob 支付 2020 聪,只要他能在 5 个区块内提供秘密值 r,否则这些钱会返回给 alice。
bob 在自己和 carol 的通道中,使用跟 alice 所提供的同样的哈希值 h 创建一个 htlc,时间锁设置成未来 4 个区块,输出的数额是 2010 聪,其中 10 聪是给路由节点 carol 的手续费。用大白话来表述就是,bob 会给 carol 支付 2010 聪,只要他能在 4 个区块内提供秘密值 r,否则这些钱会返回给 bob。
carol 在自己和 david 的通道中,使用同样的哈希值 h 创建一个 htlc,时间锁设置成未来 3 个区块,输出的数额是 2000 聪。用大白话来表述就是,carol 会给 david 支付 2000 聪,只要他能在 3 个区块内提供秘密值 r,否则这些钱会返回给 carol。
david 用秘密值 r 解锁 carol 设置的 htlc,拿走 2000 聪。
david 拿走资金之后,carol 也会知道这个秘密值 r,他用 r 解锁 bob 设置的 htlc 并拿走 2010 聪。
carol 拿走资金之后,bob 也得到了秘密值 r,他用 r 解锁 alice 设置的 htlc 并拿走 2020 聪。
通过这种机制,alice 成功向 david 支付了 2000 聪,而无需直接建立支付通道。整个过程中,各方无需相互信任,路由节点也获得了应得的手续费。即使支付在某个环节中断,由于时间锁定机制的存在,各方都不会遭受损失,资金会在锁定时间过后自动返回。
然而,htlc 也存在一个潜在的隐私问题:整条路径使用的都是同一个秘密值(原像)。如果某个实体控制了支付路径上的多个节点,就可能通过比对不同节点的输入和输出,推断出完整的交易信息,甚至猜测出付款方和收款方,这就削弱了闪电网络通过洋葱路由实现的隐私保护。
为了解决这个问题,比特币社区提出了 ptlc(点时间锁合约)。在 ptlc 方案中,路径中的每一跳都使用不同的秘密值,这样一来,通过洋葱路由实现的隐私性就得到了保护。nervos ckb 推出的闪电网络 fiber network 计划在未来引入 ptlc,进一步增强闪电网络的隐私保护能力。
结语
闪电网络作为比特币扩容解决方案,其核心在于巧妙设计的支付通道系统。通过开启通道、链下交易和关闭通道三个阶段,闪电网络大幅提升了交易速度并降低了成本。
为确保双向支付通道的安全,闪电网络采用了 ln-penalty 机制,比特币社区还提出了 eltoo、daric 等更优的安全机制,来有效防范潜在的欺诈行为。
这些创新使得闪电网络在保证安全性的同时,为比特币网络带来了显著的性能提升,为实现快速、低成本的小额支付铺平了道路。
随着技术的不断进步,闪电网络还在持续优化和改进。从 ln-penalty 到 eltoo 再到 daric,从 htlc 到 ptlc,我们看到了闪电网络在安全性、隐私保护等方面的不断提升。未来,随着更多创新技术的应用和生态系统的完善,闪电网络有望成为推动加密货币普及的关键基础设施,为实现真正的 p2p 经济贡献力量
参考资料
- https://www.btcstudy.org/2021/09/15/lightning-network-in-depth-part-1-payment-channels/
- https://www.btcstudy.org/2021/09/15/lightning-network-in-depth-part-2-htlc-and-payment-routing/
- https://www.btcstudy.org/2022/01/27/breaking-down-the-bitcoin-lightning-network-eltoo/
- https://www.btcstudy.org/2024/02/07/lightning-network-technology-improvement-and-users-experience-part-2/
- https://www.btcstudy.org/2024/02/23/lightning-network-technology-improvement-and-users-experience-part-3/
- https://www.btcstudy.org/2022/08/19/what-are-ptlc/
以上就是代码网小编给大家分享的解读比特币闪电网络工作原理了,希望此篇文章能够帮助大家更好的了解比特币闪电网络工作原理。
发表评论