微支付通道与闪电网络

参考链接:

闪电网络学习资源目录

一、微支付通道

微支付通道举例与理解

“如果森林里的一棵树倒了,而周围没有人听到,它会发出声音吗?”

应用场景:

​ 大量的小额交易,因为手续费的存在所以不划算。通过未支付通道聚少成多,只需要一首一尾两个交易上链,减少支付次数以及区块链的压力。

交易类型:

  • 保证金交易(Funding Transaction)

    支付方把钱存储到一个公共账号上的交易,这个交易需要上链。

  • Refund Transaction

    将公共账户中的钱返还给支付方的交易,此交易在保证金交易之进行,并且此交易不会上链。支付方会将此交易先给接收方签名,这样就可以在等待此交易中的nlocktime后取回公共账户中的资金。当接收方签名完毕后就可以在链上发送保证金交易。

    Refund Tx可以看做是第一个update Tx,所以它的nlockTime也是最大的,后续的update Tx都是对其的金额修改。

  • update Transaction / Commitment Transaction

    每一次微支付时链下的交易,不断的更新返回给支付方以及接收方的金额(减少支付方,增加接收方)来实现。这些交易只有双方知晓,并且越新的update Tx它的nLockTime时间越小。

    update Tx是接收方握在手中的安全保证,一旦支付方违约那么接收方就可以在链上广播最新的Update Tx这样实现减少自己的亏损。

  • Settlement Transaction

    当所有的微支付全部结束后,生成的最后一步Update Tx交易,此交易的输出是支付方为0,接收方为全部的金额。此交易接受方收到后广播上链实现整个微支付交易的结束。

个人理解:微支付通道总的核心思想就是链下进行大量的“微”交易,使用多重签名的技术以及交易时间锁(nLockTime)机制实现双方的安全保证,真正广播上链的交易就只有开始的保证金交易(Funding Transaction)以及Settlement Tx,微支付通道在链下是无信任的,因为小额支付建立信任是昂贵的,其依靠密码学加密算法的支持实现了双方交互的安全性

“通过推迟向全世界公布每一笔交易,比特币用户可以在晚些时候对他们的关系进行净结算,从而可以在不增加区块链或在集中式交易对手中建立信任的情况下进行许多交易。”

二、闪电网络

核心解决的是比特币的拓展问题。

微支付通道通过线下延迟交易+时间锁的手段可以解决拓展性的问题,但是问题在于两两之间都需要建立这样的单向通道是困难的

目前,中心辐射型微支付渠道(以及可信支付渠道网络)已经开始着手构建中心辐射型网络。

Lightning网络的双向微支付通道需要延展性软分叉,以实现近乎无限的可扩展性,同时降低中间节点默认的风险

通过将多个微支付渠道链接在一起,就有可能创建一个交易路径网络。路径可以使用类似***BGP***的系统进行路由,发送方可以指定到接收方的特定路径。输出脚本被一个哈希占用,该哈希由接收方生成。通过向该散列函数写入输入信息,接收方的交易对手将能够在此过程中提取资金。(交易的接受方通过使用发送方给的输入信息实现hash的破解)

闪电网络的关键技术

学习来源:https://www.jianshu.com/p/e326802294e1

RSMC

(Recoverable Sequence Maturity Contract,序列到期可撤销合约)

RSMC解决了微支付通道中货币单向流动问题

1.建立双向微支付通道
y48MUU
  1. 张三与李四各自拿出一个btc,构建Funding Tx,此交易需要张三和李四的2/2双重签名才能够上链生效,目前未签名,所以不生效.Funding Tx的输出为张三和李四的多重签名地址.

  2. 张三创建Commitment Tx,分别是C1A和D1A,这两个交易都需要张三与李四的2/2双重签名才能生效,其中张三2代表的就是张三的第二把私钥.

    ​ C1A中的输入:Funding Tx的输出

    ​ C1A中的输出: 1. 张三&李四的多重签名地址, 金额 1BTC。2. 李四地址, 金额 1BTC

    ​ D1A中的输入: C1A中的第一个输出

    ​ D1A中的输出: 张三, 金额 1BTC, 序列号: 1000 (序列号的作用是阻止当前交易进块,只有前向交易有Sequence个确认才能够进块)

    张三构建好之后,交给李四签名

    对于李四,同样的构建C1B与D1B,构建之后给张三签名

  3. 双方互相帮助对方签名,此时, 因为Funding Tx还没有完成多重签名,所以即使C1A,C1B,D1A,D1B交易都已完成签名,但是因为“源头”交易Funding Tx未上链所以均是无效的交易.

  4. 双方都完成对Commitment Tx的签名后,各自再对Funding Tx进行签名,并且交换,此时,Funding Tx就是完整的交易,可以广播进入主链.

