本文翻译自Filecoin官方博客2020年7月7日博客文章:A Guide to Filecoin Storage Mining
译者:于鸿儒(Herald Yu)
本文非官方翻译,内容仅供参考。
最新修订日期:2020年07月11日

上一篇测试网挖矿指南文章发布以来,相关内容已经发生了较大的变化!那时我们刚刚启动测试网的第一个版本,当时的内容建议也反应了这个新生网络的不确定性和实验性。我们非常感谢所有参与测试的人,也希望大家继续参与相关的测试。你们的支持让协议和实现得以快速成熟。当前,我们正处于测试网的第二个阶段,同时也在稳步推进主网上线的进程。

在这篇文章中,我们提供更新的 Filecoin 存储挖矿指南,与此同时,还会讨论一些最近公布的针对 Filecoin 社区成员的激励措施和机会。

请注意,Filecoin 始终在趋于完善的过程中。来自测试网的一些新见解正在不断的纳入规范当中。因此,在主网上线之前,至关重要的网络参数可能随时发生变化。我们强烈建议各位矿工,在大规模投入资金采购设备之前,尽量先小规模的购买硬件进行测试、实验和性能测试。

加入 Filecoin 网络

目前,Filecoin 网络节点主要有两种角色:存储和检索。我们预期矿工会择起善者而从之。

存储市场

在 Filecoin 网络中,节点可以与客户订立合约,矿工在约定的时间周期内为客户提供数据存储空间,客户向矿工支付一定的 FIL 文件币作为报酬。

为 Filecoin 网络提供存储空间的节点被称为“存储矿工”。这些节点会被定期授予权限,用它们自己创建的区块去扩展 Filecoin 的区块链。当它们创建了新的区块,矿工会得到新铸造的 FIL 文件币作为奖励,与此同时,该矿工还能收到试图在该区块中包含消息的其他节点支付的交易佣金。

检索市场

节点也可以参与数据检索/取回合约,通过为客户提供特定的文件来收取 FIL 文件币。这种方式激励那些拥有高数据吞吐量、高网络带宽的节点参与到网络中,促进文件广泛分布和快速分发,特别是那些要求很高的文件。

其他角色

还有其他几个角色正在开发,例如“修复”节点会实现网络的自我修复,目前这些角色还没有实现。不过,即使没有这些以提升为目的的节点也不会影响网络的功能完整。

存储矿工

存储矿工负责存储 Filecoin 网络上的文件。存储矿工必须使用密码(cryptographically)证明他们履行了存储文件的承诺,这种证明主要通过 Proof-of-Replication (PoRep) 和 Proof-of-Spacetime (PoSt) 两种技术来实现。向 Filecoin 网络中承诺提供存储需要抵押 FIL 文件币;被抵押的 FIL 文件币将被用来保证存储矿工履行合同责任。

存储数据

在 Filecoin 网络中,数据被存储在固定大小的扇区中。通常,存储矿工与客户约定好存储时长,然后存储矿工将客户的数据存储在这些扇区中。当然,存储矿工并不是必须去接受客户的订单;如果矿工认为当前的交易都没有吸引力,则可以选择向扇区中填充任意数据,从而只向网络做出容量承诺。这样可以证明它们向 Filecoin 网络提供了存储空间。在需要的时候,它们可以通过“升级”这些扇区去存储客户的实际数据。

复制证明(Proof-of-Replication)

每当一个扇区完成了数据填充,复制证明(PoRep)会认为存储矿工封装了这个扇区。封装是一个计算敏感的过程,他会产生一个针对数据的唯一表示(可以通过启封操作,复原这些数据)。数据一旦被封装,存储矿工会:生成一个证明;并运行一个 SNARK 去压缩这个证明;最后,将压缩结果提交到区块链,作为存储承诺的证明。通过这个过程为 Filecoin 保留存储空间被称为抵押存储

时空证明(Proof-of-Spacetime)

