闪电网络RSMC协议技术原理----从微支付通道到RSMC(序列到期可撤销合约)

闪电网络的RSMC协议技术原理

“if all tree falls in the forest and no one is around to hear it,does it make a sound”--George Berkely

就像无人听闻的陨落无足轻重一样,日常重复的交易也不必人尽皆知。

 

闪电网络是由微支付通道技术发展而来的,通过将微支付通道的单向支付通道扩展为双向支付通道,并通过RSMC协议解决了双向通道中历史合约作废问题,通过HTLC协议解决了跨节点交易的问题,最终形成了一张比特币链下的不依赖可信第三方和可信交易对手的网络

交易的双方利用双签名账户构建支付通道,需要有双方的签名才能广播并让这笔交易生效。付款方在收款方消失的情况下任然能取回余额,保证付款方的利益。

大狗是一位厨师,他做的菜特别好吃,我每天中午都要去大狗那吃他烧的菜,但是我觉得太麻烦了,每天去吃都要带钱现场结算,于是我和大狗起共同建了一个双签名银行账号。同时构建了两个合同,其中一个叫fund contract。同时为了防止大狗不愿意签名而一直占用我的钱,我和大狗还约定好refund contract,即在一个指定的时间之后,这个账户的余额肯定会被清算一次。

我和大狗的约定我往账号中存100块钱,可以画成这个样子:

接着我去消费,大狗卖的饭每份15元,我先消费了两次,我每次消费都先自己起草一个合同,然后自己签名,给大狗看,他同意后收下这个合同,然后给我饭吃。可以将这个过程画成这个样子。

我前两次的消费都是正常的起草一个合同给大狗,第三次吃饭前,我还是构造一个合同,我乘大狗没注意,使坏将合同修改为我分100他没钱,给大狗看。我现在是个坏人,想吃饭但是不给钱,但是我无法发布这个tx3,因为大狗还没签名呢。大狗现在只需要广播上面的tx2就可以拿到属于他自己的钱。这样大狗拿了30,我拿了60。

大狗在知道我是坏人后说:滚!说完广播了tx2这个交易并关闭了我和他之间的通道,我从此以后再也没机会去大狗家吃饭了。同时上面的refund contranct也关闭了,不再起作用。

那么如果在这个单向的通道中进行双向交易会出现什么问题呢?

有一天大狗起草了一个合同给我,说大狗分90,我分10块钱,即使大狗签名了我也不能信,因为他手里有很多我和他分账的合同,这份合同主动权完全不在我。

 

 

更进一步的RSMC

为了给交易双方提供双向的以及更长期的支付通道,闪电网络在微支付通道上设计了RSMC协议。

RSMC中主要涉及了5种交易:

存款(fund):建立通道之初通过“存款”交易将双方的资金存入双签名钱包,将存款交易广播到比特币网络就意味着双方建立了支付通道。但是在广播钱需要先签署一份“提交(commit)”交易,保证对手方消失的情况下仍然能取回双签名钱包中的资金

提交(commit):支付通道建立后,交易双方在通道内进行资金往来时通过“提交”交易来实现。该交易的特征是一式两份,每一方都会签署好交易信息递交给对手方。参与者如果想终止支付通道可以将对方署过名的合约签字并广播到区块链,进行资金分配并关闭支付通道。

分配(delivery):“分配”交易是具体执行资金派送的交易,该交易执行完成后资金将抵达目标账户。通常指的是不可撤销的分配。

可撤销的分配(revocable delivery):同样是资金派送的交易,但该交易的执行可能因为其他交易的执行而被撤回,在RSMC中主要会因为“违约补偿”交易的执行而被撤回。

违约补偿(breach remedy):RSMC中核心的防抵赖机制,当对手方企图通过发布历史交易而抵赖后续交易是,可以通过发布“违约补偿”交易罚没对手方的所有资金。

 

上次我去大狗家吃饭企图骗大狗的行径被大狗发现后,被大狗拉黑了,我再也不能去大狗家吃饭了,于是我又换了家,二狗家。但是因为我有不诚信的记录,二狗决定换种方式和我交易。

