# 准备
在深入部署您的挖矿操作之前,请确保您已完成以下步骤。
注意
建议您在部署到主网上之前在calibration
网络中测试您的配置。
# 永久存储
选择您熟悉的网络文件系统(例如 NFS)并部署您的存储集群。
# 在共享模块中设置您的帐户
有两种方法可以配置您的帐户。
# 对于需接入共享模块的用户
如果您尝试连接到第三方托管的共享智子服务(链服务),你需要提供机房的公网地址段和Miner ID,并由管理员加入到服务访问白名单中。联系上述服务的管理员并让他们为您设置。
# 管理员会生成类似如下信息
主网接入 token 信息。
# venus-wallet配置文件:
#初始化venus-wallet run
生成配置文件;
#修改最后几行: .venus_wallet/config.toml
[APIRegisterHub]
RegisterAPI = ["/dns/gateway.xxxxxxxx.com/tcp/83/wss"]
Token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lxxxxx.MoaizhRLYe0IFq7QBxxxxxxxxxxxxx"
SupportAccounts = ["xxxxx"]
# damocles-manager配置文件:
初始化damocles-manager daemon init
生成配置文件;
修改.damocles-manager/sector-manager.cfg
前面几行
# Default config:
[Common]
[Common.API]
Chain = "/dns/node.xxxxxxxx.com/tcp/81/wss"
Messager = "/dns/messager.xxxxxxxx.com/tcp/82/wss"
Market = "/dns/market.xxxxxxxx.com/tcp/84/wss"
Gateway = ["/dns/gateway.xxxxxxxx.com/tcp/83/wss"]
Token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lxxxxx.MoaizhRLYe0IFq7QBxxxxxxxxxxxxx"
#ChainEventInterval = "1m0s"
除此之外,damocles-manager 还需要配置节点的 [[Miners]]、[Miners.Sector]、[Miners.Commitment.Pre]、[Miners.Commitment.Prove]、[Miners.PoSt] 和 [Miners.Proof] 信息。打开部份注释根据实际情况填写,可参考下文的配置 damocles-manager。
提示
venus-wallet
可以部署为链服务或者本地组件,具体取决于您的安全要求。
# 对于共享模块的管理员
如果您是托管共享 venus 模块的管理员,请使用以下命令注册各个集群。
# 创建user,默认激活状态
$ ./sophon-auth user add <ACCOUNT_NAME>
# 激活user
$ ./sophon-auth user update --name <ACCOUNT_NAME> --state 1
# 绑定节点号
$ ./sophon-auth user miner add <ACCOUNT_NAME> <MinerID>
# 为此账号分配token,用于接入服务层验证
$ ./sophon-auth token gen --perm write <ACCOUNT_NAME>
<AUTH_TOKEN_FOR_ACCOUNT_NAME>
# 软件依赖
在运行Venus
之前,您需要安装这些 (opens new window)软件。(注:和 lotus 的软件依赖相同)
# 安装/启动 venus-wallet
下载并编译Venus-wallet
的源代码。
- 首次编译
$ git clone https://github.com/filecoin-project/venus-wallet.git
# change directory to venus-wallet
$ cd venus-wallet
$ git checkout <LATEST_RELEASE>
$ make
- 曾经成功编译过
# change directory to venus-wallet,switch to the incubation branch
$ git fetch
$ git pull
在后台运行venus-wallet
模块。
$ nohup ./venus-wallet run > wallet.log 2>&1 &
提示
使用 tail -f wallet.log
来监控钱包日志。
为您的venus-wallet
设置密码
$ ./venus-wallet setpwd
Password:******
Enter Password again:******
Password set successfully
注意
请备份您的密码并妥善保存,否则你将无法使用 wallet 相关的功能。每次 venus-wallet run 启动时带--password 标志会自动解锁钱包,如果没带,在 wallet 实例启动后你需要手动解锁:
$ ./venus-wallet unlock
Password:
# 查看解锁状态
$ ./venus-wallet lock-state
wallet state: unlocked
在扇区封装的过程中需要调用 wallet 进行签名,如果不解锁,会导致签名失败,进而导致扇区任务失败。
生成 owner 和 worker 地址。(如果您没有现有的 miner ID)
$ ./venus-wallet new bls
<OWNER_ADDRESS>
$ ./venus-wallet new bls
<WORKER_ADDRESS>
提示
如果您在Calibration
上进行测试,则必须使用来自水龙头的测试币为您的所有地址提供资金。对于校准网,请使用此水龙头 (opens new window)。
配置 venus-wallet 接入共享服务,使用您从共享模块管理员处获得的帐号信息更改 ~/.venus_wallet/config.toml
中的[APIRegisterHub]
部分
[APIRegisterHub]
RegisterAPI = ["/ip4/<IP_ADDRESS_OF_VENUS_GATEWAY>/tcp/45132"]
Token = "<AUTH_TOKEN_FOR_ACCOUNT_NAME>"
SupportAccounts = ["<ACCOUNT_NAME>"]
重新启动venus-wallet
以使更改生效。
# grep [PID] of venus-wallet process
$ ps -ef | grep wallet
# kill the process and restart
$ kill [PID]
$ nohup ./venus-wallet run > wallet.log 2>&1 &
到sophon-gateway确认钱包。 查看哪些钱包连接过来。
./sophon-gateway wallet list
[
{
"Account": "venus-test",
"SupportAccounts": [
"venus-test"
],
"ConnectStates": [
{
"Addrs": [
"f3sqqttrfpchw6usau4e2lr7cb6jbkvbes2nxudf42kxxxxxxxxglnga",
"f3slzp2qdxtw44l6decoutkzyc5l4xxxxxxxxxxxxxxxxxxxxxxxxxxa"
],
"ChannelId": "0b210b25-d01b-4aa2-ac75-324c8b1815e9",
"Ip": "10.10.66.141:44486",
"RequestCount": 0,
"CreateTime": "2023-07-26T16:55:42.286652971+08:00"
}
]
}
]
提示
建议使用systemd
或supervisord
等线程控制。
注意
请确保 venus-wallet 处于 unlocked 状态,要么会在 Sealer 模块初始化时卡在 "Waiting for confirmation",导致 miner 帐号生成不了。
# 安装/启动 damocles
下载代码。
$ git clone https://github.com/ipfs-force-community/damocles.git
编译damocles
。
$ cd damocles
$ git checkout <LATEST_RELEASE>
$ make all
提示
编译完成后,会在 ./dist/bin 目录下有damocles-worker
和damocles-manager
两个可执行文件。
# damocles-manager
初始化工作目录
./dist/bin/damocles-manager daemon init
# 创建矿工号(可选)
创建矿工号。(如果已经有矿工号可以跳过此步)
$ ./damocles-manager util miner create
--from=<OWNER_ADDRESS>
--owner=<OWNER_ADDRESS>
--worker=<WORKER_ADDRESS>
--sector-size=32GiB
提示
使用--net
来选择网络,默认为主网。
提示
成功创建矿工号会有类似以下日志输出:
2022-05-09T07:29:51.325Z INFO cmd internal/util_miner.go:242 miner actor: t01219 (t2z4nnndtt2iuu57lq3ivor7xdvqwivwb5renrh3a)
{"size": "512MiB", "from": "t3wultr2i47m24ew2p3bskclnb4rtgmuwb6cwjleqbeu4ndqocx67635dibpsq3ugpbv5y7fpjlpxlmkqcgnva",
"actor": "t01166", "owner": "t3wultr2i47m24ew2p3bskclnb4rtgmuwb6cwjleqbeu4ndqocx67635dibpsq3ugpbv5y7fpjlpxlmkqcgnva",
"worker": "t3wultr2i47m24ew2p3bskclnb4rtgmuwb6cwjleqbeu4ndqocx67635dibpsq3ugpbv5y7fpjlpxlmkqcgnva"}
# 配置 damocles-manager
按需配置默认配置文件~/.damocles-manager/sector-manager.cfg
。这里给出一份参考,详细配置说明可以参见这里 (opens new window)。
[Common]
[Common.API]
# 网关服务地址,必填项,字符串类型
# 根据所使用的服务实际情况填写
# 对于每一条信息,如果使用了合法的 "{token}:{multiaddr}" 格式,构造客户端时将使用本字段中提取的 token,否则使用通用 sophon-auth 产生的 token
Gateway = ["/ip4/{api_host}/tcp/{api_port}"]
# 链服务信息,可选项,字符串类型
# 根据所使用的服务实际情况填写
# 如果使用了合法的 "{token}:{multiaddr}" 格式,构造客户端时将使用本字段中提取的 token,否则使用通用 sophon-auth 产生的 token
# 如果不填写,会默认使用 Gateway 的地址和 token 作为链服务的入口
Chain = "/ip4/{api_host}/tcp/{api_port}"
# 消息服务信息,可选项,字符串类型
# 根据所使用的服务实际情况填写
# 如果使用了合法的 "{token}:{multiaddr}" 格式,构造客户端时将使用本字段中提取的 token,否则使用通用 sophon-auth 产生的 token
# 如果不填写,会默认使用 Gateway 的地址和 token 作为消息服务的入口
Messager = "/ip4/{api_host}/tcp/{api_port}"
# 市场服务信息,可选项,字符串类型
# 根据所使用的服务实际情况填写
# 如果使用了合法的 "{token}:{multiaddr}" 格式,构造客户端时将使用本字段中提取的 token,否则使用通用 sophon-auth 产生的 token
# 如果不填写,会默认使用 Gateway 的地址和 token 作为消息服务的入口
Market = "/ip4/{api_host}/tcp/{api_port}"
# 服务 sophon-auth 产生的 token,必填项,字符串类型
# 根据所使用的服务实际情况填写
Token = "{some token}"
[[Common.PieceStores]]
# 路径,必填项,字符串类型
#Path = "{store_path}"
[[Common.PersistStores]]
# 名称,选填项,字符串类型
Name = "{store_name1}"
# 路径,必填项,字符串类型,建议使用绝对路径
Path = "{store_path1}"
[[Common.PersistStores]]
Name = "{store_name2}"
Path = "{store_path2}"
[[Miners]]
# `SP` actor id,必填项,数字类型,t033680->33680
Actor = 33680
[Miners.Sector]
# 扇区起始编号,选填项,数字类型,默认值为 0
InitNumber = 0
# 扇区编号上限,选填项,数字类型,默认值为 null,表示无上限限制
MaxNumber = 1000000
# 是否允许分配扇区,选填项,布尔类型,默认值为 true,即开启分配
Enabled = true
# 真实订单
EnableDeals = true
[Miners.Commitment.Pre]
# 发送地址,必填项,地址类型,miner 的 worker 地址
Sender = "t3vi4amwofexsfpontn5g722psgikzochthhhu3ptvofzrqmgajs67gt5n2ririlc4hj667dvfsn3kmxiwgtya"
# 单条提交消息的 Gas 估算倍数,选填项,浮点数类型,默认值为 1.2
#GasOverEstimation = 1.2
# 单条提交消息的 FeeCap 限制,选填项,FIL 值类型,默认值为 5 nanoFIL
#MaxFeeCap = "5 nanoFIL"
[Miners.Commitment.Pre.Batch]
# 是否启用聚合提交,选填项,布尔类型,默认值为 false,即不启用
Enabled = true
# 最小聚合条数,选填项,数字类型,默认值为 16,即最小聚合条数为 16 条
#Threshold = 16
# 最大等待时间,选填项,时间类型,默认值为 1h,即最大等待 1 小时
#MaxWait = "1h0m0s"
# 检查间隔,选填项,时间类型,默认值为 1min,即每隔 1min 检查一次是否满足聚合条件
#CheckInterval = "1m0s"
# 聚合提交消息的 Gas 估算倍数,选填项,浮点数类型,默认值为 1.2
#GasOverEstimation = 1.2
# 聚合提交消息的 FeeCap 限制,选填项,FIL 值类型,默认值为 5 nanoFIL
#MaxFeeCap = "5 nanoFIL"
#用于配置 ProveCommit 消息提交的策略,其配置项和作用与 Miners.Commitment.Pre 内的完全一致。
[Miners.Commitment.Prove]
Sender = "t3vi4amwofexsfpontn5g722psgikzochthhhu3ptvofzrqmgajs67gt5n2ririlc4hj667dvfsn3kmxiwgtya"
#GasOverEstimation = 1.2
#MaxFeeCap = "5 nanoFIL"
[Miners.Commitment.Prove.Batch]
Enabled = true
#Threshold = 16
#MaxWait = "1h0m0s"
#CheckInterval = "1m0s"
#GasOverEstimation = 1.2
#MaxFeeCap = "5 nanoFIL"
[Miners.PoSt]
# 发送地址,必填项,地址类型
Sender = "t3vi4amwofexsfpontn5g722psgikzochthhhu3ptvofzrqmgajs67gt5n2ririlc4hj667dvfsn3kmxiwgtya"
# 是否启用,选填项,布尔类型,默认值为 true
Enabled = true
# 是否对扇区文件进行强校验,选填项,布尔类型,默认值为 true
# 开启时,除了对文件存在性进行判断外,还会尝试读取部分信息,如元数据等
#StrictCheck = true
# WindowPoSt 消息的 Gas 估算倍数,选填项,浮点数类型,默认值为 1.2
#GasOverEstimation = 1.2
# WindowPoSt 消息的 FeeCap 限制,选填项,FIL 值类型,默认值为 5 nanoFIL
#MaxFeeCap = "5 nanoFIL"
# 消息的稳定高度,选填项,数字类型,默认值为 10
#Confidence = 10
[Miners.Proof]
# 是否启用,选填项,布尔类型,默认值为 false
Enabled = true
[Miners.Deal]
# 是否启用订单,选填项,布尔类型,默认值为 false
Enabled = true
启动damocles-manager
$ ./dist/bin/damocles-manager --net=cali daemon run --poster --miner --listen 0.0.0.0:1789
提示
使用--net
来选择网络,默认为主网。
# damocles-worker
规划用于封装过程中数据的本地存储,并使用以下命令创建并初始化数据目录。
$ ./dist/bin/damocles-worker store sealing-init -l <dir1> <dir2> <dir3> <...>
挂载持久化数据目录,并使用以下命令初始化数据目录。
$ ./dist/bin/damocles-worker store file-init -l <dir1>
规划用于各封装阶段的 CPU 核、numa 区域等配置。按需完成配置文件。以下为worker
配置例子,更详细的配置项、作用、配置方法可以参考这个文档。
[worker]
# 实例名,选填项,字符串类型,默认以连接 `damocles-manager` 所使用的网卡 IP 地址作为实例名
# name = "bytest"
# rpc 服务监听地址,选填项,字符串类型,默认为"0.0.0.0",即监听本机所有地址
# rpc_server.host = "0.0.0.0"
# rpc 服务监听端口,选填项,数字类型,默认为 17890
# rpc_server.port = 17890
[sector_manager]
# 构造 rpc 客户端时使用的连接地址,必填项,字符串类型
rpc_client.addr = "/ip4/{some_ip}/tcp/1789"
# rpc_client.headers = { User-Agent = "jsonrpc-core-client" }
# piece_token = "{auth token}"
[sealing]
# 允许的`SP`,选填项,数字数组格式
allowed_miners = [33680]
# 允许的扇区大小,选填项,字符串数组格式,["32GiB", "64GiB"]
allowed_sizes = ["32GiB","64GiB"]
# 是否允许向扇区内添加订单,选填项,布尔类型,默认为 false。
# 当设置为 true 时,通常需要同时设置 `sector_manager` 中的 `piece_token` 项
# enable_deals = true
# 封装过程中遇到 temp 类型的错误时,重试的次数,选填项,数字格式,默认为 5
# max_retries = 3
# 封装过程中遇到 temp 类型的错误时,重试的间隔,选填项,时间字符串格式,默认为“30s",即 30 秒
# seal_interval = "30s"
# 空闲的 `sealing_store` 申请封装任务的间隔,选填项,时间字符串格式,默认为”30s",即 30 秒
# recover_interval = "30s"
# rpc 状态轮询请求的间隔,选填项,时间字符串格式,默认为”30s",即 30 秒
# 封装过程中,部分环节使用了轮询方式来获取非实时的信息,如消息上链等。这个值有助于避免过于频繁的请求占用网络资源
# rpc_polling_interval = "30s"
# 是否跳过 proof 的本地校验环节,选填项,布尔格式,默认为 false
# ignore_proof_check = false
# 根据实际资源规划
[[sealing_thread]]
# 扇区数据目录路径,必填项,字符串类型,建议使用绝对路径,数据目录和工作线程是一对一绑定的
location = "{path to sealing store1}"
# 封装过程的定制参数,仅对当前工作线程生效
# sealing.allowed_miners = [10123, 10124, 10125]
# sealing.allowed_sizes = ["32GiB", "64GiB"]
# sealing.enable_deals = true
# sealing.max_retries = 3
# sealing.seal_interval = "30s"
# sealing.recover_interval = "30s"
# sealing.rpc_polling_interval = "30s"
# sealing.ignore_proof_check = false
[[sealing_thread]]
location = "{path to sealing store2}"
[[sealing_thread]]
location = "{path to sealing store3}"
[[sealing_thread]]
location = "{path to sealing store4}"
[[sealing_thread]]
location = "{path to sealing store5}"
[[sealing_thread]]
location = "{path to sealing store6}"
[[sealing_thread]]
location = "{path to sealing store7}"
[[sealing_thread]]
location = "{path to sealing store8}"
# attached 用于配置已完成的扇区持久化数据保存的位置,允许同时配置多个。
[[attached]]
# 名称,选填项,字符串类型,默认为路径对应的绝对路径
name = "bytest"
# 路径,必填项,字符串类型,建议直接填写绝对路径
location = "/xx/xx/xxx"
# 只读,选填项,布尔类型,默认值为 false
#readonly = false
[processors.static_tree_d]
32GiB = "{path to static tree_d for 32GiB}"
64GiB = "{path to static tree_d for 64GiB}"
# 根据实际资源规划
[processors.limit]
# pc1 阶段的并发数限制,选填项,数字类型
pc1 = 4
# pc2 阶段的并发数限制,选填项,数字类型
pc2 = 2
# c2 阶段的并发数限制,选填项,数字类型
c2 = 1
# fields for pc1 processors
[[processors.pc1]]
# numa 亲和性分区 id,选填项,数字类型,默认值为 null,不会设置亲和性,需要根据宿主机的 numa 分区进行填写
numa_preferred = 0
# cpu 核绑定和限制选项,选填项,字符串类型,默认值为 null,不设置绑定,值的格式遵循标准 cgroup.cpuset 格式
cgroup.cpuset = "0-7"
# 声明本 processor 支持的最多并发量
concurrent = 2
# 外部执行器的附加环境变量,选填项,字典类型,默认值为 null
envs = { FIL_PROOFS_USE_MULTICORE_SDR = "1" }
[[processors.pc1]]
numa_preferred = 1
cgroup.cpuset = "12-19"
concurrent = 2
envs = { FIL_PROOFS_USE_MULTICORE_SDR = "1" }
[[processors.pc2]]
cgroup.cpuset = "8-11,24-27"
envs = { FIL_PROOFS_USE_GPU_COLUMN_BUILDER = "1", FIL_PROOFS_USE_GPU_TREE_BUILDER = "1", CUDA_VISIBLE_DEVICES = "0" }
[[processors.pc2]]
cgroup.cpuset = "20-23,36-39"
envs = { FIL_PROOFS_USE_GPU_COLUMN_BUILDER = "1", FIL_PROOFS_USE_GPU_TREE_BUILDER = "1", CUDA_VISIBLE_DEVICES = "1" }
[[processors.c2]]
cgroup.cpuset = "28-35"
envs = { CUDA_VISIBLE_DEVICES = "2,3" }
[[processors.tree_d]]
cgroup.cpuset = "40-45"
提示
您也可以参考社区damocles
性能测试的相关技术文档 (opens new window),作为参考。
使用启动damocles-worker
。
$ /path/to/damocles-worker daemon -c /path/to/damocles-worker.toml
提示
以上关于 sector-manager.cfg 和 venus-worker.toml 配置文件只是一份最简单的可运行配置,其他配置的详细信息可参这些文档。
提示
关于配置文件需要注意的是:damocles-worker.toml
的[[attached]]
中的name = "xxx"
和路径要与sector-manager.cfg
中的[[Common.PersistStores]] Name = "xxx"
和路径一致。
# 问题?
来Slack (opens new window)上找我们吧!