以太坊Sharding FAQ

昕阳小编 74 0

目前,在所有的区块链协议中,每个节点都存储着所有的状态(账户余额、合同代码和存储等。)并处理所有事务。这提供了很多安全性,但是极大地限制了可伸缩性:区块链不能处理比单个节点更多的事务。为此,比特币被限制在每秒3-7次交易,以太坊每秒7-15次交易,以此类推。那么,这就提出了一个问题:有没有办法创建一种新的机制,只允许一小组节点来验证每一笔交易?只要有足够的节点来验证每个事务,系统仍然是高度安全的,但是有足够的节点来允许系统并行处理许多事务。我们能否利用这项技术来大幅提高区块链的吞吐量?“简单的解决方案”主要分为三类。首先是直接放弃独立区块链的可扩展性,而是假设用户会使用很多不同的“altcoins”。这种方法极大地提高了吞吐量,但代价是安全性:用这种方案增加N因子的吞吐量必然伴随着N因子的安全性的降低。所以可以证明对于大于n的小值是不可行的,第二种就是简单的提高块大小限制。这种方法是可行的,而且在某些情况下可能是正确的处理方式,因为区块链的大小可能更多地受到政治而不是实际技术因素的制约。然而,不管个人在个别案例中的信念如何,这种方案不可避免地有其局限性:如果区块链运行足够长的时间,运行在消费级硬件上的节点将退出,网络将开始依赖于仅运行区块链的少数超级计算机,这可能导致极大的中心化风险。第三种是“合并采矿”,这是一种多个区块链共存的技术,但所有区块链共享相同的采矿激励(或股权证明系统中的赌注)。目前,Namecoin已经通过这种技术从比特币区块链获得了很大一部分安全性。如果所有矿工都参与,理论上在不影响安全的情况下,吞吐量可以提高N倍。但是,也存在这样的问题,它增加了n倍的每个矿工的计算和存储负荷。所以,其实这个方法只是一个隐藏的限制块大小的方法。即使这被认为是可以接受的,仍然存在这样的缺陷:这些区块链并没有真正“绑在一起”;只需要少量的经济激励就可以说服矿商放弃或妥协特定的区块链。这种可能性是非常真实的,有合并挖矿被攻击的【实际历史事件】,有明确主张使用合并挖矿攻击作为“治理特征”的开发者。对于一个特定的联盟来说,摧毁区块链是无利可图的。如果每个链条上只有少数矿工参与联合开采,集权的风险会减轻,但联合开采的安全效益也会大打折扣。这三个困境表明区块链系统最多只能有以下三个属性中的两个:

(定义为系统可以在每个参与者只能访问O(c)资源的场景下运行,即普通笔记本电脑或小型VPS)

(定义为能够处理O(n) O(c)事务)

(定义为最多使用O(n)资源来抵御安全攻击)

