Filecoin存储挖矿指南
自我们发布对Filecoin测试网存储矿工的上一次指南后,发生了许多变化!当时,我们刚启动测试网的第一次迭代,我们的很多建议也反映出了新生网络的不确定性和试验性。我们非常感谢大家参与测试网,有了您的支持,我们可以快速完善协议和实施方案。我们当前处于测试网第二阶段,并且正在向主网启动稳步前进。
在本文中,我们带来了最新的Filecoin存储挖矿指南,并讨论了不断发展壮大的Filecoin社区最近宣布的一些奖励和机会。
请注意,Filecoin仍在不断地完善中。测试网提供了各种来自试验的建议和见解正积极地被采纳到最终的规范之中,但在主网启动之前,一些重要的网络参数有可能还会发生变化,因此我们强烈建议矿工在投入大量资金采购之前请先购买小规模的硬件进行测试、试验和基准测试。
参与到Filecoin网络
目前,节点在Filecoin网络中扮演两个重要角色:存储和检索。我们预计矿工将选择一个专门的角色。
存储市场
在Filecoin网络中,节点具有与用户制定合约的能力,可以在约定时间内存储用户数据以获取filecoin代币。
为Filecoin网络提供存储的节点即为 存储矿工。这些节点会定期获得使用自己创建的块来扩展Filecoin区块链的能力。当他们创建一个新区块时,存储矿工将获得新生成的区块奖励,并可以通过交易费,向获取区块内消息的其他节点征收费用。
检索市场
另外,节点也可参与检索合约,为用户提供指定的文档以获取filecoin代币。这激励了具有高吞吐量、高带宽连接、地理位置优越的节点参与网络,从而促进了文档的广泛且快速的传送,尤其是那些有着高需求的文档。
其他角色
我们目前正在开发许多其他的角色(例如促进网络自我修复的“修复”节点),但目前尚未在任何实施方案中实施或支持。但即使没有这些改进,网络也会正常运行。
何为存储挖矿
存储矿工的作用是代表Filecoin网络存储文档。存储矿工必须以加密方式证明他们兑现了存储文档的承诺——这是通过 复制证明(PoRep)和 时空证明(PoSt)机制实现的。质押存储到Filecoin网络上本身需要filecoin代币, 这些filecoin代币作为质押品以确保存储矿工履行了其合约义务。
数据存储
在Filecoin网络,数据被存储在固定大小的 扇区 中。通常,存储矿工把代表用户的数据存储在这些扇区中,用户通过 交易 与存储矿工达成在特定时间段内的存储合约。但存储矿工并不是强行接单。若存储矿工没有找到任何有吸引力的交易提案,则可以选择进行 容量承诺 ,用任意数据填充扇区。这使他们可以证明其正在代表网络保留存储空间。有需要时,可以作为容量承诺的扇区可“升级”到为未来交易提供存储合约服务。
复制证明
扇区被存满后,复制证明就会看到存储矿工对该扇区进行 封装 ——封装是一个计算量很大的过程,它会生成数据的唯一标识码(原始数据可通过 解封 来展示)。一旦数据被封装,存储矿工生成证明,然后对证明进行SNARK压缩,最后将压缩结果提交到链上,成为存储承诺完成的证明。通过此过程被网络保留的存储称为 承诺存储 。
时空证明
复制证明完成之后,存储矿工必须证明其依旧在存储承诺的数据。这部分将通过时空证明完成,时空证明是向存储矿工发出加密挑战的过程,只有直接通过封装扇区才能正确回答。存储矿工必须在严格的时间限制内应对这一挑战,封装的计算难度确保了存储矿工必须保持对封装扇区的随时访问和扇区的完整性。
Filecoin中时空证明的两大挑战是 WindowPoSt 和 WinningPoSt。
WindowPoSt
WindowPoSt 是一种可以用来审核存储矿工承诺完成情况的机制。它可以看到以24小时为周期每个周期分解成的一系列窗口。相应地,每个存储矿工要保证其承诺存储的扇区被划分成一个个子集,每个子集对应一个窗口。在给定的窗口内,每个存储矿工必须为其各个子集组成的扇区提交时空证明。这要求他们必须立即访问接受挑战的扇区并把SNARK压缩过的证明提交到链上。通过这种方式,每个承诺存储的扇区至少会每24小时被审核一次,并永久保留可验证的公共记录以证明每个存储矿工持续履行了承诺。
Filecoin网络希望存储的文档具有持续可用性。未能为某个扇区提交WindowPoSt将导致 错误 ,并且为该扇区提供存储的存储矿工将受到 处罚 ——也就是其质押品会失去一部分,并且减少其存储算力(请参阅下文的存储算力)。在被认为完全放弃存储承诺之前,存储矿工可以在有限时间内从故障中恢复。如果有需要,存储矿工也可以先发制人将“已宣布故障”提前发布,这样将减少处罚,但其必须在合理的时间内解决故障。
WinningPoSt
WinningPoSt 是用于奖励存储矿工所做贡献的机制。在Filecoin网络,时间被分解成一系列纪元(epoch)——区块高度对应着随着时间流逝经过的纪元数。每个纪元开始,都会 选出 少量存储矿工来挖新的区块(Filecoin使用tipsets,它允许在同一高度挖出多个区块)。每个成功创建区块的矿工将获得奖励,并有机会向获取区块内消息的其他节点征收费用。
存储矿工被选出的概率与其存储算力相对应。与WindowPoSt相似的是,存储矿工需要在纪元结束前提交存储扇区的压缩证明。未能在必要的窗口完成WinningPoSt的矿工将失去出块的机会,但也不会因此受到惩罚。
存储算力
一名Filecoin存储矿工的 算力 对应其被选为出块的可能性,与他们代表的网络封装存储量大致呈正比。为了通过简单的容量承诺进一步激励他们存储“有用”的数据,存储矿工有更多机会来竞争 已验证用户 的特殊交易。
此类用户在提供涉及具有存储意义的数据方面获得了认证,并且存储矿工为这些交易提供存储所获得的奖励将乘以一个乘数。考虑到此乘数,一个既定矿工的总算力将被称为 “质量调整后的算力” 。
Filecoin 实施方案
Filecoin分布式存储网络 是拥有多种实施方案的开放式规范。
在撰写本文之时,最成熟的实施方案(目前测试网使用的实施方案)是基于Go语言的Lotus。Lotus的用户端能够在Linux和macOS上运行,您可以通过其文档获得有关安装和详细的使用说明。
当前还有至少其他三个实施方案正在积极地开发当中。其中包括go-filecoin (另一个基于Go的实施方案)、forest (由ChainSafe开发的基于Rust的实施方案)和fuhon (由 Soramitsu开发的基于C++的实施方案)。
硬件考量
Filecoin网络参与者需要确保他们的系统有足够的承载来支持他们将要担任的角色。
运行Lotus而不参与挖矿的用户
如果您不想挖矿,但仍然想运行Lotus用户端以使用钱包或网络连接,拥有2-4核CPU、8GiB内存和足够存储空间的系统应该足够用了(当前测试网的链每周增长约12GiB,我们正在进行减少存储要求的改进)。
存储挖矿
需要指出的是,当前状态下Filecoin存储挖矿需要功能强大的硬件来满足存储和证明要求。这些要求主要是由复制证明和时空证明机制引起的设计约束和需要在可访问性、计算可行性和加密安全性之间维持的平衡。
Filecoin存储挖矿 不是 工作量证明——封装存储是在网络上获得算力的唯一方式,但需要快速高效的硬件在有限时间内计算必要的证明。协议实验室目前正在研究放宽这些要求的方法(比如通过在证明机制本身引入有效性或者通过外部SNARK计算来减少对昂贵GPU的需求)。但同时,在对硬件进行大量投资之前,矿工应先仔细考虑并试验其他系统配置以确保硬件能具有所需的性能。
矿机示例与基准数据
最理想的系统配置将在很大程度上取决于存储矿工的运营模式,包括资本支出和运营成本;因此,协议实验室无法提供任何具体的配置建议。但我们已发布了一些自己测试时的配置,包括目前适合测试和小规模挖矿的机器配置概述。
我们希望存储矿工能够根据自己的需求来调整配置;可以使用其他替代配置在测试网挖矿,并且我们希望这些配置会比我们自己的配置更高效。我们鼓励大家进行试验,并希望对此感兴趣的社区成员能够在GitHub上分享自己的基准测试评分。
常规硬件考量
我们无法提供针对性的具体建议,但可以提供一些常规性指导。
CPU。根据经验,主频较高的多核CPU将提高封装速度,使存储矿工可以将存储提交到网络上。协议实验室自己的测试表明具有SHA拓展的modern AMD处理器与其他处理器相比有很大的优势。
GPU。必须有强大的GPU才能在所需时间限制内完成SNARK计算。Lotus当前的设计支持NVIDIA芯片。我们预计未来还将支持其他厂商的显卡。我们的基准中提供了我们试验成功的配置。
RAM。当前Filecoin网络仅支持封装32GiB和64GiB扇区。在这些较大的扇区上执行计算需要相应更多的内存。建议挖矿系统至少配置128GiB。
存储。选择合适的存储解决方案设计很多需要考虑的因素,挖矿运营的收益模型可能是最重要的因素。存储矿工目前需要保持原始存储量为1TiB(或者质量调整后的同等数量;对于主网来说将增加到100 TiB)以便出块,但矿工可能发现更多需要考虑的因素。
- 首先,存储矿工应该牢记丢失数据会受到惩罚,即使找回也可能会受到惩罚。因此,希望存储矿工提前考虑数据备份。
- 对于想参与检索市场的矿工来说,考虑添加额外存储以准备提供封装数据的“热”副本也是明智的。尽管可以解封扇区来恢复原始数据,但支持该使用场景的Filecoin实施方案将减轻这种计算负载(这是Lotus当前正在开发的功能)。
- 另一个要考虑的因素是Filecoin网络对高可用性的期望。从理论上讲,存储矿工可以参与大多数混合硬盘、固态硬盘或者其他合适的非冷存储解决方案,但并不是所有的存储解决方案都可以24/7全天候运行并且达到最佳性能。
- 存储矿工目前也需要足够的空间也容载区块链本身;减少磁盘上区块链的占用空间是Lotus积极开发的一项功能。Filecoin的实施方案还需要额外的磁盘存储,差不多是用来记账的小部分承诺存储。
- 最后,协议实验室在测试中发现将NVMe存储用作交换空间可作为较小内存(128GiB)的系统补充;否则,存储矿工在某些操作期间可能会遇到内存不足的问题(尤其是封装过程需要大量内存)。
网络。如果您使用分布式Lotus封装(请参考下文的高级挖矿配置),则建议使用高性能网络(建议使用10GbE+网卡和交换机)。使用网络附加存储时也建议使用高性能网络。
专业挖矿考量
如前面所讲,Filecoin存储挖矿主要与复制证明和时空证明机制的考量有关。复制证明本身由多个阶段组成,并且Filecoin的Lotus实施方案通过使用封装者来分配这些阶段给不同的矿机以实现最高效率。协议实验室开发了一个架构示例,旨在利用这些功能进行大型挖矿。在这里我们分步说明设计类似系统时要考虑的不同难点。
封装预交付第一阶段。在此阶段,将进行复制证明SDR编码。此阶段是CPU密集型且是单线程的(由于设计它并不适合并行)。此阶段预计需要几个小时的时间,确切时间取决于要封装的扇区大小,当然还取决于进行封装的矿机规格。如前所述,协议实验室(和其他人)已发现使用SHA扩展的AMD处理器可以在很大程度上提高封装速度,另外,主频较高的CPU也会提高性能。
封装预交付第二阶段。在此阶段,将使用波塞冬哈希算法来生成Merkle树。此过程是GPU密集型,也可以用CPU来代替,但是会慢很多。使用GPU时,此阶段预计需要45分钟至1个小时。
封装交付第一阶段。这是执行生成证明所必需准备工作的中间阶段。它是CPU密集型且通常在10秒内完成。
封装交付第二阶段。最后,该封装阶段会设计创建SNARK,该SNARK用于把证明提交到链上之前来压缩证明。这是GPU密集型过程,预计需要20到30分钟才能完成。
协议实验室发现将封装预交付第二阶段、封装交付的第一和第二阶段并置在同一台计算机上非常有效,将高密度计算机给封装预交付第一阶段。但是,在预交付第一和第二阶段之间存在大量的文件传输,在网络访问速度较慢或使用硬盘而不是固态硬盘时,这可能在其他方面获得性能提升。在这种情况下,在同一台机器上进行所有阶段可能会更有效率。
时空证明主要是GPU密集型的,但可以利用多核CPU来加速。例如,WindowPoSt当前必需在30分钟的窗口内进行;24核CPU和8核CPU之间的不同可能是在宽裕的时间内还是紧凑的时间内解决窗口的区别。WinningPoSt是一种强度较低的计算,必须在一个Filecoin纪元(目前是25秒)的窗口内完成。
加入测试网第二阶段
测试网 是Filecoin网络正式启动前的初步阶段——我们目前正处于测试网第二阶段,预计会持续运行到2020年第三季度 主网启动 。
在测试网期间,存储矿工可以从我们的水龙头中获得filecoin代币作为承诺存储的质押品。
请注意,测试网的filecoin代币没有任何价值——官方的filecoin代币只有在主网启动后可以使用。
加速生态发展
随着主网启动,有越来越多的机会可供社区成员选择来参与Filecoin。
太空竞赛
为了准备主网,协议实验室最近宣布了一项奖励计划——太空竞赛,来对测试网进行压力测试。参与者将有机会通过尽可能多的存储来竞相获取主网的filecoin代币。
HackFS
HackFS是一场为期30天的线上黑客松,旨在建立分布式网络的基础。开发者将创建app、游戏、开发者工具、DeFi集成以及利用分布式存储的其他特点来进行创建。HackFS由ETHGlobal和Protocol Labs共同举办,并设置了各种内容:研讨会、导师指导、精彩的演讲、AMA和各种奖项!
Filecoin Discover
Filecoin Discover是近期宣布的计划,旨在为Filecoin带来人类社会最有价值的文化和科学数据。购买Discover的个人将获得为期1年的质量调整后的存储交易,Discover作为已验证用户存在。
Filecoin开发者资助
我们将通过Filecoin开发者资助的方式资助贡献者来继续促进Filecoin生态的发展。第四批优先考虑的申请截止日期是7月1日,但我们在数量允许的情况下将继续评估在截止日期后提交的提案申请。第五批申请的截止日期是10月1日。
总结
区块链是拥有许多零件的复杂软件,从头开始创建一条成功的链是一项艰巨的任务。没有世界各地社区成员的支持,Filecoin无法达到现在的成绩。我们十分感谢每个帮助Filecoin的人,再次感谢您在我们主网启动前的最后时期给予我们的耐心、参与与支持。我们非常欢迎新的社区成员(无论是矿工、开发者还用户)加入,并希望本文可以作为大家加入我们的起点,让我们携手迈向奇妙的旅程!