深入解读闪电网络:支付通道( 三 )


这些问题的一种解决方案是在承诺事务中使用时间锁(事务层面的时间锁(nLocktime)) 。 为了保证资金不会在通道中永远锁定 , Emma使用她的充值事务的输出创建了一个退款事务 。 她先给Fabian发送这笔事务 , 等Fabian签名并发回后 , Emma才把充值事务广播到比特币网络中 , 开启他们的通道 。
这笔退款事务也成了第一笔承诺事务 , 而且它的时间锁为通道设置了一个存在时间的上限 。 假设Emma把时间锁设置为30天(4320个比特币区块)(即30天之后这笔事务才能记录到区块链上) 。 接下来所有的承诺事务 , 所设置的时间锁会一个比一个短 , 这样更新的事务就能更早广播到网络中 。
现在Emma不用再担心了 , 她知道即使Fabian玩失踪 , 她也可以在30天之后取回自己的资金(如果这是一条双向的支付通道 , 即Fabian也会存钱进去 , 那他也从自己的角度提出一笔退款事务) 。
深入解读闪电网络:支付通道
文章图片
深入解读闪电网络:支付通道】每一笔新的承诺事务的时间锁都比前一笔要短 , 因此 , 新一笔承诺事务总是能比旧的更早上链并使旧的事务作废(无法上链) , 这样就能防止任何一方恶意使用旧的承诺事务 。 如果一切顺利 , Emma和Fabian只需广播双方一致的普通结算事务 , 因此带时间锁的承诺事务只有一方下线时才会派上用场 。
举个例子 , 如果第一笔承诺事务的时间锁是4320个区块 , 那么第二笔承诺事务可以设成4319个区块 , 以此类推 。 如此一来 , 第600笔承诺事务可以比第一笔承诺事务早600个区块上链 。
深入解读闪电网络:支付通道
文章图片
你可能也注意到了 , 这种方法虽然有助于防止某一方把更早的承诺事务上链(欺诈) , 但它有两个明显的缺点:
第一笔承诺事务的时间锁限制了这个通道的寿命 。 如果这个时间锁设置的时间太长(比如1年) , 通道可以存在很久 , 但如果某一方玩失踪 , 另一方就不得不等待很长时间才能广播最后一笔承诺事务、取回自己的资金 。 第一笔承诺事务的时间锁也限制了可以在通道内发生的交易次数 。 在我们的例子中 , 这个数值是4320 , 这个通道内只能发生4320笔事务 , 因为每一笔新事务都会把时间锁的时间减去1个区块 。 而且 , 以区块(10分钟)为间隔 , 等于是强迫参与方要追踪比特币网络的区块 , 以免错过什么 , 以及在情形不对时尽早把最后一笔承诺事务上链 。 当然 , 这个间隔是可以延长的 , 但代价是通道内可以发送的交易数量会变得更少 。因此 , 时间锁让我们可以作废旧的承诺事务并保证通道双方都可以安全地关闭通道:如果他们都同意通道的最新状态 , 他们可以发送一笔不带时间锁的结算事务(与最后一笔承诺事务意思相同) , 关闭通道;如果某一方不在线 , 另一方也可等待最后一笔承诺的时间锁解锁 , 然后把该笔承诺事务广播到比特币网络中 。
不对称的可撤销承诺
另一种解决上述信任问题的办法是取消早前的承诺事务 。 实际上 , “取消(cancellation)”这个词是不准确的 , 因为在比特币网络中 , 一笔上链的事务(得到区块确认的事务)是永远不可取消的 。 不过 , 特殊的构造方式可以使得上链较早的承诺事务无利可图 。 只需给予各方一个“撤销密钥(revocationkey)”即可 。
假设Hitesh和Irene决定开启一个通道 。 双方都充值了5btc到这个通道中 , 确定了通道的初始余额 。 现在 , 双方不是签署同一笔标准的承诺事务 , 而是各自创建两笔不同的、不对称的承诺事务 。