闪电网络 (Lightning Network) 是 Joseph Poon 和 Thaddeus Dryja 在 2015 年合著的白皮书中提出的。它在比特币社区中产生了很大反响,在众多关于比特币的论文和白皮书中,被公认为排名第二,其价值仅次于中本聪的创世论文。

由于闪电网络依赖于隔离验证,一直停留在概念和内部开发阶段。从 2017 年比特币隔离验证分叉之后步入正常的发展轨道,2018 年 3 月,LightningLabs 开发并推出了第一个测试版,之后 ACINQ 和 Blockstream 两家公司也相继推出了不同的实现方案。

根据统计网站 1ml 的数据,闪电网络目前有 8,204 个节点,37,901 个支付通道,支付通道总计有 1,021.37 BTC (约 534 万美金)。说明闪电网络在过去的一年中取得了显著增长。

闪电网络的愿景是解决比特币网络的扩容问题。

众所周知,比特币的初衷是实现一个端到端的电子现金系统,为全世界提供一个去信任的、7x24 小时服务的电子支付网络。但是比特币的性能却远远达不到要求。按照平均每个交易 300 字节计算,比特币的平均吞吐量是 5.6 TPS。然而 Visa 的峰值吞吐量可以达到 47,000 TPS。如果对标这个吞吐量,比特币的区块大小要扩张到 8GB 左右,每年要新增 400 TB 的区块数据。这显然是不现实的。

除闪电网络之外,区块链社区同时也提出了众多的扩容解决方案,比如大区块、DPoS、DAG、分片、侧链跨链等。这些方案在比特币的分布式账本技术基础上做了优化,例如调整配置参数、优化数据结构、修改共识算法、账本分区处理、优化网络资源管理等等。但目前来看效果并不理想,在付出了高昂的代价 (增加存储量、增加网络流量、增加逻辑复杂度、弱化去中心化) 之后,却只是获得了非常有限的性能提升,和 Visa 相比依然还有几个数量级的差距。

唯有闪电网络脑洞大开、另辟蹊径。

由于比特币智能合约的复杂性,不利于理解闪电网络的技术原理,OK Research 团队特别使用 Solidity 语言重新实现了闪电网络,深入理解闪电网络的技术实现方式。现将闪电网络的基本流程和原理抽象出来,方便大家快速理解。

01 闪电网络的关键技术原理

闪电网络的核心解决思路是,创建临时的链下支付通道,使得收付款方的多笔往来交易在链下记录更新,只将最终的支付结果在链上记录,这样可以使得大量的交易不必等待链上的区块更新共识,从而提高支付效率。如何实现不上链的交易也能有最终性,以防止篡改,是闪电网络方案中的核心内容。

1、闪电网络解决方案建立在三个重要的概念之上:虚拟银行共同承诺以及支付通道

1)虚拟银行

链上智能合约模拟银⾏机构,作为 Alice 和 Bob 的债务⼈。 虚拟银行具备以下特征:

➤微型:只有两个账户:Alice/Bob

➤⽆需信任:公开、透明、不可篡改、不可伪造、不可撤销

➤⽤户⾃治:Alice 和 Bob 共同管理银⾏资产

➤双重签名:资产重新分配必须要 Alice 和 Bob 双⽅共同签名

闪电网络(上)|如何突破三元不可能:用 Solidity 语言重新实现闪电网络技术原理

2)共同承诺

双⽅对债务调整⽅案达成⼀致,并且双⽅签名。此消息并不⽴刻⼴播到链上,⽽是由双⽅存储在本地,称之为共同承诺。

共同承诺是双⽅真实意愿的表达,是彼此之间对资产分配⽅案的承诺,具备以下特征:

➤不可伪造

➤不可篡改

➤可以覆盖

3)⽀付通道

⽀付双⽅以虚拟银⾏托管双⽅的资产,通过共同承诺重新清算双⽅的存款余额,以达到价值转移的效果,这种⽀付⼯具称之为⽀付通道。

2、承诺方案根据支付通道的直连和非直连区分为:RSMC(Recoverable Sequence Maturity Contract)承诺方案、HTLC(Hash Time Lock Contract) 承诺方案

1) RSMC 承诺方案

参与方包括进攻⽅(主动向虚拟银⾏提交承诺⽅案,分配资产)、防御⽅(被动的接受进攻⽅提交的资产分配⽅案)。

