本次以太坊分片技术的分享,主要是基于V神在台北做的一场关于分片的分享会。如有指正,请联系微信:wuqiong_blockchain
为了提高可扩展性,以太坊提出了两个解决方案。一个是建立分层结构(Layer 2),把不必要的交易从最底层的主链分离到附属结构上,比特币的闪电网也是这个思路。另一个便是分片技术(Sharding),着眼于改进主链本身的协议来提高它的性能。
分片技术概览
在现在的以太坊中,每一个节点都要处理全网的交易。这就使全网的性能极大地受制于单点的能力。而分片之所以能够处理更多的交易,是因为每一笔交易只由不同分片中这一小部分的节点看到和处理。这样,全网中不同交易便可以由不同的分片中的节点在同一时间点上平行处理。这样就大大提高了交易的处理效率。在这个模型当中,主链(Main chain)依旧不断形成。同时,不同的分片(Shard chain)中也会形成属于本分片的链,甚至,分片中还可以二次分裂出新的分片链。每隔不固定的时间,分片会将当前的分片链上最新区块的的Markel Root/collation header 同步到主链上。在最新公布的算法中,每次只能同时分裂出最多100个分片。
V神所构想的分片技术有六个阶段。当前所实现还只是第一阶段。第一个也是最简单的分片技术,就是把系统切分成独立的数据片。只是做了网络的分片和交易的分片,并没有真正实现状态的分片。
分片技术详解
要了解一下有关分片技术的细节,首先我们先来了解分片中几个关键的角色。
Proposer
Proposer是交易池的维护者。负责为proposal(collationheader)做准备而收集交易,并负责广播collation body。任何人都可以成为proposer。
Collator
Collator是由为随机函数选出的合法collator,其身份的合法性只在指定时间段和指定分片内有效。它的主要作用就是collates the
proposal以建立collation。Collator从所有分片的collator pool中选出。Executor
Executor执行状态交易函数。其实proposer也应该是executor,都是拥有获取交易所花费gas和选择高手续费的交易等能力的身份。
Blobs & Chunks
collator区块结构
下面给出一张图,从宏观上来解释交易的执行流程:
下图,再从细节上解释交易的流程,同时引入一个非常重要的额概念:
SMC(Sharding Manager Contract)
SMC中包含随机个collator pool,这些collator pool又分别来自于不同的分片中的当前时间段中最新的collator。
分片技术的安全性
以太坊主链每个时间段新生成的区块,都会将在此时间点之前的五个区块打包在内。这也被成为“LookAhead”。每个validator都会借由LookAhead来确认在未来他们将负责验证的是哪个分片。也就是验证者是先得知会被划分到哪个分片的。在指定时间段内,每个区块的验证者都会面临新一轮的随机选择(共5个区块,共五个validator)。当到达主链出块时间,所有validator都会将已校验的交易发送到交易池中。检验发起者需要向交验者支付激励。交验者下载潜在的分片提案。验证者验证数据的有效性,并挑选当前分片中最新区块,然后将collation header提交给主链。由矿工负责挖矿生成新的主链的区块。
那分片技术是否能够预防攻击呢?假如遭遇攻击,恶意节点验证错误的信息并提交主链挖矿。那么错误的区块就会在分片链中记录下来。是否这样的攻击就已成定局了呢?
答案是不是的。
因为个区块的交验者都会面临一次随机重选。恶意节点不会每次都拿到打包权。那么,当正直节点在恶意节点之后被选中,在验证数据有效性时,就会察觉到有不可信信息,那么他就会追溯到腐坏解区块分片头的上几个区块,将正确信息提交到主链并在此分片链上分叉。此次作恶也就失败。
此处留一个问题,供大家思考:如果该分片内的所有节点合谋作恶呢?那么是否还有可能发现并纠正错误信息?(虽然我们知道每个申请作为validator的人都会提交对应的质押,恶意者自身利益与全网利益有互相关系的特点,但仍假设作恶收益大于作恶惩罚呢?。。。)
简介系统角色和模型
系统中主要有两种角色。
一种是常规Executor,包括Executors和proposors。他们负责:
- 旁观指定的分片
- 状态变更
- 都可能获得相应的交易手续费收益
一种是轻客户,负责:
- 验证最新头部
- 旁观指定分片
系统中主要有两种状态模式:
一种是有状态一种是无状态
分片中的客户端组件
分片开发规划
- basic Sharding without EVM
- EVM状态转换函数
- 轻客户端状态协议
- 跨分片交易
- 与主链安全的紧耦合
- 超二次分片