在本文的其余部分, 我们假设交易负载、国家规模和加密货币市值都与n成正比没有。 梅特卡夫定律认为网络的价值与用户数量的平方(n 2)成正比,因为如果网络有n个用户,那么网络对每个用户都是有价值的,但是每个用户的价值与用户数量成正比,因为如果一个网络有n个用户,通过网络有n-1个潜在的连接,每个用户都可以从中受益。在实践中,经验研究表明,具有N个用户的网络的价值“对于N的小值,与N 2成比例;对于N的大值,与nlog n成比例”。这很好理解,因为对于n的一个小值,这个论点成立,但是一旦系统变大,两个影响会减缓增长。首先,实践中的增长通常发生在社区中,所以在一个中等规模的网络中,网络通常已经提供了每个用户所关心的大部分连接。其次,人脉往往可以互相替代。你可以争辩说,人们只能从k个连接中得到~O(log(k))的值——有23个牌子的除臭剂可以选择是好的,但并不是说比有22个选择更好,一个选择和零个选择是非常重要的区别。另外,即使加密货币的价值与k个用户的O(k * log(k))成正比,如果我们接受上述解释作为出现这种情况的原因,也意味着交易量也是O(k * log(k)),因为每个用户的log(k)值理论上来自于用户通过网络进行的log(k)连接,状态大小在很多情况下也应该遵循O(k)。所以假设n=O(k * log(k)),并且基于N(生态系统大小)和C(单个节点的计算能力)是我们使用的完美模型。许多碎片化建议(如NUS的Loi Luu等人提出的这种早期BFT碎片化方案,以及针对比特币提出的这种Merklix树方案1)试图只碎片化事务或只碎片化状态,而不考虑其他方面2。这些努力令人钦佩,可能会带来效率的提高,但它们遇到了根本性的问题,它们只能解决其中一个瓶颈。我们希望每秒能够处理超过10,000个事务,并且我们不必强迫每个节点成为超级计算机或存储一兆字节的状态数据。这就需要一个综合的解决方案,即状态存储的工作量。事务处理,甚至事务的下载和广播都分散在各个节点上。特别是,这需要在P2P级别进行改变,因为广播模型不可扩展,因为它需要每个节点下载并重复广播O(n)个数据(每个发送的事务),而我们的去中心化标准假设是每个节点只能访问各种O(c)个资源。Bitcoin-NG可以通过另一种区块链设计来增加可扩展性,即如果节点花费大量的CPU时间来验证块,网络会更加安全。在简单的PoW区块链中,存在很高的中心化风险,如果阈值增加到块验证节点CPU时间的5%以上,共识安全性会被削弱;比特币NG的设计缓解了这个问题。然而,这仅仅将事务可伸缩性提高了5-50倍3,4,而没有提高状态可伸缩性。也就是说,比特币-NG方法和碎片化并不互斥,当然可以同时实现。基于渠道的策略(闪电网、闪电网等。)可以通过常数因子来扩展事务容量,但是它们不能扩展状态存储,并且它们还会带来自己独特的妥协和限制,尤其是在拒绝服务攻击方面;可以说,通过碎片化(加上其他技术)实现上链延伸和通过渠道实现下链延伸是必要的,也是互补的。使用高级加密还有其他方法。例如基于Mimblewimble和ZK-斯纳克的策略来解决可伸缩性问题的特定部分。初始化所有节点的同步,而不是从创建块验证整个历史,节点可以验证密码以证明当前状态合法地遵循历史记录。 这些方法确实解决了合法性问题,但值得注意的是,我们可以依靠密码经济学,以比纯密码学更简单的方式解决同样的问题——参见当前以太坊中快速同步和神同步的实现。这两种方法都不能缓解状态大小的增长或在线事务处理的限制。状态:代表系统“当前状态”的信息集合;在最简单的模型中,确定事务是否有效,以及事务的结果,应该只取决于状态。比如比特币中的UTXO的状态数据,以太坊中的balances nonces码存储,Namecoin中的域名注册项。

:自创建该块以来所有交易的有序列表。在一个简单的模型中,当前状态应该是创建状态和历史的确定性函数。

:进入历史的对象。实际上,事务代表用户想要做的事情,并且被加密和签名。

:获取状态、应用事务并输出新状态的函数。所涉及的计算可能包括增加或减少为交易指定的账户中的余额、验证数字签名和运行合同代码。

:一种可以存储大量数据的加密哈希树结构,其中只需要O(log(n))的空间和时间来验证每一个单独的数据项。详情见此。在以太坊中,每个块的事务集已经保存在默克尔树中,树的根在块中提交。

Receipt:表示事务执行结果的对象。它不存储在状态中,但仍然存储在默克尔树中并提交给块,以便节点可以在没有所有数据的情况下有效地验证证明。日志是以太坊的收据。在碎片模型中,收据用于促进异步跨碎片通信。

:一种与区块链交互的方式。它只需要非常少量的计算资源。默认情况下,它只需要跟踪区块链的头,并根据需要请求上述文章内容就是交易、状态和收据的相关信息,并验证默克尔证明的相关数据。

:代表州的默克尔树的根哈希为5。

