比特币闪电网络的运作机制进展与挑战分析
扫描二维码
随时随地手机看文章
比特币闪电网络曾发展迅猛,如今为何又陷入停滞?
是时候认真研究一下比特币闪电网络的技术、解决方案和近期发展了。闪电网络曾经被诟病的资产安全问题在 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 交易更新
假设 Alice 向 Bob 支付 0.1 BTC,那么双方在支付通道内的资金分配方案将从 0.5/0.5 变为 0.4/0.6。与前文一样,按照「一个产权关系,各自表述」的原则,Alice 和 Bob 将分别构造 C2a/RD2a 和 C2b/RD2b,以确认调整后的资金分配方案(图 2)。
图 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):
第一步: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