一文读懂比特币闪电网络机制、进展与挑战
撰文:钱柏均,就职于 HashKey Capital Research
审校:邹传伟,万向区块链、PlatON首席经济学家
来源:链闻
是时候认真研究一下比特币闪电网络的技术、解决方案和近期发展了。闪电网络曾经被诟病的资产安全问题在 2019 年得到大幅度改进,用户体验也有所优化。过去闪电网络限于小额支付的问题,也藉由支付路径的扩增而得到解决。
在未来,原子多路径支付伴随 HTLC(哈希时间锁定合约)将会成倍增加路由选择,有望大幅增加通道流动性。但挑战依然存在:闪电网络系统的稳定度和支付规模尚且不足,且无法支持多数应用层,因此离规模化的商业应用及用户大幅扩增还有一段距离。此外,闪电网络通道手续费收费过低,节点数量上升缓慢,如何激励运营节点加入也将是一大考验。
闪电网络是一种比特币链下支付协议,目标是解决比特币的可扩展性问题。尽管闪电网络还处在早期发展阶段,但比特币支付网络加上闪电网络,利用链下支付和「净额轧差」概念,有助于提高比特币交易效率,降低交易成本,一定程度上加强了比特币作为交易媒介的属性。
本文将通过三个方面,阐述和分析比特币闪电网络的进展与挑战:
- 第一部分介绍闪电网络运作机制;
- 第二部分介绍 2019 年闪电网络技术进展;
- 第三部分介绍闪电网络落地概况和有待解决的问题。
闪电网络运作机制
闪电网络基于微支付通道(双向支付通道)演进而来,由微型银行和支付通道两个概念所构筑,并就支付通道概念设计出了两种类型的交易合同——可撤销的序列成熟度合约 RSMC(Revocable Sequence Maturity Contract)和哈希时间锁定合约 HTLC (Hashed Timelock Contract)。其中,RSMC 解决通道中货币单向流动及确权问题,HTLC 解决货币跨节点传递通道的问题。闪电网络的优点包括:一是交易费用低廉,无需矿工参与,用户只需为中间节点支付通道费用。二是交易时间迅速,只有少数节点参与,维持秒级交易时间。三是数据存储负担小,大多数数据存储在链下,对链上存储压力不大。四是隐私性,交易数据不上链,隐私性得到一定的保护。
接下来依次介绍闪电网络中的关键组成部分:智能合约(微型银行)、支付通道(RSMC 和 HTLC)、路由和费用机制。
智能合约
闪电网络链上智能合约如同微型银行运作。用户 A 与 B (相互为交易对手) 如同微型银行的存款人,而支付通道中的交易就是双方调整各自存款余额的行为。微型银行存在以下要素 :- 点对点 : 只存在 A、B 双方
- 无须信任 : 公开、透明、不可篡改、不可伪造
- 自治 : A、B 共同管理链上资产
- 双签 : 链上资产分配需要双方签名
- 承诺 : 双方对存款余额调整方案达成⼀致,并且双方签名。此消息并不立刻广播到链上,而是由双方存储在本地,并可经由双方同意进行覆盖。
支付通道
支付通道是支付双方以闪电网络托管双方的资产,通过共同承诺重新清算双方的存款余额,以达到价值转移的效果,由 RSMC 及 HTLC 两个合约所组成。RSMC
首先假定交易双方之间存在一个支付通道。交易双方先预存一部分资金到微支付通道里,初始情况下双方的分配方案等于预存金额。每次发生交易后,需要对调整后的资金分配方案共同进行确认,同时签字把旧版的分配方案作废。任何一方需要提现时,将他手里双方签署过的交易结果写到区块链网络中并确认。需要强调的是,只有在提现的时候才需要通过区块链。
任何一个版本的资金分配方案都需要经过双方的签名认证才合法。任何一方在任何时候都可以提出提现的请求,提现时需要提供一个双方都签名过的资金分配方案(意味着某次交易后的结果,被双方确认过,但未必是最新结果)。在一定时间内,如果另外一方拿出证明表明这个方案并非最新的交易结果,则提出方的资金归于质疑方(罚金机制);否则按照提出方的结果进行分配。罚金机制可以确保用户不会故意拿旧交易结果来提现。即使双方都确认了某次提现,提出方的资金到账时间要晚于对方。
- RSMC 交易构造
图 1:RSMC 交易构造,来源:https://blocking.net/1516/bitcoin-lightning-network-rsmc/
假设 Alice 及 Bob 想进行链下闪电网络交易,并且双方预存金额均是 0.5 BTC。
首先,Alice 和 Bob 各自将 0.5 BTC 的保证金打到一个 2-2 多重签名地址当中 (即 Funding Tx)。Funding Tx 交易暂不被签名,也不被广播到链上。
接着,Alice 构造一笔承诺交易 C1a,其中包含一笔退款交易 RD1a。C1a 的第一个输出是 RD1a,由 Alice 另一个私钥 Alice2 和 Bob 私钥的多重签名向 Alice 的地址转入 0.5 BTC。但 RD1a 包含一个 seq 变量以防止其马上进入区块,而是要等 seq=100 个区块。C1a 的第二个输出是向 Bob 的地址转入 0.5 BTC。Alice 将 C1a/RD1a 交给 Bob 签名。
与此同时,Bob 构造一笔承诺交易 C1b,其中包含一笔退款交易 RD1b。C1b 的第一个输出是 RD1b,由 Bob 的另一个私钥 Bob2 和 Alice 的私钥的多重签名向 Bob 的地址转入 0.5 BTC。但 RD1b 包含一个 seq 变量,防止其马上进入区块,而是要等 seq=1000 个区块确认。C1b 的第二个输出是向 Alice 的地址转入 0.5 BTC。Bob 将 C1b/RD1b 交给 Alice 签名。
然后,Bob 对 C1a/RD1a 签名并返给 Alice,同时 Alice 对 C1b/RD1b 签名并返给 Bob。
最后,Alice 检查 C1a/RD1a 以及 Bob 的签名,确认后自己签名。同时,Bob 检查 C1b/RD1b 以及 Alice 的签名,确认后自己签名。
可以看出两点:第一,C1a/RD1a 和 C1b/RD1b 在结构上相互对称,实际上是站在 Alice 和 Bob 各自立场上,对双方预存金额均是 0.5 BTC 这一事实的不同表述(「一个产权关系,各自表述」)。这有点类似中国古代「券」的概念:以竹片写作契约,分左右两券,各执其一,其中左券为契约中履约索偿的凭证。但 C1a/RD1a 和 C1b/RD1b 在地位上比左右券平等。
第二,C1a 和 C1b 花费的是同一个交易输出,因此 C1a 和 C1b 中只有一个能被打包进区块。如果 Alice 广播 C1a,那么 Bob 马上就能拿到 0.5 BTC,而 Alice 要等 seq=1000 个区块的确认后才能拿到 0.5 BTC。反之,如果 Bob 广播 C1b,那么 Alice 马上就能拿到 0.5 BTC,而 Bob 要等 seq=1000 个区块的确认后才能拿到 0.5 BTC。换言之,如果交易的一方单方面广播交易以关闭支付通道,他将延迟拿回自己的资金,而对方则可以马上拿回自己的资金。这种安排构成对后者的保护。
- RSMC 交易更新
图 2:RSMC 交易更新,来源:https://blocking.net/1516/bitcoin-lightning-network-rsmc/
与此同时,双方需要将旧版的资金分配方案(C1a/RD1a 和 C1b/RD1b)签名作废掉。这就要用到「显示以撤销」安排(Reveal to Revoke)。
在 C1a 的第一个输出 RD1a 中,Alice 把自己的另一个私钥 Alice2 交给 Bob,这意味着 Alice 放弃 C1a 而认可 C2a。如果 Alice 反悔,那么 Bob 可以用 Alice2 构造一个惩罚交易 BR1a。惩罚交易把 Alice 的资金转入 Bob 的地址,并且不受 seq 变量的制约。如果 Alice 广播 C1a/RD1a,那么 Bob 将广播 BR1a。BR1a 将在 RD1a 之前执行,从而对 Alice 构成惩罚。
图 3:惩罚交易,来源:https://blocking.net/1516/bitcoin-lightning-network-rsmc/
反之,在 C1b 的第一个输出 RD1b 中,Bob 把自己的另一个私钥 Bob2 交给 Alice,这意味着 Bob 放弃 C1b 而认可 C2b。类似地,Alice 可以构造惩罚交易对 Bob 进行反制。
由上面不难看出,seq 变量提供了一个实施惩罚和反制的时间窗口。
- RSMC 交易终止
HTLC
RSMC 已可以满足基础清算要求,但也存在明显的局限性:通过 RSMC 方案进行结算的双方,必须建立直连的支付通道才能支付。基于此痛点,闪电网络需要另一个协议 HTLC。
HTLC 支持「条件支付」(Conditional Payment),通过多个首尾相连的支付通道串联起来形成的支付路径,支持首尾双方通过支付路径完成支付。
HTLC 的核心是时间锁和 Hash 锁。时间锁是交易双方约定在某个时间 T 之内提交才有效,超时则承诺方案失效(无论是提出方或接受方)。哈希锁可以理解为,对一个哈希值 H,提供原像 R,使得 Hash(R) = H,承诺有效;否则失效。如果支付交易因为各种原因未能成功,时间锁能够让交易参与各方收回自己的资金,避免欺诈行为。
假设 Alice 想要开启一个与 Bob 的交易,交易金额为 0.5 BTC,但 Alice 需要通过 Carol 才能与 Bob 建立通道进行交易(图 4):
图 4:HTLC 与支付路径
第一步:Bob 设定原像 R (也被称为暗示数),把哈希值 H=Hash(R) 告诉 Alice。
第二步:Alice 通过 HTLC 向 Carol 进行条件支付:当且仅当 Carol 在 T 时刻前提供与哈希值 H 对应的原像,Alice 才向 Carol 支付 0.5 BTC。类似地,Carol 通过 HTLC 向 Bob 进行条件支付:当且仅当 Bob 在 t 时刻前提供与哈希值 H 对应的原像,Carol 才向 Bob 支付 0.5 BTC。其中,t<T。
第三步:Bob 在 t 时刻前向 Carol 提供 R,获得 0.5 BTC,此时 Carol 知悉 R。反之,0.5 BTC 会返回给 Carol,Carol 不会遭受任何损失。
第四步:Carol 在 T 时刻前向 Alice 提供 R,获得 0.5 BTC。反之,0.5 BTC 会返回给 Alice,Alice 不会遭受任何损失。
可以看出两点:第一,在 HTLC 下,支付要么完成,要么完不成但不会对参与者造成损失,因此是「原子式」的(Atomic),这是序贯博弈均衡的结果;第二,原像 R (信息)和资金相向流动,原像 R 可以被视为收据(Receipt)。
总的来说,RSMC 保障两个人之间的直接交易可以在链下完成,HTLC 保障任意两个人之间的转账都可以通过一条首尾相接的支付通道来完成。闪电网络整合这两种机制,即可实现任意两个人之间的交易都在链下完成。在整个交易中,智能合约起到了中介的重要角色,而区块链网络则确保最终的交易结果被确认。
路由
闪电网络使用源路由和洋葱路由。通过源路由,源节点负责计算从源到目的地的整条支付路径。为此,源节点需要下载完整的公开支付通道表,以便计算出一条支付路径,并根据这条支付路径涉及的所有通道的负载量来计算手续费和所需条数。在点对点交易中,这个过程会涉及到大量数据,而且数据量还会随着网络扩大而增加。而洋葱路由则让交易链中间节点无法得知整个交易发起或接受方,保障了用户隐私。由于 HTLC 的时限性,交易达成速度不够快就会失效,因此提高交易传播速度对闪电网络效率非常重要。而要提高交易传播速度,最重要问题便是如何规划最短支付路径。
闪电网络运用 PBMC (Probability-based mission control) 机制解决这个问题。初始设定每个节点都有一个默认成功率,并根据实际转账完成率调整。网络路由的交易越多,任务控制组件就越了解这个网络的特性,也就能更好地规划支付路径。
费用机制
对于链上 BTC 交易,用户选择每笔交易的手续费,矿工选择手续费较高的交易生成区块,以最大程度提高收入。但闪电网络目前是以另外一种方式运作:节点运营商设定手续费,用户为他们的支付选择路径和通道,以最大程度降低手续费。因此,闪电网络能够提供较低廉的收费架构。运营商提供专门化服务,运营商之间(而非普通用户)就费率展开竞争更加恰当,操作上也更为便捷。在闪电网络中,节点运营商必须确定两种类型的路由费:基本费和费率。基本费是每次交易通过路由支付时收取的固定费用,以千分之一聪来表示。例如,基本费 1000,这就表示每个交易的基本费是 1 聪。而费率则指按支付价值的一定百分比来收费,实际费率公式为费率除以 1,000,000。例如,费率 1000 是指 1,000/1,000,000,也就是 0.1%,一旦转账成功,该路由通道会收取 0.1% 的转账价值费用。
此外,为了给路由支付提供流动性,闪电网络节点运营商需要在支付通道锁定一定数量的比特币,包含入境流动及出境流动。入境流动指节点的支付通道可以接收其他路由节点的最大资金数额。而出境流动则指节点的支付通道可以用来支付其他路由节点的最大资金数额。节点可以控制出境流动,但无法控制入境流动,因为入境流动取决于其他路由节点存放在通道内的资金数额。比如,如果节点 A 要通过路由节点 B 收取节点 C 的 1 BTC,则节点 A 需要有至少 1 BTC 的入境流动。也就是路由节点 B 需要放置至少 1 BTC 在 A、B 之间的通道中,交易才能成功。
入境流动无法控制会造成闪电网络交易效率低下。如果两个节点交易中间隔了一个以上的路由节点,就算能够自身入境流动余额足够,但无法确认其他路由节点的入境流动余额是否足够。只要有一个路由节点入境余额不够,就会造成交易失败。
节点运营商需要时时调整基本费、费率并监控调整后影响。因为支付需求通道时常改变,再加上目前费率普遍过低 (一个大型节点日均收入为 10 万聪,约等于 7 美元),所以多数节点入不敷出。因此,当前闪电网络中的流动性提供者,并非受投资回报所推动。但为了实现大规模应用,闪电网络费率设计需要重新思考激励力度,通过兼顾投资回报和流动性架构以吸引节点运营商。
2019 年闪电网络技术进展
2019 年,闪电网络有许多进展,大幅增加了易用性、用户资产安全及支付规模。以下,是较为重要的 4 个技术进展:瞭望塔 Watchtowers
闪电网络白皮书首次描述了瞭望塔机制,该机制在 2019 年改善并应用。瞭望塔针对的问题是,使用闪电网络的人需要保持在线状态,以确保他们的交易对手没有试图窃取资金。暸望塔可以检测到不诚实的一方是否试图窃取资金,然后广播正确交易的消息,将资金发回诚实的一方(即使诚实性节点处于离线状态)。换言之,如果一个不良行为节点试图传播一个旧的交易,瞭望塔就会惩罚该节点。
闪电网络用户可以连接专业运营的第三方暸望塔来保护他们的利益,任何路由节点也都可以运行自己的瞭望塔来保护自身利益。暸望台还可带来威吓与抑制欺诈的效果。对潜在攻击者来说,因为不清楚交易对手是否链接暸望塔,欺诈成本会大幅度增加。图 5 显示了瞭望塔运行机制,瞭望塔实际上是由专业机构代一般用户实施图 3 的惩罚机制。
图 5:瞭望塔运行机制
延续图 1-图 3 的表述,考虑两个交易对手 Alice 和 Bob,各放 0.5 BTC 在通道(即 C1a/RD1a 和 C1b/RD1b,不妨称为交易 1 或「老交易」),然后 Alice 支付 Bob 0.1 BTC (即 C2a/RD2a 和 C2b/RD2b,不妨称为交易 2 或「新交易」)。此时,通道余额应为 Alice 拥有 0.4 BTC,Bob 拥有 0.6 BTC。假设 Alice 想欺诈,把交易 1 含有双方签名的通道状态广播到链上。如果在 seq=1000 个区块确认时间内,Bob 没有上线提出反对,欺诈便会成功,Bob 将损失 0.1 BTC。
假设 Bob 委托瞭望塔来防范交易对手诈欺。Bob 建立一个撤销型交易(即图 3 中的 BR1a),授权瞭望塔必要时可以撤销交易对手广播的过期交易。Bob 将该交易预先签名并设定暗示数,将暗示数及预先签名的交易送至瞭望塔。该暗示数可以让瞭望塔识别出过期交易,但不能让瞭望塔得知交易明细或通道余额。
此后,每当区块链上广播新交易时,瞭望塔会根据哈希表来比对暗示数。一旦有交易之暗示数符合 Bob 设定之暗示数,瞭望塔就可知该交易为须撤销之交易。此时,瞭望塔解密 Bob 提供的撤销型交易并证明 Alice 发布的是过期交易,重组并广播 Bob 预先签好名的交易,将 Alice 通道内的余额罚没给 Bob。也就是说,只在欺诈行为发生时,瞭望塔才可以解密撤销型交易并得知其中内容,因此不会严重影响用户隐私。
潜交换 Submarine Swaps
潜交换技术是由 Alex Bosworth 创建,被作为一种无缝衔接链上和链下比特币流通的技术。潜交换运作机制类似 HTLC,但同时涉及链上和链下交易(图 6)。
图 6:潜交换运作机制
假设 Alice 要将链上比特币支付给闪电网络上的用户 Bob,但是 Alice 并没有闪电网络通道。
第一步:Bob 会设定一组暗示数 R (即原像),并将其哈希值 H 告知 Alice。
第二步:Alice 通过链上 HTLC,将比特币连同 Bob 的闪电网络地址一同送至潜交换服务商,要求潜交换服务商在一定时间内揭示暗示数才能获得这笔链上比特币。类似地,潜交换服务商通过链下 HTLC,将同样数量的比特币通过闪电网络支付通道转到 Bob 的闪电网络地址,要求 Bob 在一定时间内揭示暗示数才能获得这笔链下比特币。
第三步:Bob 揭示暗示数获得链下比特币,潜交换服务商再利用暗示数获得链上比特币,整个潜交换完成。
由此可见,潜交换最大功用是提升链上、链下的互操作性,并因为 HTLC 的特性,能将信用成本降至最低。潜交换可以用来延长支付通道使用寿命上。闪电网络交易需要交易双方通道余额充足。当通道流动性枯竭后,用户倾向关掉原有通道,等到下次需要时再开启一个新通道,但这限制了闪电网络通道扩展和商业规模化。在使用潜交换时,用户可以无需经由链上交易,经由潜交换服务提供商就可获得链下比特币,从而维持通道余额。
原子多路径支付 Atomic Multi-Path Payments
目前闪电网络交易单次支付的路由只能是单方向的。假设 Alice 要支付 0.01 BTC 给用户 Bob,那么他不仅必须在单通道上有 0.01 BTC,而且该路由上的所有中间商也必须在通道中准备好 0.01 BTC 才能进行交易。换句话说,支付额越大,就越难找到合适的支付路径。
多路径支付的想法在 2018 年已经有丰富的讨论,最初想法如下:将大额付款分割成小部分款项,这些小部分款项再通过不同的节点运营商从付款人转移到收款人手里。该解决方案面临的挑战是,利用闪电网络支付有失败的可能,将一笔交易分割为多笔交易可能出现部分交易成功而部分交易失败的情况。换言之,越大额的支付越可能出现部分支付的问题,这会制约用户使用闪电网络进行大额付款的意愿。
解决方法是原子多路径支付,简单来说就是多路径支付+防部分支付机制。「原子」的含义是:仅当所有小额支付均成功时,交易对手才会收到完整的付款;如果某些小额付款失败,那么整个交易就会失败,资金将退回付款方。
图 7:原子多路径支付流程
原子多路径支付有如下好处 : 第一,提升隐私性。不管拆分成多少个通道来支付款项,只有交易双方知道其中的过程。第二,提升支付体验。用户可以一次性转出大额款项,无须考虑通道金额上限问题。
中微子协议 neutrino
中微子协议由一条「过滤层」链所组成。每一个过滤层和一个比特币区块连结,以压缩的方式代表其连结的区块,过滤层相较于原区块大小约压缩 250 倍。中微子协议目的是减轻客户端硬件设施的负担,只撷取和交易双方相关的数据,避免硬件设施需要和比特币主链时刻同步。中微子协议运行流程如下:
图 8:中微子协议运作流程
每当一个新区块产出,全节点计算区块对应的中微子过滤层,并发送给闪电网络上所有中微子客户端。因此,大约每 10 分钟,客户端会收到一个中微子过滤层,客户端比对所有钱包,看是否有任何交易与钱包用户相关。一旦发现该区块包含钱包用户相关交易,客户端会下载「剥离区块」。「剥离区块」只包含交易数据,不包含签名和「见证」数据,可以让客户端减少一半以上硬件负担。通过新数据,客户端得以更新钱包余额。
一般来说,闪电网络钱包运营商希望提供的产品具有高用户体验及低使用门槛的特点,但提高易用性往往会降低安全性,比如个人资料遭窃取或用户资产丢失。此外,大量数据承载使闪电网络难以在移动端实现。中微子协议让用户不必运行全节点,且可以在移动设备上进行操作,对用户量扩展有极大帮助。
闪电网络落地概况和有待解决的问题
闪电网络落地概况Bitcoin Visuals 提供的闪电网络节点数、通道数和 BTC 承载量等关键指标显示,闪电网络自 2019 年 4 月达到增长高峰后陷入停滞。
目前闪电网络节点数量为 5104 个。节点数量在 2019 上半年经历了持续增长,从 2019 年 1 月 4 月节点数量增加了 77%。但从 2019 年 5 月初截至 2020 年 2 月 10 日,闪电网络节点数却只增加了 15%,增长率大幅下滑。
闪电网络通道数量从 2019 年 4 月初开始下滑,截至 2020 年 2 月 10 日下滑了 20%,目前通道数量为 32,030 个。
BTC 承载量从 2019 年 1 月的 525.80 枚上升到了 2019 年 4 月初的 1,059.50 枚,增幅为 101.5%;但自 2019 年 4 月初截至 2020 年 2 月 10 日,BTC 承载量已下滑至 865.58 枚。
图 9:闪电网络节点数 (左)、通道数 (右) 和 BTC 承载量 (左) 变化
闪电网络节点数、通道数及 BTC 承载量从 2019 年 4 月开始下滑主要有三个原因 :
- 比特币币价从三月开始快速上涨,投资人变现意愿提高
但从 2019 年 3 月开始,比特币上涨,且闪电网络尚未有足够多的应用场景及商户,许多闪电网络用户选择将比特币在二级市场变现套利而非继续存放在闪电网络。从图 10 也可以看出,从 2019 年 4 月起,比特币交易量大幅上升,意味着比特币在二级市场流通量增加,相对地,存放在闪电网络通道的比例下降。
图 9:比特币币价 (左) 与节点数 (右)
图 9:比特币交易量 (左) 与节点数 (右)
- 闪电网络节点盈利无法覆盖成本及风险
- 闪电网络为天然垄断市场,小型节点逐渐无法生存
闪电网络有待解决的问题
- 节点需保持在线
- 路由经济设计不佳
为了提高交易成功率,每个节点都需要维护所有的节点和通道列表。随着网络规模增大,这个表也越来越大,需要同步和更新的消息也越来越多,这会占用大量带宽。即使如此,发送前无法保证一定成功,发送过程中通道还有可能被关闭。可能解决方式是建造一个可信赖的路由网络,由规模化的商业节点负责担任路由节点,构建一个成本低且高效的路由网。