浅谈闪电网络

TPS

网络拥堵、转帐时间长、交易缓慢、交易费用高等一直是比特币被诟病的问题。客观看待,比特币TPS低有利有弊。以太坊Vitalik提出了当前区块链技术面临的不可能三角:去中心化(Decentralization)、安全性(safety)和可扩展性(Scalability)。可扩展性主要也是指TPS。
比特币如今每秒处理7笔交易,以太坊每秒25笔交易,经过优化可能会提升到50或100,visa每秒的交易处理能力是2000笔,EOS号称优化后TPS可达百万,2017天猫双11创下了32.5万笔/秒交易建立的纪录,在这个数字后面,更是每秒多达几千万次的数据库写入(数据来源于公众号:阿里巴巴数据库技术)。
全部的区块链都会遇到不可能三角问题。针对于区块链的扩展性,有多种解决方案,好比:侧链、闪电网络(雷电网络)、分片、DAG等。
上周参加了一个分享会,研究了一下闪电网络,这篇文章主要写一下本身的理解。由于闪电网络原论文晦(ying)涩(wen)难(bu)懂(hao),若是有发现理解的不对的地方,请指正。
<<The Bitcoin Lightning Network:Scalable Off-Chain Instant Payments>>数据库

闪电网络-整体思想

  1. 闪电网络本质是针对扩展性的一种链下(off-chain)解决方案。
  2. 假如Alice和Bob常常发生比特币转帐,Alice和Bob能够约定两我的都转50个比特币到一个 2-2多重签名,这个签名地址的币只有Alice和Bob同时签名才可使用。
  3. 在发生转帐以前,Alice和Bob维护一个这些币的归属副本,既:如今 2-2签名中有100个btc,其中50个归属于Alice,50个归属于Bob。
  4. 这时就能够认为Alice和Bob打开了一个双向支付通道,之后Alice和Bob之间的转帐均可以视为归属副本的更新。
  5. Alice向Bob转了1个BTC,则两我的更新归属副本为:Alice-49BTC, Bob-51BTC,而且将原来的副本废弃。
  6. <font color='red'>副本并不广播到链上,因此是off-chain方案。</font>
  7. 当Alice和Bob决定再也不有合做关系时,两我的能够将最新的副本广播到链上,按照归属副本的内容,将2-2签名中的币分别转给Alice和Bob,视为关闭通道。
  8. Alice想向Cavol转10个BTC,可是Alice和Cavol之间尚未创建通道。Bob既和Alice有双向支付通道,又和Cavol有双向支付通道,Alice能够支付给Bob 10BTC,而后由Bob代转给Cavol,Bob作为中间人,能够收取少许手续费。
  9. 全部用户之间的通道链接关系组成网络,既为闪电网络。

具体实现

闪电网络的第一步是Alice和Bob之间须要打开通道,打开通道的本质是Alice和Bob约定转必定数量的比特币(>=0)到一个2-2签名地址,可是这里存在两个问题:安全

  1. 如何确保两我的都会转币?既不存在Alice已经转了,Bob故意做恶不转,致使Alice转的币取不出来的状况?
  2. 如何保证Alice和Bob转了之后,能够不相互依赖对方的状况下,可以保证把币取回来?由于存在这样的状况,可能Alice转了10BTC,而Bob转了1BTC,理论上若是Bob做恶的话,Bob能够敲诈Alice。

通道创建

闪电网络提出了RSMC(序列到期可撤销合约),具体过程:网络

  1. 比特币的交易结构是UTXO,Alice和Bob首先交换各自准备转到2-2签名中的UTXO输入,既各拿出5BTC,用于构建Funding Tx,输出为Alice和Bob的2/2多重签名,这个签名的输出此后只能同时具备Alice和Bob的签名才能花掉。并且,最重要的是,<font color='red'>此时Alice和Bob均不对Funding Tx进行签名,也不广播到链上,由于没有签名,即便广播到链上也会被马上拒绝。</font> 这一步主要是为了解决第一个问题,保证不会出现有一我的转币了而另外一我的没有转币。
  2. 为了解决第二个问题,双方须要构建Commitment Tx。Alice基于未广播的2-2签名构造两个合约C1a和RD1a,C1a的内容为:直接转给Alice5个BTC,剩下5个BTC转到新合约RD1a,RD1a的内容为,1000个确认之后Bob才能够花掉RD1a里面的5个BTC。而后Alice把C1a和RD1a都转交给Bob。一样,Bob也基于未广播的2-2签名,构造两个合约C1b和RD1b,其中C1b的内容为直接转给Bob 5个BTC,剩下5个BTC转到新合约RD1b,RD1b的内容为,1000个确认之后Alice才能够花掉RD1b里面的5个BTC。而后Bob把C1b和RD1b都转交给Alice。
  3. 到这一步,因为并未对Funding Tx进行签名,任何一方均没法做恶,任何一方也不会有任何损失。
  4. 双方均完成对Commitment Tx的签名并交换后,就能够对第一步中的Funding Tx进行签名,并交换。此时,Funding Tx是完整的交易,就能够广播到链上。
  5. 上述过程就是建立RSMC的所有过程,此时Alice和Bob之间的通道就已经打开。
  6. 这里面有几个关键点:
    • Commitment Tx基于Funding Tx,可是Funding Tx并未广播到链上,如何信任Commitment Tx?这里依赖了隔离见证的一些知识,SIGHASH_NOINPUT指令能够解决这个问题。
    • 为何Commitment Tx建立之后,Funding Tx就能够签名画押了呢?首先,Alice签名的C1a和RD1a,转交给了Bob,Bob只要对这两个合约签名广播,就能够保证1000个确认之后,收回以前投入的5BTC。同理,Bob签名的C1b和RD1b也都转交给了Alice,Alice对这两个签名广播之后,等1000个确认也能够拿回本身的5BTC。
    • 你们应该发现这里有一个很是妙的地方,Alice和Bob都把半签的合约交给对方,都等待对方作最后的签名和广播,可是谁签名和广播,谁就会延迟得到本身的币。最后的结果就是,谁都不肯意先去广播,就会致使两方的通道能够长时间保持。
    • C1a,C1b, RD1a, RD1b这四个合约记录了Alice和Bob双向支付通道中币的归属副本。

