CoimmerceBlock 今天推出了「Mercury Layer」,这是他们的 statechain 变种的升级版本。你可以通过这篇长文来了解 Mercury Statechain 是如何工作的。而本次的 Mercury Layer 升级代表了对最初的 statechain 实现的巨大提升,但是,不像最初的 Mercury Wallet,它还没打包成可以完全面向消费者的钱包。它是作为其它钱包可以集成的一个库和命令行工具而发布的。本文简单总结了它的工作原理:
Statechain 在许多方面都类似于支付通道,即,它是一个集体共享的 UTXO,将预先签名的交易作为保证人们可以强制执行所有权的手段。Statechain 跟闪电通道的主要区别是可以参与共享一个 UTXO 的参与者数量,以及一个可以强制执行的追索权转移给另一个参与者的方式。
在闪电通道中,一个 UTXO 是由静态的两方创建并共享的,而一个 Statechain 是由一个运营者开启的,而且可以在任何两个愿意相信运营者的诚实的人之间自由转移,完全是链下的。希望创建一个 Statechain 的人跟运营者一起创建一个公钥,这个创建者和运营者都只拥有该公钥背后的私钥的一个碎片,没有任何一方拥有完整的私钥。然后,他们预先签名一笔交易,允许这个创建者在一个时间锁到期后单方面取回自己的资金。
要转移一个 Statechain 的时候,现在的所有权人就跟接收者以及运营者合作,使用他们的碎片私钥签名一个密码学证据,证明他们要转移这笔钱,然后接收者跟运营者生成一对新的碎片私钥;这对新的碎片合起来依然是原来那个私钥;然后就可以签名一笔带有时间锁的交易,并且让新的所有权人的时间锁比原所有权人的更短(从而保证新的所有权人总是能比旧所有权人更快取走资金)。这个过程可以一直重复,直到时间锁无法再缩短,这时候这个 Statechain 就要在链上关闭了。
所有权人也要转移过往每一次转移的整个历史链条,这样用户可以验证时间锁被恰当地缩短了、运营者使用 Mainstay 协议(Opentimestamp 协议的一个变种)给这些记录加上了时间戳;每一段数据都在一棵默克尔树上有自己的唯一「空间」,从而保证只有一个版本的数据是有时间戳的。这让每个人都能审计一个 Statechain 的整个转账历史。
在黑暗的大地上
Mercury Layer 给原版的 statechain 所带来的最大改变就是盲化(blinding)。Statechain 服务的运营者将不再能够知晓被转移的任何东西:即,相关的 TXID、相关的公钥、甚至它跟用户为预签名的交易合作生成的签名。
引入了 Schnorr MuSig2 的一个盲化的变种,Mercury 可以协助备用交易的签名流程,而无需知晓被签名的东西的任何细节。这使得有必要改变一些设计,以适应这个运营者不再能看到和发布一个 Statechain 的转移历史的完整性的事实。他们甚至不再能验证自己所签名的交易。
在上一版中,一个 Statechain 的 当前所有权人/交易集合 的唯一性,是由运营者通过 mainstay 发布这个 Statechain 的完整的转移历史来见证的。现在,这是不可能的了,因为,在这个盲化版本中,运营者完全不知道这些交易。这使得我们有必要找出一种新的办法,来让运营者见证一个 Statechain 的最新所有权。所有这些数据都会完全由一种「客户端验证模式」来传递。运营者只需跟踪他为一个 Statechain 签名一些东西的次数,然后告诉一个用户需要这个数字,即可。
用户从支付方接收这个 Statechain 的过往交易历史,然后完全自己验证交易的数量跟运营者的声明一致,然后完全验证所有签名都是有效的、时间锁每次都递减了合适的量。不再将完整的 statechain 交易以及转账顺序发布到 Mainstay,因为运营者被设计成根本不知道所有这些信息,他只向最新的用户发布他自己跟以前每一个用户合作时候的公钥碎片(而不是完整的聚合公钥)。这使得任何收到一个 Statechain 的用户都能(通过由发送者提供的交易数据)验证转账历史以及当前状态是有效的。
运营者服务端需要跟踪每一个 Statechain 的过往签名次数,办法是在创建时为每一个 Statechain 分配一个随机的标识符、并存储相关的面额、碎片私钥和碎片公钥(而不是完整的聚合公钥)。在新的私钥分割及再分割方案中,服务端传递自己的碎片公钥给用户,而执行再分割所需的数据是盲化的,这样服务端就无法知晓用户的完整碎片公钥,因此也不再能生成完整的聚合公钥、在链上辨识资金的位置。
这种设计甚至不允许运营者知晓他是跟最新的所有权人签名了合作关闭,还是跟一个新的所有权人签名了一笔新的预签名交易;他不能通过任何细节来分辨这两者。但是,如果有人尝试通过提供一笔假的、无法被结算的交易来「重复花费」一个 Statechain,接收方是能够发现的。首先,接收方将看到为这个 Statechain 提供价值的 UTXO 在链上被花掉的。其次,因为运营者必须签名所有的状态变更,在过往交易的历史中,将只有一个清晰的合作式关闭解决。两者都可以让接收方发觉这是无效的,应该拒绝。
Statechain 构造也允许闪电通道「架设在」一个 Statechain 上,办法是将这个 Statechain 转移给两人的一个多签名地址,然后这两人可以在这基础上协商一组传统的闪电通道承诺交易。如果这两人需要关闭这个闪电通道,他们需要先在链上关闭这个 Statechain,并且,也因此,他们也不能在闪电交易中使用长于 statechain 寿命的时间锁,但其它方面,跟常规的闪电网络是完全一样的。
总的来说,有了新版 statechian 的巨大隐私性提升,以及它跟闪电网络的可组合性,比特币上的二层交易机制的经济可行性和灵活性的许多前景都已开启。尤其考虑到最近交易池动态的巨大变化以及最终的手续费压力。
这套机制提供跟 Ark 相同类型的流动性优势,即,可以自由转移而无需考虑收款额度,但跟 Ark 不同的是,它已经上线了,现在就可以使用了。不可否认,它跟闪电通道这样的东西由不同的信任模式,但考虑到它在灵活性以及可扩展性上的巨大收获,它毫无疑问是一个应该探索的领域。