浅谈闪电网络

TPS

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

闪电网络-总体思想

  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. 副本并不广播到链上,所以是off-chain方案。
  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的签名才能花掉。而且,最重要的是,此时Alice和Bob均不对Funding Tx进行签名,也不广播到链上,因为没有签名,即使广播到链上也会被立刻拒绝。 这一步主要是为了解决第一个问题,保证不会出现有一个人转币了而另一个人没有转币。
  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有大量的提升。

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

你可能感兴趣的:(浅谈闪电网络)