以太坊Sharding FAQ-第1张图片-昕阳网

(以太坊的状态树和状态根是如何嵌入块结构的)

将状态分成K=O(n/c)个分区,我们称之为“切片”。比如以太坊的分片方案,可能会把所有以0x00开头的地址放到一个分片里,把所有以0x001开头的地方放到另一个分片里,以此类推。在最简单的碎片化形式中,每个碎片都有自己的事务历史,在某个碎片化K中的事务影响仅限于碎片化K的状态.一个简单的例子是多资产区块链,其中有k个分部,每个分部存储余额并处理特定的资产相关交易。在更高级的碎片形式中,包含了一些形式的跨碎片通信功能,其中一个碎片上的事务可以触发另一个碎片上的事件。

一个简单的方法如下。有一些节点称为协调器,它们接受片K上的事务(根据协议,协调器可以选择哪个片K或随机分配K)并创建排序规则。一个排序规则有一个排序头,以及一条“这是片K上事务的排序”形式的短消息。它期望片K的前状态根是0x12bc57,当前排序的事务的默克尔根是0x3f98ea,事务处理后的状态根应该是0x5d0cc1。和协调器#1、2、4、5、8、11、13.98,99签了。

一个块必须包括每个片的排序头,一个块在以下条件下有效:

每个排序规则中给定的前状态根必须与相关片的当前状态根匹配

排序规则中的所有事务都有效

排序规则中给定的后状态根必须与上面给定的状态执行排序规则中的事务结果匹配

排序规则必须由该片的至少三分之二的注册协调者签名

。需要注意的是,这样的系统中有几个“层次化”的节点:

超级All-node-处理所有排序规则中的所有事务,并保持所有片的满状态

相反,如果某个段中三分之二的协调者认为某个排序规则有效,那么该排序规则有效。

-充当顶级节点,但也处理某个切片的所有事务,并保持完整状态。

-仅下载并验证顶级块的块头;不处理任何排序头或事务,除非它需要读取特定片的状态的一些特定信息,在这种情况下,它下载该片的最接近排序头的默克尔分支,并下载该状态下的默克尔证明的期望值。

这里的挑战是什么?

-如果攻击者接管了一个碎片中的大部分协调者,要么获得足够的签名来阻止任何排序规则,要么更糟,提交一个无效的排序规则?

-如果得到一个无效的校对,节点(包括轻节点)如何可靠地知道它,以便验证欺诈,并在确认它是欺诈后拒绝校对?

-作为欺诈检测的子集,在整理中缺失数据的特殊情况会怎样?

-在n c^2的特殊情况下,在上面给出的简单设计中,会出现排序头超过O(c)的情况,所以普通节点将无法处理,只能处理顶级块。所以需要在事务和顶层块头中直接超过两级间接寻址(也就是我们需要的“一片一片”)。实现这个目标最简单最好的方法是什么?

但是CAP定理意味着完全安全的分布式系统是不可能的,所以碎片化是不可能的?

怎样才能促进跨片交流?

这通常包括将每笔交易细分为“借方”和“贷方”。例如,假设我们有一个交易,其中帐户A在片M上,我们期望向片n上的帐户B发送100个令牌。这些步骤如下:

在片M (i)上发送一个交易扣除账户A的100个代币(ii) 创建一个收据。收据对象并不直接保存在状态中,但收据的生成能通过默克尔证明来验证。

等待第一个交易被包含进来(有时候需要等待终止化,这取决于系统)

在分片N上发送一个交易,包含来自(1)收据的默克尔证明。这个交易也检查分片N上的状态以确保收据是”未花费“;如果是的话,那么它将账户B增加100个代币,并且保存在状态中代表收据已花费。

可选地,(3)中的交易也保存收据,然后可以在分片M中用来执行进一步的操作,这取决与原操作是否成功。

在更复杂的分片形式中,交易在某些场景下可能具有分散在不同分片上的效果,并且可以从多个分片状态中同时请求数据。

以太坊Sharding FAQ-第2张图片-昕阳网

