免责申明
数字货币市场风险极高
币市有风险入市需谨慎
本文章不构成投资建议
本文纯粹为国外区块链信息分享
中国大陆居民不可参加ICO项目
为了落实我们的价值投资体系,希多说币新开了干货系列,旨在提高大家的辨别能力和知识储备。这个系列会深入讨论一些话题,会有些门槛,我们尽可能举例解释。希望可以发起积极讨论。
第一期悟空整理了一些以太坊扩容的干货,内容比较多比较杂,希望大家读完后有所收获。
一直以来以太坊扩容问题都热大家的讨论热点,各种解决方案层出不穷。然而这个问题一直没有得到足够的重视。直到2017年底,一个叫做虚拟猫(CryptoKitties)的DAPP被炒得很热,造成以太网络拥堵。不仅转账延迟很高,费用也涨了很多倍。
虽然这个小事,但它揭露的现实令人担心,就是以太坊现在的容量,还无法支持正常dAPP的运行。龟速转账和极不稳定的费用,让人无法安心使用以太坊平台上面的应用。买猫,卖猫,这一个小小的游戏就搞得以太坊网络一团糟,以后大规模的DAPP根本没办法部署。
悟空作为以太坊的坚实拥护者,很关心扩容方案。今天这篇文章就带大家简单了解一下几个目前的解决方法。
区块链的三角难题
区块链技术有一个亘古不变的难题,那就是在安全性、去中心化和扩展性三个里面最多只能选两个。在以太坊开发初期,V神就确定了发展路线,那就是一定要保证安全性和去中心化,扩展性的问题可以以后慢慢研究。
然而过去两年区块链的发展超出了所有人想象,曾经看上去很遥远的扩容问题变得迫在眉睫。首先,一个比较直接的思路就是加大区块容量,比方说比特币现金(BCH)。在出块时间不变的情况下,每个区块包含更多笔交易,所以整个网络的吞吐量就会提高。
这个办法简单直接,但会造成一个很严重的问题。随着区块的增大,产生每个区块所消耗的能源就会更多,需要的存储空间也就越大。一些配置差的电脑就不能继续生产区块了。这样下去,大部分节点会被控制在少数大公司手里,区块链也就失去了去中心化的性质。这个解决方法满足了安全性、扩展性,但牺牲了去中心化。
所以问题来了,在不影响安全性和去中心化的前提下,如何帮助以太坊扩容?目前有几个思路。
分片技术(Sharding)
目前以太坊每个节点都会处理并且保存整个账本,这很大程度上保证了网络的安全性。然而目前转账是单线按顺序,无法平行处理,全球所有的转账都要排队按顺序。这种模式保证了安全性和去中心化,但成为了扩容最大的瓶颈。
V神提出,如果把整个网络分片,每个碎片只处理和存储自己片内的交易。不同分片可以处理不同转账,这样从整个网络宏观角度来看,转账可以多线程平行处理,从而增加了吞吐量。这个思路还不错,但是有个问题。当转账跨分片的时候,怎么处理呢?
我们可以借助默克尔树(Merkel Tree)来帮忙验证。具体步骤如下。比方说悟空在分片1,希多在分片2,悟空想给希多转100个ETH。
第一步:悟空在分片1发起转账,转出100ETH。这笔转账首先会被验证,然后悟空的余额减少100ETH
第二步:上一步转账的收据会存在分片1的默克尔根(Merkel Root)。
第三步:分片1向分片2发起转账申请,附带第一步的收据。
第四步:分片2收到申请,开始处理。
第五步:分片2处理完成,希多的钱包余额增加100ETH,收据存储在分片2的默克尔根里,留作之后的验证。
这样跨片转账就完成了。
分片是个“链上”解决方法,他确保了转账和交易的顺序。但是一个很大的风险在于,如果某个分片太小,会很容易被控制。之后这个分片就会开始作恶从而影响整个网络的秩序。假设总共有100个分片,其中最小的被控制了,这就是所谓的1%攻击。为了解决这个问题,以太坊目前的对策是随机抽样,用概率来降低分片被控制的风险。当然也不能100%解决问题。
Plasma
这是一个“链下”方式,它并不在以太坊主网上运行。开始运行的时候,Plasma会从主网衍生出来多个子网络。在不违反主网络安全性的情况下,子网络可以保持自己的状态,处理、保存自己的转账和余额。只有当特殊情况发生的时候,比方说子网络发生纠纷,不能内部解决的时候,才会上报到主网络。在这种时候,主网的角色至关重要,是所有子网络的基础和标准。Plasma的算法将整个网络划分为很多子网络,把大量的转账移到了链下处理,只有在发生纠纷才会升级到主网,很大程度的优化了速度和效率。这种分级处理的方式像极了血浆分层,因此而得名。
这个方法还有个特别的好处,就是在不违反以太坊主网规则的情况下,每个子网络可以独立运行。这种自由度催生了很多潜在可能。子网可以制定一些有趣的规则,或者满足某种需求,比方说隐私,比方说局域网。
还有一点,子网络在闲置的时候,也可以向主网络提交一个“退出申请”,合计所有的状态变化并通知主网后,就可以下线了,非常节省资源。
Raiden
Raiden是另一个“链下”的解决方法。它允许用户点对点之间开启“状态通道”(State Channel)。这种通道可以在不需要以太坊主网参与就可以传输信息,也就是转账。虽然不需要主网确认,但信息仍需要发送方加密,确保安全。Raiden有种使用场景特别符合,就是两个用户互相频繁转账。比方说我每天早上都要买一碗楼下的豆腐脑,每个星期都要去游泳健身,每个月公司都会给我发工资。这种固定的、频繁的转账很适合用Raiden,降低了手续费,增加了速度,并且对主网没有影响。当状态通道不在使用的时候,双方都可以选择关闭通道,双方多次转账记录会合计成一大笔转账,并发给以太坊主网。比方说我签了一年的健身卡,每个月费用1ETH,最后的转账记录会是一笔12ETH而不是12笔1ETH。节省好多手续费哦。
Raiden还有一个好处就是transitivity(传递性)。假设节点A和节点B打开了一条状态通道,节点B和节点C之间也有一条通道,那么A可以安全地转账给C,不需要担心B诚不诚实。这种转账的手续费远低于主网手续费,肯定会吸引大量用户。
然而仔细考虑,如果很多人为了节省转账费来共享节点的话,大家会集中在某些大节点周围形成中心化的网络,去中心化的特性就会被打破。这点值得商榷。
第一期干货系列,先讲这么多。大家消化一下。有问题欢迎找我讨论。
下期悟空会给大家详细解释Casper的工作原理。
熊市积累知识,等待下次爆发。稳住我们能赢。
精彩内容链接,点击即可阅读
领取专属 10元无门槛券
私享最新 技术干货