背景图

隔离见证、闪电网络理解

我记得刚开始接触区块链的时候应该是2017年12月份左右,后来就投入到项目的开发中,但是对于区块链基础知识的学习,我想我还是差得很远,当时去理解隔离见证和雷电网络的时候有点捉襟见肘,大概的意思吧!现在也明白了这里面的意思,但是觉得还是需要写一篇博客记录一下,免得自己又忘记了,这可不是什么好现象。

隔离见证

隔离见证已经于2017年8月在比特币上激活了。最近比特币正在朝着下一个扩容方案努力,闪电网络 Lightning Network。闪电网络的启动必须基于更多的用户使用隔离见证地址。

源起

现在的比特币网络交易量特别大,但是区块10分钟一个,一个区块限制1M大小,这就造成了比特币网络的拥堵。如果大家了解交易结构就一定知道加解密脚本,这些脚本都是放在区块里面的,于是大家就想如何能把脚本从区块中拿出来单独存储,这样一个区块不就可以容纳更多的交易了吗?于是下图的结构就出现了:

隔离见证的其中一个好处是能缓解我们交易堵塞的问题。但是最重要的是为了闪电网络铺路。一种建立在比特币底层网络的智能合约。

隔离验证确实不是很好的解决之道,因为脚本还是需要存储的,没有脚本的交易,那么这个交易是不是可以随便花费。另外对于钱包节点都是要去检查脚本的准确性,这个还是需要有脚本数据的,所以这个也不是简单的事情吧!

分叉

隔离见证可以应用软分叉或者硬分叉,当然最终实施的是软分叉。新的节点是可以兼容后者的,但是旧节点是不是兼容新版本的区块这个是需要考虑的,如果不兼容那么就肯定出现软分叉。但是官方的说明是旧版本的节点不用升级,这句话的话外之音就是旧节点也是支持新版的区块(包含隔离见证)。看来这项技术很好。至于BCH应该是人为的硬分叉了。这部分知识可参考隔离见证比任何硬分叉都高级

上篇的文章中提到了Core团队很多的问题,也许确实有问题,但是作为开发者,考虑前后版本兼容也是应该的,毕竟谁都不想出问题。另外还有一点就是一旦一个项目上线,可做的可能真的就不多了,一是改动复杂,程序员不想动,二是工作量比较大!对于这场战争我还是当个第三者吧,看惯了公司风风雨雨,拿刀开干的人还是很少的。一旦变革失败也不会有人同情,core团队可能有自己的考量。毕竟对于资本市场来说一切都是那么的浮躁。

闪电网络

闪电网络提供了一个可扩展的微支付通道网络。交易双方若在区块链上预先设有支付通道,就可以多次、高频、双向地通过轧差方式实现瞬间确认的微支付;双方若无直接的点对点支付通道,只要网络中存在一条连通双方的、由多个支付通道构成的支付路径,闪电网络也可以利用这条支付路径实现资金在双方之间的可靠转移。

上面的这段话可能比较难于理解,总的来说就是通过多签名实现多重交易的划分,这里需要了解比特币的智能合约P2SH脚本的相关知识。

闪电网络并不试图解决单次支付的银货对付问题,其假设是单次支付的金额足够小,即使一方违约另一方的损失也非常小,风险可以承受。因此使用时必须注意“微支付”这个前提。多少资金算“微”,显然应该根据业务而定。

技术本质

闪电网络的关键技术有三,后后依赖于前前,依次是:RSMC,HTLC和闪电网络。技术实现虽然复杂,但本质却很简单。

RSMC解决了通道中币单向流动问题,HTLC解决了币跨节点传递的问题。这两个类型的交易组合构成了闪电网络。这里面还会用到我们之前提到的BIP-65 OP_CHECKLOCKTIMEVERIFYBIP-68使用共识序列号记录相对锁定时间,这两篇文档提到了交易锁定的问题,也提到了分叉的问题。

RSMC