在复制证明(PoRep)完成以后,存储矿工必须持续去证明它们始终存储着他们承诺存储的数据。这项工作通过时空证明(PoSt)来实现,在这个过程中,存储矿工会发出一个密码(cryptographic)挑战,只有直接封装该扇区的节点才能正确的应答。存储矿工必须在有限的时间内对此进行响应;封装的困难度确保了存储矿工必须能够实时访问和校验封装的扇区。

在 Filecoin 网络中,复制证明(PoRep)有两种截然不同的挑战类型:窗口时空证明(WindowPoSt)获胜时空证明(WinningPoSt)

窗口时空证明(WindowPoSt)

窗口时空证明(WindowPoSt)是一种审计存储矿工所做所做出承诺的机制。它会把每24小时视为一个周期,并将每个周期划分为一系列窗口。相应的,存储矿工所抵押的扇区也被划分成子集,每个子集对应一个窗口。在一个窗口中,存储矿工必须为子集中的每一个扇区提交一个时空证明(PoSt)。这就要求可以实时访问被挑战的扇区,从而让经过 SNARK 压缩的证明可以作为消息被发布到区块链中。在这种方式下,抵押存储中的每一个扇区每24小时都至少会被审计一次,保留永久的、可验证的、公开的记录,从而证明每个存储矿工的承诺。

Filecoin 网络期望存储的文件持续可用。窗口时空证明(WindowPoSt)提交失败就会导致一个扇区故障,存储矿工供应的扇区会被削减。这时,矿工的一部分抵押品将被扣罚,他们的存储算力也会随之缩减。在被认为完全放弃他们的存储承诺之前,存储矿工可以在有限的时间周期内从故障中恢复。根据需要,存储矿工也可以提前发出故障声明,这可以减轻处罚,但必须在特定的时间范围内解决故障才行。

获胜时空证明(WinningPoSt)

获胜时空证明(WinningPoSt)是一种根据存储矿工的贡献获得奖励的机制。在 Filecoin 网络中,时间被分离成一系列时间阶段,区块链的高度与已经历的时间阶段数量相对应。在一个阶段开始时,少量的几个矿工被推选去挖掘新的区块(Filcoin 采用了 tipset,允许在同一个的高度上挖掘多个块)。如果被推选的矿工成功创建了一个区块就会被授予 Filecoin 文件币奖励,同时还有机会向那些要在该区块中包含信息的节点收取交易费。

一个存储矿工是否能够被推选,取决于它的存储算力。在一个与窗口时空证明(WindowPoSt)类似的过程中,在一个阶段结束之前,存储矿工被指派任务去提交一个针对特定扇区的压缩证明。在规定时间内,如果存储矿工没有完成获胜时空证明(WinningPoSt),它就会失去挖掘区块的机会,但是它不会因为这个失败而受到惩罚。

存储算力

一个存储矿工的算力与它是否会被推选去挖掘新区块有关,算力取决于存储矿工已经封装的扇区数量。为了进一步鼓励在简单的能力提交中存储有用的数据,存储矿工有额外的机会去竞争由经过认证的客户提供的交易。这些客户在提供有意义的数据方面得到了认证,存储矿工从这类交易中获得的算力是通过乘数增加的。一个给定存储矿工拥有的总算力,经过这个乘数计算以后的值,被称为质量调整算力

Filecoin 实现

Filecoin 分布式存储网络是一种具有多种实现的开放规范。

在本文写作之时,最成熟也首推应该被用作访问测试网络的是基于 GO 开发的 Lotus。Lotus 能够运行在 Linux 和 macOS 系统中;有关于安装和使用 Lotus 的详尽说明可以查看文档

目前至少有三种正在开发的技术实现。包括 go-filecoin(另一种基于 GO 的实现)、forest(一种Rust实现由ChainSafe开发)以及 fuhon(一种 C++ 实现由 Soramitsu 开发)。