闪电网络(上)|如何突破三元不可能:用 Solidity 语言重新实现闪电网络技术原理

RSMC 承诺方案通过诚信保证⾦机制防止作恶动机。

在进攻方发起清算申请时,防御⽅的资⾦如 100 美⾦⽴刻兑现并返回防御者账户。而进攻⽅的资产 100 美⾦将作为诚信保证⾦被锁定,锁定时长为智能合约设置的 freeze_time 参数(freeze_time 指进攻方资产锁定时长,可由双方协商设定)。

如果,防御方发现当前进攻方要求分配的承诺⽅案是已经被撤销的,那么防御⽅可以在锁定期内通过解开撤销锁,取⾛进攻方抵押的诚信保证⾦作为此次罚⾦。反之,锁定期后,进攻⽅将可取回⾃⼰的诚信保证⾦。

RSMC 承诺方案一式两份,互为对偶承诺。进攻方和防御方各持有一份,对于虚拟银行来讲,他们具有同等效力。对偶承诺可以防止一方的故障导致支付通道锁死,任何一方都有兑现承诺方案的主动权。

➤ 两份对偶承诺的相同点:编号、资产分配⽅案、资产冻结时间。

➤ 两份对偶承诺的不同点:进攻方和防御方位置对调,签名的位置对调,进攻⽅不同 (诚信保证⾦、撤销锁)。

闪电网络(上)|如何突破三元不可能:用 Solidity 语言重新实现闪电网络技术原理

RSMC 承诺⽅案清算流程可分为三部分:

承诺方案搭建过程:

a) Alice 和 Bob 建立#1 RSMC 承诺方案,并各自存入 100 BTC。

RSMC 方案更迭过程,即支付过程:

b) Alice 和 Bob 产生新的债权关系,重新建立#2 RSMC
承诺⽅案各自签名并互换,对资产进行二次分配(注意此时双方拿到的都是对方的签名,一但自己也签名则可立即生效)。

c) 双⽅公开 #1 RSMC 承诺⽅案撤销锁的私钥,同时#1 RSMC 承诺方案失效。

RSMC 方案可以被不断更换,每一次更换后承诺序号加一。

闪电网络(上)|如何突破三元不可能:用 Solidity 语言重新实现闪电网络技术原理

RSMC 方案清算,通道关闭过程 (假设最新的承诺编号为 N):

d) Alice 在 #N RSMC 承诺⽅案(已有 Bob 签名的承诺方案)上签名,并向虚拟银行发起清算申请。

e) Alice 作为进攻方,自身的 50BTC 作为诚信保证金被冻结,而 Bob 的 150BTC 立即被释放。保证金冻结期间,Bob 如发现被要求分配的承诺方案失效,例如是失效的#1 RSMC 承诺⽅案,此时 Bob 可随时通过之前公开的私钥解开撤销锁,取⾛进攻方抵押的诚信保证⾦作为罚⾦。

f) 如承诺方案未失效,则冻结期过后,Alice 可拿回保证金。

闪电网络(上)|如何突破三元不可能:用 Solidity 语言重新实现闪电网络技术原理

上文我们提到,RSMC 已基本可以满足基本的清算要求,但其也存在明显的局限性。即通过 RSMC 方案进行结算的双⽅,必须建⽴直连的⽀付通道才能⽀付。基于此痛点,诞生了 HTLC(Hash Time Lock Contract) 承诺方案。HTLC 可通过多个⾸尾相连的⽀付通道串联起来形成的⽀付路径,支持⾸尾双⽅通过⽀付路径完成⽀付,即没有直连的⽀付通道也能⽀付。

闪电网络(上)|如何突破三元不可能:用 Solidity 语言重新实现闪电网络技术原理

2) HTLC 承诺方案:保证⽀付路径上相邻的两个⽀付的原⼦性

HTLC 承诺方案涉及到两个新的元素:时间锁和 Hash 锁。

➤ 时间锁(ExpireTime):约定在某个时间 T 之内提交才有效,超时则承诺方案失效。

➤ 哈希锁(HashLock):预订⼀个数 H,给出暗语 R,使得 Hash( R ) = H,承诺有效;否则失效。

通常情况下,HTLC 方案包含了 RSMC 方案,在其中作为两个长期有效的 RSMC 方案之间的桥梁过渡作用。若时间锁及哈希锁匹配则可建立新的 RSMC 承诺方案,否则将退回至旧 RSMC 承诺方案。

