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

TPS之巅 之分片技术篇

区块资本论

不一样的区块链解读

不一样的故事

如果说Bitcoin网络是一条羊肠小道,那么Ethereum则是经常塞车的柏油马路。自Cryptokitties之后,对于基于Ethereum开发的项目来说,日常堵一堵Ethereum网络也成为了行之有效的项目宣传方式。

源数据:etherscan.io

Cryptokitties对Ethereum网络的影响:gas price从平均20GWei迅速上升到60GWei

2018年7月同样是网络堵塞的高峰期,和最新的交易挖矿类交易所的涌现有很大关系。Bitcoin和Ethereum的性能已经远远不能满足现有交易的需求,为此必须要提升可扩展性。

区块链可扩展性的方案有很多,不过目前较为普遍的是侧链、分片和DAG这3类方案。侧链与分片均属于横向扩展,DAG则是则是将链状的区块结构扩充成图状结构,直接将交易写入图中。

(一)

侧 链

侧链是在主链和应用之间构建匝道,起到连接与验证的作用。侧链通过双向挂钩的策略,允许交易线下结算,通过SPV证明已支付,等待后续验证。在BTC上,验证一个交易平均要1小时,但侧链可以在数分钟内先确认交易,交易完成之后1-2天完成最后的验证。因为验证过程拉长,对于交易作恶的惩罚有可能不及时。与此同时由于侧链算力较主链小,容易被算力攻击导致主链损失。同时侧链需要对原主链进行大量软分叉。

(二)

DAG

DAG全称为有向无环图,允许区块链如图状延伸,组成拓扑结构。DAG上不再进行区块挖矿,而直接确认单笔交易,自然配合UTXO。一个交易之后可以延伸出两个交易,也可以两个交易共同有一个交易作为后继,但必须是从前向后延长而不能相反。当一个交易被确认之后,需要连向之前最近确认的交易。其结构构建较为复杂,带来的是交易确定性上升。

在通常区块链体系中,由于区块可能会受到最长链/最重链原则地影响,有时区块内交易会被逆转。在DAG中,只要能找到两个最接近的父交易并成功验证,这个交易就能被永久确认而不存在轻易逆转的可能。

(三)

分 片

分片是从内部划分,每个分片链的算力和原主链相当,故分成N片后总体TPS理论上增长到N倍。分片链的结构相同,互不干扰,共享一条主链。分片与侧链都是横向扩展,但省去了软分叉而代之以内部的复杂化,难度介于侧链与DAG之间。

更重要的一点,如果未来TPS能够达到10000以上,假设每个交易的内容为1KB,每秒网络流量就需要10M/s,每天产生的存储数据则是824G。即使用户选择轻节点以规避巨大的网络带宽和存储要求,所有的完全节点都必须一字不差地接受数据流。唯有分片可以通过数据分割以降低要求。

如果要对侧链、DAG和分片进行形象化描述的话,可以这样举例:小车在集装箱中被大车拉着跑,交易是小车,区块是集装箱,区块头及merkle tree等则是大车,验证及公开过程简化成收费站。公路上收费站就一个关口,通过大车的速度自然不快。侧链相当于匝道,允许大车走旁道先通过,下一个收费站再检查。分片则是增加收费关口数,允许更多的大车通过。DAG放弃了大车和集装箱,直接让小车通过。小车比较灵活,可以走超车道等方式更方便通过收费站,但这么多小车的道路交通就更加复杂,铺路较难。

目前DREP决定采用分片提高TPS,也对DAG等方法有所研究与预备,为之后系统升级预留空间。

1. 分片的特性

分片实质上是分而治之,每个子系统都有自己的完整结构,能够一定程度上独立处理请求。而在数据库领域这个划分称为横向扩容。

从上述例子可得知,区块链分片之下完全公证不再可能也不再必要,除了必须在主链上处理或跨片的请求之外,交易只会在分片内得到公证,这正是分片效率提升N倍的原因所在。

在中心化数据库中,分片往往会根据信息的特征构造分片键或索引表以加速查询速度,而在去中心化机制中,虽然必须使用Hash分片以保证安全性与分片均衡性,不过合理使用特征对系统运行同样有很大帮助。这就如同一个矩阵,矩阵的非零元素如果随机分布,那么将其作为为分块矩阵处理的意义就很小。反之,非零元素在对角线附近分布,就容易拆分成若干个较小的分块矩阵,数据处理难度大大下降。

常见的分片方法有以下数种:

网络分片