不同类型的应用程序怎么样与分片区块链融合?

需要注意的是,与可用于分片内通信的机制相比,用于异步跨分片通信的协议内置机制可能会有所不同并且功能较弱。在不可扩展的区块链中的当前可用的一些功能在可扩展区块链中只能用于分区内通信7。

什么是火车旅馆问题

?只有异步消息,最简单的解决方法是先预订火车,然后再预订旅馆,然后一旦两个预订都成功就都确认;预订机制将阻止其他人预留(或者至少会确保有足够的空间开放让所有的预订被确认)一段时间。然而,这意味着该机制依赖于额外安全假设:来自于跨分片的消息可以在固定的周期内被包含在另外的分片中。

使用跨分片同步交易,问题更容易,但创建可以跨分片原子同步交易的分片解决方案的挑战本身绝对是重要的。

如果单个应用程序的使用量超过 O(c),则该应用程序需要存在多个区块链中。这样做的可行性取决于应用程序自身的具体情况。一些应用程序(如货币)很容易并行化,而另外一些应用程序(例如某些类型的市场设计)则不能并行化智能串行处理。

我们知道分片区块链的属性有一个事实是不可能实现的。阿姆达尔定律表明在应用程序有任何不可并行化组件的情况下,一旦容易获得并行化,不可并行化组件就会快速成为瓶颈。在像以太坊的通用计算平台中,很容易提出不可并行化计算的例子:一个跟踪内部变量x的合约,一旦接到到一个交易就将变量x设置为sha3(x, tx_data)就是个简单的例子。没有分片方案可以给与这种形式的个别应用程序超过O(c)的性能。因此,随着时间的推移,分片区块链协议将会越来越好地能够处理越来越多样化的应用程序类型和应用程序交互,但分片架构至少在规模超过O(c)的某些方面总是落后于单分片的架构。

我们正在运行的是哪些安全模型?

诚实的大多数

(或诚实的绝对多数):我们假设有一组验证者,而且这些验证者的?(或?或?)由攻击者控制,其余的验证者诚实地遵循协议。

:我们假设所有的验证者在博弈论的上都是合理的(除了攻击者,他们有动机使用某种方式来攻击网络),但是不超过一部分(通常在?和?之间)协调他们的行动。

:我们假定所有的验证者都是由同一个参与者控制的,或者完全有能力协调他们之间的经济上最优的选择。我们可以讨论联合的成本(或联合的利润)达到一些不良的结果。

:我们采取不协调的多数模型,而不是让攻击者成为参与者之一,攻击者处于协议之外,并有能力贿赂任何参与者来改变他们的行为。攻击者被模拟为拥有预算,这是他们愿意支付的最高金额,我们可以讨论他们的成本,即他们最终为破坏协议平衡而支付的金额。

混合模型也是存在的。例如,即使是在协调选择模型和贿赂攻击者模型中,通常也会做出一个

诚实的少数人

的假设,某些部分(可能是1-15%)的验证者会无视激励而采取利他行为。 我们也可以讨论由50-99%的验证者组成的联盟,试图破坏协议或伤害其他验证者; 例如在工作量证明中,一个51%算力大小的联盟可以通过拒绝包含其他矿工产出的区块来增加增加自己的收入。

贿赂攻击者模式在某些情况下被批评为不切实际的对抗行为,尽管其支持者认为,如果一个协议的设计考虑了贿赂攻击者模型,那么它应该能够大幅降低共识成本,因为51%的攻击变成一个可以从中恢复的事件。 我们将在不协调的大多数和贿赂攻击者模型的背景下评估分片。

我们怎么样解决在不协调的大多数模型中的单分片接管攻击?

结果是,在一个诚实/不协调的多数模型中,相对于每一个单节点正在验证和创建块,即使在任何给定的时间在每个分片上只有几个节点验证和创建块,安全级别实际上并不低得多。 原因是简单统计:如果你在全局集合上假设一个?诚实的绝对多数,如果样本的大小是150,那么以99.999%的概率就可以满足样本的诚实多数条件。 如果你假定在全局组合上有一个?诚实的绝对多数,那么这个概率就会增加到99.999999998%(这里请看细节 )。

