比特币闪电网络原理

交易瓶颈解决方案

闪电网络

参考

比特币最大的瓶颈就是交易瓶颈,每个块大小只有1m,平均每秒7笔交易速度让人诟病,出块时间十分钟,还得六个确认。流通不方便,等同于只有一家银行,外面有一大推的人在排队等待转账。

如果将块大小扩容,比如扩容到一个G之类的方案,对开发和旷工接入成本又会过高,因为当前的完整节点数据库就已经上百G了。一味的扩容肯定也不是好的解决方案,如果接入成本过高就带来了中心化的可能。所以闪电网络应运而生

什么是闪电网络

如果比特币交易是银行记账的话,闪电网络就是支付宝,因为比特币数据库是只增不减,解决最好的方案就是小的交易不上节点,而是转为去类似支付宝一样的地方去结算交易,那么交易记账的压力就会减少很多。

同理,其实像交易所的币种交易,也类似充当闪电网络的角色,你在交易所的交易是不会被记录到比特币的节点的,只有最后你提现的时候,才会有你和交易所的余额结算的动作。

序列到期可撤销合约RSMC(Revocable Sequence Maturity Contract)

如果Alice和Bob要交易,那么请他们在闪电网络中建立微双向支付通道,大概的内容如上图。

  • 第一步,Alice和Bob同时转入0.5 btc加入自己各自的签名,输出地址为Alice&Bob,那么这个地址Alice&Bob 就有了1 btc,但是他们两任何一个人都无法将这个1btc转入比特币主链,因为要两个人签名。

  • 下方的两个分支(C1a和RD1a是一体的)他们的输入都是Alice&Bob 所以,如果下面的交易执行成功,也只有其中的一个分支是有效的。

  • 假设 Alice要退出,她会提出一个Commitment Tx 交易,这个交易包含两条,如图所示,第一条C1a: Alice自己签名了,但是需要Bob也签名,输出是Alice2&Bob 和Bob 分别都是0.5

    这里为什么是Alice2&Bob呢?可能是因为在Funding Tx交易中的输入地址是Alice&Bob所以需要做一个区分。而在实际上,我觉得直接Alice&Bob应该也没问题,待验证

  • 第二条 是需要Alice2 签名和Bob签名并且要seq个确认才能执行的,最后转账地址是Alice0.5

  • 假设Alice发起了退出,也就行Commitment Tx 被执行,Bob知道后签名了,也就是同时在C1a和RD1a都签名了。Bob立马得到了0.5,因为如C1a所示,当然,Bob签名之前,会确认自己立马得到的钱是多少才会肯签名

  • RD1a也被签名了,但是需要闪电网络经过确认,也就是seq个确认,之后才会让Alice得到0.5

那么这样下来,如果Alice退出,Bob会立马得到他的钱,但是Alice需要等待,同理Bob退出,Alice也会立马得到。经过确认是为了保证Commitment Tx 的输入是一个有效输入

交易更新

以上的Commitment Tx 交易是以两者分配退出为例子,而如果假设Alice要转账给Bob 0.1btc,只要从新提交一个Commitment Tx交易,把C1a的Bob输出改为0.6,而RD1a自己改为0.4就可以了。经过确认后,就完成了两者之间的转账。

哈希时间锁定合约(HTLC)

如图,如果Alice要转Bob,但是之间没有通道,可以,

  • 先发一个随机值a给Bob,Bob对随机值进行哈希得到Hash(a)
  • Alice发布消息给中间人Charlie,如果知道Hash(a)的原来数字,则可以进行重新分配,
  • 同理Charlie也如此消息传递,Bob收到后,他知道,原来数字是a,那么Charlie,Bob会重新分配
  • Charlie再拿到随机值a后再和Alice分配