源于互联网和局域网之间的层级关系,需要将网络分割成若干碎片网络,各个网络中自行建立共识,再汇总到主链上。在这种机制之下,如果发生串通作弊,去中心化程度大大下降的分片网络很难检测。所以网络分片只允许主链采用PoW这种统一性和可用性高而分片容忍度低的共识机制,以消耗算力与电力为代价让诚实碎片被选出。

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

交易分片

这个方法出现得最早。在最早期,仅PoW层上直接分片一个PBFT层,将节点随机均匀分布在各个分片中。在交易时,对交易地址进行加盐Hash计算,根据同余分配到分片中,这种随机机制下安全性能够保证。

一般交易分片与UTXO联用。UTXO如同虚拟收银台,在BTC即得到应用,较为成熟。UTXO自身的问题在于对智能合约支持差,还要多出一个账户,非常不简洁。

为防止在不同分片中双花攻击,需要对不同分片的交易进行对比,防止出现一个节点发起相同的两笔交易,但接收者不同的情况。不过总体来说,对于交易分片的研究较为成熟,并且允许多种共识在其机制上运作,支持PoS+PBFT的组合策略。

状态分片

状态分片最直观,将各个账户划入分片,并在交易中记录账户状态改变。状态分片相比于前面两者,能够赋予节点更多的特征,存储更多数据,这给予需要构造更多特征的智能合约以方便,如DREP将要建立声誉-代币双重维度智能合约就必须选择账户模式。

另外还存在对账本状态进行分片,各个分片维护分账本状态的模式。这种模式更注重global state而不是各个节点。该方法很容易达到很高的TPS,不过对去中心化损失较大。

可以说,状态分片是最有潜力而最困难的分片方式,如果设计合理,则状态分片将拥有很大的市场应用空间,反之则将带来非常多的麻烦。

2.目前项目的现状

a.Zilliqa

Zilliqa团队于2017年7月组建,主要成员为新加坡国立大学的师生,Prateek Saxena在区块链方面研究深入,最早的区块链分片论文正是他与Loi Luu等人合作发表。其余人则在网络安全方面有研究。

这样一个团队,必然对于安全性非常看重。同时因为过程越复杂,被攻破的可能性越大的特点,他们的区块链项目注重简单有效,不采用过于复杂或未经代码验证的方法。

Zilliqa的网络分片采用以下方案:每一轮首先以PoW方式竞争DS委员会名额。当DS委员会名额确定,则进行PoW2竞争分片出块资格,之后根据PBFT进行共识出块。出块时当有相应header时,检查交易是否有效,检查正确无误则可以向主链提交有效状态,反之则不能提交,需要等待主链状态更新。

PoW的安全性自然较高,同时达成了随交易节点数增加TPS增加的效果。从市场反应来看,Zilliqa有干货已被公认,其价值得到相当程度的承认。

b.Emotiq

Emotiq是以Omniledger为基础的区块链分片项目,希望成为Omniledger在商业中的应用。Omniledger是一个经典的区块链分片设计,但本身没有项目。

Emotiq计划开发通用支付渠道(UPC)作为一个小额支付手段,来弥补区块链对快速小额支付范围的缺口。不仅如此,Emotiq还允许基于本体开发复合ERC20的代币子链。其智能合约采用自创Emotiq Ring语言。核心是Omniledger+PoS。

Omniledger的跨片交易采用Atomix:先发出请求,如果出现一个分片接到多个请求,则锁定分片,不进行交易,而进行允许交易证明,将未能通过的请求驳回。之后解锁进行交易。

交易则是UTXO,用DAG系统相互连接并保护交易安全。可以在需要高交易量时先信任再检查,如同侧链的处理方式来提高交易速度。使用时可以加入状态块(类似于确认节点)来确认状态正确与否。

总的来说,Omniledger的兼容性很好,在其上开发Emotiq有其合理性。

c.Quarkchain

Quarkchain是较新的一个项目,目前在其官网上可以看到测试网络TPS已经突破10000大关。

Quarkchain采用账本形式,账本记账并保持账本状态。记账权还是PoW。

其根链(主链)和分片链的节点互不干扰,通过通证经济手段自动调节两者数量比例。这样节点只需要做一件事情(主链/分片链)而使CPU效率达到最大。

为了提高效率与稳定性,Quarkchain允许多个节点组成一个超级节点来处理大量信息,每个节点与多个节点相互链接,可以拆分成若干个单图,单图可以处理分片数据,总体则可以表现出完全节点的特征。这可以说使DPoS+PoW的新组合。

在使用上,用户只需要一个账户,不需要考虑账户副本问题。

Quarkchain在PoW系统上成功达成高TPS,这是一种创新。

3.尚未解决的问题

虽然分片在许多项目中得到研究和应用,提出了多种分片处理方法,但很基础的两大问题尚未得到重视与解决。