因此,至少在诚实/不协调的大多数情况下,我们有:

去中心化

(每个节点只存储O(c) 数据,因为它是O(c) 分片的一个轻客户端,所以存储O(1) * O(c) = O(c)的块头数据,以及对应于当前分配给它的一个或多个分片的完整状态和近期历史的O(c)数据)

(有O(c) 个分片,每个分片有O(c) 的容量,最大容量是n = O(c^2))

(攻击者需要控制整个O(n)大小的验证池中的至少 尚力财经小编2022 ? ,以便有机会接管网络)。

你怎么样在工作量证明和权益证明中做这个抽样?

尚力财经小编2022在工作量证明中,这是比较困难的,就像“直接的”工作量证明计划一样,不能阻止矿工将工作量于某一特定的分片。 有可能使用proof-of-file-access forms工作量证明来将个人矿工锁定到单独的分片,但是很难确保矿工不能快速下载或生成可用于其他分片的数据并因此避开 这种机制。 最为人所知的方法是通过Dominic Williams发明的一种叫做“拼图塔”的技术,矿工首先在一个共同链上进行工作量证明,然后将这些证明导入到关于权益风格验证池的证明中,然后验证池就像在权益证明的情况下一样。

一个可能的中间路线可能如下所示。 矿工可以花费大量的(O(c)大小)工作来创建一个新的“密码身份”。 工作量证明方案的确切值,然后选择他们在哪个分片上产生下一个块。他们可以花费O(1)大小的工作量在分片上创建一个块,然后工作量证明的价值决定了他们接下来可以继续产块的分片8。注意的是,所有这些方法都以某种方式工作量证明“有状态”,这是必要的。

取样的频率高低有哪些折衷?

每个区块进行抽样的主要挑战是重新改组会带来非常高的开销。 具体来说,验证分片上的块需要知道该分片的状态,因此每次验证器被重新改组时,验证器需要下载他们所在的新分片的整个状态。这需要强大的状态大小控制策略(即经济上确保状态不会增长过大,无论是删除旧账户,限制创建新账户的比率还是两者的结合),以及相当长的重组时间。

目前,Parity客户端可以在?3分钟内通过“warp-sync”下载和验证完整的以太坊状态快照; 如果我们增加20倍以弥补增加的使用量(10 tx / sec而不是0.5 tx / sec)(我们假定未来的状态大小控制策略和从长期使用中积累的“灰尘”大致抵消了) 得到约60分钟的状态同步时间,这表明12-24小时的同步周期但不少于是安全的。

有两条可能的途径可以克服这个挑战。

我们是否可以强制更多的状态保持在用户端,以便交易可以被验证,而不需要验证器来保存所有的状态数据?

(Merkle树中对象的子集,需要在访问多个状态对象的交易的Merkle证明中提供)

以太坊Sharding FAQ-第3张图片-昕阳网以纯粹的形式实施这个计划有两个缺陷。 首先,它引入了O(log(n))的开销,尽管可以说这个O(log(n))开销并不像看起来那么糟糕,因为它确保了验证器总是可以简单地将状态数据保存在内存中, 它永远不需要处理访问硬盘驱动器9的开销。 其次,如果交易访问的地址是静态的,那么它可以很容易地实施,但是如果所讨论的地址是动态的那么是很困难实施的,也就是说,如果交易执行的代码是read(f(read(x))),其中某些状态读取的地址取决于其他状态读取的执行结果。 在这种情况下,交易发送者认为交易将在发送交易时读取的地址可能与交易被打包在块中时实际读取的地址不同,因此Merkle证明可能是不充分的10。