首先我出80,二狗出20,我们两签订“存款”交易,计划将钱存到一个双重签名的银行账户中,双重签名就是需要两个人的签名才能打开的账户。因为我存了80,二狗存了20,我存的多,我比较担心二狗突然跑路,或者说二狗就是不愿意签名,老是占用我的钱。因此,在广播这个存款交易前,我们俩要互相保证账户余额能各自拿回。这个保证通过下图这个方式进行。

提交交易与通道的建立。

上面的的协议有两个输出,一个是c1a,一个是c1b,这个c1a包含两个输出

第一个输出:将80块钱归还给我

第二个输出:剩余的20分两种情况处理,如果使用二狗的钥匙取款,则在等待100个区块后20块钱转给二狗,如果使用二狗R1(这个钥匙将在下文中介绍)和张瑞的钥匙共同取款,则20块钱立即归属给张瑞。因此,即使对手方张瑞消失,二狗也可以通过广播C1a,在等待100个区块后将自己的资金取回。

 

通过C1a和C1b交易的签订,双方建立了打款的信任基础,此时存款交易广播到区块链网络,我和二狗之间的支付通道就建立了。

 

支付通道内的交易。

在支付通道建立之后,我和二狗的交易就可以在通道内进行,不必广播到区块链上。每笔交易只需通过签订“提交(commit)”交易并传递给对方即可,在交易双方均在线的情况下可以实时完成,对比于在区块链上的十分钟的等待是一个质的提升。

 

现在我和二狗之间要进行一轮新的交易。通过互换签字后的“提交(commit)”交易C2a和C2b,我向二狗支付15元。注意,在我和二狗进行互换合约的时候,也向对方提供了上一轮交易的撤回密钥二狗R1和张瑞R1,用于向对方声明上一轮持有的“提交(commit)”交易C1a和C1b作废,资金分配以state2的“提交(commit)”交易C2a和C2b为准。

这样,我和二狗之间的交易可以永远进行下去,直到有一方想关闭这个通道。

 

 

支付通道的关闭

当我或者二狗认为我们两的资金交易结束或者想要取回双签名钱包中的资金时,可以将最新的“提交(commit)”交易在区块链上广播进行资金分配。

如下图所示,以二狗为例,他可以将C2a广播,C2a中数据的脚本将会执行触发D2a“分配”交易。分配时,我会立马取回65块钱,但是二狗需要等待100个区块的时间才能取回35块钱。这是RSMC对率先提出结束交易以防的“惩罚”

“分配”交易结束后,我和二狗关闭了交易通道并在比特币网络登记了自己的最终资金状态。

RSMC中抵赖和违约补偿

我们现在其实能知道,在新的交易发生后,新交易之前的旧交易并没有在事实上作废。理论上,参与者可以通过广播历史交易来抵赖后续的交易,但是RSMC使用惩罚机制阻止了这种情况的发生。

如下图所示,假设我企图通过发布state1的C1b来抵赖State2发生的付款交易并关闭支付通道,D1b会被触发执行,二狗在state1中的20块钱将立即被分配到二狗的账户中。剩下的80块钱通过RD1b“可撤回分配”交易,在C1b发布后100个区块分配到张瑞的账户中。但是这100个区块产生是要很长的时间,如果二狗在此期间发现了我的抵赖行为,可以拿着我的R1撤回要是广播BR1b“违约补偿”交易,将双签名中剩余的80块钱全部拿走,同时RD1b交易失效。这样二狗即拿回了自己的资金,也用过罚没钱包中所有的资金的方式惩罚了抵赖者。由此消除了支付通道内交易的对手的风险。

 

文章主要参考了货币研究院的闪电网络白皮书,写的非常好,大家如果有感兴趣的可以在百度网盘中下载,地址为:链接:https://pan.baidu.com/s/1WlU-mgCUZxyNcSbo0dJzJA 提取码:gi03 
 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值