硬件相关

参与 Filecoin 网络需要确保系统配置足够适应相应的角色。

仅运行 Lotus 客户端

如果你不想挖矿,但想运行 Lotus 客户端保留一个钱包或网络接口。一个 2~4 核 CPU,8GB 内存以及足够用于 Filecoin 区块链存储的空间就足够了(当前测试网络的链增长速度大概在12GB/周,针对降低链存储空间的优化技术还在持续开发)。

存储挖矿

在当前状态下,值得注意的是,Filecoin 存储挖矿需要相当强大的硬件去满足存储和验证的需求。这种需求主要是由 PoRep 和 PoSt 机制施加的设计约束以及可访问性,计算可行性和密码安全性之间的平衡所驱动的。

Filecoin 存储挖矿并不是工作量证明式挖矿,封装存储是获得网络算力的唯一途径。但在可接受的时间范围内完成必要的证明计算,需要更快和更高效的硬件。Protocol Labs 正在研究放宽这些限制的方法(例如,通过提升证明机制本身的效率,或是通过外包 SNARK 压缩计算来避免昂贵的 GPU 需求)。但是,与此同时,在对硬件进行大量投资之前,潜在的存储矿工应仔细考虑并试验其系统组成,以确保他们具有所需的性能。

矿机示例及基准测试

最优化的系统组成取决于存储矿工的操作模式,包括资本投入和运营成本。因此,Protocol Labs 无法给出任何推荐。但是,我们已经公布了一些我们自己的设计,包括目前适合测试和小规模采矿的机器配置。

我们希望存储矿工根据自己的需求去定制配置;这些替代配置是可以在测试网挖矿的,我们期望更多的配置效能超过我们的配置。我们鼓励实验,而且会在 Github 上公布社区成员分享的性能分数。

常规硬件

虽然我们无法提供确切的推荐,但我们可以提供一些常规的指南。

CPU 一般而言,频率较高的多核处理器会加快封装过程,让存储矿工更快的将存储发布到网络上。Protocol Labs 的测试表明,具有 SHA 扩展的 AMD 处理器能够提供比其他处理器更大的优势。

GPU 强大的 GPU 可以在要求的时间限制下完成 SNARK 压缩计算。Louts 目前设计支持 NVIDIA 芯片的显卡;未来也会支持其他品牌的显卡。可以在 基准测试 了解有关我们已经取得成功的详情。

内存 当前 Filecoin 网络仅支持封装 32GB 和 64GB 的扇区。在这两种大小的扇区执行必要的计算需要搭配更多的内存;建议挖矿系统至少配备 128GB 内存。

存储 在选择适当的存储解决方案时需要考虑许多因素,也许最重要的是挖矿作业假定的具体收入模型。存储矿工当前需要抵押 1TB 原生存储(或等量的质量调整算力;这个值在主网可能会提升到 100TB)才能开始挖矿,但是除了这一要求之外,还有很多其他的因素需要考虑。

  • 首先,也是最重要的,存储矿工应该注意数据丢失会带来严重的惩罚;甚至一个比特位的翻转也会导致严重的惩罚。因此,存储矿工可能希望考虑投入资金去实现数据冗余。
  • 对于试图参与检索市场的存储矿工来说,需要谨慎考虑是否要为密封数据提供热备份而增加存储空间。尽管可以通过解封扇区实现元数据恢复,支持此用例的 Filecoin 实现将消除这种计算负担(该功能目前正在为 Lotus 开发)
  • 另一个需要考虑的问题是 Filecoin 网络对高可用性的期望。虽然理论上来讲,存储矿工可以使用最常用的硬盘、SSD或其他非冷备份的存储方案,但并不是所有的方案都适合7x24工作。
  • 存储矿工目前也需要足够的空间来存储区块链本身。减少磁盘上区块链的占用空间是 Lotus 正在开发的一个特性。Filecoin 实现也可能需要额外的磁盘存储,相当于承诺存储的一小部分,用于记帐。
  • 最后,Protocol Labs 在测试中发现,在内存较低(128GiB)的系统中,使用 NVMe 存储作为交换空间可以作为内存的补充。否则,存储矿工在某些操作时可能会遇到内存不足的问题(尤其是密封需要大量内存)。