我们先来创建一个序列到期可撤销合约(RSMC),Alice和Bob是合作方,经常有比特币往来,所以他们决定各拿出0.5BTC放入通道中,便于业务往来。解释一下下方RSMC交易的结构(图X),左侧为Alice的视角,右侧为Bob的视角。中间Funding Tx为共同可见,C1a和RD1a为Alice持有,C1b和RD1b为Bob持有。交易图中带有尖括号的签名表示待填入。

创建交易

来对上面的图进行一番解释:

  1. 双方各拿出0.5BTC,构建Funding Tx,输出为Alice和Bob的2/2多重签名。此时,Funding Tx未签名,更不广播。
  2. Alice构造Commitment Tx:C1a和RD1a,并交给Bob签名。C1a的第一个输出为多重签名地址,Alice的另一把私钥Alice2和Bob的2/2多重签名,第二个输出为Bob 0.5BTC。
  3. RD1a为C1a第一个输出的花费交易,输出给Alice0.5BTC,但此类型交易带有sequence,作用是阻止当前交易进块,只有前向交易有sequence个确认时才能进块。
  4. Bob构造Commitment Tx:C1b和RD1b,并交给Alice签名。结构与C1a、RD1a是对称关系。
  5. Bob对C1a和RD1a进行签名,并将签名给Alice;同理,Alice对C1b和RD1b签名,完成后给Bob。此时,由于并未对Funding Tx进行签名,任何一方均无法作恶,任何一方也不会有任何损失。
  6. 双方均完成对commitment Tx的签名并交换后,各自再对Funding Tx进行签名,并交换。此时,Funding Tx是完整的交易,广播之。

上述过程以及结构图的描述,就是创建RSMC的全部过程。C1a, C1b两笔交易花费的是同一个输出,故他们两个交易只有一个能进块。若Alice广播C1a,则Bob立即拿到0.5BTC(C1a的第二个输出),而Alice需要等C1a得到1000个确认,才能通过RD1a的输出拿到0.5BTC。另一方,若Bob广播C1b,则Alice立即拿到0.5BTC,Bob等待C1b得到1000个确认,才能通过RD1b拿到0.5BTC。也就是说,单方广播交易终止合约的那一方会延迟拿到币,而另一放则立即拿币。

交易更新

Alice和Bob各自0.5BTC的余额,此时Alice从Bob处购买了一件商品,价格为0.1BTC,那么余额应该变为Alice 0.4BTC,Bob 0.6BTC。于是创建新的Commitment Tx,对于Alice来说是C2a 和RD2a,对于Bob来说是C2b和RD2b,过程与上面类似。

此时两个状态均是有效的,那么最核心的问题来了,如何才能彻底废弃掉C1a和C1b呢?
RSMC采用了一个非常巧妙的方法,在C1a的第一个输出中,采用了Alice2和Bob的多重签名,Alice将Alice2的私钥交给Bob,即表示Alice放弃C1a,承认C2a。

Alice交出Alice2的私钥给Bob,那么Bob就可以修改RD1a的输出给他自己,形成新的交易BR1a。若Alice破坏合约存在C2a的情况下依然广播出C1a,那么Alice的惩罚就是失去她全部的币。Alice交出Alice2的私钥,或者对交易BR1a进行签名,两者是等同的,都是对C1a的放弃。反之亦然,Bob交出Bob2的私钥给Alice即意味放弃C1b,而仅能认可C2b。引入sequence的目的是,阻止后续交易进块(RD1a),给出一个实施惩罚窗口期,当发现对方破坏合约时,可以有1000个块确认的时间去实施惩罚交易,即广播BR1a代替RD1a。若错过1000个块时间窗口,则无法再实施惩罚了(RD1a进块了)。

交易关闭

关闭RSMC,直接按照最终的余额构造出一个Commitment TX即可,例如输出为Alice0.1BTC,Bob0.9BTC,无需再设置多重签名,构造惩罚交易等。

中转交易(真实的闪电网络,HTLC)

我们来看一下基本的流程图吧!

这里面的R就是支付的口令,其实就是交易节点之间没有直连的通道,需要其他人待转,这些人会收手续费。这里面需要解决几个问题(我的思考):

  1. 如何建立初始的支付通道
  2. 如果两个节点间无直接支付通道,如何找到最佳的支付通道。
  3. 如何保证第三方不作弊,防止现金丢失(前面的讲的都是这个问题)

