以太坊Sharding

随着以太坊的推广使用,TPS较低,交易串行化并且需要所有以太坊节点参与执行并存储全部状态信息,从而导致交易规模受限等问题渐渐凸显出来。以太坊创始人Vitalik Buterin在多次演讲中表示,解决规模化问题是以太坊社区2018年的工作重点。本文将就其方案之一的Sharding做概要性介绍。

Sharding(分区、分片)并非是个新的概念,在数据库中,Sharding是一种将单个逻辑数据集分割并存储在多个数据库中的方法。以太坊区块链中,Sharding计划分4个阶段。在第一阶段,以太坊主链维持现状,并将整个系统节点划分为100个shard,每个shard可以理解为一个单独的子区块链,拥有独立的账户状态和交易记录。Shard在名词术语及各功能上与以太坊主链形成对应:

以太坊主链 以太坊Shard
Block Collation
BlockHeader CollationHeader
Block Proposer (or Miner in PoW chain) Collator

这样,以太坊系统的所有shard便可以并行处理交易,各个shard中的交易信息每隔一段时间会归并然后添加到以太坊主链上。比如,现在有100个shard,每个shard在固定时间(区块时间)内产生了10个交易,那么下次区块打包时便可记录下100*10=1000笔交易信息,比起只在主链上执行10个交易,sharding解决方案大幅提高了系统的交易吞吐。

上述shard交易整合中系统引入了一个特殊的合约:Validator Manager Contract (VMC)。VMC作为PoS系统的核心,其主要作用是:

– 随机分布collator到各个shard中去
– 各个shard提交来的collation header验证
– 跨shard的交易处理
– 链上治理

Sharding解决思路(第一阶段)大致如上,不过,在解决规模化交易的同时,sharding也会带来新的问题。

比如,PoW需要51%的算力才可以攻击网络,而sharding则只需要1%的算力便可攻陷某一shard(以划分为100个shard计),所以validator的随机性策略非常重要,一旦失败,系统则将易被攻击。

另一个问题是,跨shard交易问题,这在以往的区块链中都不曾涉及,以太坊社区需要时间在这方面进行探索和实践。

对于学习并使用以太坊开发Dapp的开发者而言,sharding技术在不断演进,并且理解起来门槛较高,需不需要去弄懂它呢?简言之,不需要。按以太坊规划来看,sharding未来将作为协议层,developer完全可以基于现有的智能合约流程来开发dapp应用。不过,作为技术总监或者CTO类的角色,了解并理解sharding的原理及实现机制我个人建议还是很有必要的。

参考资料:
https://github.com/ethereum/sharding/blob/develop/docs/doc.md
https://github.com/ethereum/wiki/wiki/Sharding-FAQ
https://medium.com/@icebearhww/ethereum-sharding-and-finality-65248951f649

*本文为作者原创,转载请注明出处