网络 如果使用分布式的 Lotus seal workers,建议使用高性能的网络(推荐使用 10GB+ 的网卡和交换机)。如果使用 NAS 作为存储后端,也建议使用高性能的网络。

挖矿进阶

综上所述,Filecoin 存储挖矿主要由 PoRep 和 PoSt 这两种机制决定。PoRep 本身包含了几个阶段,而且 Filecoin 的 Lotus 实现便于将这些阶段委托给不同的机器,从而使用 seal worker 获得最大效率。Protocol Labs 开发了一个示例架构,旨在利用这些功能进行大规模挖矿。在此,我们打破设计类似系统时需要考虑的不同瓶颈。

封装预提交阶段 1 在这个阶段,进行 PoRep SDR 编码。这个阶段是 CPU 绑定的,单线程的(根据设计,它不适合并行)。该阶段预计需要几个小时的时间,确切的时间取决于要密封扇区的大小,当然还取决于机器的配置。如前所述,协议实验室已经发现带有 SHA 扩展的 AMD 处理器能在一定程度上加速这一进程。使用具有更高频率的 CPU 也将提这个阶段的效能。

封装预提交阶段 2 在这个阶段,通过 Poseidon 哈希算法执行生成默克尔树。这个过程主要是 GPU 绑定的。CPU 也可以用于该过程,但处理速度会更慢。在使用 GPU 时,该过程大概需要 45 分钟到一个小时的时间。

封装提交阶段1 这是一个中间阶段,执行生成证明所需的准备工作。它是 CPU 绑定的,通常在几十秒内完成。

封装提交阶段2 最后,这个密封阶段涉及到创建 SNARK,它用于压缩必要的证明,然后广播给区块链。这是一个 GPU 密集的过程,预计需要20-30分钟才能完成。

Protocol Labs 发现高效的做法是把预提交阶段2封装提交阶段1封装提交阶段2放在同一台设备上执行,把预提交阶段1放在单独的高密集计算设备上运行。当然,由于预提交阶段1预提交阶段2涉及大文件传输,如果没有高速网络或没有使用固态硬盘等高速存储设备,就会失去在不同设备上执行任务获得的性能。在这种情况下,就应该把所有任务都放在同一台设备上执行才会更高效。

PoSt 以 GPU 绑定为主,但也能够通过多核CPU来获得加速处理的提升。WindowPoSt,举例来说,对于一个必须在 30 分钟内完成的窗口期。24核CPU与8核CPU的区别只是在于,一个可以更轻松的完成,而另一个在时间上勉强过关。 WinningPoSt 是一种低密集计算,它必须在更小的 Filecoin 时间周期内完成(通常是25秒)。

加入第二阶段测试网络

我们的测试网络是Filecoin 主网正式启动的初步阶段。我们当前处于测试网的第二阶段,预计将运行到2020 年第三季度主网发布。

在测试网阶段,存储矿工可以从水龙头获取 Filecoin 文件币,作为承诺存储的必须抵押品。

请注意测试网文件币没有任何价值,官方文件币只在主网启动后才可用。

总结

区块链是一种复杂的软件,有许多可移动的区块,从零开始构建一个成功的区块链是一项艰巨的任务。如果没有来自世界各地社区成员的支持,Filecoin不可能有今天的成就,我们对帮助Filecoin走到这一步的每一个人都深表感谢。再次感谢您在主网上线之前进入最后阶段时所给予的持续支持、参与和耐心。 我们非常高兴地欢迎新的社区成员(矿工,开发人员和用户)加入,并希望本指南可以作为您加入我们的起点!