翻译:Filecoin挖矿机制解析
Filecoin自第二阶段测试网启动以来,较之前的版本有了不小的变动,而且仍有持续的改动,测试中的一些细节改动会被纳入到最终版本中,所以在主网上线前一些重要的网络参数可能会发生变化。所以建议矿工在挖矿开始前最好投入资金购买一些硬件进行测试、实验和基准测试。
目前Filecoin网络中,存在存储矿工和检索矿工两种角色,其他角色正在开发中。
存储市场
在Filecoin中,存储节点能够与用户签订存储协议,为客户提供存储空间,并按照约定的价格,用户为存储节点支付相应的FIL。
根据Filecoin的规则,提供存储空间的节点被称为存储矿工,他们通过出块来维持Filecoin链的正常运行,当某一个存储节点成功出一个块后,它可以获得最新铸造的FIL代币,同时也能通过完成区块里包含的交易获得相应的矿工费。
检索市场
节点也可以参与到Filecoin的检索市场中,与客户签订合同,通过为客户提供指定的文件获得FIL。一般检索节点需要高吞吐量和高带宽且位置良好等要求,他们能过促进文件的广泛和快速分发,尤其是一些要求较高的文件。
其他角色
其他角色正在开发中,如修复矿工节点,他们可以促进网络的恢复,但是该角色在目前的网络中暂未支持,但目前的Filecoin网络仍能正常运行。
存储矿工解析
存储矿工意味着在Filecoin网络中保存文件,存储矿工必须以加密的方式证明他们遵守了存储文件的承诺,在Filecoin网络中,这种证明通过复制证明(PoRep)和时空证明(PoSt)机制实现。将存储空间抵押给Filecoin需要FIL,以确保矿工履行合同义务。
存储数据
存储矿工将数据存储在固定的扇区中。这些数据通过客户通过交易渠道与存储矿工签订合同而来,不过矿工有权选择是否为客户提供存储服务。存储旷工也可以对任何交易都不感兴趣,用随意数据填充这些扇区,但为Filecoin网络预留了空间,在有需要时通过升级扇区为未来交易提供存储合约。
复制证明
一旦一个扇区被填充完毕,存储矿工将通过复制证明PoRep对该扇区进行封装,封装是一个计算密集型的过程,最终得到该数据唯一的一个表示(原始数据可以通过对封装后的表示解封重构)。数据被封装后,存储矿工生成一个证明P,然后运行零知识证明过程SNARK对P进行压缩,最后将压缩后的结果作为存储承诺的一个凭证提交到区块链上。通过以上保持数据存储的过程被称为质押存储。
时空证明
复制证明完成后,存储矿工要持续地证明他们质押存储的数据一直都在,这就需要通过时空证明来完成。在这个时空证明过程中,网络向存储矿工发出一个秘密挑战,这个挑战只有直接查询到一个对应的密封扇区才能成功。存储矿工必须在严格的时间限制内响应挑战。密封的计算难度保证了存储矿工必须随时提供密封扇区并保持其完整性。
在Filecoin中,PoSt表现为两个不同的挑战:WindowPoSt和WinningPoSt。
WindowPoSt
WindowPoSt是审查存储矿工所做承诺的一种机制。它将每个24小时划分为一系列窗口。相应地,每个存储矿工的质押扇区集被划分为子集,每个窗口有一个子集。在给定的窗口内,每个存储矿工必须为其各自子集中的每个扇区提交一个PoSt。这需要随时访问每个受挑战的扇区,并将导致SNARK压缩证明作为块中的消息发布到区块链。通过这种方式,在任何24小时内至少审查一次承诺存储的每个扇区,来保存一份永久的、可核实的、公开的记录,以证明每个存储矿工的持续承诺。
Filecoin网络期望存储的数据持续保持其可用性。一个扇区提交WindowPoSt失败,网络将会处罚其存储矿工。该扇区锚定的质押币被罚没,其对应网络的算力被减掉。在被视为完全放弃了他们的存储承诺之前,存储矿工将有一段有限的时间将故障扇区恢复。如果需要,存储矿工也将有能力先发制人地宣布故障,这将减少处罚,但仍必须在合理的时间范围内解决。
WinningPoSt
WinningPoSt是存储矿工为网络贡献而获取奖励的一种机制。在Filecoin网络中,时间被分离成一系列的周期epochs,链的高度与经过的时间段数相对应。在每一个周期的开始,都会选出一小部分的矿工来创建新的区块(Filecoin利用tipsets,允许在同一高度有多个区块)。每一个成功创建区块的矿工都会有FIL奖励,同时可以收取其他节点的小费(矿工手续费),将要处理的消息打包到区块中。
存储矿工成功当选出块节点的概率与其在全网的存力有关。与底层WindowPoSt过程类似,存储矿工的任务是在epoch结束之前提交指定扇区的压缩存储证明。未在窗口内完成WinningPoSt的存储矿工将失去出块权,但不会因未能完成此操作而受到处罚。
存力
在Filecoin的网络规则中,一个存储块出矿的可能性与其存力占网络的比例大致呈正比。而Filecoin为了鼓励存储节点存储“有用”的数据,存储矿工有机会竞争经核实客户提供的特殊交易。一般这类客户是经网络授权的,他们的数据被定义为有价值的数据,而存储他们的数据会根据获得的存力会通过乘数放大,该乘数被称为存力系数。
硬件参考
Filecoin网络的参与者如果想要参与到整个Filecoin网络中,需要满足参与该网络的硬件设备。
运行Lotus客户端,不挖矿
如果不想参与挖矿,但是想运行Lotus,目的是开发钱包或调用网络接口,系统配置只需要2-4核的CPU,8G RAM,有足够存储链上数据的存储空间即可。目前测试网链的数据增长速度是每周12G。官方正在优化这块,以减少链上的数据。
存储挖矿
值得注意的是,在当前状态下,Filecoin存储挖矿需要相当强大的硬件才能满足存储和证明的要求。这些需求在很大程度上是由PoRep和PoSt机制所施加的设计约束所驱动的,以及考虑到其可访问性、计算可行性和加密安全性所要求的。
Filecoin存储挖矿可不是工作量证明POW挖矿,数据封装是唯一获得算力的方式。在网络允许的时间范围内,快速和有效的硬件要计算各种必需的证明。协议实验室一直在研究降低硬件的要求,如软件优化证明机制、外包SNARK计算以避免对昂贵的gpu的要求。然而,与此同时,在对硬件进行大规模投资之前,潜在的存储矿工应仔细考虑并试验其系统的组成,以确保他们能够达到所需的性能。
服务器运行Lotus性能分析数据
最佳的系统组成将在很大程度上取决于存储矿工的运营模式,包括资本支出和运营成本。因此,协议实验室无法给出任何具体的建议。然而,我们已经发表了一些我们自己的设计,包括目前适合测试和小规模参与挖矿设备的概要。
我们希望存储矿工能够根据自己的需要调整配置,在testnet上使用其他配置进行挖矿是可能的,而且我们预计这些配置中的许多将超过我们自己构建的效率。我们鼓励实验,并要求感兴趣的社区成员在GitHub上分享他们自己的性能分析。
一般硬件问题
我们不能给出具体的硬件配置,但是可以提供一些指导。
CPU:
根据经验,高频率的多核CPU能够加速封装过程,从而尽快的将存力展示到网络中。协议实验室自己的测试表明,Modern AMD处理器具有SHA扩展性,与其他处理器相比具有相当大的优势。
GPU:
强大的gpu是必要的,以完成SNARK计算在所需的时间限制。Lotus目前的设计是为了支持NVIDIA制造的芯片。我们预计将来会有其他制造商的显卡支持。我们的性能分析数据可以深入了解芯片的性能。
RAM:
目前的Filecoin网络仅支持32G和64G扇区。要计算如此大的扇区需要相当大的内存,至少需要128G。
存储空间:
在选择适当的存储解决方案时,需要考虑很多因素,其中最重要的可能是挖矿模型。存储矿工目前需要保证1TB的原值存储(主网上线可能增加到100TIB),才能获得出块资格。在这一点上,还有很多因素需要值得考虑。
1. 首先,也是最重要的一点是,存储矿工应该注意到,如果数据丢失,可能会受到严厉的惩罚,即使是一个错位的比特位,也可能导致严重的惩罚。因此,存储矿工可能希望考虑到实现数据冗余的开销。
- 对于寻求参与检索市场的存储矿工来说,考虑加入额外的存储空间,为提供密封数据的“热”拷贝做准备是一种谨慎的做法。尽管解封扇区以恢复原始数据当然是可行的,但是硬件也需要消耗相应的计算(这是目前正在为Lotus开发的特性)。
2. 另一个需要考虑的因素是Filecoin网络对高可用性的要求。虽然理论上,存储矿工应该能够使用大多数企业硬盘、固态硬盘或其他合适的非冷存储硬件,但并非所有存储硬件都能在7*24小时运行中保持最佳性能。
3. 存储矿工目前也需要有足够的空间来存储链上数据。减少链上数据在磁盘上的存储是Lotus积极开发的一个方向。Filecoin实现可能还需要额外的磁盘存储,相当于保证存储的一小部分,用于记账。
4. 最后,协议实验室在测试中发现,在RAM量较低(128GiB)的系统中,使用NVMe存储作为交换空间可以作为补充。在某些操作中,存储矿工可能会遇到内存不足问题(尤其是密封,需要大量工作内存)。
网络:
如果使用分布式lotus seal worker(请参阅下面的进阶挖矿注意事项),建议使用高性能网络(建议使用10GbE+网卡和交换机)。使用网络连接存储时,也建议使用高性能网络。
进阶挖矿注意事项
如上所述,Filecoin存储挖矿主要依靠PoRep和PoSt机制。PoRep本身由几个阶段组成,而Lotus有助于将这些阶段委托给不同的服务器,通过seal worker实现最大效率。协议实验室开发了一个示例架构,旨在利用这些功能进行大体量挖矿。在这里,我们在设计类似的系统时,要考虑处理不同瓶颈的问题。
封装预提交1阶段preCommit phase 1:
在这个阶段,将进行PoRep SDR编码。这个阶段受CPU限制,是单线程的(根据设计,它不适合并行化)。这个阶段预计需要几个小时的时间,精确的时间取决于被密封的扇区的大小,当然,也取决于进行密封的机器的规格。上文提到,协议实验室(和其他机构)已经发现,带有SHA扩展的AMD处理器在很大程度上加速了这一过程。使用具有更高频率的cpu也可以提高性能。
封装预提交2阶段preCommit phase 2:
在这个阶段,利用Poseidon哈希算法生成Merkle树结构。该进程主要受GPU的限制,但是CPU也可以作为另一种选择,只不过处理过程会非常慢。当使用GPU时,此阶段预计需要45分钟到1小时。
封装提交1阶段commit phase 1:
这是一个中间阶段,为生成证明做准备工作。它受CPU限制,通常在几十秒内完成。
封装提交2阶段commit phase 2:
最后,这个密封阶段涉及到创建一个SNARK,利用它压缩生成一个证明凭证,然后广播到链上。这是一个GPU密集型过程,预计需要20-30分钟才能完成。
协议实验室发现在同一台机器上执行preCommit phase 2、commit phase 1和commit phase 2,单独利用一台高效的机器来执行preCommit phase 1是非常有效的。但是,在预提交阶段1和预提交阶段2之间存在大量文件传输,在网络访问速度较慢或使用硬盘而不是固态驱动器的机器上,这可能会超过在其他方面取得的性能提升。在这种情况下,执行所有阶段都出现在同一台机器上可能更有效。
PoSt主要受限于GPU,但是可以利用具有多核的CPU来加速进程。例如,WindowPoSt目前必须在30分钟的窗口内进行。24核CPU和8核CPU之间的区别可能是在一个合适的范围内清除窗口和只是在时间上勉强通过。WinningPoSt是一种不那么密集的计算,必须在Filecoin出块周期(目前是25秒)的小窗口内完成。
总结
Filecoin网络整体基于区块链技术搭建而成,从零开始完善一个成功的区块链项目是一件难度非常大的事情。在此感谢全球各地的矿工对Filecoin项目的新人和支持。目前主网上线计划已经进入倒计时阶段,希望大家对接下来Filecoin的计划继续保持关注和支持!