更新状态

如今Alice和Bob的通道已经创建,Alice向Bob转1BTC,怎么操做?区块链

  1. Alice向Bob转1BTC,Alice变为4BTC,Bob变为6BTC,须要建立新的Commitment Tx,与上面的过程相似,半签之后交换,生成C2a, RD2a, C2b, RD2b。
  2. 此时两个状态均是有效的,那么最核心的问题来了,如何才能完全废弃掉C1a和C1b呢?由于,Alice颇有可能把Bob以前给他的C1b签名之后广播到链上,致使Bob承受1BTC的损失。RSMC采用了一个很是巧妙的方法,双方在每一次签名Commitment Tx时都使用不一样的秘钥对,Bob在接受Alice第二个半签C2a时,须要Alice将C1a中使用的私钥交给Bob,表示爱丽丝放弃C1a,认可C2a。C1b也是一样对待。
  3. 假设,Alice已经签名了C2a,可是Alice故意把C1b广播到区块链上,Bob会立刻拿到本身的5BTC,Alice会等1000个确认之后才能拿到剩下的5BTC。这个时间内,若是Bob监控到Alice做假,能够拿着Alice签过名的C1a和以及Alice交换过来的私钥,直接从区块链上取走剩下的5个BTC。既:不诚实的人会失去全部的币。

网络

假设A想给C转1个BTC,可是A和C之间没有双向转支付通道,可是B和A、C都有通道,那么A能够直接在链上给C转1个BTC,也能够和C建议通道之后再转,也能够拜托B帮忙转1BTC。A经过双向支付通道 经由B给C转1BTC的过程,就是闪电网络的应用。在不可信的状况下,转帐过程如何操做?哈希时间锁定合约(HTLC)!优化

  1. 为了完成此次交易,A会先给C发一个随机数字R,接着C会对R进行签名,生成一个哈希H,并返回给A。
  2. 而后A就找到B,若是B可以给出生成签名H的key,那么A就赞成更新渠道的支付分配,为B转1个BTC。实际上,A和B会先更新Commitment Tx,A生成三个交易,C1a,RD1a和HTLC(a),C1a和RD1a的内容同上面的RSMC,HTLC(a)的内容为,若是B找到可签名H的key,B能够直接拿走HTLC中的1BTC,不然HTLC(a)中的1BTC在必定的锁按期以后,A能够从新花掉。
  3. 以后B会拿着H去找C,用1个BTC来换签名key,同时更新B和C的支付分配。更新过程同A和B之间同样,基于HTLC。由于签名的key就是从C这里生成的,因此他确定知道,并且理论上也只有他才知道。接着C将签名用的key告诉B,并更新了其渠道的支付分配。
  4. 同理,B使用key从A那里也拿到了1BTC,A以脱链的形式付给C一个BTC。
  5. 这里有两个须要注意的问题,A和B之间以及B和C之间的支付分配都会从新建立Commitment Tx,而每一个Commitment Tx带有锁定时间(如之间的1000个确认),A和B之间的锁定时间须要长于B和C之间的锁定时间,防止在B拿到key以后,A和B之间的锁定时间已经到期,B会拿不到币。
  6. 第二个问题是:在B找C拿key的过程当中,A和B之间的通道能够随时断开,B不须要信任A在此期间会关闭通道,由于即便A做恶,故意关闭通道,HTLC(a)中的币,A还须要等到必定的锁按期之后才能花掉,只要B在这个锁按期内拿到签名所用的key,就能够从HTLC(a)中拿走1BTC。
  7. B做为中间人,能够收取少许的费用。
  8. 通道之间的交易,实际上无需确认等待,瞬时完成的,对于比特币的TPS有大量的提高。

闪电网络有利有弊,有人看好有人看衰,不能否认两点是:链下节点会相对中心化;比特币交易速度会有大幅提高,交易费也会显著下降。
闪电网络能够用来作跨链,甚至有团队用闪电网络作去中心化交易所,值得期待。
文章里面没有图,主要是图不太容易画明白,抱歉。
相关资料,公众号后台回复”闪电网络“获取。code