来自:区块链社区HiBlock(微信号:HiBlock-Net),作者:小Hi
内容来源于:HiBlock区块链社区微信群讨论

本期《众说区块链》讨论的主题是“以太坊分片技术”,特约嘉宾杨镇老师跟大家介绍了以太坊分片技术,并针对大家的疑惑进行了解答。


主题以太坊的分片技术

时间:5月19月(周六)晚9点-10点

特约嘉宾:杨镇

资料:关于分片的技术说明文档,杨镇老师进行了中译,中文版地址:https://github.com/riversyang/sharding/blob/develop/docs/doc.md



讨论实录



@cynthia:大家好,周六晚9点,HiBlock区块链社区特别栏目《众说区块链》准时和大家见面啦,我是主持人Cynthia,非常感谢大家对社区的支持。

 

《众说区块链》由HiBlock区块链社区发起,每周六晚9点,在社群内组织一个区块链相关主题的讨论,在讨论过程中加深社区成员对区块链的理解。

 

五月初,以太坊创始人“V神”Vitalik Buterin表示,以太坊的内部扩展解决方案——分片已经接近完成。以太坊分片旨在将以太坊分成几个并发网络,从而使整个网络更加高效地扩展,这将有助于缓解以太坊网络目前所面临的拥塞问题,从而提升交易速度并降低成本。

 

EOS阵前叫嚣,以太坊借力“分片技术”能捍卫它的地位吗?对此你怎么看?你认为分片技术能解决目前以太坊存在的拥堵问题并达到提升速度的目的吗?除了这些优势以外还有哪些优势?又存在哪些劣势呢?

 

本期《众说区块链》讨论的主题是“以太坊的分片技术”,大家可以围绕这个主题分享自己对分片的看法和见解。

 

接下来欢迎本期特约嘉宾杨镇,带领大家一起聊聊“以太坊的分片技术”

 

下面有请杨镇老师带领大家一起聊聊以太坊的分片。

 

@何强:大家对分片技术熟悉吗?

 

群成员:大部分是不熟悉的,但很感兴趣

 

@杨镇:大家好,因为区块链本身的技术限制,公链的吞吐量问题(同一时间内交易确认量低)一直是应用角度上最被诟病的一个问题。以太坊解决这个问题的方案就是所谓的分片(sharding)。

 

分片的方案有很多技术细节,我先摘一端技术说明的译文给大家分享。

 

假设用变量 c 来表示一个节点的有效计算能力,那么在一个普通的区块链里,交易容量就被限定为 O(c),因为每个节点都必须处理所有的交易。二次方分片的目的,就是通过一种双层的设计来增加交易容量。第一层不需要硬分叉,主链就保持原样。不过,一个叫做 校验器管理和约 (validator manager contract,VMC)的合约需要被发布到主链上,它用来维持分片系统。这个合约中会存在 O(c) 个 分片 (目前为 100),每个分片都像是个独立的“银河”:它具有自己的账户空间,交易需要指定它们自己应该被发布到哪个分片中,并且分片间的通信是受限的(事实上,在第一阶段,不存在这种通信能力)。

 

@何强:有没有具体的数字,现有的效率怎么样?分片后能达到什么效率?分片有上限么?比如能分多少片?

 

@杨镇:这个具体的参数一般用 TPS(Transactions per second),目前我印象里还是100这个数量级,也就是每秒能处理的交易量小于 100。按照刚刚方案里的说明,分片之后,理论上 TPS 可以提高 100 倍。

 

目前方案的核心就是刚刚说的 VMC 合约,这是一个目前公链上要增加的合约。按照刚刚方案里的说明,分片之后,理论上 TPS 可以提高 100 倍。

 

按照现在的方案,实装之后的效果是,增加了 100 个shard,每个 shard 上都是一个单独的链,只不过在这些新的shard链上,原先的区块概念没有了,变成了 collation,这可以想象成另一种类型的区块,是为了和现有的主链区块加以区分。

 

分片运行在一个普通的符合最长链规则的权益证明系统中,权益数据将保存在主链上(具体来说,是在 VMC 中)。所有分片共享一个通用验证器池,这也意味着:任何通过 VMC 注册的验证器,理论上都可以在任意时间被授权来在任意分片上创建区块。每个分片会有一个 O(c) 的区块大小 / gas 上限(block size/gas limit),这样,系统的整体容量就变成了 O(c^2) 。

 

