比特币闪电网络之:RSMC

互联网 2019-05-27 18:26:07

闪电网络是一个去中心化的系统,无需信任对方以及第三方即可实现实时的、海量的交易网络。

闪电网络是基于微支付通道演进而来,创造性的设计出了两种类型的交易合约:序列到期可撤销合约 RSMC 和哈希时间锁定合约 HTLC。RSMC 解决了通道中币单向流动问题,HTLC 解决了币跨节点传递的问题。这两个类型的交易组合构成了闪电网络。

下面我们看下,在微支付通道中存在的问题,即 RSMC 需要解决的问题:

  1. 双向支付,双方可以相互转账,而不是单通道。
  2. 1方中途退出,另外1方要立即拿回钱,而不是等到 nLockTime 到期才能拿回钱。 同时,应该对主动退出方实行惩罚。
  3. 保证交易双方,任何1方都不能抵赖、反悔。

1、RSMC 交易构造

可用下图展示 RSMC 交易的构造

  1. 双方各拿出 0.5BTC,构建一个 2/2 的多重签名保证金交易。为了防止任何一方作恶,故意提交交易导致另一方资金被锁死,当前时间点只构造保证金交易,但不签名,不广播,从而任何一方都没办法作恶。
  2. 爱丽丝构造承诺交易和退款交易:C1a/RD1a,并交给鲍伯签名。C1a 的第一个输出为多重签名地址,爱丽丝的另一把私钥爱丽丝2和鲍伯私钥的2/2多重签名,第二个输出为鲍伯 0.5BTC。RD1a 为 C1a 第一个输出的花费交易,输出给爱丽丝 0.5BTC,但此类型交易带有 sequence,作用是阻止当前交易进块,只有前向交易(即 C1a)有 sequence 个确认时才能进块。
  3. 鲍伯构造承诺交易和退款交易:C1b 和 RD1b,并交给爱丽丝签名。此结构与 C1a、RD1a 是对称关系。
  4. 鲍伯对爱丽丝构造的承诺交易和退款交易进行签名,然后交给爱丽丝签名;同理,爱丽丝对鲍伯构造的承诺交易和退款交易签名,完成后给鲍伯。
  5. 爱丽丝检查 C1a、RD1a 交易和鲍伯的签名,验证无误后,再进行签名。同样的,鲍伯也进行类似操作。当双方各自完成对承诺交易和退款交易进行签名并交换后,然后各自再对保证金进行签名,并交换。此时,保证金是完整的交易,广播之。
C1a, C1b 两笔交易花费的是同一个输出,故他们两个交易只有一个能进块。
  • 若爱丽丝广播 C1a,则鲍伯立即拿到 0.5BTC(C1a 的第二个输出),而爱丽丝需要等 C1a 得到 1000个确认,才能通过 RD1a 的输出拿到 0.5BTC。
  • 若鲍伯广播 C1b,则爱丽丝立即拿到 0.5BTC,鲍伯等待 C1b 得到 1000个确认,才能通过 RD1b 拿到 0.5BTC。也就是说,单方广播交易终止合约的那一方会延迟拿到币,而另一放则立即拿币。

2、RSMC 交易更新

假设 爱丽丝 要付给 鲍伯 0.1 比特币,那么公共账号里面的资金分配,就从 0.5/0.5,变成了 0.4/0.6。

于是创建新的承诺交易和退款交易,对于爱丽丝来说是 C2a 和 RD2a,对于鲍伯来说是 C2b 和 RD2b,过程与上面类似。

在上图中,两个状态均是有效的,如何才能彻底废弃掉旧的交易 C1a/RD1a 和 C1b/RD1b 呢?即如何保证爱丽丝不反悔(不让爱丽丝把 C1a/Rd1a 广播到区块链上去?)同样,如何保证鲍伯不反悔(不让鲍伯把 C1b/Rd1b 广播到区块链上去?)

RSMC 采用了一个非常巧妙的方法,在 C1a 的第一个输出中,采用了爱丽丝2和鲍伯的多重签名,爱丽丝将爱丽丝2的私钥交给鲍伯,即表示爱丽丝放弃 C1a,承认 C2a。爱丽丝把私钥爱丽丝2给了鲍伯,鲍伯会为 C1a 生成 1个惩罚交易 BR1a,以防爱丽丝反悔。

假设爱丽丝反悔,也就是把 C1a/RD1a 广播出去了,鲍伯就把 BR1a 广播出去。BR1a 由于没有 Sequence,肯定会先于 RD1a 执行,所以结果是 RD1a 不会被执行,BR1a 执行了。结果就是,爱丽丝拿不回钱,鲍伯会把爱丽丝的 0.5 比特币全转账到自己账户里面,这就是对爱丽丝的惩罚。

反之亦然,鲍伯交出鲍伯2的私钥给爱丽丝即意味放弃 C1b,而仅能认可 C2b。引入 sequence 的目的是,阻止后续交易进块(RD1a),给出一个实施惩罚窗口期,当发现对方破坏合约时,可以有 1000 个块确认的时间去实施惩罚交易,即广播 BR1a 代替 RD1a。若错过 1000 个块时间窗口,则无法再实施惩罚了( RD1a 进块了)。

3、RSMC 交易关闭

关闭 RSMC,直接按照最终的余额构造出一个承诺即可,例如输出为爱丽丝 0.1BTC,鲍伯 0.9BTC,无需再设置多重签名,构造惩罚交易等。

相关资讯Relevent