近期,硬盘被Chia的矿工疯狂追捧,风靡一时。无论是固态硬盘还是机械硬盘,尤其是大容量的硬盘,比如固态的2T\\4T,机械硬盘的8T\\10T\\12T\\14T等,皆被炒至两三倍的价格,市场上一盘难求,据传希捷的期货硬盘订购单已经排至六七月份。知道创宇区块链安全实验室围绕Chia,从共识机制、存储容量的角度来解析这一技术现象。什么让硬盘市场如此疯狂
Chia,中文名奇亚,该项目是在2018年由BranCohen发起,宣布要用新的一种环保的数字加密货币挑战比特币。众所周知,比特币挖矿耗电量巨大,脱离绿色,造成了大量电力资源的浪费,据统计,比特币一年挖矿消耗的电量超过整个阿根廷一年的用电量。在Chia官网,我们可以看到Chia的logo和配置都是采用绿色环保色。
那Chia用什么来挑战比特币呢?本文不讨论挖矿细节,单从Chia的共识机制来解读这个项目。Chia是一条全新的公链,与以往的POW或是POS不同,它提出的概念叫ProofofSpaceandTime,即时空证明PoST,希望借此在确保安全的情况下降低“挖矿“的能耗,以体现环保性。事实上,在Chia的系统设计中,用“种植”来替代“挖矿”一词,重构其绿色的概念。Chia的共识机制-时空证明PoST
说到共识算法,大家对POW和POS并不陌生。在分布式共识系统中,系统的运作依赖于特定种类的可被加密验证且稀缺的资源,以抵抗Sybli攻击。PoW与PoS中的稀缺资源分别是计算能力与权益。而在空间与时间证明共识算法中,Chia采用了存储空间作为稀缺资源。由于存储空间并非无限,因此他们认为,空间证明是更加贴近于比特币最初的“一个CPU一票”的理想替代方案。例如,拥有300GiB的用户拥有三“票”,而拥有500GiB存储容量的用户则有五“票”。这里的“投票”指的是在区块链上赢得并且验证该区块的机会。而在Chia的共识算法中,仅仅采用空间作为稀缺资源是不够的。因此,PoST共识算法引入了时间作为另一种稀缺资源。该算法创建了一种可验证延迟函数,以作为时间已经被流逝的证明。通过时间与空间的结合,Chia构造了这样一种挖矿场景:用户将数据存储在硬盘驱动器上一段时间,而赢得区块记账权利的机会与分配的空间大小成正比。该机制通过与彩票中奖类似的方式,允许所有普通用户参与其中,而不需要任何特殊的硬件、资金以及注册。Chia如何实现对存储容量的证明
验证者向证明者发出一项质询,然后证明者向验证者证明在某一时刻,验证者保留了特定数量的存储空间,而对空间的证明由以下三个阶段组成:绘图、挖矿、验证。
Chia共识算法白皮书中对于空间证明的示意图首先证明者标绘或分配部分硬盘空间(1);然后通过空间证明(2,3,4),来响应质询以实现挖矿过程,验证者检查该证明对该质询是否有效。绘图过程即硬盘容量的初始化过程。挖矿用户是任何拥有至少100GiB可用空间的人,也可能有拥有大量未使用空间的企业。存储空间容量不设上限。标绘过程可能持续几个小时到几天的时间,该过程只需执行一次。经过初始化的空间被一个称为plot的文件占用。绘图文件的大小由参数k决定,其中占用空间为780k?2k?10,而最小的k取值为32,即文件大小为101.4GiB。从Chia1.0版本始,使用快速的商业计算机能够在六小时之内创建一张k32绘图文件,而对于具有单核心CPU以及几GB内存的慢速计算机来说,这个过程可能需要24个小时。以k=32为例,经过以上操作,我们得到的plot文件包含七个具有随机数据的查找表,每张表中有2k个条目。表i中包含两个指向表i?1的指针。最后,每张表1的条目都包含一对介于0和2k之间的整数,称为“x值”。空间证明是具有一定数学关系的64个x值的集合。一旦证明者完成了绘图文件的生成,就可以准备接受质询并创建证明。这种共识算法吸引人的一点就在于它是非交互式的:创建绘图文件的过程不需要任何形式的注册或者互联网连接。类似于PoW算法,在获得奖励之前,任何人都无法修改区块链。挖矿过程旨在通过对挑战者发出一系列质询来证明他们已经按照共识中的指定方法使用了一定量的空间。当挑战者接收到质询后,他们需要检查自己的plot文件,生成证明,并且将任何获胜的证明提交到网络中以进行验证。每一轮的质询过程都可以抽象为一个表查找问题。每次质询以一个256位的二进制序列作为输入,而期待挑战者得到一个证明作为输出结果。挑战者通过从上文所述生成的表7中读取一系列值以应对质询,它们指向表6中的两个条目,以此类推。最后,挑战者得到了整个x值树:该过程需要对表7进行一次读取,对表6进行两次读取,以此类推。假设用户使用的是查找时间为10ms的慢速机械硬盘,整个查找过程大致需要640ms。整个过程涉及的数据量很小,且与绘图文件的大小无关。由于此过程生成的大多数证明都不够好,无法提交给网络进行验证,我们可以优化这个过程,即只检查树的一个分支,从而最终只会生成两个x值,具体取决于任务。然后,我们将以此方式生成的x值散列为256位的字符串,以确认证明是否正确。对这些x值进行散列处理后,我们便得到了质量字符串,即长度为256位的随机值。通过该值与难度系数,以及plot的大小相结合,可以生成required_iterations值。如果该值小于某一个特定数目,那么我们就会查找整个PopSpace。经过优化后,在慢速硬盘上查询一个分支的时间就降低到了7次读取与查找,即约70ms的时间。
对于质询过程,更进一步的优化方式是使某些比例的图不符合每个质询的要求,这种方法被称为“绘图过滤器”。举例来讲,要求质询字符串与plot_id以九个0开头。这种要求对所有人均一致,因此是公平的。这使得挖矿几乎不消耗任何资源,并且每分钟磁盘读取量很少。Chia资产的用户已经使用单个RaspberryPi设备实现了几个PiB的存储。Chia共识算法白皮书中提到,他们假设用户使用的是廉价低速的机械硬盘驱动器,因为他们的价格比较便宜,并且由于读取速度和挖矿效率无关,所以这些用户无需使用固态硬盘。但是,可以使用固态硬盘或者内存实现更快的绘制过程。Plotkey是存储在绘图文件中的私钥。而plotID通过散列化绘图文件的公钥以及矿池的公钥进行签名。要创建具有空间证明的块,需要同时使用Plotkey和Poolkey进行签名。因此,创建绘图文件后不会对矿池产生影响。实际上,Plotkey是由plot中存储的Localkey与挖矿软件中存储的Key通过2/2BLS聚合公钥得到的。为了安全和高效,证明者可以通过此密钥和签名方案来运行集中式服务器。服务器可以连接到存储许多plot的“收割机”。挖矿的过程需要证明者的密钥和本地密钥,但不需要池密钥,因为可以将池的签名缓存并重用于许多区块。验证过程则简单得多,当挑战者成功地创建了空间证明之后,验证者可以通过执行一些散列操作并与证明中的x值相比较以确定是否证明成功。回想一下,我们已经说明证明是一个含有64个x值的列表,其中每个x值有k位长。对于k32来说,一共就是256字节长,因此非常紧凑。然而,虽然验证的过程非常快,但还不足以快到能够在Ethereum上进行可靠的验证,因为验证过程需要blake3和chacha8操作。注:本文部分内容参考Chia的白皮书《ChiaConsensusAlgorithm》
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。