@何强:一百倍也就是一秒10000哈,和现在交易系统比起来处于什么水平?

 

@杨镇:类比,不知道,没研究其他对手~

 

@何强:这个能和支付宝做类比吗?支付宝极限大概是每秒120000笔。

 

@杨镇:当然没法比,不要分布式系统和中心化系统比性能。

 

请注意,分片之后,记账方式变为了权益证明。

 

VMC这个合约是有注册功能的,也就是说,想参与分片记账的地址,需要从自己地址给合约发送一定量的eth,来完成注册,之后,VMC会按照所有注册的记账人(collator)所提供的eth金额比例来随机分配由谁来记账。

 

这其实就是一个PoS(Proof of Stake)协议了。

 

在这种情况下,每个 shard 中的 collation 组成的链都是独立增长的,我们再发送交易时,就需要指定想由哪个 shard 来处理。

 

之前由区块来保存的交易列表数据就被移到了 collation 里,区块里保存的就变成了 collation header 列表。

 

目前,各个 shard 之间是不能交互的,也就是说,我们发送到某个交易,只会存在于某一个 shard 中。

 

这样,我们的客户端,一般就要明确指定我们监视哪一个 shard,而像区块链浏览器,则要监视全部100 个 shard。

 

@bob:如果没记错的话当前的以太坊交易,每秒20笔。

 

@何强:这个变化对链上现有业务有什么影响?理论上应该是只有改善。

 

@杨镇:TPS肯定会提升,这个毫无疑问,相当于变成了100 个单独的链在一起处理交易。

 

@何强:对开发者呢?从开发的角度是增加了一些复杂度,不过换来了TPS的大幅度提升哈。

 

@杨镇:开发角度的复杂度提升可以忽略。使用上没有太大变化,当然,协议层定义会变、区块、collation数据结构会变。

 

@西安-赵晓楠:那意思比如对接以太坊的rpc接口可能会有调整?

 

@杨镇:rpc么?肯定会。

 

@何强:理论上TPS提高xxx倍,那怎么知道实际上提高多少?

 

@杨镇:实际提高多少就要测试了,理论上就是100倍。

 

@@山东-孔庆丰:为什么是100个?能满足现有业务?将来是不是可以分成成千上万片?

 

@杨镇:100倍这个是可以调整的,目前是在VMC中写死的。分片这个协议变动,是为了尽量少的影响目前的程序,现在还在测试阶段。

 

@西安-赵晓楠:分片时间点大概啥时候,之前看过一些资料说实现分片,技术难度很大呀,v神之前说的3-5年才能 搞定,这进度推进这么快?

 

@何强:如果后期业务快速爆发,靠分片能持续提高TPS么?光冲着提高TPS来说,应该还有其他办法。最后为什么决定就用分片了?

 

@杨镇:这个要看社区测试的进度和反馈,目前还没有明确的时间点。分片有4个阶段,目前只是第一阶段,为了控制影响程度。

 

关于分片的技术说明文档,我进行了中译,中文版在我的github上:https://github.com/riversyang/sharding/blob/develop/docs/doc.md,大家有兴趣也可以看一下。具体的阶段介绍,在文章里有,但非常技术化。具体的实施,和后续 metropolis 版本也直接相关。

 

@西安-赵晓楠:plasma.项目和分片是一个项目还是什么?

 

@杨镇:plasma需要基于sharding来实施 所以这是第一步。sharding也是后续plasma实施的基础,也就是把计算分散到所谓的侧链上进行。目前主网上的确定区块还是靠PoW,但通过VMC选择collator(也就是collation的记账人)这是PoS,所以V神也说过,这个过渡阶段是所谓的混合挖矿。

  

@西安-赵晓楠:分片技术实施后,有没有可能会降低些手续费?不用现在竞价手续费进行打包。

 

@杨镇:是的,是VMC根据PoS算法随机选的记账人。

 

