首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当我们讨论分片时,我们究竟在说什么

区块链走到如今,交易规模的限制正逐渐成为一个瓶颈

不少人都提出了各自的解决方案

其中最为广泛的莫过于“分片技术”

但事实上我们常说的“分片技术”也包含着诸多种类

交易分片

交易分片是把要确认并出块的交易分割到各个分片中,最著名的分片区块链是下一代以太坊项目,不过这一思路早在2016年底就由Elastico项目提出,该方法在BTC应用的PoW上直接增加一层分片,分片内使用PBFT共识,以期达到增加TPS的目的。

同时为了回避跨片交易的问题,此时的分片策略均采用UTXO。UTXO因为类似现实中收银台,对于片内交易和跨片交易处理效率相当,显得比较简洁。但UTXO自身也存在着一定问题:对于大额交易,UTXO会将其拆分成许多小交易进行,大大增加了交易数量,使得总体交易频率不如其宣称的N倍那么优秀。

除此之外为了防止在不同分片中双花攻击,需要对不同分片的交易进行对比,防止出现一个节点发起相同的两笔交易,但接收者不同的情况。

交易分片的研究目前已经较为成熟,允许多种共识在其机制上运作。

网络分片

网络分片理解起来更加简单,某种意义上网络分片源于互联网和局域网之间的层级关系,只需要将网络分割成若干分片,各个网络中自行建立共识,再汇总到主链上就可以完成对性能的提升。

但网络分片存在着一大弊端:在这种机制之下,如果发生了串通作弊的现象,去中心化程度大大下降的分片网络是很难检测到的。所以网络分片只允许主链采用PoW这种统一性和可用性高而分片容忍度低的共识机制。

除此之外,为了降低串通作弊的可能,必须要用足够安全的随机方法将各个节点随机分配,为了保证随机性就必须牺牲片内交易的概率,这也大大降低了通过网络分片增加TPS的效率。

交易分片和网络分片尽管在技术上都较为成熟,但其都存在着诸多问题,因此又有人在其后提出了状态分片的概念。

状态分片

状态分片是最容易想到的方法,就是将各个账户进行分片,并在交易中发生状态改变。这解释起来也最为方面,就像网友中可以在一个账号中建立不同角色,状态分片也是如此。

状态分片通过“账户”赋予了节点更多的特征,这给予需要构造更多特征的智能合约以方便,所以不管是以太坊、zilliqa还是新项目chainspace均打算采用此方式。

但状态分片也有很多小毛病:

跨片交易在交易分片下相对简单,而网络分片下跨网络分片直接受到限制。而在状态分片下跨片交易就不得不涉及到两个甚至更多分片之间交互的问题。

分片更新也带来更多挑战,这个问题涉及到去中心化和安全性,不容忽视。虽然可以选择在区块链运行过程中不更新分片,通过自然的用户登入登出的随机分配来逐步完成分片的更替,但这种方式容易造成分片内发生串通作弊的现象——只要认识的时间足够长,就算互相不认识也能达成私下协议;而对于黑客的攻击,非常缓慢的分片改变也给了充分的时间去攻击。

交易分片下更新对于交易并没有太多影响,因为交易就只持续很少个出块间隔;网络分片下更新也只限于主链更新,对于各个节点影响很小;但对于状态更新,由于节点携带有其他信息,在分片中必须将这些数据也跟着节点进行更新,这就大大增加了更新的复杂性,甚至不允许整个主链全部更新,只能逐步部分更新。而在这个过程中,由于交易的存在,状态空间内各节点状态还需要根据交易进行更新,必须随时维护状态空间防止状态丢失、状态重复等现象。

最为重要的是状态分片提出的“账户”概念在各个节点上至少需要参与主链和分片链进程,这将导致CPU/GPU线程效率的下降,进而降低整体效率。

不过好在目前也有诸多团队提出了解决方案:

Zilliqa将其账户分成普通账户和合约账户,普通账户只能进行普通交易,即主要处理分片链内的账本。合约账户由普通账户建立,专门用来处理智能合约,也就是主要处理主链上的账本。

Quarkchain将其账户可以自主选择在分片链上挖矿或者在主链挖矿,通过通证经济手段实现对于两层上算力的调整与平衡,事实上进行了账户的分化。

Ethereum提出的方案最为复杂,不仅分为为主链服务的full-node和只对单一分片服务shard-node,还考虑了light node,一共组合出4种节点。

目前Ethereum上有多个团队在对分片技术进行开发:

Prysm-由Prysmatic Labs开发,用Go编写。他们每两周都会对他们的进展更新一次。

Lighthouse - 由Sigma Prime开发,用Rust编写。

Nimbus - 由Status开发,用Nim编写。

Lodestar - 由JavaScript中的Chain Safe Systems开发。

Harmony - 由Ether Camp开发,用Java编写。

Pantheon - 由ConsenSys的协议工程小组PegaSys开发,用Java编写。该团队专注于核心的以太坊挑战,包括公链和私有链的可扩展性和隐私。

Trinity - 由Trinity团队(由Piper Merriam领导)开发,用Python编写。

在分片的赛道上可谓是群雄逐鹿,究竟谁能领跑这一赛道,且让我们拭目以待吧。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181027A1QNP500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券