这在“fisherman困境”中得到了扩展: 核心思想是,这两个“世界”,一个是V1是一个邪恶的发布者,V2是一个诚实的挑战者,而另一个“世界”是V1是一个诚实的发布者,V2是一个邪恶的挑战者。两种情况对于当时未尝试下载该特定数据的任何人来说都没有区别。 当然,在可扩展的去中心化区块链中,每个单独的节点只能希望下载一小部分数据,因此只有一小部分节点会看到发生了什么事情,除了存在分歧的事实。 分清谁对谁错是不可能的,这个事实使得不可能有一个有效的欺诈证明机制来保证数据的可用性。 常见问题:如果某些数据不可用怎么办?使用ZK-SNARK,您可以确保一切都有效,这还不够吗? 不幸的是,仅仅有效性还不足以确保区块链正确运行。这是因为,如果区块链有效,但所有数据均不可用,则用户将无法更新其生成任何未来区块有效的证明所需的数据。生成有效但不可用的区块然后消失的攻击者可以有效地让区块链陷入停滞。有人还可以保留特定用户的帐户数据,直到该用户支付赎金为止,因此问题不仅仅在于生存问题。 有一些强有力的信息理论论点认为这个问题是根本的,并且没有可以解决的聪明技巧(例如,涉及密码累加器)。有关详细信息,请参见本文(https://eprint.iacr.org/2009/612.pdf)。 那么,如何在不实际下载的情况下检查1 MB数据是否可用?听起来是不可能的! 这里的关键是一项称为数据可用性采样的技术。数据可用性采样的工作方式如下: 使用称为擦除编码(erasure coding)的工具将具有N个区块的数据扩展为具有2N个区块的数据,以使这些区块中的任何N个都可以恢复整个数据。为了检查可用性,用户无需尝试下载全部数据,而只是随机地选择区块中恒定数量的位置(例如30个位置),并且仅当他们在所有选定位置的块中成功找到块时,才接受这个区块。擦除编码将“检查100%可用性”(每条数据可用)问题转换为“检查50%可用性”(至少一半数据可用)问题。随机抽样解决了50%可用性问题。如果少于50%的数据可用,那么至少有一项检查几乎可以肯定会失败,并且如果至少50%的数据可用,那么,尽管某些节点可能无法将某个区块识别为可用,但这只需要一个诚实节点就能运行擦除编码重建程序,以带回剩余的50%区块。因此,您无需下载1 MB来检查1 MB区块的可用性,而只需下载几KB。这使得在每个区块上运行数据可用性检查变得可行。有关如何使用点对点子网有效地执行此检查的信息,请参见这篇文章(https://hackmd.io/@vbuterin/sharding_proposal#Blob-publication-process)。 (责任编辑:admin) |