@白菜:交易需要指定它们自己应该被发布到哪个分片中,并且分片间的通信是受限的。这句话不明白。这么做的目的是什么,为什么受限,请大神指点,我是小白,请不要见笑。

 

@杨镇:因为目前没有跨链协议支持,所以无法实现跨链通信,而且在目前来看,也没有必要做跨链交互。一个交易是存在某个 shard ,还是像现在存在 block 中其实不是很重要。

 

@白菜:您最开始说,VMC合约、分片就是在公链上要增加的合约?我理解成了没有跨链。是不是我理解错了?

 

@杨镇:没有跨链。

 

@白菜:我以为只是增加一个vmc合约而已,不算跨链。

 

@杨镇:管理的是shard 的基础信息,以及负责管理 stake、生成 collator,就是记账的人。shard 的数据,和目前一样,单独存储,只把hash 保存到主网的VMC中。

 

@郑鹏:VMC是一个在主链上的分片前置合约吧。

 

@杨镇:不是前置,是必须的。目前的方案里,VMC是必须的,需要和sharding协议一起实装。

 

@郑鹏:感觉分片技术和负载均衡理论有点儿类似,区别在哪里?去中心化的负载均衡?

 

@杨镇:我觉得不要用中心化的技术去类比去中心化技术。完全不一样,VMC是选择谁来生成collation,以PoS的方式。如果要了解技术细节请大家认真阅读黄皮书,然后看分片的技术说明。

 

@兰凯仁:那这个vmc不算中心化么,vmc也是每个矿机都包含的合约么?

 

@杨镇:区块链里的所有处理都是串行的,不存在我们普通的中心化技术里的所谓并发问题。VMC是唯一的实例,和其他所有智能合约一样。跟所谓中心化没关系。

 

合约代码是存在客户端的,所有客户端都有一份,EVM的执行也是所有客户端都会执行

 

所以不存在所谓中心化的问题,这些基础概念还是需要先学习下。

 

整体上看,是的,但实际上不是每个客户端都有100个分片链,每个客户端可以自己指定监视那个shard,你可以监视所有的,也可以特定某个。矿机,理论上也不用所有,但run的时间长了,最终就会变成所有的shard。因为 VMC 选记账人是随机的,所以如果时间够长,总会轮到所有的 shard都记过。

 

@白菜:以太坊分片主要是为了解决交易速度慢的问题。问题各个片区的共识如何达成,各个分片如何通信?既然不能跨链,跨片可以吧?

 

@杨镇:分片链之间不能通信,我最开始发的那段说明里已经说了。某个交易只会存在于某个shard,暂时不存在跨shard 的需要。

 

@Timothy:听起来以太坊能做分片扩容的一个原因是因为节点数够多了,可以切一百份,照样每份节点也够实现不可篡改了。能这样理解吗?

 

@杨镇:不是这样的,跟节点个数没关系,是有一个节点就有一个副本,分片的改动是协议级、基础数据级别的改动,区块链的基础机制没有变化。

 

@Timothy:分片看起来技术含量不低,它对于国内各种各样的公链项目,是否有可落地的借鉴意义呢?

 

@兰凯仁:感觉分片技术主要增加了交易的"并发",原来10分钟1笔,现在10分钟100笔。

 

@杨镇:理论上提升100倍,是同一时间有100个链在处理交易,现在只有一个。每个链还是像现在一样是串行化处理的,理论上1000也可以,就看VMC里存几个head。




@Timothy:目前eth的tps瓶颈是节点算力还是网络延迟?分片主要是解决哪个瓶颈的?


@杨镇:区块是有gaslimit的,也是就是一个区块能包含的交易是有限的,然后15秒一个区块。分片之后就变成了100个上述的链同时在处理。


@joseph:杨老师 区块链做公益捐赠 目前有哪些东西可以参考?


@杨镇:公益捐款,理论上写个合约就可以,所有款项的进出都是透明的(可以在链上查到)。但这个事的关键是实操的设计,比如如何支取、发放。这就不是技术问题了。


区块链应用的关键还是应用设计,绝大部分情况下技术都不是主要问题。


@Cynthia:感谢杨镇老师,今天先聊到这里,大家可以继续消化一下。讨论的内容会沉淀下来发布在公众号,还有想问的可以在文末留言哦~