比特币闪电网络之:RSMC
闪电网络是一个去中心化的系统,无需信任对方以及第三方即可实现实时的、海量的交易网络。
闪电网络是基于微支付通道演进而来,创造性的设计出了两种类型的交易合约:序列到期可撤销合约 RSMC 和哈希时间锁定合约 HTLC。RSMC 解决了通道中币单向流动问题,HTLC 解决了币跨节点传递的问题。这两个类型的交易组合构成了闪电网络。
下面我们看下,在微支付通道中存在的问题,即 RSMC 需要解决的问题:
- 双向支付,双方可以相互转账,而不是单通道。
- 1方中途退出,另外1方要立即拿回钱,而不是等到
nLockTime
到期才能拿回钱。 同时,应该对主动退出方实行惩罚。 - 保证交易双方,任何1方都不能抵赖、反悔。
1、RSMC 交易构造
可用下图展示 RSMC 交易的构造
- 双方各拿出 0.5BTC,构建一个 2/2 的多重签名保证金交易。为了防止任何一方作恶,故意提交交易导致另一方资金被锁死,当前时间点只构造保证金交易,但不签名,不广播,从而任何一方都没办法作恶。
- 爱丽丝构造承诺交易和退款交易:
C1a/RD1a
,并交给鲍伯签名。C1a 的第一个输出为多重签名地址,爱丽丝的另一把私钥爱丽丝2和鲍伯私钥的2/2多重签名,第二个输出为鲍伯 0.5BTC。RD1a 为 C1a 第一个输出的花费交易,输出给爱丽丝 0.5BTC,但此类型交易带有sequence
,作用是阻止当前交易进块,只有前向交易(即 C1a)有sequence
个确认时才能进块。 - 鲍伯构造承诺交易和退款交易:C1b 和 RD1b,并交给爱丽丝签名。此结构与 C1a、RD1a 是对称关系。
- 鲍伯对爱丽丝构造的承诺交易和退款交易进行签名,然后交给爱丽丝签名;同理,爱丽丝对鲍伯构造的承诺交易和退款交易签名,完成后给鲍伯。
- 爱丽丝检查 C1a、RD1a 交易和鲍伯的签名,验证无误后,再进行签名。同样的,鲍伯也进行类似操作。当双方各自完成对承诺交易和退款交易进行签名并交换后,然后各自再对保证金进行签名,并交换。此时,保证金是完整的交易,广播之。
- 若爱丽丝广播 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 进块了)。