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