总结

RSMC

闪电网络的基础是交易双方之间的双向微支付通道,RSMC(Recoverable Sequence Maturity Contract)定义了该双向微支付通道的最基本工作方式。这是要求双方都拿出资金放到合约上,然后输出动态分配,最后确认输出后上链,这样的好处就是支付完全是在链下执行。

为了鼓励双方尽可能久地利用通道进行交易,RSMC对主动终止通道方给予了一定的惩罚:主动提出方其资金到账将比对方晚,因此谁发起谁吃亏。这个设计虽然增加了技术复杂度,但应该说是合理的。 这样许多交易就会在区块链下面执行,不会产生交易(只产生预备交易),最后交易才会上链。还有就是交易的凭证怎么保证?所以这个方式或许也有很多技术和现实的缺陷所在。

通道余额分配方案的本质是结算准备金。在此安排下,因为要完全控制资金交收风险,每笔交易都不能突破当前结算准备金所施限制。

HTLC

RSMC只支持最简单的无条件资金支付,HTLC(Hashed Timelock Contract)进一步实现了有条件的资金支付,通道余额的分配方式也因此变得更为复杂。

通过HTLC,Alice和Bob可以达成这样一个协议:协议将锁定Alice的0.1 BTC,在时刻T到来之前(T以未来的某个区块链高度表述),如果Bob能够向Alice出示一个适当的R(称为秘密),使得R的哈希值等于事先约定的值H(R),Bob就能获得这0.1 BTC;如果直到时刻T过去Bob仍然未能提供一个正确的R,这0.1 BTC将自动解冻并归还Alice。

雷电网络

基于闪电网络的思路,以太坊社区也提出了自己的链下微支付通道解决方案:雷电网络(Raiden Network)。
延续了以太坊的风格,把本来较简单的问题复杂智能化。大致与闪电网络相同,但细节有些地方更复杂。例如:第一层面的那个旧版本作废,其实只要加上时间戳看哪个时间新就可以了。但是其额外增加了一个单增的Sequence Number字段来标明哪个有效。还有记录分配余额即可,但雷电网络记录的是增减变动量。在第二个层面上,雷电网络引入了较HTLC更通用和复杂的“Smart Condition”。就是说HTLC中采用的成熟简单地求HASH函数,在雷电网络中替代成了用户可自己设置的任意函数,就是说向外扩展了,更加智能,但同时面临的风险可能就越大。

Corda

相近技术的低层思想是相通的,受到闪电网络思想的启发,知名的R3也宣布发布非区块链的分布式账本应用Corda,其本质思想应该是与闪电网络较相近似。
关于Corda的资料较少,如整个R3较闭源封闭一样,只是R3 CEV的首席技术官Richard Brown之前在博客中披露些Corda的主要特点:

  1. 没有多余的全局数据共享:有合法需求的参与方才可按照协议获取数据;
  2. Corda编写和配置在企业间流转,无中心控制者;
  3. Corda在企业间单个交易水平达成共识,而不是在系统水平上;
  4. 系统设计直接支持监管观察员节点;
  5. 交易直接由交易双方验证,而不是由一大群不相干的验证者进行;
  6. 支持多种共识机制;
  7. 记录了智能合约代码和人类语言法律文件的清晰联系;
  8. 用行业标准工具创建;
  9. 没有原始加密货币。

总结

将交易和智能合约的执行放在链下快速地执行,仅在必要时才将其在链上公开结算执行,这就是闪电网络带给我们的绝佳思路。同时可增加对闪电结链上算时的手续费,减轻链上压力的同时有可能提升矿工收入,因理论上不可能所有交易都闪电。比特币主链上交易有其它任何形式链下交易或侧链交易所无法替代的优点。

参考和引用

三分钟让你了解什么是Segwit隔离见证
隔离见证比任何硬分叉都高级
比特币扩容为什么选择2MB?
什么是比特币的闪电网络?
什么是隔离见证?
详解最近大热的闪电网络、雷电网络和CORDA
6.9Bite酱一闪电网络⚡大白话零门槛讲解

0%