一种折中方法是允许交易发送者发送一个证明,该证明包含访问数据的最可能的可能性; 如果证明是充分的,则交易将被接受,如果状态意外地变化并且证明不足,则发送者必须重新发送或者网络中的一些帮助者节点重新发送交易并添加正确的证明。 那么开发者可以自由地进行具有动态行为的交易,但是行为越动态,交易实际上被打包在块中的可能性就越小。

注意验证者在这种方法下的交易包含策略需要很复杂,因为他们可能会花费数百万的gas处理一笔交易运行到最后一步才发现访问到他们没有的一些状态条目。 一个可能的妥协是验证者有一个策略,只接受(i)低gas成本的交易,例如< 100k, (ii)静态地指定一组允许访问的合约,并包含这些合约的整个状态的证明。 请注意,这只适用于最初广播交易时; 一旦交易被打包在一个块中,执行顺序是固定的,因此只能提供与实际需要访问的状态对应的最小Merkle证明。

如果验证者不立即重新重组,还有一个提高效率的机会。 我们可以期望验证者存储来自已经处理的交易的证明的数据,以便该数据不需要被再次发送; 如果k交易是在一个重组周期内发送的,那么这就将Merkle证据的平均大小从log(n) 减少到log(n) -log(k)。

随机抽样的随机性是怎么样产生的?

如上所述,最简单的方法就是通过二项式分布。 如果希望避免大小为N的样本被超过50%攻击,并且攻击者具有全球权益池的p%,则攻击者能够在一轮中获得大多数的概率是:

接下来是一个表格,说明N和P的各种值在实践中的概率:

以太坊Sharding FAQ-第4张图片-昕阳网| | N=50 | N=100 | N=150 | N=250 || - | ------ | --------- | --------- | --------- || p=0.4 | 0.0978 | 0.0271 | 0.0082 | 0.0009 || p = 0.33 | 0.0108 | 0.0004 | 1.83 * 10-5 | 3.98 * 10-8 || p = 0.25 | 0.0001 | 6.63 * 10-8 | 4.11 * 10-11 | 1.81 * 10-17 || p = 0.2 | 2.09 * 10-6 | 2.14 * 10-11 | 2.50 * 10-16 | 3.96 * 10-26 |(编者注:原表格如此)

因此,对于N> = 150,任何给定的随机种子将导致有利于攻击者的样本的可能性确实非常小11,12。 这就意味着从随机性的安全角度来看,攻击者需要在选择随机值的顺序上有非常大的自由度,以彻底打破抽样过程。 大多数权益证明随机性的漏洞不允许攻击者简单地选择种子; 在最坏的情况下,他们给了攻击者许多机会从许多伪随机生成的选项中选出最有利的种子。 如果对此非常担心,可以简单地将N设置为更大的值,并且在计算随机性的过程中添加适度的硬key-derivation函数,从而需要超过2100计算步骤来找到足够随机性偏差。

现在,我们来看看为了获利而不是直接接管,试图更轻微影响随机性的攻击风险。 例如,假设有一个算法从一些非常大的集合中伪随机地选择了1000个验证者(每个验证者获得$ 1的奖励),攻击者拥有10%的权益,所以攻击者的平均“诚实”收入为100, 攻击者可以操纵随机性来“重新掷骰子”(攻击者可以无限次地执行此操作),这个成本是1美元。

由于中心极限定理,样本数量的标准偏差,并且基于数学上的其他已知结果,N个随机样本的期望最大值略低于M + S * sqrt(2 * log(N)),其中M是 平均值和S是标准差。 因此,操纵随机性和有效地重掷骰子(即增加N)的奖励急剧下降, 重新选择你的预期奖励是100美元,一个重新选择105.5美元,两个108.5美元,其中三个110.3美元,其中四个111.6美元,五个112.6美元,六个113.5美元。 因此,在五次重试之后,它不值得这样做。 结果,一个有10%权益的经济动机的攻击者会(在社会上浪费)花5美元获得13美元的额外收入,净盈余为8美元。

