filecoin测试网的克隆(基于go-filecoin与otus)

这个是我在去年7月份弄的,当时是想着做矿机挖矿来自己挖,后来发现硬件配置要求太高,而且也没有什么订单,就暂时封存了,今天把之前的笔记拿出来给大家做参考。这里是基于go-filecoin和lotus分别进行编译测试的。

这个是我在去年7月份弄的,当时是想着做矿机卖的,后来因为没有接到单子就暂时封存了。已经过去一段时间了,现在翻出来给大家做一下参考吧。 首先说一下go-filecoin和lotus的区别。前者是完整的filecoin方案,但是因为实施起来比较麻烦,所以后来又出了一个lotus。lotus可以简单理解为filecoin的简化测试版。当然现在都过去半年多了,也许变化很大了。

go-filecoin测试网的克隆

首先说一下,因为大量的内容需要翻墙,所以编译尽量用港服。

一 环境编译

apt update 
apt install mesa-opencl-icd ocl-icd-opencl-dev gcc git bzr jq pkg-config curl 
apt upgrade
apt install software-properties-common
add-apt-repository ppa:longsleep/golang-backports
apt update
apt install golang-go gcc git bzr jq pkg-config mesa-opencl-icd ocl-icd-opencl-dev
mkdir -p /path/to/filecoin-project
git clone https://github.com/filecoin-project/go-filecoin.git /path/to/filecoin-project/go-filecoin
git checkout v0.6.0//(从0.6.1到0.6.4都测试过了,都在go-filecoin daemon报错)
git submodule update --init --recursive
make deps

ps1:到这里就是环节设置完毕

二 编译

make
go run ./build test//(期间会有fail出现,但没搞明白)
go run ./build best//(期间会有fail出现,但没搞明白)
go-filecoin init --genesisfile=https://ipfs.io/ipfs/QmXZQeezX1x8uRQX9EUaYxnyivUpTfJqQTvszk3c8SnFPN/testnet.car --network=testnet
go-filecoin daemon

ps2:获得 id 是QmdMXaWc5Ww2PWWHGQvwqSPmv2rSnEPzxYwjBjLBVVZGJg,不是地址切记。 到这里就是基本环境启动了,然后是搞连接。

三 连接

首先用ssh连接,

go-filecoin config bootstrap.addresses
go-filecoin swarm connect <any-filecoin-node-mulitaddr>

ps:这部分失败了。但很奇怪,不影响后面的获得币,余额也能看到。 然后在web窗口里面进入第二个root用户,输入: "t1e5xumuipwdputhrdm2sygngaynmhpnmhvt5mozq"

四 第一阶段的一个简单总结

流程摸清楚一些了,但问题一大堆。 我们是基于filecoin进行的,流程简单说就是先下载再编译。这里有点问题,但不太明显。 然后到了运行go-filecoin daemon,因为用的是0.6.0,也没什么问题。但到了通过地址下载区块链这里,就死活出不来了,总是error,我感觉是哪里的版本出问题了。 go-filecoin config bootstrap.addresses go-filecoin swarm connect <any-filecoin-node-mulitaddr> 再往下的获得币和区块浏览器显示又没什么问题。 go-filecoin address ls https://faucet.testnet.filecoin.io https://filscout.io/en 但到了本地检查钱包的时候,又有问题了,显示地址不存在。 go-filecoin wallet balance ${WALLET_ADDR} 按理说到这个地方就能正常运行,但就是不按理来,有什么办法 因此基于filecoin的直接运行结束。我们下一节对filecoin和lotu做对比,用lotu来解决。

lotu编译流程

一 编译

apt update
apt install mesa-opencl-icd ocl-icd-opencl-dev gcc git bzr jq pkg-config curl
apt upgrade
apt install software-properties-common
add-apt-repository ppa:longsleep/golang-backports
apt update
apt install golang-go gcc git bzr jq pkg-config mesa-opencl-icd ocl-icd-opencl-dev
git clone https://github.com/filecoin-project/lotus.git 
cd lotus/
make clean && make all 
make install
IPFS_GATEWAY=https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/   //(如果在国内就增加上面这句)

二 开始运行

lotus daemon (会出现信息,而且一直在走) 然后打开第二个root,输入 lotus net peers | wc -l (我这里显示是32,说明连接了32个peer)

三 打开第三个root

输入 lotus sync wait 会显示同步的状态,此步骤将花费几个小时到几天不等 观察区块浏览器: https://stats.testnet.filecoin.io/

三 启用putty

输入: lotus wallet new t1djagnv6wjmfowmf5damd3zoeeicg66ik4pir3ai https://faucet.testnet.filecoin.io/ 输入地址,获得币:(一次大概50个) https://filscout.io/en 输入查看一下,在网络里面是否到位 lotus wallet balance <YOUR_NEW_ADDRESS> (如果你的区块链在更新中,上面这个命令是看不到币的) lotus send <target> <amount> (转账,同样也是区块链在更新中,这个异常)

四 额外功能

