如何扩展以太坊:分片原理解释
关于扩展的讨论是加密社区的前沿和中心话题。以太猫游戏阻塞整个以太坊网络数天的重大事件的发生,让我们知道了最大的公有链在当前状态下无法扩展。
所以社区决定采取什么方法呢?有两种解决方案。第一种是通过脱链的方式(也叫做第二层扩展)来提高扩展性,让其中一些交易在区块链下被处理,并且仅与区块链进行必要的交互。另一种方法是通过完全修改协议的设计,来解决区块链所面临的并行性的根本问题。不幸的是,我们很多的协议开发人员经常一看到这些问题,就对他们面临的问题感到头疼。
虽然我们仍处于以太坊的早期阶段,但社区有很多在技术上很有头脑的人,有如此多的创新以惊人的速度在发生。我们很容易会认为,有更聪明的开发者可能更有资格处理诸如扩展性这样的重大问题,但是这种感觉正在阻碍我们。真相是,社区愿意并且已准备好帮助任何想要参与进来的人,是的,也包括你!这篇文章会分析以太坊核心团队当前采用的分片方法,并且揭露当前的局限性以及改进途径。在文章的最后,你会了解足够的知识来独自探索这个问题,谁知道呢,或许你就是构建第一个分片客户端的人!
什么是分片?
如今,每个运行以太坊网络的节点都必须处理通过网络传输的每一笔交易。这使得区块链因每个区块都有很多的验证而具有很高的安全性,但与此同时这意味着整个区块链的速度只能与其单个节点一样快,而不是这些节点的总和。目前,EVM 上的交易不是并行的,每笔交易在全局范围内都是串行执行的。解决可扩展性问题不得不面对这样一种理念,一条区块链最多只能拥有下列 3 种属性中的 2 种:
- 去中心化
- 可扩展性
- 安全性
我们如何打破这种三难的局面,才能将扩展性包含到当前的模型中呢?我们不能仅仅通过增加区块大小,或者就以太坊来说,通过增大 GAS 的使用上限来提升吞吐量吗?理论上这是正确的方法,但是我们增加得越多,区块生产就会越来越集中在使用超级计算机来运行的节点中,进而为进入系统带来更高的障碍。
更明智的方法是区块链分片的理念,我们将网络的整个状态分割成一系列被称为分片的分区,其中包含自己独立的状态片及交易历史记录。在这种系统中,特定的节点只为特定的分片处理交易,从而允许在所有分片中处理的交易吞吐量比在单个分片中处理所有交易(像现在的主链一样)要高得多。
在我们深入了解分片区块链的实际工作方式之前,先来重温一些重要术语:
- 状态:描述系统在任何时间点的全部信息集。在以太坊中,指在特定时刻,包含当前余额,智能合约代码及 Nonce 的最新账户集合。每笔交易都会将当前状态变成一个全新的状态。
- 交易:由用户发起的可改变系统状态的操作。
- 默克尔树:一种可以通过加密哈希存储大量数据的数据结构。默克尔树可以很容易地在短时间内以很少的计算量检查数据是否是结构的一部分。
- 收据:交易的附属品,不存储在系统状态中,但保存在默克尔树中,可以很容易的验证其存在。例如以太坊的智能合约日志就作为收据保存在默克尔树中。
掌握了这些,让我们看看分片系统的结构。首先,在特定分片上被称为校对器(Collator)的节点的任务是创建校对块(Collation),校对块是一种包含关于所涉及分片的重要信息的特定结构。
这些校对块就像对特定分片的状态和交易的简短描述,每个校对块都有一个校验头(Collation Header),是包含以下信息的数据片:
- 关于校对块所对应的分片信息(比如分片10)
- 在所有交易生效前,相关分片的最新状态信息
- 在应用所有交易后,分片将变成的状态
- 来自分片上占所有校对器数量 2/3 的校对器数字签名,确认校对块是合法的。
然后,超级节点将把所有分片中的校对块放到以太坊区块链中将要添加的区块中。他们的职责是处理所有校对块中的交易,并通过汇总他们的校验头来维护所有分片的状态。
在这种新的区块链中,满足以下条件时,区块是有效的:
- 在所有校对块中的交易有效
- 校对块的状态与交易前校验块的最新状态一致
- 校对块交易后的状态与校验头所指定的状态一致
- 校对块被所有校对器的2/3签名
如果交易跨分片进行该怎么办?举个例子,我把钱从分片 1 中的地址发送给分片 10 中的地址,该怎么办?这个系统最重要的部分之一就是跨分片通信的能力,否则我们没有任何创新。以下是收据发挥作用的地方,以及它是如何允许上述场景工作的:
Raul(在分片 1 的地址)想要给 Jim(在分片 10 上的地址)发送 100 个以太币
- 一笔被发送到分片 1 的交易扣除了 Raul 余额中的 100 个以太币,系统等待交易完成
- 一份不在状态中存储、而在默克尔树中存储的、可被轻易验证的交易收据随后被创建
- 一笔包括默克尔收据作为数据的交易被发送到分片 10。分片 10 检查此收据是否还未被花费
- 分片 10 处理此交易并在 Jim 的余额中增加 100 个以太币。随后也会保存这份从分片 1 发送过来的收据已经被花费的事实。
- 分片 10 生成了一份新的可以在随后的交易中使用的收据。
这听起来很酷,但是否存在什么陷阱呢?
一旦我们考虑在网络上可能的攻击,分片区块链的问题就变得更加显而易见了。一个主要的问题是单片控制攻击的概念,即攻击者通过控制一个单一分片上的大多数校对器来创建一个可以提交无效校对块的恶意分片。我们该如何解决这个问题?
-图片来源:王筱维-
以太坊维基的分片 FAQ 建议在每个分片上对校对器进行随机采样。这样做的目的是让这些验证者事前无法知道他们所得的是哪个分片。每个分片都会分配到大量的校对器,并且实际验证交易的校对器会从中随机选取出来。
权益证明让这个问题变得微不足道,因为已经有一个我们可以从中挑选校对器的验证者集合了。随机源需要足够普遍(Common)以确保这种采样是完全强制性(Compulsory)的,并且不能被验证者操控。
此外,进行这种随机采样的排序会有一些潜在的延迟问题。想象一下你在运行一个以太坊节点,并且已经与整个区块链历史同步,可以开始进行交易了。如果在一些区块之后,你不得不再次与新链完全同步一遍,该怎么办?这在对验证者节点重新调整后是可能发生的,因为当验证者作为校对器被重新分配时,可能都会需要重新下载新的分片,引入大量潜在的开销。
想要关于潜在的安全风险以及针对此问题和其他问题的详细方法,请查看以太坊分片 FAQ。
我感觉这对 Solidity 开发者以及以太坊用户来说太难以理解了!我们怎样去教他们关于分片的东西呢?
他们不需要学习。分片将专门存在于协议层,不会暴露给开发者。以太坊状态系统看起来仍旧会跟现在一样,但是协议中将有一个创造分片的内建系统,在分片间平衡状态,防止分片过小等等。这将全部在幕后完成,允许开发者继续他们当前在以太坊上的工作流程。
超越扩展:超级-二次方分片 & 难以置信的速度增长
为求卓越,以太坊可能会采用超级-二次方分片的方案(简单来说就是在分片上建立分片的系统)。目前这种复杂性很难想象,但是扩展的潜力是巨大的。此外,超级-平方-分片的区块链将为用户带来巨大利益,将交易费用降至可忽略的数量,并为各种新应用提供更加通用的基础架构。
相关资源 & 从哪儿开始
好吧,现在你想开始编写分片区块链了!如何开始呢?在最基本的层面上,建议的初始实现不会通过硬分叉来实施,而是通过一个被称为验证管理合约的智能合约来控制分片系统。
VMC 会管理分片以及来自全局验证者集合的被提议的校对器采样,并且会对所有分片状态在全局上的一致性负责。V 神在这里概述了一个用于实现分片的很棒的参考文档:https://github.com/ethereum/sharding/blob/develop/docs/doc.md
想要详细了解 VMC 的架构并学习更多关于该系统工作方式的内容,请查看以下资源:
- 分片 FAQ:https://github.com/ethereum/wiki/wiki/Sharding-FAQ (编者注:中译本见文末《分片 FAQ》)
- 以太坊分片技术一览:https://medium.com/@icebearhww/ethereum-sharding-and-finality-65248951f649 (编者注:中译本见文末《Overview and Finality》)
- 分片参考文档:https://github.com/ethereum/sharding/blob/develop/docs/doc.md(编者注:中译本见文末《以太坊上的分片》)
链接: https://medium.com/prysmatic-labs/how-to-scale-ethereum-sharding-explained-ba2e283b7fce
如何扩展以太坊:分片原理解释相关推荐
- 如何扩展以太坊:分片
可扩展性辩论位于加密社区的前端和中心. 在几天的时间内,Cryptokitities崩溃等重大事件的发生阻塞了整个以太坊网络,众所周知,当前状态下最大的公共链不会扩展 . 那么社区决定采取哪些方法? ...
- 【转】以太坊分片:Overview and Finality
在 Ethereum Casper 101 (编者按:EthFans中译见文末)中,Jon Choi 对 Casper 做了一个很棒很清晰的综述,并解释了为什么显式最终确定性(explicit fin ...
- 【众说区块链】以太坊分片技术提升100倍处理效率,有多大作用?
2019独角兽企业重金招聘Python工程师标准>>> 上期<众说区块链>讨论的主题是"区块链在医疗行业的落地",大家通过阿里健康给常州市医联体提供的 ...
- 智能合约重构社会契约(8)以太坊分片
1. 定义 使用场景:以太坊的同构链跨链需求 分片定义:将所有节点分配到多条区块链中,每条区块链只需要处理网络中工作的部分. 分片效果:提高了以太坊的处理效率 分片问题:增加了链与链之间信息交互的困难 ...
- 以太坊分片:安全模式机制设计
具体内容由页内超链接进入 1. Proposer/Collator Separation 在这一部分,PPT 为分片提议者(Proposer).校勘者(Collater)和执行者(Executor)作 ...
- 区块链100讲:V神·以太坊上的分片
五月初,以太坊创始人"V神"Vitalik Buterin表示,以太坊的内部扩展解决方案--分片已经接近完成.以太坊分片旨在将以太坊分成几个并发网络,从而使整个网络更加高效地扩展, ...
- 1分钟链圈 | 以太坊2.0 Casper 更新版发布,涉及解决跨分片通信低效问题
Hi,艾瑞巴蒂! 这里是 9 月 7 日的每日1句话新闻晚报,只需1分钟,看看全球最热.最新的区块链新闻. 实时币价:BTC $6368.00 ETH $218.48 EOS $4.98( ...
- V神以太坊:Casper 权益证明与分片技术最新进展
V神以太坊:Casper 权益证明与分片技术最新进展 原创: 卢凯 区块链大本营 昨天 2018年6月3日,由全球最大开发者社区CSDN和专注以太坊生态建设的领先企业灵钛科技主办,以太坊爱好者社区.柏 ...
- 以太坊完整工作原理和运行机制!
以太坊完整工作原理和运行机制! 2018年04月28日 00:00:00 阅读数:26 作者 | Preethi Kasireddy 编译 | 老曹.Aholiab 链圈的人提起「以太坊」三个字想必是 ...
- 以太坊 p2p Server 原理及实现
以太坊p2p原理与实现 区块链技术的去中心依赖于底层组网技术,以太坊的底层实现了p2pServer,大约可以分为这样三层. 底层路由表.封装了kad路由,节点的数据结构以及计算记录,节点搜索,验证等功 ...
最新文章
- 什么是离散的Hopfield网络?
- 李宏毅深度学习——深度学习介绍
- 4. 垃圾回收- 4.3垃圾收集器
- git clone 报错 “Clone failed: Authentication failed for xxxxx”(做过测试)
- python成员运算符包括_Python 使用成员运算符案例
- bootstrap 导航菜单 折叠位置_python测试开发django44.xadmin自定义菜单项
- recyclerview不显示_Android studio中导入v7包,使用recyclerview前的操作
- eclipse sdk manager无法更新
- 阿里架构师的日志:带你快速理解微服务架构;理解微服务架构的核心
- win10 安装IIS
- Executing an update/delete query报错
- 思维导图组件@hellowuxin/mindmap的基本使用
- 计算机换显卡,老平台只换显卡 这样升级行不行?
- 云班课在计算机,云班课电脑版
- 基于单片机电梯5层带模拟控制系统设计(毕设)
- Leetcode 977.有序数组的平方
- Git for Windows 国内镜像文件
- 前端工程化 webpack
- Pydicom User Giude
- 强烈推荐这11个Python开源项目,非常值得入门学习(从入门到Python高级开发)
热门文章
- android view 前景色,Android开发中的一些小技巧
- 导航recovery机制
- 逻辑回归实现鸢尾花分类
- 笔记本计算机虚拟技术,ThinkPad笔记本电脑如何开启CPU虚拟化技术的图文教程
- java输入输出操作c盘文件拒绝访问问题
- liveness探测mysql_Kubernetes 服务中 Liveness 和 Readiness 探测
- Qt使用资源管理器打开指定本地文件夹
- 什么叫断章取义,什么叫曲解
- 传感器技术—湿敏电阻式传感器(学习笔记五)
- ccs: memory range overlaps existing memory range