Vitalik为以太坊“分片”技术发布部分概念验证方案

策划|Tina

编译|核子可乐

区块链前哨导语:

以太坊创始人 Vitalik Buterin 昨天表明,以太坊的内部扩展解决方案“分片”机制,目前已经接近全面完成状态。

更多干货内容请关注微信公众号“区块链前哨”,(ID:blockchain-666)

以太坊创始人 Vitalik Buterin 昨天表明,以太坊的内部扩展解决方案“分片”机制,目前已经接近全面完成状态。

他在推文中表示,“分片即将来临”。Buterin 还分享了一套新的代码库,其中记录了所谓“fork 选择规则”的一部分概念验证文档,其代码用于实现以太坊分片与主区块链间的交互。

代码地址:https://github.com/ethereum/research/tree/master/sharding_fork_choice_poc

根据 CoinDesk 发布的细节报道,这一分片方法旨在将以太坊拆分为多个并发网络,从而使整体网络能够更高效地实现扩展。通过这徙试,网络拥塞状况将得到有效缓解,从而提高交易速度并降低运营成本。

在 Reddit 上的讨论当中,Buterin 表示分片以太坊当中可能将包含约 100 个分片,其各自拥有充裕的容量,“甚至可能比主以太坊区块链的容量更高。”

Buterin 同时指出,伴随着新的股权证明方案 Casper 迎来最终发布阶段,分片代码也将被纳入以太坊整体解决方案当中。

这一消息的出炉,明显是考虑到以太坊平台当前面临的愈发可观的扩展需求压力。Buterin 在上个月于韩国首尔召开的 Deconomy 会议上发表讲话时表示,当前存在的扩展需求挑战已经使得以太坊的应用方式发生“扭曲”。

Buterin 还陆续发布了其它几份相关文档,其中包括一份早期分片规范说明——文档中勾勒出这一新协议的早期发展规划。

这位开发者写道:“目前,这项规范还没有彻底完成,但在我看来其总体设计思路已经非常成熟。”

为什么要分片

加密货币社区一直对可扩展性议题争论不休。伴随着 Crypotokitities 崩溃等重大事件给以太坊网络整体带来的阻塞与冲击,社区参与者们已经基本得出一项共识——以太坊作为目前规模最大的公有链之一,不具备可扩展性。

那么,社区该如何解决这一难题?相关方案主要分为两类。其一在于采用脱链式解决方案(亦被称为二级扩展)以提升可扩展性,即将一部分交易处理流程置于区块链之外,且仅保留必要的交互操作。另一种方法则为修改协议设计,从而解决区块链所面临的并行性问题。遗憾的是,尽管很多开发人员都曾经尝试探索这一难题,但其中的巨大挑战与难度往往令人望而却步。

目前以太坊尚处于早期发展阶段,但技术社区已经汇聚起一大批科技领域最为睿智的头脑,他们正共同努力以快速发布各类创新性成果。在这篇文章中,我们将深入探讨以太坊核心团队所采取的分片实现方法,同时揭示现有局限性与改进途径。

分片是什么?

目前,运行以太坊网络的每一上节点都必须处理通过访网络传输的每一笔交易。虽然这样的机制保证区块链具有良好的安全性——各个区块都需要经过重复验证,但同时亦意味着整体区块链的速度等同于各个区块,而非各区块的加和。当前,EVM 上的交易无法并行化执行,且各项交易按照全局顺序进行。可扩展性问题与区块链以下三项属性中的最多两项相关:

去中心化

可扩展性

安全性

如果我们需要可扩展性与安全性,则意味着区块链必须以中心化方式构建,从而实现更高的吞吐能力。但实际情况并非如此,以太坊主要强调去中心化与安全性。

在这样的情况下,我们该如何打破这一僵局,在现有模式当中实现可扩展性?我们能否单纯增加区块大小,也就是在以太坊当中对 GAS_LIMIT 扩容以实现吞吐量提升?虽然这种方法在理论上确实可行,但单一区块规模最大,采矿工作就会更多集中在超级计算机节点周边,进而给参与采矿带来更高的准入门槛。

另一种更为明智的作法是建立区块链分片概念。我们将网络的整体状态分割成一系列所谓“分片”,各个分片当中包含自己的独立状态及交易历史记录。在这套系统当中,某些节点只需要处理某些特定分片的交易,这意味着全部分片当中处理的总体交易量要高于任意单一分片的交易量,从而实现整体系统性能提升。

在进一步深入探讨分片区块链的工作原理之前,我们首先回顾一下以下重要概念:

状态: 任意时间点上描述系统的整体信息。在以太坊当中,状态信息包含当前余额、智能合约代码以及特定时间点上当前账户的随机数。每一笔交易都会将原有状态变更为全新状态。

交易(事务): 由用户发起的,能够变更系统状态的操作。

梅克尔树: 一种可以通过加密散列方式存储大量数据的数据结构。梅克尔树能够轻松在短时间内利用较低计算量检查一段数据是否属于特定结构中的组成部分。

收据: 交易活动的副产品,其并非存储于系统状态内,而是被存储在梅克尔树当中,从而轻松验证收据是否存在于节点之内。举例来说,以太坊中的智能合约日志即在梅克尔树中以收据的形式保存。

