对于有志参与 Chia 挖矿的专业人士,入场需要评估 XCH 代币价格走势、全网算力增长曲线、设备采购成本等因素。
相信大家对比特币 / 以太坊等币种的挖矿早已非常熟悉。所谓挖矿,其背后的原理是共识问题。许多矿工参与挖矿固然是为了获取虚拟货币,进而获得利润。但究其本质,挖矿的目的是为了维护一整张分布式计算网络,维护共识。而分配给矿工的虚拟货币只是这一过程的奖励而已。
按照中本聪的设想,利用大众家里的电脑 CPU 闲置算力就可以构筑起一个强有力的分布式网络。然而随着 ASIC 矿机的出现,这种运算能力很容易被专用矿机获取,从而成了资本的游戏。而且能源价格也显著的影响着比特币的算力。
根据 Chia 的白皮书,Chia 项目的愿景是「数字世界的绿色货币」。在其设计之初,对选择算力基础的目标是「一种分布广泛、抗 asic、供应过剩的商品」,而且与电价无关 - 这就是硬盘空间。(广义的说也包括众多形态的计算机存储设施,只要能提供最低 600MiB 的容量——这是 Chia 挖矿软件能提供的最小 plot 文件,但十分不经济,且在最新的实现中已不被支持,但还是可以当作测试效能的工具)。
截止本文写作时,根据 Chia 全网的算力估算其总耗电功率还不到 1000KW。相比 BTC 实属天差地别。
简而言之,Chia 的挖矿过程如同彩票开奖。参与挖矿的矿工应该提前准备好被称为 plot 的文件,然后等着下一个区块的广播。这些文件里的内容和广播中的内容都是哈希值。哪个幸运儿手中的哈希值与广播中的最接近,恭喜,他就中了奖,获得了 XCH 代币。
按照 Chia 网络的设计,在主网上线的前三年,每 10 分钟的产出是 64 个 XCH,由 32 个矿工分享,即每个矿工每天有 4608 次中奖机会,随后分批递减。
准备 plot 文件的过程本质就是计算出巨量的哈希值,存储于磁盘上。官方提供的钱包程序即可完成这种计算过程。钱包客户端同时附带了命令行界面的程序(CLI),可供矿工编写脚本灵活使用。
为了提高中奖的概率,矿工自然应该准备越多 plot 越好。Chia 网络的算力单位就是存储单位,即 MB/GB/TB/PB 等。注意官方使用的单位为带有小写 i 的如 GiB,其含义是以 1024 为进位,而非硬盘厂商使用的以 1000 为进位。所以当你看到默认参数说产生一个 plot 需要 239GiB 缓存空间就窃喜以为 1T 的硬盘可以同时进行 4 个 plot 的时候,先别高兴太早,因为 239GiB 约等于 251GB,而 1T SSD 其实只有 930 多 GB 的实际容量。当然,经过实践摸索,1T 的 SSD 也完全是可以同时进行 4 个 plot 的,只不过需要参数设置上的一点小技巧。
了解过 Filecoin 挖矿的朋友可能会觉得 Chia 挖矿非常相似,从某种程度上确实是这样。二者都需要大量的存储设备,并在都需要在正式进行挖矿之前进行预先的准备工作,才能够生成有效算力,在 Filecoin 中这步被叫做数据填充,而在 Chia 中被叫做 Plot,或者更大众的叫法-P 盘。不过 Filecoin 挖矿对设备的要求极高,并不只是堆砌存储设备就可以,远远超出了大众使用范畴,同时还有非常复杂及昂贵的前置抵押等要求。而 Chia 的要求非常亲民,没有抵押、没有惩罚机制、用个人 PC 就能够进行操作,这是 Chia 迅速火遍大江南北成功破圈的原因。
不过 Filecoin 和 Chia 的对存储空间的使用逻辑并不相同,Filecoin 挖矿本质上是对于提供分布式存储的一种激励,而 Chia 则是纯粹用这种特殊的机制来维持网络共识。
从 4 月中旬 Chia 爆火以来,很多急不可耐的矿工已经或正在准备买硬盘,想大干一场。从已有的社区讨论来看,为数众多的计算资源并未得到充分利用。所以,很有必要了解一下 Chia 挖矿的要点,并针对自己的条件加以优化,才能做到高效挖矿。
Chia 的挖矿过程并不是有大容量硬盘就行。有两部分缺一不可:制作 plot 文件(通常简称 p 图,因为官方把 plot 翻译为耕地)和挖矿(官方翻译为耕种)。
对于 Chia 来说,挖矿这一步其实是非常轻松的行为,重要的是容量,而不是速度,甚至对挖矿的主机也低到几乎没有任何要求。官方甚至推荐用一只几十美元的树莓派加上数个 USB Hub 即可带动高达 1PB 的算力。毕竟,挖矿的过程就是等着网络广播来一串数字,然后跟硬盘里的哈希值比较一下就可以了。哈希的比较运算是极快的,并不需要把数以 T 计的数据读进内存进行什么运算。
这也确实符合 Chia 的出发点——绿色。任何人都可以使用闲置的存储容量加入 Chia 网络。挖矿几乎没有额外消耗能源,只要开着机,连着网络,就可以享受每天 4608 次的抽奖,而且是永久的,这很美好。
但是实际上,制作 plot 的过程还是相当消耗资源的,只是消耗的并非电力,而是 SSD。高速大容量固态硬盘成为了真正的消耗品。这要归功于(是归功还是归咎,且看对存储行业的影响吧) Chia 设计的计算机制。为了最终达到既能提供 Proof of Space 证明,又能足够快的进行检索这一目标,Chia 制作 plot 的过程实际上分为四步:
计算生成 7 张哈希表,主要使用的算法是前向传播。这一步要处理大量的运算,占用 CPU 最为密集。其实这一步已经生成了足以支持 Proof of Space 的全部数据,只不过效率欠佳,所以还需要后续步骤处理。
用反向传播算法来清理一遍上面的 7 张哈希表,去除不必要的哈希值,并给表排序。这一步占用 CPU 也较为密集,在 1.03 及更早的版本上对内存和缓存盘的占用也达到顶峰,但 1.04 开始对内存占用下降。
对上一步的结果进行压缩,并将大部分表合并起来。从这一步开始,对 CPU 的消耗降到了较低水平,对内存的占用仍维持在高位,但缓存盘的占用开始逐步下降。
把剩余的表继续压缩成最终的文件格式,并把文件从缓存盘转移到目标位置。这一步是唯一对目标磁盘进行 IO 操作的。
需要指出的是,Chia 的 plot 文件制作、挖矿、节点维护等工作统统由其钱包软件完成。该软件仍然在不断改进,迭代速度较快。在过去几个小版本中,其已经在缓存占用、速度计算等方面有了很大改进。Reddit 论坛上有网友记录了不同版本软件 (1,2) 在制作 plot 过程中的各项资源占用情况,对比可以发现,1.04 版相比更早版本已经减少了近一半的缓存使用量。建议总是使用官方 github 的最新版。
对于大多数矿工,要解决的首要问题是第一步,即如何又快又省的制作 plot 文件。
这一过程需要使用 Chia 钱包软件。Chia 的设计初心其实很简单,而且绝大多数晦涩难懂的参数都在开发过程中经过的小心的选择,确保已经是最优值。剩下的,就只是每台电脑的性能差异带来的时间差别而已。但恰恰就是这样的性能差异,构成了截然不同的生态。一边是业余玩家想要买几块硬盘来试水,另一边是手持资金生怕错过风口的大鳄在急切的询问「一千万资金该买什么配置」。在这背后大家关心的都是同一个问题:能抢在全网算力较低的头矿窗口期挖到多少币?毕竟,按照 Chia 社区维护的统计数据,同样的一次 plot 过程,万元以内的电脑配置,有人可以 4 个小时以内完成,有人却需要 24 小时以上,这样的算力差异自然会体现在获得奖励数的较大差别。
对此,我们的建议如下。
如果你是业余玩家,主要依靠一两台闲置的电脑,最多额外买几块硬盘,那么几乎不用费心,完全用默认参数即可。如果愿意多付出一点时间研究,最好多试验几次并发数,看几个并发最有效。更进一步的话,可以在 plot 过程中观察一下 CPU、内存、磁盘 IO 的占用情况,哪项资源出现了瓶颈,则略微减少其分配,反之亦然。
几 个非常有用的小技巧:
基于上节论述中引用的 Reddit 网友记录图,各项资源在不同的阶段利用率是各不相同的,这就意味着与其追求并发数,不如科学分配延迟时间,使得各项资源总处于较高的利用水平。让若干个并发任务互相延迟一会儿再开始,这不仅意味着 CPU 和内存可以得到较好利用。在 1.04 版软件发布之初,网友就试验成功了通过设置延迟 6 分钟,成功在 1T SSD 缓存上并发运行四个 plot。考虑到现实中用普通机械硬盘做目标盘的情况较为普遍,而机械硬盘的 IO 性能较弱,延迟时间还可以避免多个大文件同时竞争机械硬盘的 IO。
制作 plot 的过程虽然有 CPU 和内存密集的运算,但过多分配 CPU 核数和内存数并无明显改善。如果你有一台 16G 内存,8 核 16 线程的电脑,没必要把内存和线程都分配给一个 plot 任务。
对于个人矿工,参照目前的全网算力,仅靠钱包软件自行挖矿(俗称 solo 单挖)已经非常不现实了。当然,如前所述,Chia 的挖矿类似于抽奖行为,哪怕只有一注,理论上也有可能获奖。但从更现实的角度,个人矿工建议加入矿池从而获得更可预期的产出。
要铭记一点:家用电脑的民用级 SSD 寿命普遍为几百 TB 擦写量。按照 Chia 官方文档指出,每制作一个 0.1TB 的默认参数 plot 文件,实际造成的擦写量约为 2TB,即 20:1。这意味着一块擦写寿命为 500TB 的民用 SSD 最多能生产出 25TB 的算力就会寿终正寝。*这也是官方强烈不建议在笔记本电脑内置的 SSD 上进行 plot 的原因。
如果你是雄心勃勃入市的准新矿主,那么我们的建议是购买一些高性能机器专门用作生产 plot 文件,同时再配备少量的低功耗机器专门用作挖矿。为了高效利用资金,并没有必要购买高性能整机,最好是按需搭建。假设没有功耗、尺寸、噪音等限制,那么使用全尺寸主板搭建开放式的主机较为理想。Empower Labs 认为在相当长的时间内,投入数万元至数十万元成本搭建 Chia 小型矿场的做法会较为流行。根据 Empower Labs 的分析和与业内人士交叉验证,有如下建议:
制作 plot 所需要的核心资源有 CPU、内存、SSD 三部分,需要尽量均衡。
在 CPU 方面,因为第一、第二阶段存在的密集操作,CPU 需要有尽可能高的主频。其次,为了同时进行多并发任务,核数也需要多。一部分矿工选择了二手多路 E5 系统却发现性能并不尽如人意,其原因在于核数虽多,主频却不高。
内存方面,plot 过程耗费的并不算多,而且随着软件版本迭代一直有所降低。据实际观察,在 1.03 版中,单个 plot 过程占用的内存约为 4.6GB,而 1.04 和 1.05 版最多不会超过 3.5GB。如果并发任务彼此之间有少许间隔时间,并不会同时到达内存占用高峰。合理设置的话,以并发数 *3G 甚至更少完全可行。目前并未观察到 DDR 内存的频率会产生较大影响,所以无需刻意追求高频。
SSD 方面是差异较为显著的,应首选企业级大容量 SSD,兼顾性能和寿命来选择。企业级 SSD 的寿命多以 PB 计,可以更快产出更多的 plot,平摊成本更低。目前最佳性能的 SSD 多采用 U.2 接口,并非民用级主板常见的 M.2 和 SATA 接口,这也限制了主板的选择。当然选择 U.2 转为 PCIE 16X 接口的转接卡也是合理选项。
除了 SSD,服务器主板上常见的 SAS 硬盘接口也是很好的选择,尤其是当你可以获取充足的 SAS 硬盘时,以 RAID 卡组成磁盘阵列,经验证效果往往比单一 SSD 更好。
在操作系统方面,并不一定要选 Windows。Mac 和 Ubuntu/CentOS 等 Linux 系统自身占用的资源更少,而且 Chia 官方钱包均已支持。如果计划进行长期不间断的生产,最好使用命令行界面(CLI),而非图形界面的 plot 程序。Chia 钱包的图形界面其实也依靠调用命令行程序来实现 plot。以 Windows 为例,命令行程序位于 C:Users_XXXXXXXX_AppDataLocalchia-blockchainapp-1.0.xresourcesapp.asar.unpackeddaemonchia.exe。其中_XXXXXXXX_是你的 Windows 当前用户名。目前钱包 GUI 程序经常会出现不稳定的情况,而且钱包程序本身负担着全节点的同步任务,也会耗费 CPU。所以,CLI 是长期挖矿的更佳选择。
经过对官网文档的深度挖掘,以及参考了大量国内外 Chia 社区的讨论,发现有一些有价值的信息尚未广为人知。
-r 参数是 chia 命令行程序中指定最大 CPU 线程数的参数。在许多讨论中,矿工倾向于认为越大越好。然而通过深入挖掘,我们发现并非如此。
根据 Chia 的 Github 讨论,-r 参数仅仅在 plot 的第一阶段,即生成哈希值时起作用。理论上,如果设置-r 6,那么最佳结果是 6 个 CPU 线程都 100% 参与工作,这一阶段的总 CPU 数应为 600%。但实际上 CPU 的参与程度远小于此。
在我们的实验中,使用了 i7-8700 CPU,设置-r 6 单独进行一个 plot,从 chia.exe 的日志中可以看到如下输出:
Starting phase 1/4: Forward Propagation into tmp files... Mon Apr 19 17:22:22 2021 Computing table 1 F1 complete, time: 172.346 seconds. CPU (183.87%) Mon Apr 19 17:25:15 2021 Computing table 2 Forward propagation table time: 964.964 seconds. CPU (312.470%) Mon Apr 19 17:41:20 2021 Computing table 3 Forward propagation table time: 1179.445 seconds. CPU (281.610%) Mon Apr 19 18:00:59 2021 ... ...
日志表明,在 7 张表的计算过程中,CPU 的总使用程度仅为预计的一半不到。经过多次实验,提高-r 数可以一定程度提高 CPU 总使用率,但并不明显。因此我们认为 CPU 方面,主频是最影响 plot 速度的关键,而非核数。
当然,更高效的做法是并行进行多个 plot 队列。上述问题揭示的意义在于,首先-r 参数并非独占,其次-r 参数的作用周期较短。最佳做法是通过实验掌握第一阶段消耗的时间,通过设置间隔来避开,使得每个并行任务在执行到第一阶段的时候,总能通过较大的 r 值来尽可能独占 CPU。
-b 参数是指定最大内存使用量的参数。多数矿工认为越大越好,实则不然。对比 1.04 和更早的版本,plot 过程中的内存使用高峰从第二阶段变化到了第一阶段,这是由 Chia 团队的算法改进引起的。
现在,默认参数-b 3390 已经是反复优化过的参数,可以保证在排序过程中总是采用效率最高的 uniform sorting 算法。如果降低这一参数,plot 依然可以进行,但可能会回落到效率相对较低的 quick sorting 算法。从下列日志中,我们可以清楚的看到这一记录。当可用内存数小于 qs_min 时才会导致彻底失败。
Forward propagation table time: 2086.329 seconds. CPU (217.460%) Fri Apr 23 19:04:01 2021 Computing table 4 Bucket 0 uniform sort. Ram: 5.786GiB, u_sort min: 3.250GiB, qs min: 0.813GiB. Bucket 1 uniform sort. Ram: 5.786GiB, u_sort min: 3.250GiB, qs min: 0.813GiB. Bucket 2 uniform sort. Ram: 5.786GiB, u_sort min: 1.625GiB, qs min: 0.812GiB. Bucket 3 uniform sort. Ram: 5.786GiB, u_sort min: 1.625GiB, qs min: 0.812GiB. Bucket 4 uniform sort. Ram: 5.786GiB, u_sort min: 3.250GiB, qs min: 0.813GiB. Bucket 5 uniform sort. Ram: 5.786GiB, u_sort min: 3.250GiB, qs min: 0.813GiB. Bucket 6 uniform sort. Ram: 5.786GiB, u_sort min: 3.250GiB, qs min: 0.813GiB.
经过观察,计算处理的七张表中,第四、第五张表是使用内存量最多的,要实现全部 uniform sorting 的内存最低门槛为 3.250GiB,这也正是-b 3390 要保障的效果。
如果提高内存分配,从日志来判断,内存的实际使用量会略微增长,而且日志总是显示 uniform sorting,即已经是最佳算法,但对时间缩短并无明显效果。
这意味着即使并行多达 8 个任务,32G 内存的机器也完全可以胜任。
在社区讨论中,k 值一直是个神秘的存在。按照官方文档说法,人们从来都不需要 k>32,除非为了炫耀,或者硬盘就剩那么一点空间你想填满它。但中文社区的讨论似乎并未关注过它,多数人认为越大的 k 会带来越大的中奖率,只是制作 plot 的时间增加太多,不划算。事实完全不是这样。
K 值的大小直接影响着 plot 文件的大小,但是不论 k 等于几,制作出来的 plot 文件都是一票。没错,就是一文件一票。其实,从抽奖的过程也可以判断出,数以 T 计的文件如果需要读取一遍内容才能确定中奖资格的话,10 分钟不可能够用。所以,抽奖的过程显然只是在比较文件哈希而已。
在主网上线之前,k 曾经可以使用更小的值,比如 k=25 时几分钟就可以制作好一个 plot 文件。这意味着拥有强力电脑的人可以轻松的甩开其他人,快速获得大量票数。这也是官方为什么在主网上线前几个月确定了最低允许 k=32。按照官方公布的计划,如果未来摩尔定律继续起作用,制作 plot 文件所需的时间将不断降低。预计在 10 年以后 k=32 将不再适用,届时官方将会取消 k=32 的抽奖资格,所有 k=32 的文件将作废。
这也提醒了准备长期持续投入的矿工,在未来某个时候,所有的算力都需要重新制作。而这个时候何时到来,取决于计算机硬件的发展速度。也许这将是推动摩尔定律的重要新因素。
Chia 的火热并不是一天造就的。事实上,Chia 项目从 2017 年就创立了,测试网于 2019 年上线,而主网则是刚刚于今年 3 月 19 日上线。作为历史悠久的明星项目,主网上线、即将登录交易所流通、Chia 实体公司计划短期内上市(特别是有 Coinbase 的珠玉在前)等一系列因素造成了该项目的爆火。爆火带来的显著影响就是硬盘设备的涨价和集体脱销,同时也给 Chia 项目带来了广泛的争议。
毫无疑问,Chia 所致力设计的绿色理念极大的降低了这一区块链项目的参与门槛。正因如此,我们前文所述的问题都是围绕并不十分复杂的通用硬件和一些软件参数设置。然而作为矿工,当下最大的困难是无法获得足够的低成本硬盘来构筑算力。我们从硬盘渠道商处获悉,从硬盘厂商到渠道商对此也深感震惊。当前硬盘市场存在着一定程度的囤积居奇。但硬盘厂商和总代一级并未对此感到担心。全球硬盘生产能力高达数千 EB(1EB=1000PB) , 远远超过当前用于 Chia 挖矿这一点算力。供货和价格情况将在未来一段时间内逐渐明朗。所以并不建议矿工购买高价硬盘,尤其应该小心避免以次充好、以二手充新的情况。
另一个潜在的问题是,虽然制作好的 plot 文件即是永久算力(目前对永久的预期应为十年左右),存储在便宜的机械硬盘即可,但机械硬盘也是有寿命的。如何应对天灾人祸造成硬盘灭失的情况,当下还未进入多数矿工的考虑范围,但随着时间推移,越来越多的矿工会遇到这一挑战。当下,应对这一挑战的方案似乎只能由不断更新存储设施来解决,而这在硬盘供应现状下却成为了不存在或者十分不经济的选项。
Chia 的发展速度早已超出许多人的预料,包括 Chia 团队。在白皮书发布时,Chia 团队预计主网上线时的算力将达到 40~60PB,然而实际上在 3 月 19 日上线的第二天,算力检测显示已经达到 120PB,并且至今一直保持着指数形式上涨,甚至超过了多数人生产 plot 文件的速度。这对矿工而言并不是一件好事。
截止文章发布之日,Chia 网络的总存储已经达到了 900PB。这意味着投入 1T 的算力平均每天仅能产出 0.06 个 Chia,并且算力每天都在大幅上涨。按目前的设备价格,自行搭建算力挖矿,在不考虑电费运维等支出的情况下,每 T 成本已达到 40-50 美元左右。尽管按目前的市场期货价格以及全网算力情况,回本周期非常的短。但全网算力正在急速攀升,30 天后形成的算力每 T 的平均产出可能只有现在的 1/5 甚至更少。如市场在几个月后走入下行周期,很可能新增算力的回本周期会拉长到一年甚至数年。
Chia 挖矿的门槛足够低,对于家用电脑用户来说,即使不进行任何额外投资,仅仅用现有的硬盘资源,制作几份文件,尝试一下参与网络共识,也是不错的体验。同时还可以获得抽奖机会,一年能中一次奖就是几百美元的收入,也相当不错。大量新用户因为 Chia 认识了数字货币,又在参与挖矿的同时能够对区块链技术有更直观的了解,他们中的一部分一定会选择进一步深入探索这个世界。这是我们认为 Chia 挖矿此次破圈给行业带来的最大贡献。
对于有志于参与 Chia 挖矿的专业人士,入场需要评估三个因素。1.XCH 的未来价格走势,2. 全网算力增长曲线, 3. 设备采购价格、周期及使用安排。建议把这三个因素的所有可能变量都考虑到,计算出风险上限,再合理安排资金入场。
最后需要提醒,当前在售的大部分矿机是即用作存储挖矿又用来 P 盘,但在 P 盘期结束后会出现大量资源闲置。如果不进行合理规划,最后的结果可能是买了包含大量内存 CPU 等资源的矿机,结果只是第一个月用来 P 盘,在其余的全部生命周期都在做一个几十美元树莓派都能胜任的工作。随着大家逐渐意识到 Chia 挖矿的特点,未来 P 盘工作会逐渐和挖矿工作分离,形成更加合理的产业协作。
原文标题:《Chia 挖矿技术分析及建议》
撰文:Henry ,Empower Labs 研究员