然而,这种逻辑假定单轮重掷骰子是昂贵的。 许多比较老的权益证明算法有一个“权益磨损”漏洞,重掷掷骰子只是在本地计算机上进行计算; 具有此漏洞的算法在分片环境中肯定是不可接受的。 较新的算法(参见关于权益证明FAQ的“验证器选择”部分)具有只能通过在块创建过程中自愿放弃一个点来完成掷骰子的属性,这需要放弃奖励和费用。 减轻边缘经济动机的攻击对样本选择的影响的最好办法是找到增加成本的方法。 一种将N轮投票的成本增加一倍的方法是由Iddo Bentov设计的多数位方法; Mauve论文分片算法期望使用这种方法。

多米尼克·威廉斯(Dominic Williams)最为研究和倡导的确定性门限签名方法是另一种不被少数群体联盟利用的随机数生成方式。 这里的策略是使用确定性的门限签名来从选择样本中生成随机种子。 确定性阈值签名具有这样的属性,即不管给定的一组参与者中的哪一个向算法提供其数据,只要至少?的参与者诚实地参与,值就保证相同。 这种方法显然不是经济上可以利用的,并且完全抵抗各种形式的权益磨损,但是它有几个弱点:

它依赖于更复杂的密码学

(具体来说,椭圆曲线和配对)。其他方法仅仅依赖于对常见散列算法的随机预言。

。 公共区块链的预期目标就是能够在网络的很大一部分节点同时消失但剩余节点大部分是诚实的情况下,它依然可以存活; 确定性门限签名方案在这一点上不能提供这种属性。

,有超过? 的验证器串通是不安全的。 上述权益证明FAQ中描述的其他方法仍然会使操作随机性变得非常昂贵,因为来自所有验证人的数据被混合到种子中,并且进行任何操作都需要通用串通或彻底排除其他验证者。

在贿赂攻击者或协调选择模式中通过随机抽样进行分片的关注点是什么?

在这一点上,攻击者有能力对该样本进行51%的攻击。 由于存在跨分片扩散风险,威胁进一步放大:如果攻击者破坏了分片的状态,攻击者就可以开始向其他分片发送无限量的资金,并执行其他跨分片的恶作剧。 总而言之,贿赂攻击者或协调选择模型的安全性并不比简单地创O(c) altcoins好得多。

我们怎么样改进?

解决这个问题的一个主要类别是使用挑战-响应机制。 挑战-响应机制通常依赖于一个升级原则:事实上X(例如,“在#54分片的排序#17293是有效的”)最初被接受为真,如果至少有k个验证人签署声明(背后有存款)为真。 但是,如果发生这种情况,那么在这个挑战期间,2k验证者可以签署声明,声明这是错误的。 如果发生这种情况,4k验证人可以签署一个声明,说明声明实际上是真实的,等等,直到一方放弃或大多数验证人已经签署声明,此时每个验证人和客户端自己检查X是否为真。 如果X被裁定为正确,那么所有提出这种声明的人都会得到奖励,每个提出错误声明的人都会受到惩罚,反之亦然。

看看这个机制,你可以证明恶意行为者失去了一定数量的资金,与他们被迫查看给定数据的行为者数量成比例。 强迫所有用户查看数据需要大量的验证者签署错误的声明,这可以用来惩罚他们,所以迫使所有用户查看一段数据的成本是 O(n); 这防止了挑战-响应机制被用作拒绝服务向量。

什么是数据可用性问题,我们怎么样使用纠删码来解决它?

我们可以通过某种奇特的密码累加器方案来消除解决数据可用性的需要吗?

假设某个用户在该状态下有一组N个对象的证人,并且更新了这些对象中的M个。 接收到更新信息后,用户可以检查所有N个对象的新状态,从而查看哪个M被更新。 因此,更新信息本身至少编码~M * log(N)个比特的信息。 因此,为了实现M个交易的效果,每个人需要接收的更新信息必须是O(M)。14

那么这意味着我们实际上可以创建可扩展的分片区块链,其中发生不良事件的成本与整个验证人集的大小成正比?

标签:

抱歉,评论功能暂时关闭!

微信号已复制,请打开微信添加咨询详情!