美文网首页
【一五一十】译文: Dan Larimer---- 区块链的状态

【一五一十】译文: Dan Larimer---- 区块链的状态

作者: 荆凯_EOS42 | 来源:发表于2018-11-09 12:23 被阅读27次

BM认为,区块链的状态应该设计为抽象的,独立于共识之外。对于区块链状态和输入的表示,BlockOne的合伙人、李嘉图合约的发明者Ian Grigg也曾经写过一篇相关的文章:Message is the Medium, 解释了在区块链领域中,除了比特币的UTXO设计机制另外的一种架构:基于信息来构建状态。

"鉴于在不将状态哈希包含在共识之内,也仍然可以获得拥有状态哈希的优点,并且将状态哈希包含在共识之内的成本很高,对区块链开发者来说没有让人信服的理由要将状态哈希成为共识的一部分。"

继续昨天的文章。今天为下篇。

image.png

原文链接: https://steemit.com/etheruem/@dantheman/blockchain-state-representation-should-be-abstract-and-not-part-of-consensus
原文作者: Dan Larimer(BM)
翻译: 荆凯(EOS42中文运营)

区块链状态的数学概括

我通常避免使用数学来证明事物,因为我发现绝大多数人都不能遵循逻辑。今天我将提供一些数学来证明区块链行为可以完全抽象为状态的不同表示,同时在数学上是等价的。

假设对所有可能的输入f(i)存在一个函数,如果输入有效,则返回true;如果输入无效,则返回false。

让 I 是所有可能输入的集合,让 i 表示该集合中的特定输入。可以定义一个区块链,如Steem或BitShares,如果输入无效,f(i)返回f(i),如果输入有效,返回f2(i)。f2(i)是一个新的函数,其行为与f(i)类似,应该在下一个输入中传递。我们可以说,如果返回的函数与原始函数相同,那么它返回false,否则返回true。

如果 集合 I 中的每个 i 都会产生相同的输出,则认为两个函数是相同的。从逻辑的角度来看,f(i)的内部实现是一个黑盒子。因此,状态最抽象的可能表示是i与真假状态的映射。对于每个输入,都会返回一个新的函数,并为每个可能的输入返回一个新的映射。

显然,以这种方式表示状态是不实际的,尽管它在数学上是精确的。这是不实际的,因为输入集I的大小实际上是无限的。为了克服这个问题,我们可以使用算法压缩技术。例如,如果所有奇数都无效,所有偶数都有效,那么我们可以将f(i)表示为i % 2 = 0。我们也可以把它表示成i&1 = 0。在这两种情况下,f(i)的实现是不同的,但这两种实现在数学上是等价的。

因此,我们可以得出这样的结论: 只要所有各方都有一种实现方式,对每个可能的输入会产生相同的真/假输出,那么函数如何实现就无关紧要了。我们还可以说,如果区块链的验证是通过检查每个事务的f(i)结果来完成的,那么所有具有相同功能的对等节点都将达成共识。

无法证明两个函数相同

批评者们会很快指出,在实践中数学证明没有意义,因为无法证明对所有输入i而言,两个不同的f(i)的实现会产生相同的输出。以太坊试图通过生成包含在f(i)之中的状态哈希值来证明它们是相等的,然后断言,给定相同的状态和相同的逻辑,两个函数是相等的。

这就是问题所在,以太坊仍然需要证明逻辑是相同的,没有决定性错误。这是一个循环证明! 如果我们断言代码没有决定性错误,那么我们就可以断言状态是相等的; 然而,如果我们不能证明代码没有决定性错误,那么对状态相等的证明,实际上并不能帮助我们证明这两个函数是相等的。您可以证明存在一个bug,但不能证明没有bug。如果将状态哈希与逻辑上的偏移差(offsetting difference)组合在一起,那么状态哈希值的差异可能并不重要。

考虑到通过哈希比较来证明状态相等实际上并不能证明共识,因为共识被定义为所有各方对所有可能的输入的有效性或无效性达成一致,那么它能有什么好处呢? 在用不同语言的多个实现的情况下,尤其如此。证明你产生了同样的状态是一个好的开始,但实际上并不能证明任何东西,就像过去以太坊分叉所表现的那样。

为什么重要?

这很重要,因为为了证明不可能的事情,区块链工程师对共识过程进行了过度限制,阻碍了区块链以现实世界应用所需要的方式来扩展。开发人员被迫进行规范化表示( canonical representations),验证人被迫执行对于确定性代码而言冗余的计算。
这很重要,因为验证历史状态远不如证明当前状态有用。
这很重要,因为构建可扩展、没那么脆弱的区块链,对于区块链技术的普遍采用至关重要。

结论

区块链不应将任何特定的状态表示作为其共识算法的显性部分。这样做只会损害性能,同时使软件变得脆弱,使错误修复变得更加复杂,从而难以追溯应用。如果开发人员希望检验bug,他们仍然可以运行某个代码版本,生成哈希并进行比较。如果有人关心历史证明,那么运行软件的各方仍然可以生成和使用历史证明。

鉴于在不将状态哈希包含在共识之内,也仍然可以获得拥有状态哈希的优点,并且将状态哈希包含在共识之内的成本很高,对区块链开发者来说没有让人信服的理由要将状态哈希成为共识的一部分。

1084915-6ed2991946eccf72.png

相关文章

网友评论

      本文标题:【一五一十】译文: Dan Larimer---- 区块链的状态

      本文链接:https://www.haomeiwen.com/subject/cckwxqtx.html