CoinSummer 实验室 Filecoin 资源分享。
-
主网相关
-
实时币价查看网站
-
Lotus官方文档
-
代码下载地址
-
浏览器
- 官方浏览器 stats - 官方
- Filscout - 星际联盟团队开发
- 官方 Filscan
- 1475ipfs - 1475 团队开发
- FilFox - 6Block 团队
- Filplorer - 未知
-
水龙头地址
-
Benchmark 数据
-
Proof证明文件国内下载
- JDCloud(v25)参数下载 -
env IPFS_GATEWAY=https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/
- 国内专用v26参数下载 - 群友 Daniels 提供,白天效果不错,晚上较慢
- 最新版Proofs发布地址 - 最新发布 Proof 参数的地方【官方】
- JDCloud(v25)参数下载 -
-
rust 和 rustup 的安装环境配置(Cargo)
-
使用 GPU 计算 Precommit2
-
Filecoin Discover
-
Filecoin 经济解读
- Branch: master
- tag: 最新:2020/09/26 - 3:20 PM 【v0.8.0】
- 版本更新要求: 强制更新
- 链同步数快照:【Spacerace_pruned_stateroots_snapshot_latest.car】,参考
- 填表取币:【Miner Reimbursement Form】
- 博客:
-
Branch: master
-
tag: 最新:2020/08/29 - 10:05 AM 【v0.5.6】, v0.5.5 夭折了
-
矿工联通性检查: https://spacerace.filecoin.io/check
-
Slack 宣布地址: https://filecoinproject.slack.com/archives/C0179RNEMU4/p1598299269304500
-
浏览器:: 【官方 Stats】, 【Filscan】, 【Filfox】, 【Filscout】, 【Filblock】, 【IPFS.GUIDE】
(1). 2020/08/21: 【宋江之 Filecoin Discover 硬盘拷问】
(2). 2020/08/21: 【宋江之 硬盘与数据探讨】
(3). 2020/08/22: 【宋江之 Filecoin 灵魂拷问】
(4). 2020/08/25: 【宋江之 Filecoin 网络容易受攻击】
使用 JDCloud 下载 32GB 的证明参数:
# v28 版本的参数
export IPFS_GATEWAY=https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/
./lotus fetch-params 32GiB
如果水龙头无法创建矿工,可以取一些 FIL 币,那可以自己在本地创建矿工:
# (1) 生成钱包地址【已有的忽略】
./lotus wallet new bls
# (2) 去水龙头取一次 FIL 币【一次可以取得 100 FIL】
# (3) 本地创建矿工【请把 t3 开头的地址替换成你自己的钱包地址】
./lotus-miner init --owner t3u3fa4z6sxprcm47ufzfiayyg6jnpsulis2xaua5fpyifmuzap2kavw7pefvgu5j3jeb4mtfaqvppzcqwl6gb --sector-size 32GiB
注: 创建矿工一般不支持指定 actor 地址,既: t01000, t01001,t1002 等,也就是说,init 命令中的 --actor t01xxx
是不可用的。
# 查看本节点所监听的地址:
lotus net listen
# 查看连接的节点列表:
lotus net peers
lotus net connect /ip4/47.240.110.221/tcp/44845/p2p/12D3KooWRgxLL84TSkYSjhvhCy5ZNSuJZZzHWp2FXDY7ufqGBmUW
当启动 daemon 后无法正常同步链上的数据,可以试试在启动 daemon 的时候禁用自动连接 peers (即:加上 --bootstrap=false
参数),然后手动连接到一个正常节点,例如:
lotus daemon --bootstrap=false
lotus net connect /ip4/47.240.110.221/tcp/44845/p2p/12D3KooWRgxLL84TSkYSjhvhCy5ZNSuJZZzHWp2FXDY7ufqGBmUW
上述的节点是示例节点,当您在使用该命令的时候,您需要自己去找一个可以使用的节点。
# 设置高度到9700
lotus chain sethead --epoch=9700
节点同步出错时,可下载 CoinSummer实验室 提供的 国内节点备份,将下载后的文件解压得到 datastore
目录(包括目录内的所有内容),然后关闭 daemon 进程,关闭后删除你本机 ~/.lotus
目录下的 datastore
目录,再把解压出来的 datastore
目录复制到你本机的 ~/.lotus
目录下,复制完成之后启动 daemon,此时应该可以正常同步了,如果不行,可以试试:执行上面手动设置链高度的命令(需要 daemon 启动的情况下),即可从指定高度进行同步。
# export IPFS_GATEWAY="https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/"
./lotus fetch-params --proving-params 2KiB # 例如下载 2KiB 扇区对应的 Proof 参数
./lotus fetch-params --proving-params 16MiB # 下载 16MiB 扇区对应的 Proof 参数
./lotus fetch-params --proving-params 32GiB # 下载 32GiB 扇区对应的 Proof 参数
# v27 版本参数【目前在 next 分支: 2020/06/15】
git fetch
git checkout origin/next
export IPFS_GATEWAY="https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/"
./lotus fetch-params 32GiB
源码编译底层 rust 库的命令:
FFI_BUILD_FROM_SOURCE=1 make clean all lotus-bench
对于 Intel 的机器,可能由于兼容性原因(比如,执行过程中出现非法指令: illegal instruction
),需要添加相应的参数:
FFI_BUILD_FROM_SOURCE=1 CGO_CFLAGS="-O -D__BLST_PORTABLE__" make clean all lotus-bench
# 启用 GPU 相关环境变量【Precommit2 的时候可以使用 GPU 计算】
env RUSTFLAGS="-C target-cpu=native -g" FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1 FIL_PROOFS_USE_GPU_TREE_BUILDER=1 FFI_BUILD_FROM_SOURCE=1 make clean all bench
export FIL_PROOFS_MAXIMIZE_CACHING=1
该参数仅针对Testnet3的 32GB 扇区有效。
export RUST_LOG=Debug
运行 miner 之前加入该参数可以在 miner 的日志中查看更详细的输出信息(底层 rust 代码的输出信息),Log 登记从低到高分别有: Trace、Debug、Info、Warn、Error,Trace 输出的信息最详细,Error 输出的信息最少,仅输入错误信息。
export FIL_PROOFS_PARAMETER_CACHE=/path/to/proof_params/v26/
# 导出同步数据(去除无用的消息,保证导出的 car 文件很小)
./lotus chain export --recent-stateroots=900 --skip-old-msgs snapshot.car
# 这样导出的话,导出的 car 文件会很大(文件中保存了历史消息)
# ./lotus chain export snapshot.car
# 导入同步数据(在此之前保证 .lotus 目录中的内容是空的)
./lotus daemon --import-snapshot snapshot.car
【官方 5GB 左右的快照】,先手动下载好这个 car
文件,然后在一个干净的 .lotus
目录中导入即可,记得在做任何操作之前先备份数据(至少需要备份好钱包私钥:参考 【16.2】 小节)。
参考:【快速同步数据:Slack】, 【官方文档:Chain sync】,【官方文档:create-a-snapshot】
# 列举所有扇区信息:
lotus-miner sectors list
# 查看某个扇区的历史状态
lotus-miner sectors status --log <SectorID>
lotus-miner sectors update-state --really-do-it <SectorID> <NewSectorStatus>
# 例如:手动修改扇区 1 的状态为 FaultedFinal 状态
lotus-miner sectors update-state --really-do-it 1 FaultedFinal
export LOTUS_STORAGE_PATH="/path/to/.lotusminer"
- 默认存储路径是
~/.lotusminer
,可通过指定LOTUS_STORAGE_PATH
环境变量来更改; - 每个存储路径下都会有
sectorstore.json
配置文件,该文件可以配置该存储路径的用途,比如,是否可以用来存储密封过程中生成的临时文件"CanSeal": true
, 是否可以用来存储密封好的数据"CanStore": true
,以及该路径的权重"Weight": 10
和一个唯一标识符:ID
;
{
"ID": "e59facdc-6a82-418f-a25e-4cbd9165b5de",
"Weight": 10,
"CanSeal": true,
"CanStore": true
}
# 设置数据存储路径,该路径用来存储最终密封好的数据
# 执行该命令可能需要一点时间等待
lotus-miner storage attach --store --init /path/to/persistent_storage
# 设置密封扇区的存储路径,密封完成之后该路径下的数据会被自动清空,相当于临时目录
# 执行该命令可能需要一点时间等待
lotus-miner storage attach --seal --init /path/to/fast_cache
以上两个命令都是在启动了 miner 之后才可以执行,是一种动态添加存储路径的方式,非常灵活。 当然还可以在命令中添加权重 --weight=10
,默认权重是 10
。
执行该命令后,可通过以下命令查看存储列表:
lotus-miner storage list
默认的存储目录 ~/.lotusminer
可以移动到其他地方。
移动前最好先停掉 daemon 和 miner。
移动后,假设新路径为 /path/to/.lotusminer
,需要手动更改 /path/to/.lotusminer
目录下 storage.json
中的 StoragePaths
为新路径:
{
"StoragePaths": [
{
"Path": "/path/to/.lotusminer"
}
]
}
移动后,重启 daemon 和 miner,miner 会重新读取新路径下的所有 sector 信息。
假设daemon在 192.168.1.100
机器上,miner在 192.168.1.101
机器上:
- 修改远程 daemon (192.168.1.100)上
~/.lotus/config.toml
中的ListenAddress
为:
# Default config:
[API]
ListenAddress = "/ip4/192.168.1.100/tcp/1234/http"
- 将远程 daemon (192.168.1.100) 上
~/.lotus
目录下的api
和token
拷贝到 miner 机器(192.168.1.101)的~/.lotus
目录下; - 重启 miner 即可。
lotus-miner rewards redeem
lotus-miner rewards list
赎回之后,可能需要过一段时间才能看到自己钱包的余额增加。
运行 miner 之前导出已下环境变量(目前官方还未放出v26参数):
export FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1
# 注意空格不能少【以下命令是使用 screen 进行后台启动的方式】
t=$(date +%Y_%m_%d_%H_%M_%S)
FIL_PROOFS_USE_GPU_TREE_BUILDER=1 FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1 FIL_PROOFS_MAXIMIZE_CACHING=1 RUST_LOG=Trace screen -L -S miner -t miner_${t} ./lotus-miner run
# 常规方式
FIL_PROOFS_USE_GPU_TREE_BUILDER=1 FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1 FIL_PROOFS_MAXIMIZE_CACHING=1 RUST_LOG=Trace ./lotus-miner run
# 从 【Available】 中提取 10 个 FIL 到 【Worker Balance】 中
./lotus-miner actor withdraw 10
# 从 【Worker Balance】 中发送 10 个 FIL 到 【Available】 中(假设 minerID 是 t01000 )
./lotus send t01000 10
原来使用 pledge 命令质押的扇区是垃圾扇区,里面的数据都是垃圾数据,为了让这些扇区能够存储有效数据,可以把这些扇区标记为可存储有效数据的扇区:
./lotus-miner sectors mark-for-upgrade <sector number>
lotus-miner workers list
6.2.1. 修改 miner
修改 miner ~/.lotusminer/config.toml
里面的 ListenAddress
和 RemoteListenAddress
,把这两个变量中的地址都改为 miner 本机的地址:
[API]
ListenAddress = "/ip4/192.168.1.100/tcp/2345/http"
RemoteListenAddress = "192.168.1.100:2345"
6.2.2. 配置 worker
方法一:使用环境变量
export STORAGE_API_INFO=<TOKEN>:<API>
TOKEN 为 ~/.lotusminer
中的 token
;
API 为 ~/.lotusminer
中的 api
;
注意:启动 miner 之后再查看这两个的值。
方法二:直接复制文件
在 启动了 miner 之后,复制 miner 的 ~/.lotusminer
目录中的 token
和 api
到 worker 中的 ~/.lotusminer
(worker 中没有这个目录就手动创建一个),然后启动 worker 即可。
6.2.3. 启动 worker
lotus-worker run --address=192.168.1.201:2333 --precommit1=false --precommit2=true --commit=true
# 新版改用 --listen=xxx
lotus-worker run --listen=192.168.1.201:2333 --precommit1=false --precommit2=true --commit=true
启动worker需要注意以下几点:
- 要给 worker 指定本机地址和一个随机端口(至少四位数);
precommit1
、precommit2
和commit
默认是启用的,如果想要禁用,可以设置为false
,例如:--precommit1=false
;commit
参数是配置commit2
的,commit1
无法在 Worker 中启用。
假设Miner的公网IP为123.123.73.123
,内网IP为10.4.0.100
。
修改$LOTUS_STORAGE_PATH/config.toml
文件中的以下内容:
- 将
ListenAddresses
中的IP改为123.123.73.123
(即公网IP地址),端口自己指定一个固定端口,例如1024
;
[Libp2p]
ListenAddresses = ["/ip4/123.123.73.123/tcp/1024", "/ip6/::/tcp/0"]
配置修改以后,重启Miner。
这里的multiaddress即为上面第(1)步中配置的ListenAddresses
的地址。
lotus-miner actor set-addrs /ip4/123.123.73.123/tcp/1024
设置完等待消息确认后,可以通过以下命令查看结果:
lotus state miner-info [t0xxxx]
执行以下命令查看Miner连接的节点:
lotus-miner net peers
如果返回的结果很少(只有本地一个节点),需要手动连接节点:
lotus-miner net connect /dns4/bootstrap-1.calibration.fildev.network/tcp/1347/p2p/12D3KooWQAKmfoAQBDwyaruE1bfFsuekttD974arrkB4G4ZKWk6r
lotus-miner net connect /dns4/bootstrap-0.calibration.fildev.network/tcp/1347/p2p/12D3KooWCoZZ9gExszHaNLoLXhW7DJa3dDZXjGgHELxwhqxoKJUQ
lotus-miner net connect /dns4/bootstrap-2.calibration.fildev.network/tcp/1347/p2p/12D3KooWKRNgz3a8RyxLFa1gihdFHMG6rPKuEFnSwmzk4GTo2TC1
lotus-miner net connect /dns4/bootstrap-3.calibration.fildev.network/tcp/1347/p2p/12D3KooWJt4zgPL8B2cMoCLDQ6MPpMKH62ZjgvvPmrfDBLWpggKG
注意:上面连接的地址,需要替换成Louts项目/build/bootstrappers.pi
文件中的地址
连接成功后会有connect 12D3KooWQAKmfoAQBDwyaruE1bfFsuekttD974arrkB4G4ZKWk6r: success
这样的返回。
执行上面的操作后,再次执行lotus-miner net peers
,应该就能看到不少节点了。
太空竞赛可以配置Miner只接收官方机器人的订单参考官方文档,将$LOTUS_STORAGE_PATH/config.toml
文件中的:
[Dealmaking]
# Filter = ""
改为:
Filter = "jq -e '.Proposal.Client == \"t1nslxql4pck5pq7hddlzym3orxlx35wkepzjkm3i\" or .Proposal.Client == \"t1stghxhdp2w53dym2nz2jtbpk6ccd4l2lxgmezlq\" or .Proposal.Client == \"t1mcr5xkgv4jdl3rnz77outn6xbmygb55vdejgbfi\" or .Proposal.Client == \"t1qiqdbbmrdalbntnuapriirduvxu5ltsc5mhy7si\" '"
- 首先通过官方提供的Ping工具看看能否ping通自己Miner的公网IP;
- 其次,通过[Port-chk]查看自己Miner的公网端口是否开放;
telnet 123.123.73.123 1024
(注意替换成自己的IP和端口)看看是否返回/multistream/1.0.0
。
如果Miner机器没有公网IP,就需要在边缘网络设备(如路由器,或有公网IP和端口转发服务的服务器)上做公网IP和端口向内网IP和端口的转发,假设公网IP为123.123.73.123
,Miner的内网IP为10.4.0.100
。
修改$LOTUS_STORAGE_PATH/config.toml
文件中的以下内容:
- 将
ListenAddresses
中的端口改为自己指定一个固定端口,例如1024
; - 将
AnnounceAddresses
中的IP改为Miner所在网络的公网IP(例子中为:123.123.73.123),端口改为公网监听端口,例如10240
。
[Libp2p]
ListenAddresses = ["/ip4/0.0.0.0/tcp/1024", "/ip6/::/tcp/0"]
AnnounceAddresses = ["/ip4/123.123.73.123/tcp/10240"]
配置完以后,重启Miner。
- 如果边缘网络设备为路由器,登录路由器管理控制台,将外网的
10240
转发到内网的1024
端口; - 如果边缘网络设备为服务器,按以下方式设置转发规则:
编辑系统的
/etc/sysctl.conf
文件(以Ubuntu为例),将net.ipv4.ip_forward=1
前面的#注释去掉,保存文件,然后执行sudo sysctl -p
使其生效。 在Miner所在网络中,添加以下端口转发规则,将外网的10240端口映射到内网的1024端口。
sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10240 -j DNAT --to-destination 10.4.0.100:1024
其中10.4.0.100
为Miner的内网IP。
参照6.1中的设置multiaddress。
参照6.1中的设置Miner连接的节点。
# query ask
lotus client query-ask [t0xxxx]
# 查看本地导入的文件
lotus client local
# 导入文件,需要在daemon所在机器上操作
lotus client import /path/filename
# 发送订单
lotus client deal [CID] [miner_id] 0.0000000005 622080
# 查看deals列表
lotus client list-deals
# Miner查看存储订单列表
lotus-miner storage-deals list
# Miner查看检索订单列表
lotus-miner retrieval-deals list
(1) 我已经接单成功了,但是在官方的dashboard上看不到?
官方的dashboard更新比较慢,一般需要半天到一天时间,才能看到自己的信息。
# lotus 路径:
LOTUS_PATH
# 例如: export LOTUS_PATH=/home/user/nvme_disk/lotus
# miner 路径:
LOTUS_STORAGE_PATH
# 例如: export LOTUS_STORAGE_PATH=/home/user/nvme_disk/lotusminer
# worker 路径:
WORKER_PATH
# 例如: export WORKER_PATH=/home/user/nvme_disk/lotusworker
# proof 证明参数路径:
FIL_PROOFS_PARAMETER_CACHE
# 例如: export FIL_PROOFS_PARAMETER_CACHE=/home/user/nvme_disk/filecoin-proof-parameters
# 临时文件夹路径:
TMPDIR
# 例如: export TMPDIR=/home/user/nvme_disk/tmp
# 最大化内存参数
FIL_PROOFS_MAXIMIZE_CACHING
# 例如: export FIL_PROOFS_MAXIMIZE_CACHING=1
# Rust 日志
RUST_LOG
# 例如: export RUST_LOG=Debug
# GPU计算Precommit2
FIL_PROOFS_USE_GPU_COLUMN_BUILDER
# 例如: export FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1
# 源码编译底层库
FFI_BUILD_FROM_SOURCE
# 例如: export FFI_BUILD_FROM_SOURCE=1
# GOLANG 代理
GOPROXY
# 例如: export GOPROXY=https://goproxy.cn
# 启动小扇区支持
FIL_USE_SMALL_SECTORS
# 例如: export FIL_USE_SMALL_SECTORS=true
# 显卡相关
BELLMAN_CUSTOM_GPU
# 例如: export BELLMAN_CUSTOM_GPU="GeForce RTX 2080 Ti:4352"
# 下载证明参数代理:
IPFS_GATEWAY
# 例如: export IPFS_GATEWAY="https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/"
# Parent cache 参数
FIL_PROOFS_PARENT_CACHE
# 例如: export FIL_PROOFS_PARENT_CACHE=/disk/parent_cache
# 启用 GPU 计算 Precommit2 中的部分过程
FIL_PROOFS_USE_GPU_TREE_BUILDER
FIL_PROOFS_USE_GPU_COLUMN_BUILDER
# 例如:export FIL_PROOFS_USE_GPU_TREE_BUILDER=1
# 例如:export FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1
# 禁用 GPU 参数
BELLMAN_NO_GPU
# 例如:export BELLMAN_NO_GPU=1
# 如果要启用 GPU,则不能让这个环境变量(BELLMAN_NO_GPU)出现在系统的环境变量中(env)
# 如果它出现在 env 中,则需要使用以下命令取消,
#(因为设置 export BELLMAN_NO_GPU=0 无效):
unset BELLMAN_NO_GPU
# AMD 3970x 2h10m 跑完 P1 环境变量
FIL_PROOFS_USE_MULTICORE_SDR=1
如果你在执行 git pull
的时候出现类似如下错误(CONFLICT xxx
),你可以使用以下方法解决该问题:
warning: Cannot merge binary files: build/genesis/devnet.car (HEAD vs. 8bea0e02d77a6d36c3fc72746a9b38c7018608e9)
Auto-merging build/genesis/devnet.car
CONFLICT (add/add): Merge conflict in build/genesis/devnet.car
Auto-merging build/bootstrap/bootstrappers.pi
CONFLICT (content): Merge conflict in build/bootstrap/bootstrappers.pi
Automatic merge failed; fix conflicts and then commit the result.
上述示例来源于从 interopnet
分支的 799f5e5
版本执行 git pull
的时候出现的问题(2020年5月7日),而这个问题在新版的代码中经常会出现,解决这个问题的方法如下(只是其中一个方法,当然还有别的方法):
# 先重置代码,恢复代码到原始状态
git reset --hard HEAD
# 再随意的获取一个很久以前的代码版本号: commit ID
git log -111 | tail | grep -ni "commit "
# 假设这里拿到的一个 commit ID 是:"8c0f2c1ce06"
# 然后恢复到这个版本
git reset --hard 8c0f2c1ce06
# 最后再重新拉取代码
git pull
# 这时候就完成代码更新了,并解决代码冲突问题
# 此时就可以重新编译代码了:
# 当然,在这之前,你可能需要设置一下 GOLANG 的代理
# 已经挂了代理的用户可忽略
env RUSTFLAGS="-C target-cpu=native -g" FFI_BUILD_FROM_SOURCE=1 make clean all bench
# 先重置代码,恢复代码到原始状态
git reset --hard HEAD
# 切换到 master 分支或者其它分支也行
git checkout master
# 删除 interopnet 分支
git branch -D interopnet
# 拉取所有代码
git fetch
# 或者拉取 interopnet 分支的代码:
git fetch origin interopnet:interopnet
# 再切换到 interopnet 分支
git checkout interopnet
# 如果你没有修改代码,直接执行以下两条命令
git fetch origin
git reset --hard origin/interopnet
如果你在使用本地测试网,发现 lotus daemon 启动不了,或者是 miner 启动不了,或者是其它的问题,这时候,如果你没有别的更好的解决方法,你可以尝试完全清理本地环境,然后再启动 daemon 和 miner, 默认情况下,你需要清理如下的文件或文件夹等:
# 如果 daemon 一直同步不了,也可以试试这个方法,很多情况下可以解决同步问题
# 此外,处理前请检查环境变量,比如,是否修改了默认的 ~/.lotus 目录的位置
rm -rf ~/.lotus/
rm -rf ~/.lotusminer/
rm -rf ~/.lotusworker/
rm -rf ~/.lotus-bench/
rm -rf ~/.genesis-sectors/
rm -rf ~/dev.gen
rm -rf ~/localnet.json
如果是同步不了,还建议清空 FIL_PROOFS_MAXIMIZE_CACHING
环境变量,最近不少人因为在 .bashrc
中加入这个环境变量导致无法同步,原因未知:
unset FIL_PROOFS_MAXIMIZE_CACHING
使用 GDB 调试 lotus 源码(包括上层的 go 语言代码和底层的 rust 语言代码),你只需要一个 GDB 工具就可以单步调试了,非常方便:
为了方便调试测试网,可以在本地自己搭建一个私有链,搭建教程参考 【官方教程】,
多 Miner 本地测试网的搭建教程可参考 【./scripts】 中的脚本,目录中有启动 genersis 节点的两个脚本:start_genesis_daemon.sh
和 start_genesis_miner.sh
,以及启动其它节点的两个脚本:start_daemon.sh
和 start_miner.sh
,这四个脚本中有一些默认的设置,如果你需要运行这些脚本,你可以自己进行修改:
- 默认执行脚本的目录为
home
目录(即:~/$
) - lotus 可执行文件的默认目录在:
/home/tears/filecoin/official/lotus
- 创世节点所在的主机名称默认是:
tears
(你需要修改为你自己的主机名称) - 创世节点所在的主机地址默认是:
192.168.1.11
(你需要修改为你自己的主机地址) - 扇区大小默认是:
2KiB
- 节点启动 daemon 的时候会删除
home
目录下的旧文件,请检查:start_genesis_daemon.sh
和start_daemon.sh
脚本文件:
htop 比系统自带的 top 界面更加友好,在 Ubuntu 上安装只需要执行:
sudo apt install htop
效果如下:
nvtop 比 nvidia-msi 好看多了,但是安装稍微麻烦一些:
在 Ubuntu 19.04 之后可以直接使用 sudo apt install nvtop
安装,否则,你需要执行以下命令安装:
sudo apt install cmake libncurses5-dev libncursesw5-dev git
git clone https://github.com/Syllo/nvtop.git
mkdir -p nvtop/build && cd nvtop/build
cmake ..
cmake .. -DNVML_RETRIEVE_HEADER_ONLINE=True # 如果上一个命令出错就用这个
sudo make install
效果如下:
如果因为编译的时候卡住,症状如下图所示:
解决方法:可以试试更改 crate.io
的源为国内的源,例如:
# 上海交通大学(正常使用)
[source.crates-io]
replace-with = 'sjtu'
[source.sjtu]
registry = "https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index"
# 清华的源(失效)
[source.crates-io]
replace-with = 'tuna'
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
# rustcc社区
[source.crates-io]
replace-with = 'rustcc'
[source.rustcc]
registry = "git://crates.rustcc.cn/crates.io-index"
使用方法:vi ~/.cargo/config
, 然后把以上中的任意一个添加进去,保存好,然后再重新编译一次即可。
参考
如果在编译的时候因为下载代码子模块的时候卡住(GO 代码),可能是 GOPROXY 没有设置,此时,设置一下 GOPROXY,然后再重新编译一遍即可:
export GOPROXY=https://goproxy.cn
lotus 的 interopnet 分支在编译的时候,如果检测到 go 的版本低于 1.14, 则会编译失败,如下图所示:
解决方法,安装新版本的 go,并软链接 /usr/bin/go
到新版的 go 可执行文件中(或者卸载旧版的 go):
# Ubuntu 20.04 示例
sudo apt install golang-1.14
# 删除原来的 go 软链接
sudo rm /usr/bin/go
# 让它链接到新版本的 go 可执行文件中
sudo ln -s /usr/lib/go-1.14/bin/go /usr/bin/go
在编译最新版的 master 分支分支的时候遇到这个问题(2020年6月19号23点,master 的 commit 是: ffa7be86fe6ee738ab4b095469029b9fac51e090),编译的时候提示找不到 1.43.1-x86_64-unknown-linux-gnu
,错误信息如下所示:
解决方法是跳过这个版本,直接使用 nightly
的版本,即,替换以下这个文件中的 1.43.1
为 nightly
。
echo "nightly" > ./extern/filecoin-ffi/rust/rust-toolchain
然后再重新编译,即可正常编译。
使用 Intel (老)机器,调试本地测试网测试 2KiB 扇区,执行 lotus-seed
命令的时候出现程序崩溃现象:
./lotus-seed genesis add-miner localnet.json ~/.genesis-sectors/pre-seal-t01000.json
错误信息大致如下所示:
SIGILL: illegal instruction
PC=0xe910af m=4 sigcode=2
goroutine 0 [idle]:
runtime: unknown pc 0xe910af
stack: frame={sp:0x7efc33ec4830, fp:0x0} stack=[0x7efc336c4ec8,0x7efc33ec4ac8)
00007efc33ec4730: 0000000003ed46a0 000000000063e394 <path/filepath.walkSymlinks+660>
00007efc33ec4740: 0000000000000000 0000000000000000
00007efc33ec4750: 0000000000000000 0000000000000000
......
goroutine 1 [syscall]:
runtime.cgocall(0xe7a700, 0xc0009b77c8, 0x6cb501)
/usr/lib/go-1.14/src/runtime/cgocall.go:133 +0x5b fp=0xc0009b7798 sp=0xc0009b7760 pc=0x51b75b
github.com/supranational/blst/bindings/go._Cfunc_blst_keygen(0xc000156320, 0xc0001562c0, 0x20, 0x0, 0x0)
_cgo_gotypes.go:298 +0x45 fp=0xc0009b77c8 sp=0xc0009b7798 pc=0xe61505
github.com/supranational/blst/bindings/go.KeyGen(0xc0001562c0, 0x20, 0x20, 0x0, 0x0, 0x0, 0x6882897a)
/home/ml/filecoin/official/lotus/extern/fil-blst/blst/bindings/go/blst.go:79 +0x96 fp=0xc0009b7808 sp=0xc0009b77c8 pc=0xe63596
github.com/filecoin-project/lotus/lib/sigs/bls.blsSigner.GenPrivate(0xc000542468, 0xc39cc8db33e69201, 0xc300000000000008, 0x0, 0xc000542460)
/home/ml/filecoin/official/lotus/lib/sigs/bls/init.go:32 +0xeb fp=0xc0009b7868 sp=0xc0009b7808 pc=0xe6c98b
......
解决方法: 编译的时候加上参数 CGO_CFLAGS="-D__BLST_PORTABLE__"
:
FFI_BUILD_FROM_SOURCE=1 CGO_CFLAGS="-D__BLST_PORTABLE__" make clean debug
新版的 lotus 需要用到 clang 编译器来编译部分底层的代码,因此,如果系统上没有安装 clang 的话,在编译 lotus 的时候就会报错,错误信息如下所示:
cargo:rustc-link-lib=stdc++
cargo:warning=couldn't execute `llvm-config --prefix` (error: No such file or directory (os error 2))
cargo:warning=set the LLVM_CONFIG_PATH environment variable to the full path to a valid `llvm-config` executable (including the executable itself)
--- stderr
thread 'main' panicked at 'Unable to find libclang: "couldn\'t find any valid shared libraries matching: [\'libclang.so\', \'libclang-*.so\', \'libclang.so.*\', \'libclang-*.so.*\'], set the `LIBCLANG_PATH` environment variable to a path where one of these files can be found (invalid: [])"', /home/ml/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/bindgen-0.54.0/src/lib.rs:1959:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
error: build failed
+ rm -f /tmp/tmp.npUjYGfyHa
Makefile:11: recipe for target '.install-filcrypto' failed
make[1]: *** [.install-filcrypto] Error 101
make[1]: Leaving directory '/home/ml/filecoin/official/lotus/extern/filecoin-ffi'
解决方法: 编译之前先安装 clang:
# 安装 clang
sudo apt install clang
# 或者
# sudo apt install clang-10
# 出问题可以试一下(在 Ubuntu 18.04 上安装 clang-10 的时候可能会需要加上【--fix-missing】参数):
# sudo apt install clang-10 --fix-missing
# 然后再重新编译
FFI_BUILD_FROM_SOURCE=1 make all
miner 在运行过程中可能会出现这个错误 Too many open files (os error 24)
, 导致程序退出,解决的方法就是设置系统中最大允许的文件打开数量:
ulimit
命令分别可以作用于 soft
类型和 hard
类型,soft
表示可以超出,但只是警告
hard
表示绝对不能超出,两者的值一般是不一样的:
# 查看当前值(默认是 soft 值):
ulimit -a | grep -ni "open"
# 查看当前值 soft 值:
ulimit -Sa | grep -ni "open"
# 查看当前值 hard 值:
ulimit -Ha | grep -ni "open"
# 临时修改(只对当前 Shell 有用,修改立即生效):
# 修改为 65535 (默认修改的是 soft 值):
ulimit -n 65535 # 等效于 ulimit -Sn 65535
# 临时修改 hard 值为 65535
ulimit -Hn 65535
# 可同时修改 soft 和 hard 的值:
ulimit -SHn 65535
# 永久修改(重新登录或重启生效):
# 把文件 /etc/systemd/user.conf 和 /etc/systemd/system.conf 中的字段修改如下:
DefaultLimitNOFILE=65535
# 并修改 /etc/security/limits.conf 文件,添加如下内容:
* hard nofile 65535
* soft nofile 65535
Ref: 【解决Too many open files问题】、【Too many open files的四种解决办法】
- CPU: AMD 3970x (32核心64线程)
- GPU: RTX 2080Ti
- 内存: 256GB (2133MHz)
- 硬盘: NVMe 1TB * 2
# 命令
t=$(date +%Y_%m_%d_%H_%M_%S)
FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1 FIL_PROOFS_MAXIMIZE_CACHING=1 RUST_LOG=Trace screen -L -S bench -t bench_${t} ./bench sealing --sector-size=32GiB --storage-dir=/home/gossip/disk_nvme1/lotus-bench
# 结果
results (v26) (34359738368)
seal: addPiece: 6m15.3044756s (87.3 MiB/s)
seal: preCommit phase 1: 4h12m45.246321786s (2.16 MiB/s)
seal: preCommit phase 2: 33m25.314284805s (16.3 MiB/s)
seal: commit phase 1: 3.376010315s (9.48 GiB/s)
seal: commit phase 2: 43m46.504108069s (12.5 MiB/s)
seal: verify: 30.908086ms
unseal: 4h10m45.224077903s (2.18 MiB/s)
generate candidates: 2.716063ms (11.5 TiB/s)
compute winnnig post proof (cold): 4.727151776s
compute winnnig post proof (hot): 2.921746828s
verify winnnig post proof (cold): 72.31729ms
verify winnnig post proof (hot): 15.464289ms
compute window post proof (cold): 17m16.771668516s
compute window post proof (hot): 11m34.142457801s
verify window post proof (cold): 5.157438678s
verify window post proof (hot): 43.763838ms
# 命令
# BELLMAN_NO_GPU 环境变量的使用请参考第 6 节的说明
t=$(date +%Y_%m_%d_%H_%M_%S)
BELLMAN_NO_GPU=1 FIL_PROOFS_MAXIMIZE_CACHING=1 RUST_LOG=Trace screen -L -S bench -t bench_${t} ./bench sealing --sector-size=32GiB --no-gpu --storage-dir=/home/gossip/disk_nvme1/lotus-bench
# 结果
results (v26) (34359738368)
seal: addPiece: 6m18.045655671s (86.7 MiB/s)
seal: preCommit phase 1: 4h11m2.665760729s (2.18 MiB/s)
seal: preCommit phase 2: 51m35.998398427s (10.6 MiB/s)
seal: commit phase 1: 3.2534009s (9.84 GiB/s)
seal: commit phase 2: 1h19m24.107221673s (6.88 MiB/s)
seal: verify: 27.802053ms
unseal: 4h10m25.648494319s (2.18 MiB/s)
generate candidates: 2.331868ms (13.4 TiB/s)
compute winnnig post proof (cold): 5.941671756s
compute winnnig post proof (hot): 4.172625272s
verify winnnig post proof (cold): 64.764102ms
verify winnnig post proof (hot): 17.119677ms
compute window post proof (cold): 26m34.328794808s
compute window post proof (hot): 20m47.199004707s
verify window post proof (cold): 5.195517605s
verify window post proof (hot): 46.366221ms
- CPU: AMD 3970x (32核心64线程)
- GPU: RTX 2080Ti
- 内存: 256GB (2133MHz)
- 硬盘: NVMe 1TB * 2
# 命令
t=$(date +%Y_%m_%d_%H_%M_%S)
FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1 FIL_PROOFS_MAXIMIZE_CACHING=1 RUST_LOG=Trace screen -L -S bench -t bench_${t} ./bench sealing --sector-size=32GiB --storage-dir=/home/gossip/disk_nvme1/lotus-bench
# 结果
results (v27) (34359738368)
seal: addPiece: 10m0.840580268s (54.5 MiB/s)
seal: preCommit phase 1: 4h11m42.386256191s (2.17 MiB/s)
seal: preCommit phase 2: 27m5.279700449s (20.2 MiB/s)
seal: commit phase 1: 2.594602083s (12.3 GiB/s)
seal: commit phase 2: 50m31.427904703s (10.8 MiB/s)
seal: verify: 27.388448ms
unseal: 4h12m40.52388773s (2.16 MiB/s)
generate candidates: 2.714168ms (11.5 TiB/s)
compute winnnig post proof (cold): 6.114939733s
compute winnnig post proof (hot): 5.097337848s
verify winnnig post proof (cold): 50.41631ms
verify winnnig post proof (hot): 15.678623ms
compute window post proof (cold): 18m51.79180394s
compute window post proof (hot): 11m25.783003134s
verify window post proof (cold): 5.36059116s
verify window post proof (hot): 47.596046ms
# 命令
# BELLMAN_NO_GPU 环境变量的使用请参考第 6 节的说明
t=$(date +%Y_%m_%d_%H_%M_%S)
BELLMAN_NO_GPU=1 FIL_PROOFS_MAXIMIZE_CACHING=1 RUST_LOG=Trace screen -L -S bench -t bench_${t} ./bench sealing --sector-size=32GiB --no-gpu --storage-dir=/home/gossip/disk_nvme1/lotus-bench
# lotus 版本
# lotus version 0.4.1+git.9d56dabb
# 结果
results (v27) (34359738368)
seal: addPiece: 10m10.633126077s (53.7 MiB/s)
seal: preCommit phase 1: 4h14m22.4235947s (2.15 MiB/s)
seal: preCommit phase 2: 51m36.998604335s (10.6 MiB/s)
seal: commit phase 1: 1.151689271s (27.8 GiB/s)
seal: commit phase 2: 1h36m30.270483546s (5.66 MiB/s)
seal: verify: 34.083162ms
unseal: 4h13m10.812170289s (2.16 MiB/s)
generate candidates: 2.333397ms (13.4 TiB/s)
compute winnnig post proof (cold): 7.327267683s
compute winnnig post proof (hot): 6.318365117s
verify winnnig post proof (cold): 45.298003ms
verify winnnig post proof (hot): 16.806329ms
compute window post proof (cold): 28m6.99008574s
compute window post proof (hot): 20m41.201090515s
verify window post proof (cold): 5.46349285s
verify window post proof (hot): 37.986216ms
脚本中默认每 15 分钟添加一个扇区,总共添加 2000 个扇区(你可以自己修改),此外,使用次脚本你需要手动指定 lotus 的路径,即:脚本中的 lotus_path
参数。
Filecoin 中文交流群 是目前国内关于 Filecoin 的最友好的技术交流群,欢迎广大 Filecoin 爱好者加入我们的技术交流群:
Filecoin 中文交流-1群(目前已满人), Filecoin 中文交流-2群(目前还有空位)
$ 1 FIL = 10^{9} nanoFIL = 10^{18} attoFIL $
# 查看钱包地址,一般是 t3 开头的一串数字(新版中使用的是 f3 开头)
./lotus wallet list
# 导出钱包的私钥到 mywallet.key 文件中(示例中的钱包地址为: t3w7r6dguggp62nbopehewt4amjh2iq2belz2u73q3k3z7zoarw44k6cra3og7yyvuy3f7gxh4omcmwpnuipaa)
# 你需要把这个钱包地址替换为你自己的钱包地址
wallet_addr="t3w7r6dguggp62nbopehewt4amjh2iq2belz2u73q3k3z7zoarw44k6cra3og7yyvuy3f7gxh4omcmwpnuipaa"
./lotus wallet export ${wallet_addr} > mywallet.key
# 导入钱包私钥
./lotus wallet import ./mywallet.key
# 导入之后,需要把该钱包地址设置为默认地址(当然,如果你有多个钱包地址,你可以自己选择)
./lotus wallet set-default ${wallet_addr}