本指南涵盖了 Lotus Miner 配置文件,详细介绍了其中包含的选项的含义。
Lotus Miner 配置是在安装步骤中的初始化步骤之后创建的,并且在定义时放置在 ~/.lotusminer/config.toml 或 $LOTUS_MINER_PATH/config.toml 中。
默认配置中所有项目都带有注释,因此为了自定义其中一个项目,需要删除前面的注释符号 #
为了使任何配置更改生效,必须重新启动矿机。
[API] # 矿工API绑定地址 ListenAddress = "/ip4/127.0.0.1/tcp/2345/http" # 这应该设置为从外部可以看到的矿工 API 地址 RemoteListenAddress = "127.0.0.1:2345" # 一般网络超时值 Timeout = "30s"
如你所见,监听地址默认绑定到本地环回接口,如果您需要向其他机器开放对矿工API的访问权限,您将需要将此设置为要使用的网络接口的IP地址,或设置为0.0.0.0(表示“所有接口”)。请注意,即使公开,API访问仍然受JWT令牌保护。
将 RemoteListenAddress 配置为其他节点必须使用才能访问此 API 的值。通常,它是矿工的 IP 地址和 API 端口,但根据您的设置(代理、公共 IP 等),它可能是不同的 IP。
本节配置矿工的嵌入式 Libp2p 节点。如设置说明中所述,使用矿机的公共 IP 和固定端口来调整此部分非常重要:
[Libp2p] # libp2p 主机的绑定地址。 0 表示随机端口。 # 类型:多地址字符串数组 ListenAddresses = ["/ip4/0.0.0.0/tcp/0", "/ip6/::/tcp/0"] # 插入您想要明确的任何地址 # 在这里向其他节点宣布。否则,他们被猜到了。 # 类型:多地址字符串数组 AnnounceAddresses = [] # 插入任何地址以避免在此处收到公告。 # 类型:多地址字符串数组 NoAnnounceAddresses = [] # 连接管理器设置,限制你的机器的链接数。 ConnMgrLow = 150 ConnMgrHigh = 180 ConnMgrGrace = "20s"
如果已建立的连接数超过为 ConnMgrHigh 设置的值,则连接管理器将开始修剪现有连接,直到达到为 ConnMgrLow 设置的值。比 ConnMgrGrace 更年轻的连接将被保留。
此部分控制一些 Pubsub 设置。 Pubsub 用于在网络中分发消息:
[Pubsub] # 通常,您不会运行 pubsub 引导节点,因此将其保留为 false Bootstrapper = false # FIXME RemoteTracer = "" #DirectPeers 指定具有直接对等协议的对等点。 这些对等点连接在网格之外,所有(有效)消息都无条件地转发给它们。 路由器将保持与这些对等方的开放连接。 请注意,对等协议应与两端对称配置的直接对等体互惠。 # 类型:多地址 peerinfo 字符串数组,必须包含 peerid (/p2p/12D3K...) DirectPeers = []
此部分控制用于进行存储和检索交易的参数:
[Pubsub] # 通常,您不会运行 pubsub 引导节点,因此将其保留为 false Bootstrapper = false # FIXME RemoteTracer = "" #DirectPeers 指定具有直接对等协议的对等点。 这些对等点连接在网格之外,所有(有效)消息都无条件地转发给它们。 路由器将保持与这些对等方的开放连接。 请注意,对等协议应与两端对称配置的直接对等体互惠。 # 类型:多地址 peerinfo 字符串数组,必须包含 peerid (/p2p/12D3K...) DirectPeers = []
ExpectedSealDuration 是对密封需要多长时间的估计,用于拒绝开始时间可能早于预期密封完成时间的交易。可以通过基准测试或抵押一个扇区来做估计。
ExpectedSealDuration 的最终值应等于 (TIME_TO_SEAL_A_SECTOR + WaitDealsDelay) * 1.5。这个等式确保矿工不会承诺过早密封该扇区。
PublishStorageDeals 消息可以在一条消息中发布许多交易。 当交易准备好发布时,Lotus 将等待 PublishMsgPeriod 在发送 PublishStorageDeals 消息之前准备好其他交易。
但是,一旦 MaxDealsPerPublishMsg 准备就绪,Lotus 将立即发布所有交易。
例如,如果 PublishMsgPeriod 为 1 小时:
如果 MaxDealsPerPublishMsg 为 2,那么在上面的例子中,当交易 2 准备在 1:30 发布时,Lotus 会立即在单个 PublishStorageDeals 消息中发布 Deals 1 & 2。 Deal 3 将在随后的 PublishStorageDeals 消息中发布
如果 PublishStorageDeals 中的任何交易在执行时未通过验证,或者如果开始时期已经过去,则所有交易都将无法发布。
您的用例可能需要对交易参数组合进行非常精确和动态的控制。
Lotus 提供了两个 IPC 钩子,允许您在矿工接受之前为每笔交易命名要执行的命令:
执行的命令在标准输入上接收交易参数的 JSON 表示,完成后,其退出代码被解释为:
拒绝任何检索交易的最简单的过滤器是这样的:
RetrievalFilter = "/bin/false". /bin/false 是立即以代码 1 退出的二进制文件。
这个 Perl 脚本 让矿工拒绝特定客户,只接受设置相对较快开始的交易。
您还可以使用第三方内容策略框架,例如 Murmuration Labs 的 bitscreen:
[Pubsub] # 通常,您不会运行 pubsub 引导节点,因此将其保留为 false Bootstrapper = false # FIXME RemoteTracer = "" #DirectPeers 指定具有直接对等协议的对等点。 这些对等点连接在网格之外,所有(有效)消息都无条件地转发给它们。 路由器将保持与这些对等方的开放连接。 请注意,对等协议应与两端对称配置的直接对等体互惠。 # 类型:多地址 peerinfo 字符串数组,必须包含 peerid (/p2p/12D3K...) DirectPeers = []
此部分控制有关扇区密封的一些行为:
[Sealing] # 在任何给定时间开始密封之前,可以等待更多交易打包的扇区数量上限。 # 如果矿工同时接受多个交易,将创建最多 MaxWaitDealsSectors 的新扇区。 # 如果并行接受多于 MaxWaitDealsSectors 的交易,则仅并行处理 MaxWaitDealsSectors 的交易 # 请注意,相对于交易摄取率将此数字设置得太高可能会导致扇区打包效率不佳 MaxWaitDealsSectors = 2 # 创建新的 CC 扇区时可以同时密封多少个扇区的上限(0 = 无限制) MaxSealingSectors = 0 # 创建具有交易的新扇区时可以同时封闭多少个扇区的上限(0 = 无限制) MaxSealingSectorsForDeals = 0 # 新创建的扇区在开始密封之前将等待更多交易打包的时间段。 # 填满的扇区将立即开始密封 WaitDealsDelay = "6h0m0s" # 是否保留交易数据的未密封副本,无论客户是否要求。 这让矿工 # 避免后期解封数据的成本相对较高,代价是更多的存储空间 AlwaysKeepUnsealedCopy = true # 在向链提交扇区证明之前运行扇区确定 FinalizeEarly = false # 启用/禁用预提交批处理(nv13 后生效) BatchPreCommits = true # 最大预提交批次大小最多 256 个扇区 - 将立即发送超过此大小的批次 MaxPreCommitBatch = 256 # 在超过最小批量大小后提交批次之前等待多长时间 PreCommitBatchWait = "24h0m0s" # 在扇区/批量交易开始到期之前强制批量提交的时间缓冲区 PreCommitBatchSlack = "3h0m0s" # 启用/禁用提交聚合(nv13 后生效) AggregateCommits = true # 最小批量提交大小,不小于 4 MinCommitBatch = 4 # 最大批量提交大小高达 819 个扇区 - 将立即发送高于此大小的批次 MaxCommitBatch = 819 # 在超过最小批量大小后提交批次之前等待多长时间 CommitBatchWait = "24h0m0s" # 在批量扇区/交易开始到期之前强制批量提交的时间缓冲区 CommitBatchSlack = "1h0m0s" # 网络 BaseFee 下面停止进行提交聚合,而是单独向链提交证明 AggregateAboveBaseFee = 0.00000000015 #0.15nanoFIL TerminateBatchMax = 100 TerminateBatchMin = 1 TerminateBatchWait = "5m0s"
FIP-0008 引入的 PreCommitSectorsBatch 支持矿工一次预提交多个扇区。
在 Lotus v1.10.0 及更高版本中,如果 BatchPreCommit 设置为 false,一旦准备好,预承诺将通过 PreCommitSector 消息发送到链。
如果 BatchPreCommit 设置为 true,lotus 将批量预提交,直到 MaxPreCommitBatch、PreCommitBatchWait 或 PreCommitBatchSlack 中的任何一个被命中:
请注意,如果 MaxPreCommitBatch、PreCommitBatchWait 或 PreCommitBatchSlack
中的任何一个被命中,则将发送当前批次。
要检查批处理队列中的扇区预承诺列表,运行:
./lotus-miner sectors batching precommit
输出的是扇区 ID:
$ ./lotus-miner sectors batching precommit 14 15 16
要忽略配置并强制推送当前批次,请运行:
./lotus-miner sectors batching precommit --publish-now=true
然后在输出中,列出了 PreCommitSectorsBatch 消息的消息 CID 和正在提交的扇区的预承诺的扇区号:
$ ./lotus-miner sectors batching precommit --publish-now=true Batch 0: Message: bafy2bzacecgihnlvbsqu7yksco3vs5tzk3ublbcnkedlofr6nhbq55k5ye3ci Sectors: 14 OK 15 OK 16 OK
FIP-0013 引入的 ProveCommitAggregate 支持矿工证明提交多个扇区。
在 Lotus v1.10.0 及更高版本中,如果 AggregateCommits 设置为 false,一旦准备好,prove-commitments 将通过 ProveCommitSector 消息发送到链。
如果 AggregateCommits 设置为 true,lotus 将聚合和批处理预提交,直到 MaxCommitBatch、CommitBatchWait 或 CommitBatchSlack 中的任何一个被命中:
MinCommitBatch 是在一个 ProveCommitAggregate 消息中批处理的最小扇区证明承诺数量。根据 FIP-0013,该值不能小于 4,这是证明-提交聚合在单个证明-提交Gas 成本上胜出的交叉点。如果 MaxCommitBatch、CommitBatchWait 或 CommitBatchSlack 中的任何一个被证明提交的数量命中,则批处理队列小于 MinCommitBatch,那么该批次中的证明承诺将通过 ProveCommitSector 单独进行。
注意:聚合证明会产生折扣 Gas Charge,因此总体而言,与链上相同数量的证明相比,Gas 使用量会更少,但会收取最低费用。将更多的证明聚合到单个聚合消息中每个证明的成本更低,这意味着聚合 1000 个证明比聚合 10 个扇区更有利。因此,如果矿工想要装载更多存储,建议将更多证明聚合到一条消息中。
要检查批处理队列中的扇区证明承诺列表,请运行:
./lotus-miner sectors batching commit
输出的是扇区 ID:
$ ./lotus-miner sectors batching commit 10 11 12
要忽略配置并强制推送当前批次,请运行:
./lotus-miner sectors batching commit --publish-now=true
然后在输出中,列出了 ProveCommitAggregate 消息的消息 CID 和正在提交的扇区的证明承诺的扇区号:
$ ./lotus-miner sectors batching commit --publish-now=true Batch 0: Message: bafy2bzacedtmykgf5g4evdvapacpmo4l32ewu5l7yxqkzjh3h6fhev7v7qoys Sectors: 15 OK 17 OK 12 OK 10 OK
如果队列中的扇区小于 MinCommitBatch,则将为每个扇区发送单独的 ProveCommitSector 消息:
Batch 0: Message: bafy2bzacedpwysxdsg2ft3hfbwn6ayyaanivfwkx4inav3zm34hwmmwgsljkk Sectors: 18 OK Batch 1: Message: bafy2bzacedrx7l34ckaue7hm2ubousl3djuigyu2xw4xzywgkhttxecsm5ba2 Sectors: 19 OK
存储扇区控制矿工是否可以执行某些密封操作。根据设置和额外 密封工人 的使用,您可能需要修改一些选项。
[Storage] # Upper bound on how many sectors can be fetched in parallel by the storage system at a time ParallelFetchLimit = 10 # Sealing steps that the miner can perform itself. Sometimes we have a dedicated seal worker to do them and do not want the miner to commit any resources for this. AllowAddPiece = true AllowPreCommit1 = true AllowPreCommit2 = true AllowCommit = true AllowUnseal = true
费用部分允许为矿工提交给链的不同消息设置gas消耗限制:
[Fees] # Maximum fees to pay MaxPreCommitGasFee = "0.025 FIL" MaxCommitGasFee = "0.05 FIL" MaxTerminateGasFee = "0.5 FIL" # This is a high-value operation, so the default fee is higher. MaxWindowPoStGasFee = "5 FIL" MaxPublishDealsFee = "0.05 FIL" MaxMarketBalanceAddFee = "0.007 FIL" [Fees.MaxPreCommitBatchGasFee] Base = "0 FIL" PerSector = "0.02 FIL" [Fees.MaxCommitBatchGasFee] Base = "0 FIL" PerSector = "0.03 FIL"
根据网络拥塞情况,消息的基本费用可能会增加或减少。您的 gas 限额必须大于要包含的消息的基本费用。但是,在基础费用非常高的情况下,非常大的最大费用会导致资金快速燃烧,因为矿机在正常操作期间会自动提交消息,因此请注意这一点。还需要有比任何最高费用集更多的可用资金,即使实际费用将远低于最高费用集。
设置您愿意为每个扇区的封装支付的最高成本,MaxPreCommitBatchGasFee.PerSector/MaxCommitBatchGasFee.PerSector以避免意外的高成本。
注意:当前的 MaxCommitBatchGasFee.PerSector 足以聚合 6 个扇区的证明。根据您的操作分别调整。如果值太低,消息可能会在内存池中等待很长时间。如果您没有足够的资金,则不会发送消息。
地址部分允许用户指定发送消息的其他地址。当网络费用很高时,这有助于减轻重要消息的队头阻塞。有关更多详细信息,请参阅矿工地址部分。
[Addresses] # Addresses to send PreCommit messages from PreCommitControl = [] # Addresses to send Commit messages from CommitControl = [] # Disable the use of the owner address for messages which are sent automatically. # This is useful when the owner address is an offline/hardware key DisableOwnerFallback = false # Disable the use of the worker address for messages for which it's possible to use other control addresses DisableWorkerFallback = false