常用环境变量
Lotus 数据目录: LOTUS_PATH
export LOTUS_PATH=/gamma/lotus/data
Copied!
Miner 数据目录:LOTUS_STORAGE_PATH
export LOTUS_STORAGE_PATH=/gamma/lotus-storage-miner/data
Copied!
IPFS 网关地址: IPFS_GATEWAY, 用于下载复制证明参数加速
export IPFS_GATEWAY=https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/
Copied!
临时文件夹路径: TMPDIR
export TMPDIR=/cache/tmp
Copied!
proof 证明参数路径: FIL_PROOFS_PARAMETER_CACHE
export FIL_PROOFS_PARAMETER_CACHE=/gamma/filecoin-proof-parameters
Copied!
PreCommit1 proof parents 缓存路径(可以减少 56G 内存)
export FIL_PROOFS_PARENT_CACHE=/gamma/filecoin-parents
Copied!
最大化内存参数: FIL_PROOFS_MAXIMIZE_CACHING
export FIL_PROOFS_MAXIMIZE_CACHING=1
Copied!
使用 GPU 进行 Precommit2 加速: FIL_PROOFS_USE_GPU_COLUMN_BUILDER
export FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1
Copied!
提示:
启用 PreCommit1 SDR 多核加速(为每个 PC1 任务绑定共享一组 L3 缓存的一组 CPU),能大大提高 PC1 的密封效率, 我本人使用 3970x 实测结果为 2h17min,并行三个扇区。不过目前官方提示该项加速还不是很稳定。 我本人测试的结果也是这样,依赖于绑核的稳定性,有的时候会绑错,尤其是对于多路 CPU。
FIL_PROOFS_USE_MULTICORE_SDR=1
Copied!
设置 Rust 日志等级:
export RUST_LOG=Debug
Copied!
开启详细的报错日志追踪:
RUST_BACKTRACE=1
Copied!
启用源码编译底层库:
export FFI_BUILD_FROM_SOURCE=1
Copied!
启动小扇区支持:(一般用于本地测试网络)
export FIL_USE_SMALL_SECTORS=true
Copied!
设置自定义 GPU 参数:
export BELLMAN_CUSTOM_GPU=“GeForce RTX 2070 SUPER:2560”
Copied!
#lotus daemon 操作
#1. 查看节点信息
lotus net listen
/ip4/127.0.0.1/tcp/37103/p2p/12D3KooWNvqwb1gbgMNLFXtMAXP3ZwgTVgaLXbDUNqpWDQuKd1sh
/ip4/192.168.1.101/tcp/37103/p2p/12D3KooWNvqwb1gbgMNLFXtMAXP3ZwgTVgaLXbDUNqpWDQuKd1sh
/ip6/::1/tcp/46335/p2p/12D3KooWNvqwb1gbgMNLFXtMAXP3ZwgTVgaLXbDUNqpWDQuKd1sh
lotus net peers
Copied!
手动连接其他节点, 这个在你同步的时候发现自动同步失败,无法获取可用节点的时候特别有用:
lotus net connect <PEER_ADDR>
lotus net connect /ip4/119.33.53.66/tcp/37103/p2p/12D3KooWNvqwb1gbgMNLFXtMAXP3ZwgTVgaLXbDUNqpWDQuKd1sh
Copied!
这个在你同步的时候无法正常同步链上数据时候特别有用, 这时可以试下在启动 daemon 的时候禁用自动连接 peers ,然后手动连接到一个正常节点,例如:
lotus daemon --bootstrap=false
lotus net connect <PEER_ADDR>
Copied!
<PEER_ADDR> 可以是任意一个能够正常同步数据的节点地址。
#2. 查看链同步状态
lotus sync status
lotus sync wait # 该命令会实时显示同步状态以及待同步区块高度
Copied!
如果出现 Error 则说明链同步有问题,如果状态是 completed,则说明链同步已经完成,可以进行其他操作了。 如果同步出错的话,你可以手动强制将你的本地链头区块指向某个高度:
lotus chain sethead --epoch=
lotus chain sethead --epoch=3960
Copied!
#3. 修改 mpool 配置
lotus mpool config
lotus mpool config ‘{“PriorityAddrs”:[],“SizeLimitHigh”:30000,“SizeLimitLow”:20000,“ReplaceByFeeRatio”:1.25,“PruneCooldown”:60000000000,“GasLimitOverestimation”:1.5}’
Copied!
这个配置非常有用,你可以用来做一些高级的操作。比如,如果你想设置你的节点为某个钱包发送的交易优先打包,你可以这样设置:
lotus mpool config ‘{“PriorityAddrs”:[
],“SizeLimitHigh”:30000,“SizeLimitLow”:20000,“ReplaceByFeeRatio”:1.25,“PruneCooldown”:60000000000,“GasLimitOverestimation”:1.5}’lotus mpool config ‘{“PriorityAddrs”:[“t3r3afkf3ooeukknwx45g4t475pduslpkov32nvodv6xzbuliccka7qsax32m34yfbd7q3fwxapfb2isea6dnq”],“SizeLimitHigh”:30000,“SizeLimitLow”:20000,“ReplaceByFeeRatio”:1.25,“PruneCooldown”:60000000000,“GasLimitOverestimation”:1.5}’
Copied!
#4. 疏通消息,加快上链
你可以使用下面的命令自动计算并增加 gas 费用:
lotus mpool replace --auto
lotus mpool replace --auto t3xxxxx 1234
Copied!
注意:
这个命令最好手动调用,如果自动调用的话,最后的结果可能让你支付超高额度的 Gas 费用,有矿工为此付出了惨烈的代价,支付了一笔 700 多 FIL 的手续费。
大多数情况下我们都是手动梳通消息:
lotus mpool replace --gas-feecap= --gas-premium= --gas-limit=
Copied!
具体操作如下:
首先在区块浏览器找到当前最新的一个区块的 ProveSector 类型的消息(或者跟你要梳通的消息的同类型的消息),记录他们的 Gas Fee Cap( g a s F e e C a p ) 和 G a s U s e d ( gasFeeCap) 和 Gas Used( gasFeeCap)和GasUsed(gasUsed)。
找到当前的要替换消息的 Gas Premium($oldGasPremium)。
计算上 replace 消息中的变量的值并替换:
GFC=
g
a
s
F
e
e
C
a
p
G
P
=
gasFeeCap GP=
gasFeeCapGP=oldGasPremium * 1.252
GL=$gasUsed * 1.1
Copied!
#链快照操作
#1. 导出当前链快照
通常如果你不是做钱包或者交易所的话,你并不需要全节点,你可以直接从官方提供的快照来同步,或者从其他节点导出快照,再导入到当前 daemon. 这样可以节省不少同步的时间。 可以使用以下方式创建完整的 CAR 快照:
lotus chain export
lotus chain export lotus-chain-2020-12-02.car
Copied!
通过上面的命令你可以导出一个完整的 lotus chain 快照。不过这个快照比较大,可能超过 100 GB。 所以更常用的方式是使用下面的命令导出一个阉割版的快照, 就是只导出最新的区块,跳过以前的旧消息。
lotus chain export --skip-old-msgs --recent-stateroots=
lotus chain export --skip-old-msgs --recent-stateroots=2000 lotus_chain_2020_12_02.car
Copied!
–recent-stateroots 参数指定要导出的状态根数。 --skip-old-msgs 参数表示只导出那些 stateroots 直接引用的区块。
#2. 导入快照
在首次启动 daemon 的时候执行导入快照。
lotus daemon --import-snapshot
lotus daemon --import-chain
Copied!
如果你希望在快照导入之后就立即退出守护进程,(例如在docker环境中很有用),请在命令中添加 --halt-after-import 标志:
lotus daemon --import-snapshot= --halt-after-import=true
lotus daemon --import-snapshot=lotus_chain_2020_12_02.car --halt-after-import=true
Copied!
#3. 压缩区块数据
随着你的节点同步的区块越来越多,占用的磁盘空间也越来越大,而磁盘存的越满,访问的速度就会越慢,最关键是你可能压根不想要这么多区块数据,99% 的 Miner 的需求都是一样的:在保持链同步正常的情况下,区块数据越精简越好,不想多存一个区块。 如果你也是这么想的,那么定期去压缩一下区块数据可能是你的一个刚需。
停止 Lotus 守护进程:
lotus daemon stop
Copied!
删除 $LOTUS_PATH 路径中 datastore/chain/ 文件夹的内容:
~/.lotus
rm -rf <LOTUS_PATH>/datastore/chain/*
Copied!
使用最小快照启动守护进程:
wget https://fil-chain-snapshots-fallback.s3.amazonaws.com/mainnet/minimal_finality_stateroots_latest.car -O lotus_chain_minimal.car
lotus chain export --skip-old-msgs=true --recent-stateroots=900 lotus_chain_minimal.car
lotus daemon --import-snapshot=lotus_chain_minimal.car
Copied!
#钱包私钥的备份和删除
导出/导入钱包私钥到文件
lotus wallet export
>lotus wallet export f3xxx > wallet.key
Copied!
导出之后我们需要再导入刚刚导出的私钥,确保备份的私钥能正确导入:
lotus wallet import wallet.key
ERROR: saving to keystore: checking key before put ‘wallet-f3rf5kmk2xenqukta4jkuk3xn5tbwrrylstd7inuzu6hhwtang6jk3edkxqzokbqs7wojbz23pkdadkg5wzmbq’: key already exists
Copied!
警告
不要把钱包私钥通过任何形式的网络传输,包括但不限于微信,Telegram, 邮箱等方式。建议直接用 U 盘拷贝多份存放在不同的地方。
删除钱包私钥,切记删除私钥之后还要删除文件!!!
lotus wallet delete
lotus wallet delete f3xxxx
rm -rf $LOTUS_PATH/keystore/ORZGC43*
Copied!
警告
wallet delete 命令并不会删除私钥文件,所以切记在使用命令删除私钥之后还需要手动删除私钥文件,否则一旦文件被盗,对方可以通过私钥文件恢复私钥!!!
#手动下载 proof 参数
export IPFS_GATEWAY=“https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/”
lotus fetch-params --proving-params <sector_size>
lotus fetch-params --proving-params 32GiB
Copied!
#lotus-miner 操作
查看矿工当前信息,包括算算力,山区密封情况
lotus-storage-miner info
Miner: t0109653
Sector Size: 32 GiB
Byte Power: 1.812 TiB / 4.888 PiB (0.0362%)
Actual Power: 1.81 Ti / 4.73 Pi (0.0374%)
Committed: 1.844 TiB
Proving: 1.812 TiB (32 GiB Faulty, 1.69%)
Expected block win rate: 6.4627/day (every 3h42m48s)
Miner Balance: 128.044817705754006786
PreCommit: 0
Locked: 128.043278061722026245
Available: 0.001539644031980541
Worker Balance: 49.947643260499744805
Market (Escrow): 0.000000000000004064
Market (Locked): 0.000000000000004064
Sectors:
Total: 72
Proving: 58
PreCommit1: 12
PreCommit2: 1
SealPreCommit1Failed: 1
Copied!
这是我们自己测试矿工的 info,目前已经跑了 2 天了。这里大概解释一下各项数据的意思:
Byte Power: 已完成 Proving 的算力
Actual Power: 实际有效算力
Committed: 已完成 Commiting 的算力
32 GiB Faulty: 被标记为 Faulty 扇区总大小,也就是无效算力。
Expected block win rate: 预期竞争出块胜出的概率,6.4627/day 标识平均每天可以出 6 个块。
Miner Balance: 当前挖矿收益(广大矿工最关注的)
Locked: 挖矿收益锁仓的份额(前期的收益几乎全部锁仓了)
其他都是大家一眼都能看懂的,这里就不解释了。
质押扇区
lotus-miner sectors pledge
Copied!
查看扇区状态
lotus-miner sectors list
lotus-miner sectors status <sector_id>
lotus-miner sectors status 1
lotus-miner sectors status --log 1
Copied!
修改扇区的状态
lotus-miner sectors update-state --really-do-it=true <sector_id>
lotus-miner sectors update-state --really-do-it=true 0 FailedUnrecoverable
Copied!
警告:
update-state 需要谨慎操作,因为操作不当可能会发生一些难以预料的奇怪的错误。
删除扇区
lotus-miner sectors remove --really-do-it=true <sector_id>
lotus-miner sectors remove --really-do-it=true 1
Copied!
警告:
扇区一旦删除将不可恢复,请谨慎操作,以免误删。
设置订单价格:
lotus-miner deals set-ask --price= --max-piece-size=
lotus-miner deals set-ask --price=‘1000000’ --max-piece-size=34359738368
Copied!
查看 Worker 列表
lotus-miner sealing workers
Copied!
查看当前 miner 任务调度列表
lotus-miner sealing jobs
Copied!
如果你发现一个任务长时间没有完成(也许是 worker 掉线了),你可以使用下面的命令取消任务:
lotus-miner sealing abort
Copied!
增加存储路径
lotus-miner storage attach --store --init /path/to/persistent_storage
lotus-miner storage attach --seal --init /path/to/fast_cache
Copied!
以上两个命令都是在启动了 miner 之后才可以执行,是一种动态添加存储路径的方式,非常灵活。 你还可以在命令中添加权重 --weight=10,默认权重是 10。 执行该命令后,可通过以下命令查看存储列表:
lotus-miner storage list