HTLC 承诺⽅案支付流程:

从左到右,前向建⽴承诺⽅案;从右到左,后向传递暗语 R,完成⽀付。

  1. Carol ⽣成暗语 R,并计算 H = hash(R),均发给 Alice;
  2. Alice 和 Bob 之间建立 HTLC 承诺方案,Expire Time 可设置为 2T,Alice 将 H 发送给 Bob;
  3. Bob 和 Carol 之间建立 HTLC 承诺方案,ExpireTime 可设置为 T (或其他,时长需短于 2T)。Bob 将 H 发送给 Carol;
  4. Carol 提供 H 所对应的 R 给 Bob,Bob 进行核对。若没有超时⽽且哈希锁匹配,则按照 HTLC 分配方案建立长期有效的 RSMC 承诺方案,同时撤销临时的 HTLC 承诺方案,此时,HTLC 承诺方案就完成了自己的桥梁作用。如果 Carol 提供的 R 不匹配或未能在 T 时长内提供 R 值,则 HTLC 承诺方案失效,退回至上一个 RSMC 承诺方案。
  5. Bob 将 Carol 提供给自己的 R 传递给 Alice,Alice 进行核对。之后同上述 Carol 和 Bob。

闪电网络(上)|如何突破三元不可能:用 Solidity 语言重新实现闪电网络技术原理

三者中,Alice 和 Carol 是最终发生交易的两方,Bob 处于做市商角色,起到为 Alice、Carol 构建支付通道的作用。实质上,任何与 Bob 建立支付通道的一方,之间都可以建立支付关系。Bob 与 Alice 及其与 Carol 之间的承诺方案可设置为非等价的,例如 Bob 给 Carol 支付 9.9 美元,但之后收取 Alice10 美元,0.1 美元即可作为做市商的通道费用。

闪电网络(上)|如何突破三元不可能:用 Solidity 语言重新实现闪电网络技术原理

闪电网络(上)|如何突破三元不可能:用 Solidity 语言重新实现闪电网络技术原理

3. 两种承诺方案中需要解决的主要风险:对手方作弊风险、支付通道的非原子性 。

1) 通道内对手风险:有一方不配合怎么办?

对于 RSMC 方案来说,从#N-1 到#N 承诺方案,⽀付⽅有不撤销#N-1 的利益驱动,需要外部⽀付场景约束来促使其公开撤销锁。

对于 HTLC 方案来说,从#N-1 到#N 承诺方案,接收⽅只有公开暗语(相当于撤销#N-1 方案)才能得到⽀付⾦额;而⽀付⽅如果不撤销#N-1, 接收⽅可以直接向虚拟银⾏兑现#N-1 方案。所以 HTLC 构建了一种均衡的⼆元博弈规则,使得理性的参与者不会随意作弊。

2)跨⽀付通道的对⼿风险:相邻通道支付具备原⼦性

先沿着⽀付路径,从发送⽅向接收⽅建⽴依次建⽴HTLC 承诺⽅案 ; 然后反⽅向,从接收⽅向发送⽅传递暗语。所以⼀定是先完成右侧⽀付,然后再完成左侧⽀付。

对于任意⼀个中间节点,向右侧的节点完成了⽀付,意味着规定时间内获得了暗语 R。而左侧的时间锁⽐右侧的长,所以中间节点⼀定能够从右侧节点获取等额补偿。即做市商利益多来自于锁定时间较短的一方。反之,右侧的节点没有完成⽀付,那么它就⽆法得知暗语 R。所以左侧的⽀付也⽆法完成,这也就是相连通道支付具备原子性。

整体来看,信任机制是建立在双⽅的⾃治基础之上的。在决策阶段,防御⽅先签名、进攻方后签名,故防御方具有初审权、进攻⽅具有复审权;在执⾏阶段,进攻⽅具有主动提交权、虚拟银⾏具有执⾏权、防御⽅具有一定期限内的审查权。

02 「三元不可能」的根本症结与「闪电网络」的关键突破点

比特币是一种点对点的电子现金支付网络,其关键突破意义在于使得电子支付拥有了“现金支付”的特点,也就是“交易即结算”——价值符号的转移即代表价值转移,资金的信息流传递与债权债务关系转移同时完成。而电子支付之所以难以实现这种同步性,根本上因为电子时代表示资金的“数字”具备可复制性,导致两个根本性问题:

