收起
1分钟1小时1天1周1个月

科普:状态通道真的可以实现即时确定性吗?

严格意义上来说不能;现实意义上来说,可以。

2020年5月28日 18:06 开发者

来源/以太坊爱好者

术语往往禁锢认识。

在技术讨论中,好的术语可以在准确性和简洁性之间取得平衡。通常,这种平衡需要根据说话人(开发人员或营销人员)和听话人(专家或门外汉)的特性发生变化。

“即时确定性(instant finality)” 就是一个新兴术语,也是本文的重点。这个术语指的是增加状态通道层会给区块链带来的优势。“确定性” 概念可以追溯至中本聪的那篇介绍比特币和区块链的论文《比特币:一种点对点的电子现金系统》。“确定性” 是区块链交易的一种特性,可定义为交易被打包进区块之后的一种状态,即,如果我们看到某个区块之后挖出了足够多的区块,就可以确信这个区块内的交易不会被网络拒绝。也就是说,这个交易及其结果(对代币余额的更改)会永远留存下来。

工作量证明区块链的确定性不是非此即彼的:交易不会在某个时刻得到最终确定,而是像中本聪在白皮书中描述的那样,交易被拒绝的概率会随着时间流逝呈指数级下降,因为网络会就最长链达成共识。

当然了,区块链在任何时刻都有可能出现分叉,导致某个交易失败:但是只要看到有新的区块出现并指向包括这个交易在内的区块,这种可能性就越来越低。不包含我们的交易的分叉链越长,我们的交易被拒绝的可能性就会越高。也有可能出现这样的情况:我们的交易可能都无法实现确定性,而是变成了 “反确定性” 的,也就是说我们可以确信这个交易已经被拒绝了。当网络遭到所谓的 51% 攻击时,就会出现这种情况。再强调一次,我们永远无法确定最后会是哪种结果:但是随着时间的流逝,我们对交易被拒绝的可能性的预测会无限趋近 0 或 1 。只要等待足够长的时间,我们就能从实际意义上得出确定的结论。

那么,状态通道到底改变了什么,产生了什么影响?好吧,事实上没有带来任何影响。作为二层技术,状态通道显然不会更改区块链的底层协议,也无法改变其确定性:不过,底层链能下功夫的地方有很多。

此外,使用状态通道应用必须在底层区块链上发起至少一个 “锁定” 交易和一个 “解锁” 交易。跟其它交易一样,这些交易同样存在确定性问题。用户通常要等待将近 1 分钟(从用户体验的角度来说这已经是龟速了)左右,这些底层交易才能被视为是确定的。

状态通道的原理是利用锁定和解锁之间的机会:在这两个步骤之间提供一个执行环境,让类似区块链的应用能够安全地运行。这类应用会涉及状态更新,这些状态更新可以称作 “二层交易”,与区块链交易大同小异。二层交易也带有密码学签名,可包含任意数据,并由定义了程序执行规则的虚拟机来解释(程序当然是由开发者来写的)。然而,二层交易并不需要依赖复杂的概率性共识协议。状态通道的状态可由单方或各方同时发起更新。每次更新不一定具有可确定性。

什么是可确定性?它指的是一个状态通道的状态能够被底层区块链接受:作为解锁交易的一部分,随解锁交易一起发到底层链上时,不会导致链的虚拟机回滚。这就意味着,满足可确定性的二层交易是经过正确格式化的,也得到了正确的签名,能够经过状态通道协议设计者和应用开发者的额外检查。一旦这些条件经过了参与者的验证,参与者就可以相信这些条件会在将来的某个时间点以特定的方式触发解锁。这样,二层交易就以一个可确定的状态告终。

这些相对宽松的要求使得二层可确定性相比底层可确定性来说,在耗时方面减少了几个数量级。

这就是 “即时” 这一词语的由来:这不是一个精准的术语,但是反映出了,从普通的去中心化应用到状态通道应用,用户体验已经产生了质变:高效的状态通道更适合微支付和实时游戏等无法直接构建在底层区块链上的应用。

如果锁定交易和解锁交易具备确定性,那么二者之间的所有二层交易都具备即时可确定性。如果锁定交易被拒绝了,所有状态通道内的更新都没有意义。不过,在执行锁定交易之后,我们可以等待任意久的时间再开始更新状态通道,因此可以将实现确定性的条件建立在某个既定或接近既定的事实上。

解锁交易也是类似的:状态通道解锁(释放参与者在通道内的资金)的时候有一个挑战和响应(或者叫 “争议”)模式,这是用来保护离线的参与者的。如果没有这个模式,恶意对手方就可以通过发送一笔底层链上的交易、用不利于对手的状态来解锁资金。只要诚实的参与者能够在挑战时期内发出底层交易来反驳对手,那 TA 的资金就是安全的。因此,如果时限太短,可确定性概念也会被打破。如果挑战时限比底层交易得到确定所需的时间长,那么二层交易的可确定性就是无条件的。

请注意,发生在二层的资产转移与发生在一层的稍有不同:因为关于交易的共识只在一组固定(人数通常较少)的参与者中达成,状态更新仅对该这组参与者有意义。如果我通过状态通道向对手方付款,我的对手方无法将这笔钱支付给通道外的人,直到我们完成解锁交易为止。虽然有了即时确定性,但是我们不具备即时流动性:

总而言之,在描述状态通道时,那些想要体现更深层次理解的人可能希望用 “快速有条件可确定性” 来代替 “即时确定性” 这一术语。就其他人而言,沿用后一个术语的可能性更高:这就跟大家习惯说 “比特币是去中心化的”、“公钥密码学是安全的”、“哈希函数是不可逆的”这些论断一样。广大社区成员之所以会接受这些不准确的说法,是因为它们可以让对话更加流畅地进行,以便更简单地传达中心思想。但是,在更强调准确性的情况下,我们不应该惧怕更深入地探讨、解析一个术语背后的完整含义——这就是我写这篇文章的目的!