(1)分片策略问题

分片看似简单,将相应的特征值(交易地址/发送者地址等)进行Hash再同余分配。但这其中隐藏了两个问题。

其一:若干个恶意节点可以通过反复加入-离开的操作,对主链造成压力。在这个反复过程中,如果多个恶意节点通过反复随机,分配到一个安全性较弱的分片,就有可能控制这个分片,进而造成单点崩溃。

其二:根据概率计算,跨片交易的概率随着分片数量增加而增加,也随着交易数量增加而增加。

根据Zilliqa白皮书提到的内容,以m为分片数,n为交易数,k为参与跨片交易的分片数,概率P则为:

计算可知,片内交易概率=(1/m)^n,P(4,1,4)=1.56%,大量的交易都是跨片交易,那么片内交易的优势荡然无存。

由于PBFT往往需要分片内人数

所以,分片策略需要:足够的随机性,对join-leave攻击的耐性,片内交易的较高比例。

(2)跨片交易问题

如果不做优化,跨片交易占据总交易的比例极大,使TPS的实际增长与理论严重不符;还存在跨片交易模型效率与安全性不足的问题。目前的主流方法有以下数种:

同步:指在进行跨链交易中将两个分片的状态进行同步,只有同步完成才能进行交易。代表为Atomix模型。这个方法是最安全的,但效率也最低下。如果100个分片一共有300个跨链交易,那么平均来说每个分片就要进行6次同步,这大大影响了真实效率。

交易拆分:指将交易拆分成两半——交易发起者付出代币与交易接收者收到代币两者。这就将300个两边交易变成600个单边交易,而单边交易不需要同步,交易效率很高,Ethereum的sharding采用的就是这个方法。可它的安全性最低,因为如果出现网络故障,易于发生交易只完成单侧,代币付出之后接收方没有获得代币。这个严重的问题大大制约了该方法的发展。

UTXO:UTXO方法有很多优点,但一个严重的问题就是UTXO与智能合约比较难以兼容。没有智能合约,区块链的应用面就会大幅缩水。同时,UTXO和需要承载更多信息的账户体现出一定的功能重复,存储效率不高——这在ETH上就有体现。

总的来说,跨片交易模型需要同时满足原子性、安全性、较高效率,与智能合约良好兼容等诸多要求。

(3)DREP如何改进

DREP正是认识到上述问题,于是在使用分片技术的同时作出了如下改进:

DREP链采用状态分片(state-sharding)底层网络,为声誉系统提供相应的空间。为提高性能,从分片策略就开始寻找从源头上使N倍TPS有意义的方法。DREP采用根据应用来特征化用户交易属性的策略,尽量使片内交易保持一定的比例。在AI和大数据支持下,这个策略是能够生效的。

但如果完全按照特征划分分片,那么会造成随机性和安全性的严重丧失,分配认识的节点次数过高,赋予作恶行为以土壤。同时,由于分片内节点随时间会自然互相认识,去中心化程度则不断下降。为此,DREP吸收中心化数据库中已被验证的一些成果,将特征分片的比例控制在不影响安全和去中心化的程度上,尽量保证较高的随机性,配合分片的随机重抽,在不可能三角中取得平衡点。

除此之外,考虑到黑客可以选择join-leave攻击,相应有抗攻击的数据库方法也将被引入。

共识机制方面,DREP链使用了PoS和基于声誉体系改进的PBFT的两种共识机制。主链使用PoS机制,降低用户准入门槛,提升网络的分布式程度。Shard内部每个DREP节点维护自己声誉值,通过基于声誉值的PBFT算法在保证安全的同时提高shard内部事务处理速度。除了在分片上的设计,声誉值会是激励节点保持诚实的另一大动力。黑名单在节点间的传播有时间差,但有了声誉值这个指标,作恶被发现则立即可得知,降低下次作恶成功的概率。

跨片交易方面,DREP链创新性的采用了基于PBFT共识和多重签名机制的四阶段握手协议(Four-phase commit protocol),通过对已被验证的传统互联网握手的去中心化,降低了跨片交易中实现共识机制的成本,并保障了交易的原子性和安全性。相比Atomix等方法,该方法在效率上更高。

4.结论与展望

分片是一个有希望发展为区块链3.0的重要技术领域,在这其中有许多问题尚待解决。DREP考虑到现实需求与现有技术,提出的分片方案能够很好地满足未来日益增加地DRApp需求,同时保证足够地安全性和去中心性。我们希望能够利用中心化数据库在分片上的积累,结合优秀的技术团队,将落地的重任在基础上打牢。

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券