考虑到以上概念,下面我们一起来看分片系统的结构。首先,我们在某一分片上创建一个名为 collators 的节点,其负责创建一套排序规则 collation——此项规则当中包含分片具体结构的重要信息。

这些 collations 类似于对某一分片的状态及相关交易的迷你描述。其各自拥有自己的排序标题,即 collation header,此数据片段中包含:

关于 collation 所对应分片的信息(我们这里假定其为分片 10)。

在全部交易应用之前,该分片的当前状态信息。

在全部交易应用之后,该分片所获得的最新状态信息。

来自全部 collators 当中至少三分之二比例的数字签名,用以证明某一 collation 的合法性。

如果某一交易发生在多个分片之上,情况会如何?举例来说,如果我从某个位于分片 1 的地址处发出资金,而目标账户则位于分片 10,该如何处理?这套系统当中最重要的一点,在于其必须具备跨分片通信能力,否则我们的努力都将毫无意义。在这里,收据概念将发挥重要作用,甚至成为实现上述场景的核心要素。

Raul(地址位于分片 1)向 Jim(地址位于分片 10)发送 100 个以太币。

交易首先被发送至分片 1,此次 Raul 的余额减少 100 以太币,系统等待交易完成。

为此笔交易生成对应收据,该收据并非存储在状态信息当中,而是存在于梅克尔树的 root 处以供验证。

交易被发送至分片 10,其中包含梅克尔树中的收据数据。分片 10 检查该收据是否尚未被使用

分片 10 处理交易并为 Jim 的账户添加 100 个以太币。其随后还将保存接收自分片 1 的收据。

分片 10 创建一份新收据,此收据随后可在其它交易中使用。

这种方法听起来很酷,但其中是否存在某些弊端?

分片区块链的主要问题在于,其在面临网络攻击时往往表现得更为脆弱。其主要问题在于,恶意活动者可能发动“单一分片接管攻击”,即在立足单一分片接管绝大多数 collators 以创建用于提交无效 collations 的恶意分片。我们该如何解决这个问题?

以太坊的维基页面当中提供“分片问答”内容,其中提到应在每个分片当中随机抽取 collators,从而确保这些验证器无法预先知晓其将面对哪个分片。每个分片都将被分配以大量 collators,而实际进行交易验证的 collators 将从其中进行随机抽取。

股权证明机制能够轻松实现这一点,因为其提供一组全局验证器,我们可以从中任意选择 collators。这种随机性的来源必须具备共同性,从而确保抽样机制以强制方式执行,且不可抽中存在问题的验证器。

除此之外,进行这种随机抽样也有可能带来潜在的延迟问题。想象一下,如果我们运行一个以太坊节点,且其已经与整个区块链历史记录进行同步并开始交易。那么在数个区块之后,我们是否需要与另一条新链进行重新同步?毕竟当验证器节点进行重新抽取时,其各自需要重新下载新的分片,而这必须带来大量额外的资源消耗。

若需要了解更多潜在安全风险与相关问题的解决方法,请参阅以太坊维基页面中分片问答部分的具体内容。

对于可靠性开发者与以太坊用户而言,这一切似乎太过复杂了!我们该如何引导他们理解分片机制?

他们并不需要理解这些。分片仅存在于协议层,而不会直接与开发人员接触。以太坊系统将继续保持目前的使用与开发方式,只是在协议当中添加一套内置系统,用以创建分片、在各分片之间进行状态平衡,同时避免分片过小等。这一切都将在底层完成,而开发者则可继续在以太坊上完成自己的现有工作流程。

不只是扩展:超二次分片与难以置信的速度增益

除了之前提到的需求之外,以太坊还在考虑采用超二次分片方案(也就是将分片系统进一步拆分成更多分片)。虽然其将带来难以想象的复杂性,但其可扩展性潜力也将极为巨大。此外,超二次分片区块链亦将为用户带来巨大收益,包括将交易费用降低至可以忽略不计的水平,并为各类新型应用提供更具通用性的基础设施。

相关资源与如何上手

说到这里,很多朋友肯定已经跃跃欲试了!如何上手?基本上,我们的初始实现规划不会通过硬 fork 实现 ; 相反,大家可以通过所谓验证管理器合约(简称 VMC)这一智能合约控制分片系统。此 VMC 将立足一套全局验证器集管理各分片与样本 collators,同时负责所有分片状态的全局共识。Vitalik 在以下链接中通过参考文档概述了一个典型的分片实现案例:https://github.com/ethereum/sharding/blob/develop/docs/doc.md

要详细了解此 VMC 架构以及该系统工作原理的细节信息,请参阅以下资源:

分片问答: https://github.com/ethereum/wiki/wiki/Sharding-FAQ

以太坊分片技术概述: https://medium.com/@icebearhww/ethereum-sharding-and-finality-65248951f649

分片机制参考文档:https://github.com/ethereum/sharding/blob/develop/docs/doc.md

参考链接:

https://www.coindesk.com/vitalik-releases-partial-proof-concept-ethereum-sharding-tech/

https://medium.com/prysmatic-labs/how-to-scale-ethereum-sharding-explained-ba2e283b7fce

今日荐文

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180502G1GZ1N00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券