讨论

  • C1A与C1B因为都来自于同一个父交易(Funding Tx),因为主链的双花限制,所以最终只会有一边能够上链.
  • 惩罚机制:如果有一方先广播交易,例如张三先广播C1A, 那么李四将会立刻得到1BTC的资金返还,但是张三要通过D1A等待1000个确认后才能得到自己的1BTC. 单方面终止合约的人会受到延迟退费的惩罚.
2.转帐(更新Commitment Tx)

I5HB88

当双方需要转账的时候就更新Commitment Tx,例如, 张三买了李四的东西,张三给李四转账0.5BTC,那么余额应该是张三0.5BTC, 李四1.5BTC. 此时张三更新为C2A与D2A,但是此时原本的C1A, D1A都是有效的,怎么样废除之前的旧状态呢?

RSMC采用了巧妙的方法:

对于张三来说, 将张三2的签名私钥拷贝给李四即代表着自动放弃了C1A与D1A而是选择了最新的C2A, D2A

因为一旦李四拥有了张三2的私钥那么就可以修改D1A, 造成对张三的惩罚

md0W3G

如图所示,李四收到张三2的私钥后,修改D1A为F1A握在自己手里.如果张三在收到了商品后更新为C2A而是广播C1A,那么李四就可以通过发布自己手上的F1A对张三进行惩罚(即广播F1A代替D1A), 交出私钥与给F1A签名这两者是等同的.此时张三将失去全部的资金.

引入sequence的目的就是给出惩罚窗口,当发现对方破坏合约时就可以有1000个确认交易的时间去实施惩罚,但是如果错过了这个时间就无法进行惩罚了.

HTLC

(Hashed Timelock Contract,哈希时间锁定合约)

HTLC解决了货币跨节点传递的问题

3.中转交易

当张三与王五需要进行交易时, 也要重复的构建这样的通道,但是张三与李四有双向通道,李四与王五有双向通道,那么此时就可以借助李四通过HTLC来实现张三与王五的微支付中转交易.

i6MZwS

➊、张三通知王五,我要给你转0.5BTC,然后王五收到张三发来的一个随机数R值;

➋、王五将这个R值进行Hash运算得到H®回复给张三;

➌、张三收到回复后,联系李四,告诉李四:如果你找到H(R)的原始R值,我就转给你0.5BTC;

➍、李四得知王五知道R值,便与王五展开了谈判,李四告诉王五,如果你告诉我张三发给你的R值,我就转给你0.5BTC;

➎、王五用R值从李四手中换取了0.5BTC;

➏、接着李四用R值从张三手中换取了0.5BTC。

最后交易完成,张三以脱链/链外的形式付给王五0.5BTC。

5bFtKf
当然,这个过程李四可以收取中介费用,在第四步时,李四个给王五0.4BTC即可获取到0.1的中介费,作为李四的奖励.

4.关闭交易

关闭RSMC的方法就是直接构造出最后一个状态的最终Commitment Tx即可,然后双方签名后广播此交易.

三、总结

优点:

闪电网络巧妙的通过多重签名机制以及sequence的延迟惩罚机制实现了双向的微支付通道,再使用HTLC的哈希锁定机制实现了中转节点的建立.其中的哈希锁定机制对于跨链技术有一定的借鉴之处.此外最为重要的是,闪电网络除了开始的Funding Tx与最后的Commitment Tx需要上链之外,其他都在链下进行,大大降低了主链的负荷.

缺点:

  • 中间过程会使用大量公私钥并且需要交易者自己本地保存,那么本地保存的安全性保障是一个问题,如果丢失对方提交过期交易,那么难以弥补损失

  • 必须在指定的时间中发现对方造假,否则惩罚无法生效

  • 目前解决上面的方法有两种,一种为自己成为闪电网络节点,另一方面通过第三方闪电网络节点(暸望塔)监控主链上的交易,那么就会有第三方.

猜你喜欢

转载自blog.csdn.net/weixin_43988498/article/details/114300536