LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > 区块链分片尚未解决的问题(下)

区块链分片尚未解决的问题(下)

2020-01-15 币须内容矿池 来源:区块链网络

简洁的非交互式知识证明

多碎片损坏的第二种解决方案是使用某种加密结构,使人们能够证明某种计算(例如从一组事务中计算一个块)是正确执行的。 这样的结构确实存在,例如 zk-snark、 zk-STARKs 和其他一些结构,其中一些结构在今天的区块链协议中被积极地用于私人支付,最显著的是 ZCash。 这些原语的主要问题是它们的计算速度是出了名的慢。 例如,Coda Protocol,它使用 zk-snark 来证明区块链中的所有块都是有效的,在一次采访中说,每个交易可能需要30秒来创建一个证明(这个数字现在可能更小了)。

有趣的是,一个证明并不需要由一个被信任的一方来计算,因为这个证明不仅证明了它所建立的计算的有效性,而且也证明了证明本身的有效性。 因此,这种证明的计算可以在一组参与者之间进行,与执行某些不可信计算所需的计算相比,这组参与者的冗余度要小得多。 它还允许计算 zk-snark 的参与者在特殊硬件上运行,而不会减少系统的地方分权。

Zk-snark 面临的挑战,除了表现之外,还有:

依赖于研究较少和时间测试较少的密码学原语;

Zk-snark 依赖于一个可信的设置,其中一组人执行一些计算,然后丢弃该计算的中间值。 如果程序的所有参与者相互勾结,保持中间值,就可以伪造证明;

系统设计中引入了额外的复杂性;

Zk-snark 只能用于可能计算的一个子集,因此使用图灵完备智能契约语言的协议不能使用 snark 来证明链的有效性

虽然许多协议都在考虑长期使用 zk-snark,但除了 Coda 之外,我不知道还有什么计划要使用它们。

数据可用性

我们将涉及的第二个问题是数据可用性。 一般来说,操作一个特定区块链的节点被分成两组: 完整的节点,那些下载每个完整的块并验证每个交易,和轻节点,那些只下载块头,并使用 Merkle 证明的部分状态和交易,他们感兴趣的。

现在,如果大多数完整的节点串通,它们可以生成一个块,有效的或无效的,并将其散列发送到轻节点,但永远不会透露该块的完整内容。 他们可以通过多种方式从中受益。 例如,考虑下面的数字:

有三个模块: 前一个模块 a 是由诚实的验证器生成的; 现在的模块 b 是由诚实的验证器共同生成的; 下一个模块 c 也是由诚实的验证器生成的(区块链在右下角描述)。

你是个商人。 当前块(b)的验证器从以前的验证器接收 a 块,计算一个块,在这个块中你收到钱,并发送给你一个该块的标题,其中有一个 Merkle 证明你有钱的状态(或者 Merkle 证明一个有效的交易将钱汇给你)。 确信交易已经完成,您提供服务。

然而,验证器从不向任何人发布 b 块的完整内容。 因此,c 块的诚实验证器不能检索块,并且被迫停止系统或者在 a 之上构建,剥夺了你作为一个金钱商人的权利。

当我们将相同的场景应用于分片时,full 和 light 节点的定义通常适用于每个分片: 每个分片中的验证器下载该分片中的每个块,并验证该分片中的每个事务,但是系统中的其他节点,包括那些快照分片链状态到信标链中的节点,只下载头。 因此,碎片中的验证器实际上是该碎片的完整节点,而系统中的其他参与者,包括信标链,则作为轻节点进行操作。

对于我们上面讨论的渔夫方法,诚实的验证器需要能够下载交叉链接到信标链的块。 如果恶意验证器交叉链接一个无效块的头(或者用它来发起一个交叉分片事务) ,但是从来没有分布这个块,诚实的验证器就没有办法制造一个挑战。

我们将讨论两种相辅相成的解决这一问题的方法。

监护证明

需要解决的最直接的问题是一个块在发布后是否可用。 一个被提议的想法是有一个所谓的公证人,在碎片之间轮换的频率比验证人员更高,验证人员的唯一工作就是下载一个块,并证明他们能够下载它。 与验证器不同,它们可以更频繁地旋转,因为它们不需要下载碎片的整个状态。

这种天真的方法的问题是不可能证明公证人是否能够下载块,所以一个公证人可以选择总是证明他们能够下载块,甚至没有尝试检索它。 解决这个问题的一个办法是,Notaries 提供一些证据或投注一些令牌来证明该块是下载的。 这里讨论了一个这样的解决方案。

纠删码

当一个特定的轻节点接收到一个块的散列时,为了增加节点对该块可用的信心,它可以尝试下载该块的一些随机片段。 这并不是一个完整的解决方案,因为除非光节点集体下载整个块,否则恶意块生产者可以选择扣留没有被任何光节点下载的块部分,从而仍然使块不可用。

一个解决方案是使用一个叫做 Erasure Codes 的结构来恢复整个块,即使只有部分块是可用的:

和 Ethereum Serenity 都围绕这个想法进行设计,为光节点提供了一种合理的方式来确信这些模块是可用的。 本文对以太宁静法进行了详细的描述。 这两种方法都依赖于挑战,因此都可能容易受到网络攻击。

长期可用性和结论

请注意,上面讨论的所有方法都只是证明了一个块已经发布,并且现在已经可用。 块以后可能由于各种原因变得不可用: 节点离线、节点故意删除历史数据,以及其他原因。

一个值得一提的解决这个问题的白皮书是 Polyshard,它使用擦除代码使块可以跨碎片使用,即使几个碎片完全丢失了它们的数据。 不幸的是,他们的特定方法要求所有分片从所有其他分片下载块,这非常昂贵。

幸运的是,长期可用性并不是一个紧迫的问题: 因为系统中没有参与者被期望能够验证所有分片中的所有链,所以分片协议的安全性需要设计成这样一种方式,即使某些分片中的一些旧块变得完全不可用,系统也是安全的。

数据有效性和数据可用性仍然是设计安全协议中的两个问题,目前还没有令人满意的解决方案。 我们正在积极研究这些问题。 请继续关注更新。

—-

编译者/作者:币须内容矿池

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...