rm -rf ~/.lotus ~/.lotusstorage 清除数据 ulimit -n 打开文件限制,必须大于10000(默认一般是6万,足够了,如果不够,修改:ulimit -n 10000) 五 下面是建立矿工部分 如果国内使用,需要添加这个 IPFS_GATEWAY="https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/" 创建一个bls地址(需要用putty,然后复制地址) lotus wallet new bls 复制出现的地址 https://faucet.testnet.filecoin.io/ 然后点击创建矿工 不要刷新页面。此操作可能需要一些时间。当您看到以下内容时,任务将完成: New storage miners address is: <YOUR_NEW_MINING_ADDRESS> 在CLI窗口中,使用以下命令初始化您的矿工: lotus-storage-miner init --actor=ACTOR_VALUE_RECEIVED --owner=OWNER_VALUE_RECEIVED 例lotus-storage-miner init --actor=t01424 --owner=t3spmep2xxsl33o4gxk7yjxcobyohzgj3vejzerug25iinbznpzob6a6kexcbeix73th6vjtzfq7boakfdtd6a Ps:这个命令,可能将需要等待一段时间才能完成此操作。

五 正式的开采

lotus-storage-miner run 获取矿工信息 lotus-storage-miner info # example: miner id t0111 密封随机数开始产生post lotus-storage-miner sectors pledge 密封随机数开始产生post (注意写入的$TMPDIR可能不是最大的分区,你可能需要指定,当然对于我来说,正式的运行区间必须指定,最起码的是不能小于512gb) 下面三行是获取算力,获取某个矿工的算力,获取某个矿工的sectors lotus state power # returns total power lotus state power <miner> lotus state sectors <miner> 一些参数的调整(不知道这些参数在哪里设置) FIL_PROOFS_MAXIMIZE_CACHING=1 环境变量 以花费一些内存的代价(1x扇区大小)使precommit1步骤更快。 FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1 环境变量 启用实验precommit2 GPU加速lotus-storage-minerlotus-seal-workerlotus-bench

一些关于正式矿机的建议

因为都过去半年了,估计变化会很大,所以这部分内容也是仅供参考。

Master Miner 节点:

使用一台带 GPU 的大容量机器作为 miner 主节点,这机器主要做的工作是 add pieces 和提交 PoSt proving(这里的重点是需要带gpu用于封装post,2T硬盘,8g内存即可)

Seal Worker 节点:

多核 CPU 配上高速企业硬盘,以便可以增加 sealing 速度, 如果 CPU 的能力不强,可以使用 GPU 代替,效果更好。(这里的重点是cpu要好,高速ssd,内存要大,cpu不行,gpu代替也可以) 协议实验室的官方团队在 Lotus 的官方文档上发布了测试的硬件基本配置,明确说明了矿机的最小 RAM 不低于 128GB。因为计算复制证明的时候需要 消耗大量的内存,大概在 sector size 的两到三倍。那么对应到 32GB 扇区,大概保守估计要 96GB RAM 用于复制证明。 再加上系统其他进程所需要的 RAM,所以实验室建议把 RAM 提升到 128GB 是合理的。

一些简单的结论:

Miner 节点 CPU 了不到 10%(高显卡加低cpu,在显卡的支持下,4核cpu足够),内存用了不到 5%(12.8g)。Miner 节点配置可以降低很多,个人觉得 RAM 32GB 已经足够了。 以目前机器的配置,我们可以在 Miner 节点上再多跑一个 Worker 进程,这样可以增加 Worker 数量。事实上我们已经这样测试过了, 这在 GammaOS 上实现非常容易,只需要点几下鼠标就可以了。Sealing的速度确实增快了,但是发现引发了一个意想不到的副作用:Miner 节点的爆块率降低 了,由于 Miner 大量资源被占用,在规定的时间内没能出块,导致区块被其他矿工抢走了。所以我们最终从这个节点卸载了 lotus-seal-worker 应用。 我们通过 GammaOS 的数据统计了自从矿工启动以来,lotus-seal-worker 进程的 RAM 实时占用情况,发现最高峰值为 30.4%, 那么实际 RAM 占用 = 256 x 30.4% ~= 78GB(大部分时候是64gb)。也就是刚好符合官方所说的 2-3 倍的扇区大小(sector size)。 Miner不能部署worker,否则会影响爆块速度。

影响出块的两个容易忽视的因素:

存储系统部署在挖矿网络,这直接影响了我们的挖矿效率。而且根据 Worker 机器的增多, 网络搭配有很大的调整和优化空间,网络优化得当能够带来 50% 以上的效率提升

总结

go-filecoin和lotus主要提供的是2k扇区的自引导测试,对于正式网采用的32GB的并没有提到。因为硬件要求配置高,我也没有接到订单,所以更深入的研究就没有进行。 filecoin在我研究的时候对应用开发者并不友好,应该还有很长的路要走。而且那个正式矿机的配置要求也有点太高,感觉开发团队被矿机厂家深度捆绑。希望filecoin在今年有更多的可以用于开发的机会。 下一篇我将介绍波卡和百度超级链。

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

2 条评论

请先 登录 后评论
问答区块链
问答区块链
致力于人工智能与区块链相结合下的智能设备自治