确权问题及双花问题

对于确权问题,比特币采用了签名的方式来解决,即谁拥有私钥就拥有了比特币的支配权。

对于双花问题,以下图为例,Bob 接受 Alice 转账时,需要确认 Alice 没有向任何人转账过相同一笔资金,这就需要遍历全量账本,防止双花本质上是一个无边界的不存在性证明问题。

闪电网络(上)|如何突破三元不可能:用 Solidity 语言重新实现闪电网络技术原理

中本聪在《Bitcoin: A Peer-to-Peer Electronic Cash System》中写道:

Weneed a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions.

解决双花问题的唯一方案是获得所有交易历史记录,中本聪在此基础上提出了分布式全局账本的方案。但分布式账本的各项成本十分高昂。

➤存储:每⼀个验证节点都要保存⼀份账本的全量副本。

➤验证:每⼀个验证节点都要验证所有交易。

➤通信:每⼀个验证节点都要和其它节点通信。

➤共识 : 每⼀个验证节点都要为共识提供算⼒。

并且,每⼀笔交易被确认所需要的存储、计算、通信复杂度与验证节点的个数 N 成正⽐。如此一来,在越分散的节点中达成全局共识则需要越久的时间,去中心化、安全性与交易性能难以兼顾,也就是我们常说的区块链扩容的“三元不可能”。

过去数年,区块链技术社区不断涌现出新的扩容解决方案,比如大区块、新的数据结构(DAG),新的公式算法(DPOS、PBFT)以及分片技术和侧链跨链技术等。其中,DPOS 和 PBFT 共识算法是典型的牺牲一定的“去中心化程度”,缩小了参与验证交易的共识节点的范围。

而当前非常热门的分片技术和侧链跨链技术,则在此基础上更进一步,虽然同样是让交易验证在更小的节点范围内进行,避免低效的全局共识,但是验证节点开始有了“组”的概念,也就是避免一直让少量固定的节点完成交易验证,造成操纵作弊风险。但是到目前为止,分片技术派仍处在早期阶段,如何攻克分组的“随机性”以及“平衡性”、“依赖性”等问题尚需要更进一步的探索和论证。也就是从实战层面上来讲,尚未有链上扩容方案实现了对“三元不可能”的突破,仅有“闪电网络”这种链下扩容方案一枝独秀!

究其根本,是因为闪电网络跳出了“点对点现金支付”这个概念,引入了类似银行转账的“债权清算”机制,即 A 向 B 转移的并不是对“现金”的所有权,而是对“虚拟银行”的债权。

在双花问题的解决上就由“Bob 需要向尽可能多的人确认 Alice 没有向任何人转账过”转变为“Bob 只需要向虚拟银行确认账户余额”就可以,将一个原本无边界的不存在证明问题大大简化。但是与传统银行不同的是,闪电网络中的“虚拟银行”并不涉及“信用中心”范畴,而是通过智能合约技术来保障虚拟银行将会诚实履行债权清算的义务。

本质上,闪电网络通过创建链下支付通道,在无数个小组内完成了确权和防止双花的动作,极大的缩减了需要全局共识的交易数量
,同时由于各链下小组之间并无强依赖性,使得局部的安全性对整体安全性威胁降低。

闪电网络(上)|如何突破三元不可能:用 Solidity 语言重新实现闪电网络技术原理

03 闪电网络的主要技术优势

闪电网络的技术优势主要包括以下 5 项:

➤ 低交易费

⽆需矿⼯参与,只需为中间节点⽀付通道租⾦

➤ 实时确认

少数节点参与⽀付,交易时间⼏百毫秒至⼏秒不等

⾼并发

⽀付通道上限 = ⽐特币 TPS x 3600 x 24 x ⽀付通道的平均⽣命周期 / 4 = 3,952,800

并发数上限 = ⽀付通道上限 / 每个⽀付占⽤的通道数 = 658,800

*⽀付通道的平均⽣命周期来源:https://1ml.com/statistics;每个⽀付占⽤的通道数根据六度空间理论设置为 6。

➤ 数据存储小

绝⼤多数数据在链下存储,对于链上的存储压⼒不⼤

隐私性

交易数据不上链,不会暴露隐私

更多关于“为什么债权清算模式具有更高的效率”以及“闪电网络目前存在哪些缺陷和新的技术解决方案”,我们将在后续文章中展开。

来源链接:mp.weixin.qq.com