# damocles-manager 的配置解析

damocles-manager 是与链交互、维持扇区的主体,我们来了解一下它的配置文件结构和配置方式。

在完成初始化之后,我们可以得到一份原始的配置内容:

# Default config:
[Common]
[Common.API]
#Gateway = ["/ip4/{api_host}/tcp/{api_port}"]
#Token = "{some token}"
#ChainEventInterval = "1m0s"
#Chain = "/ip4/{api_host}/tcp/{api_port}"
#Messager = "/ip4/{api_host}/tcp/{api_port}"
#Market = "/ip4/{api_host}/tcp/{api_port}"
#
[[Common.PieceStores]]
#Name = "{store_name}"
#Path = "{store_path}"
#ReadOnly = false
#Plugin = ""
#PluginName = "s3store"
[Common.PieceStores.Meta]
#SomeKey = "SomeValue"
#
[Common.PieceStorePreset]
#Strict = false
#ReadOnly = false
#Weight = 1
#AllowMiners = [1, 2]
#DenyMiners = [3, 4]
#StorageConfigPath = "/optional/path/to/your/storage.json"
[Common.PieceStorePreset.Meta]
#SomeKey = "SomeValue"
#
[[Common.PersistStores]]
#Name = "{store_name}"
#Path = "{store_path}"
#Strict = false
#ReadOnly = false
#Weight = 0
#AllowMiners = [1, 2]
#DenyMiners = [3, 4]
#Plugin = ""
#PluginName = "s3store"
[Common.PersistStores.Meta]
#SomeKey = "SomeValue"
[Common.DB]
#Driver = "badger"
[Common.DB.Badger]
#BaseDir = ""
[Common.Proving]
#ParallelCheckLimit = 128
#SingleCheckTimeout = "10m0s"
#PartitionCheckTimeout = "20m0s"
[Common.Proving.WorkerProver]
JobMaxTry = 2
HeartbeatTimeout = "15s"
JobLifetime = "25h0m0s"

[[Miners]]
#Actor = 10086
[Miners.Sector]
#InitNumber = 0
#MinNumber = 10
#MaxNumber = 1000000
#Enabled = true
#EnableDeals = false
#LifetimeDays = 540
#Verbose = false
[Miners.SnapUp]
#Enabled = false
#Sender = "f1abjxfbp274xpdqcpuaykwkfb43omjotacm2p3za"
#SendFund = true
#GasOverEstimation = 1.2
#GasOverPremium = 0.0
#GasFeeCap = "5 nanoFIL"
#MaxFeeCap = ""
#CleanupCCData = true
#MessageConfidence = 15
#ReleaseConfidence = 30
[Miners.SnapUp.Retry]
#MaxAttempts = 10
#PollInterval = "3m0s"
#APIFailureWait = "3m0s"
#LocalFailureWait = "3m0s"
[Miners.Commitment]
#Confidence = 10
[Miners.Commitment.Pre]
#Sender = "f1abjxfbp274xpdqcpuaykwkfb43omjotacm2p3za"
#SendFund = true
#GasOverEstimation = 1.2
#GasOverPremium = 0.0
#GasFeeCap = "5 nanoFIL"
#MaxFeeCap = ""
[Miners.Commitment.Pre.Batch]
#BatchCommitAboveBaseFee = "0"
#Threshold = 16
#MaxWait = "1h0m0s"
#CheckInterval = "1m0s"
#GasOverEstimation = 1.2
#GasOverPremium = 0.0
#GasFeeCap = "5 nanoFIL"
#MaxFeeCap = ""
[Miners.Commitment.Prove]
#Sender = "f1abjxfbp274xpdqcpuaykwkfb43omjotacm2p3za"
#SendFund = true
#GasOverEstimation = 1.2
#GasOverPremium = 0.0
#GasFeeCap = "5 nanoFIL"
#MaxFeeCap = ""
[Miners.Commitment.Prove.Batch]
#BatchCommitAboveBaseFee = "0"
#Threshold = 16
#MaxWait = "1h0m0s"
#CheckInterval = "1m0s"
#GasOverEstimation = 1.2
#GasOverPremium = 0.0
#GasFeeCap = "5 nanoFIL"
#MaxFeeCap = ""
[Miners.Commitment.Terminate]
#Sender = "f1abjxfbp274xpdqcpuaykwkfb43omjotacm2p3za"
#SendFund = true
#GasOverEstimation = 1.2
#GasOverPremium = 0.0
#GasFeeCap = "5 nanoFIL"
#MaxFeeCap = ""
[Miners.Commitment.Terminate.Batch]
#BatchCommitAboveBaseFee = "0"
#Threshold = 5
#MaxWait = "1h0m0s"
#CheckInterval = "1m0s"
#GasOverEstimation = 1.2
#GasOverPremium = 0.0
#GasFeeCap = "5 nanoFIL"
#MaxFeeCap = ""
[Miners.PoSt]
#Sender = "f1abjxfbp274xpdqcpuaykwkfb43omjotacm2p3za"
#Enabled = true
#StrictCheck = true
#Parallel = false
#GasOverEstimation = 1.2
#GasOverPremium = 0.0
#GasFeeCap = "5 nanoFIL"
#MaxFeeCap = ""
#Confidence = 10
#SubmitConfidence = 0
#ChallengeConfidence = 0
#MaxRecoverSectorLimit = 0
#MaxPartitionsPerPoStMessage = 0
#MaxPartitionsPerRecoveryMessage = 0
[Miners.Proof]
#Enabled = false
[Miners.Sealing]
#SealingEpochDuration = 0
#UseSyntheticPoRep = false

我们将逐一分析其中的可配置项。

# [Common]

Common 是公共配置,又分成四个子配置项:

# [Common.API]

Common.API 是接口相关的配置,其内容包含:

[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}"

# 侦测链高度变化的间隔时间,选填项,时间类型
# 默认值为 1min
#ChainEventInterval = "1m0s"

# [Common.Plugins]

Common.Plugins 配置 damocles-manager 的插件存放路径

[Common.Plugins]
# 插件存放路径,选填项,字符串类型
# 默认为空字符串,表示不加载任何插件
# 建议使用绝对路径
Dir = ""

# [[Common.PieceStores]]

Common.PieceStores是用于配置本地订单 piece 数据的选项。当存在可用的离线存储时,可以配置此项,避免通过公网获取订单的piece 数据。

每一个本地存储目录对应一个 Common.PieceStores 配置块。

# 基础配置范例

[[Common.PieceStores]]
# 名称,选填项,字符串类型
# 默认为路径对应的绝对路径
#Name = "remote-store1"

# 路径,必填项,字符串类型
Path = "/mnt/mass/piece1"

# 插件路径,选填项,字符串类型
# 默认为 null
# 如果希望使用自定义存储方案,可以通过编写符合要求的 golang plugin,并在此设置。
# 已过时,请使用 PluginName 代替
#Plugin = "path/to/objstore-plugin"

# 插件名称,选填项,字符串类型
# 默认为空字符串
# 如果希望使用自定义存储方案,可以通过编写符合要求的 golang plugin,并在此设置。
#PluginName = "s3store"

# 元信息,选填项,字典类型
# 内部值为 Key = "Value" 的格式
# 默认值为 null
# 用于支持不同类型存储方案
[Common.PieceStores.Meta]
#SomeKey = "SomeValue"
#

# [Common.PieceStorePreset]

PersistStore 指的是扇区持久化数据存储。与之对应的是 damocles-worker 中的 attached 概念。

PieceStorePreset 为全局的所有 PersistStore 配置,提供了一套可自定义的预设值,与后一章节中的 [[Common.PersistStores]] 配置项相呼应。合理利用 PieceStorePreset 可以大大简化 [[Common.PersistStores]] 的配置。

同时,Damocles-Manager 还支持 lotus 风格的存储配置文件(例如 lotus-miner repo 下默认生成的 storage.json 文件)。Damocles-Manager 会根据 PieceStorePreset 为该配置文件下的每一个路径在内存中生成一个对应的 PersistStore 配置项。

# 基础配置范例

[Common.PieceStorePreset]

# 只读,选填项,布尔类型
# 默认值为 false
# 自 v0.4.0 起,持久化存储分配逻辑转到 damocles-manager 上
# 可通过此配置设置存储是否可以继续写入
ReadOnly = false

# 可选项,布尔类型
# 默认 false
# 是否验证`Path`路径是否为通常文件,true 时,`Path`为软连接等非通常文件时会报错
Strict = false

# 权重,选填项,数字类型
# 默认值为 1
# 当填写值为 0 时,等效于 1
# 自 v0.4.0 起,持久化存储分配逻辑转到 damocles-manager 上
# 可通过此配置设置多个持久化存储之间的权重配比
# 每个持久化存储被选中的概率为 `weight / sum`, `sum` 是所有可用的持久化存储权重的和
# 例:配置 3 个 持久化存储,weight 分别为 2, 1, 1。则被选中的概率分别为 50%, 25%, 25%
Weight = 1


# 允许进行分配的矿工号列表,选填项,数字数组类型
# 默认为 null
# 当不设置时,视为允许全部矿工号;当设置时,则相当于白名单,仅允许分配给列出的矿工号
# 如果一个矿工号同时出现在 AllowMiners 和 DenyMiners 中时,DenyMiners 优先生效,即视为拒绝
AllowMiners = [1, 2]

# 拒绝进行分配的矿工号列表,选填项,数字数组类型
# 默认为 null
# 当不设置时,视为不拒绝任何矿工号;当设置时,则相当于黑名单,将拒绝为列出的矿工号分配
# 如果一个矿工号同时出现在 AllowMiners 和 DenyMiners 中时,DenyMiners 优先生效,即视为拒绝
DenyMiners = [3, 4]

# lotus 风格的存储配置文件的路径,选填项,字符串类型
# 默认为空字符串
# 如果只是希望简单地沿用 lotus 的存储路径配置,可以选择填写此项
# 但是如果希望更加深入地对每个存储路径进行细致的设置,建议使用 `[[Common.PersistStores]]` 配置项
StorageConfigPath = "/optional/path/to/your/storage.json"

# 元信息,选填项,字典类型
# 内部值为 Key = "Value" 的格式
# 默认值为 null
# 用于支持不同类型存储方案的预备,目前没有任何作用
[Common.PersistStores.Meta]
#SomeKey = "SomeValue"
#
  • storage.json
{
  "StoragePaths": [
    {
      "Name": "persist",
      "Path": "/root/persist"
    }
  ]
}

其中 Name 属性可以省略,省略时默认使用 Path 属性的值作为 Name

# [[Common.PersistStores]]

Common.PersistStores 用于配置扇区持久化数据存储。与之对应的是 damocles-worker 中的 attached 概念。

Common.PieceStores 类似,每一个持久化存储目录对应一个 Common.PersistStores 配置块。

# 基础配置范例

[[Common.PersistStores]]
# 名称,选填项,字符串类型
## 默认为路径对应的绝对路径
#Name = "remote-store1"

# 路径,必填项,字符串类型
# 建议使用绝对路径
Path = "/mnt/remote/10.0.0.14/store"

# 只读,选填项,布尔类型
# 默认值为 false
# 自 v0.4.0 起,持久化存储分配逻辑转到 damocles-manager 上
# 可通过此配置设置存储是否可以继续写入
#ReadOnly = false

# 可选项,布尔类型
# 默认 false
# 是否验证`Path`路径是否为通常文件,true 时,`Path`为软连接等非通常文件时会报错
#Strict = false

# 权重,选填项,数字类型
# 默认值为 1
# 当填写值为 0 时,等效于 1
# 自 v0.4.0 起,持久化存储分配逻辑转到 damocles-manager 上
# 可通过此配置设置多个持久化存储之间的权重配比
# 每个持久化存储被选中的概率为 `weight / sum`, `sum` 是所有可用的持久化存储权重的和
# 例:配置 3 个 持久化存储,weight 分别为 2, 1, 1。则被选中的概率分别为 50%, 25%, 25%
#Weight = 1

# 插件路径,选填项,字符串类型
# 默认为 null
# 如果希望使用自定义存储方案,可以通过编写符合要求的 golang plugin,并在此设置。
# 已过时,请使用 PluginName 代替
#Plugin = "path/to/objstore-plugin"

# 允许进行分配的矿工号列表,选填项,数字数组类型
# 默认为 null
# 当不设置时,视为允许全部矿工号;当设置时,则相当于白名单,仅允许分配给列出的矿工号
# 如果一个矿工号同时出现在 AllowMiners 和 DenyMiners 中时,DenyMiners 优先生效,即视为拒绝
#AllowMiners = [1, 2]

# 拒绝进行分配的矿工号列表,选填项,数字数组类型
# 默认为 null
# 当不设置时,视为不拒绝任何矿工号;当设置时,则相当于黑名单,将拒绝为列出的矿工号分配
# 如果一个矿工号同时出现在 AllowMiners 和 DenyMiners 中时,DenyMiners 优先生效,即视为拒绝
#DenyMiners = [3, 4]

# 插件路径,选填项,字符串类型
# 默认为空字符串
# 如果希望使用自定义存储方案,可以通过编写符合要求的 golang plugin,并在此设置。
#PluginName = "s3store"

# 元信息,选填项,字典类型
# 内部值为 Key = "Value" 的格式
# 默认值为 null
# 用于支持不同类型存储方案的预备,目前没有任何作用
[Common.PersistStores.Meta]
#SomeKey = "SomeValue"
#

# [Common.MongoKVStore] 已废弃

Common.MongoKVStore 用于配置 damocles-manager 是否启用 Mongo 作为 sealing 过程中使用的 KV 数据库。

# 基础配置范例

[Common.MongoKVStore]
# 启用 Mongo 的开关,选填项,布尔类型
# 默认值为 false
Enable = true
# 使用的 Mongo 的 dsn,在 Enable 为 true 的时候为必填项,字符串类型
DSN = "mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000"
# 使用的 Mongo 的数据库名,在 Enable 为 true 的时候为必填项,字符串类型
DatabaseName = "test"

# [Common.Proving]

用于配置证明任务的并发以及超时时间

配置范例:

# 检查扇区时的最大并行数量,可选项,数字类型
# 默认值为 128。设置为 0 表示不限制并行数量
# 注意:将此值设置得太高可能会使节点因堆栈不足而崩溃
# 注意:将此值设置得太低可能会使扇区 challenge 读取速度变慢,导致 PoSt 失败
#ParallelCheckLimit = 128
# 单个扇区的验证预检查所需的最长时间 可选项,时间类型
# 默认值为 10m0s
# 如果检查超时,将跳过扇区。
#SingleCheckTimeout = "10m0s"
# 整个分区的验证预检查所需的最长时间,可选项,时间类型
# 如果检查超时,分区中未按时检查的扇区将被跳过
#PartitionCheckTimeout = "20m0s"

# [Common.Proving.WorkerProver]

用于配置 worker prover 模块

配置范例:

# WindowPoSt 任务的最大尝试次数,可选项,数字类型
# 默认值为 2
# 尝试次数超过 JobMaxTry 的 WindowPoSt 任务只能通过手动 reset 的方式被重新执行
JobMaxTry = 2
# WindowPoSt 任务的心跳超时时间,可选项,时间字符串类型
# 默认值为 15s
# 超过此时间没有发送心跳的任务将会被设置为失败并重试
HeartbeatTimeout = "15s"
# WindowPoSt 任务的心跳超时时间,可选项,时间字符串类型
# 默认值为 25h
# 创建时间超过此时间的 WindowPoSt 任务将会被删除
JobLifetime = "25h0m0s"

# [Common.DB]

Common.DB 用于配置 sealing 过程中使用的 KV 数据库。目前支持 badger 本地数据库和 mongo 数据库。

# 基础配置范例:

[Common.DB]
# 指定数据库,可选项,字符串类型
# 默认值为 badger
# 可选填 badger | mongo | plugin
Driver = "badger"
[Common.DB.Badger]
# Badger 数据库文件所在目录,可选项,字符串类型
# 默认为空字符串
# BaseDir 为空字符串时 damocles-manager 会使用 home dir(默认为 ~/.damocles-manager) 存放 Badger 数据库文件
#BaseDir = ""

[Common.DB.Mongo]
# 使用的 Mongo 的 dsn,在 Enable 为 true 的时候为必填项,字符串类型
DSN = "mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000"
# 使用的 Mongo 的数据库名,在 Enable 为 true 的时候为必填项,字符串类型
DatabaseName = "test"

# kvstore 插件配置
[Common.DB.Plugin]
# 插件名称,选填项,字符串类型
# 默认为 null
PluginName = "redis"

# 元信息,选填项,字典类型
# 内部值为 Key = "Value" 的格式
# 默认值为 null
# Meta 数据会传入插件的构造函数中
[Common.DB.Plugin.Meta]
#SomeKey = "SomeValue"
#

# [[Miners]]

Miners 是较为重要的一个配置项,用于针对某一个 SP 定义其行为和策略。

damocles 被设计为同一套组件可以支持多个 SP ,在 damocles-manager 中的具体表现就是可以根据需要设置多个 Miners 配置块。

# 主配置项

[[Miners]]
# `SP` actor id,必填项,数字类型
Actor = 10086

除主配置向外, Miners 同样包含多个不同的子配置块,下面我们一一分析

# [Miners.Sector]

用于控制扇区分配的策略。

[Miners.Sector]
# 扇区起始编号,选填项,数字类型
# 默认值为 0
# 已废弃
InitNumber = 0

# 扇区最小编号,选填项,数字类型
# 默认值为 null
# 与 InitNumber 相比,当设置此项时,
# 1. 任何时刻,分配器都不会给出小于等于此值的扇区编号。
# 2. 此项的值可以在集群运行过程中调整。
#    提高配置值,分配结果将始终遵循 1) 的描述。
#    降低配置值通常不会产生效果。
#
# 未设置此项时,如果 InitNumber 为非 0 值,则等效于此项。
#MinNumber = 10

# 扇区编号上限,选填项,数字类型
# 默认值为 null,表示无上限限制
#MaxNumber = 1000000

# 是否允许分配扇区,选填项,布尔类型
# 默认值为 true,即开启分配
# false, 不再进行封装任务
#Enabled = true

# 是否允许分配订单,选填项,布尔类型
# 默认值为 false
#EnableDeals = false

# CC 扇区的生命周期,单位为 天,选填项,数字类型
# 默认值为 540
#LifetimeDays = 540

# Sector 相关模块的日志详尽程度,选填项,布尔类型
# 默认值为 false,即精简日志输出
#Verbose = false

# [Miners.SnapUp]

用于控制 SnapDeal 的生产策略

[Miners.SnapUp]
# 是否启用,选填项,布尔类型
# 默认值为 false
#Enabled = false

# 发送地址,在启用的情况下为必填项,地址类型
#Sender = "t1abjxfbp274xpdqcpuaykwkfb43omjotacm2p3za"

# 提交上链消息时是否从 Sender 发送必要的资金,选填项,布尔类型
# 默认值为 true
# false 时,资金从 miner 出
#SendFund = true

# 单条提交消息的 Gas 估算倍数,选填项,浮点数类型
# 默认值为 1.2
#GasOverEstimation = 1.2

# 单条提交消息的 GasFeeCap 限制,选填项,FIL 值类型
# 默认值为 5 nanoFIL
#GasFeeCap = "5 nanoFIL"

# 已废弃
#MaxFeeCap = ""

# 单条提交消息的 GasPremium 估算倍数,选填项,浮点数类型
# 默认值为 0.0
#GasOverPremium = "0.0"

# snapdeal 消息上链后是否删除原 cc 扇区数据
# 默认值为 true
#CleanupCCData = true

# 消息上链的确信高度,选填项,数字类型
# 默认值为 15
#MessageConfidence = 15

# 释放旧数据存储空间的确信高度,选填项,数字类型
# 默认值为 30
#ReleaseConfidence = 30

# SnapUp 提交重试策略
[Miners.SnapUp.Retry]

# 最大重试次数,选填项,数字类型
# 默认为 NULL,表示不做限制
#MaxAttempts = 10

# 轮询状态的间隔,选填项,时间类型
# 默认值为 3min
#PollInterval = "3m0s"

# API 接口异常的重试间隔,选填项,时间类型
# 默认值为 3min
#APIFailureWait = "3m0s"

# 本地异常的重试间隔,如本地数据库异常、本地存储异常等,选填项,时间类型
# 默认值为 3min
#LocalFailureWait = "3m0s"

# [Miners.Commitment]

用于配置封装消息提交策略的通用部分。

[Miners.Commitment]
# 消息的稳定高度,选填项,数字类型
# 默认值为 10
#Confidence = 10

# [Miners.Commitment.Pre]

用于配置 PreCommit 消息提交的策略

[Miners.Commitment.Pre]
# 提交上链消息时是否从 Sender 发送必要的资金,选填项,布尔类型
# 默认值为 true
#SendFund = true

# 发送地址,必填项,地址类型
Sender = "t1abjxfbp274xpdqcpuaykwkfb43omjotacm2p3za"

# 单条提交消息的 Gas 估算倍数,选填项,浮点数类型
# 默认值为 1.2
#GasOverEstimation = 1.2

# 单条提交消息的 GasFeeCap 限制,选填项,FIL 值类型
# 默认值为 5 nanoFIL
#GasFeeCap = "5 nanoFIL"

# 已废弃
#MaxFeeCap = ""

# 单条提交消息的 GasPremium 估算倍数,选填项,浮点数类型
# 默认值为 0.0
#GasOverPremium = "0.0"

# 聚合提交的策略配置块
[Miners.Commitment.Pre.Batch]
# 启用聚合的 basefee 阈值,当 basefee 大于当前阈值时,启用聚合,选填项,字符串类型
# 默认值为 "0",当阈值设置为 0 时,表示不启用聚合
# 示例: "2 nanoFil", "1.5 nanoFil", "1 nFil"
#BatchCommitAboveBaseFee = "0"

# 最小聚合条数,选填项,数字类型
# 默认值为 16,即最小聚合条数为 16 条
#Threshold = 16

# 最大等待时间,选填项,时间类型
# 默认值为 1h,即最大等待 1 小时
#MaxWait = "1h0m0s"

# 检查间隔,选填项,时间类型
# 默认值为 1min,即每隔 1min 检查一次是否满足聚合条件
#CheckInterval = "1m0s"

# 聚合提交消息的 Gas 估算倍数,选填项,浮点数类型
# 默认值为 1.2
#GasOverEstimation = 1.2

# 聚合提交消息的 GasFeeCap 限制,选填项,FIL 值类型
# 默认值为 5 nanoFIL
#GasFeeCap = "5 nanoFIL"

# 已废弃
#MaxFeeCap = ""

# 聚合提交消息的 GasPremium 估算倍数,选填项,浮点数类型
# 默认值为 0.0
#GasOverPremium = "0.0"

# [Miners.Commitment.Prove]

用于配置 ProveCommit 消息提交的策略,其配置项和作用与 Miners.Commitment.Pre内的完全一致。

# [Miners.Commitment.Terminate]

用于配置 TerminateSectors 消息提交的策略,其配置项和作用与 Miners.Commitment.Pre 内的基本一致。实际场景中发送此类消息不会很频繁,建议配置单条提交模式,使用聚合提交模式时,Threshold 建议配置较小的值,保证消息及时上链。

# [Miners.PoSt]

用于配置 WindowPoSt 的相关策略。

[Miners.PoSt]
# 发送地址,必填项,地址类型
Sender = "t1abjxfbp274xpdqcpuaykwkfb43omjotacm2p3za"

# 是否启用,选填项,布尔类型
# 默认值为 true
#Enabled = true

# 是否对扇区文件进行强校验,选填项,布尔类型
# 默认值为 true
# 开启时,除了对文件存在性进行判断外,还会尝试读取部分信息,如元数据等
#StrictCheck = true

# 是否启用并行证明,选填项,布尔类型
# 默认值为 false
# 开启时,同一个 deadline 内的多个 partition 将会并行展开证明
# 注意:当设置了外部证明器 (ext-prover),且有多个外部证明器可用时,设置此项才有正面影响
#Parallel = false

# WindowPoSt 消息的 Gas 估算倍数,选填项,浮点数类型
# 默认值为 1.2
#GasOverEstimation = 1.2

# WindowPoSt 消息的 GasFeeCap 限制,选填项,FIL 值类型
# 默认值为 5 nanoFIL
#GasFeeCap = "5 nanoFIL"

# 已废弃
#MaxFeeCap = ""

# WindowPoSt 消息的 GasPremium 估算倍数,选填项,浮点数类型
# 默认值为 0.0
#GasOverPremium = "0.0"

# 消息的稳定高度,选填项,数字类型
# 默认值为 10
#Confidence = 10

# 提交 WindowPoSt 证明结果的稳定高度,选填项,数字类型
# 这个值决定了需要等待多少个高度才认定链进入稳定状态,可以提交 WindowPoSt 证明结果
# 提交高度为 deadline.Open + SubmitConfidence
# 此值设定越小,会越早启动,但同时也越容易受到分叉影响
# 当设置为 0 时,会使用默认值 4
#SubmitConfidence = 0

# 启动 WindowPoSt 的稳定高度,选填项,数字类型
# 这个值决定了需要等待多少个高度才认定链进入稳定状态,可以启动 WindowPoSt 任务
# 启动高度为 deadline.Challenge + ChallengeConfidence
# 此值设定越小,会越早启动,但同时也越容易受到分叉影响
# 当设置为 0 时,会使用默认值 10
#ChallengeConfidence = 0

# 单次 Recover 允许包含的扇区数量上限,选填项,数字类型
# 默认值为 0
# 设置为 0 时,不会进行限制
#MaxRecoverSectorLimit = 0

# 单条 PoSt 消息中允许的最大 Partition 数量,选填项,数字类型
# 默认值为 0
# 设置为 0 时,会使用默认最大值
#MaxPartitionsPerPoStMessage = 0

# 单条 Recover 消息中允许的最大 Partition 数量,选填项,数字类型
# 默认值为 0
# 设置为 0 时,不限制
#MaxPartitionsPerRecoveryMessage = 0

# [Miners.Proof]

用于配置 WinningPoSt Proof 相关的策略

[Miners.Proof]
# 是否启用,选填项,布尔类型
# 默认值为 false
#Enabled = false

# [Miners.Sealing]

用于配置 sealing 过程中相关的策略

[Miners.Sealing]
# sealing 过程需要持续的高度,在筛选订单的时候会将订单的开始限定为当前高度 + 该值,选填项,整数类型
# 默认为 0,表示没配置
#SealingEpochDuration = 0
#
# 是否启用 SyntheticPoRep , 选填项,布尔类型
# 默认值为 false
#UseSyntheticPoRep = false

# [Miners.Deal] 已废弃

用于配置订单相关的策略。

[Miners.Deal]
# 是否启用,选填项,布尔类型
# 默认值为 false
#Enabled = false

# 一份最简可工作的配置文件范例

我们以启动支持一个 SP 运作的 damocles-manager 为例,

[Common]
[Common.API]
Gateway = ["/ip4/{api_host}/tcp/{api_port}"]
Token = "{some token}"
Chain = "/ip4/{api_host}/tcp/{api_port}"
Messager = "/ip4/{api_host}/tcp/{api_port}"
Market = "/ip4/{api_host}/tcp/{api_port}"

[[Common.PieceStores]]
Path = "{store_path}"

[[Common.PersistStores]]
Name = "{store_name1}"
Path = "{store_path1}"

[[Common.PersistStores]]
Name = "{store_name2}"
Path = "{store_path2}"

[[Common.PersistStores]]
Name = "{store_name3}"
Path = "{store_path3}"

[[Common.PersistStores]]
Name = "{store_name4}"
Path = "{store_path4}"

[[Miners]]
Actor = 10086
[Miners.Sector]
InitNumber = 1000
Enabled = true
EnableDeals = true

[Miners.Commitment]
[Miners.Commitment.Pre]
Sender = "t1abjxfbp274xpdqcpuaykwkfb43omjotacm2p3za"

[Miners.Commitment.Pre.Batch]

[Miners.Commitment.Prove]
Sender = "t1abjxfbp274xpdqcpuaykwkfb43omjotacm2p3za"

[Miners.Commitment.Prove.Batch]

[Miners.PoSt]
Sender = "t1abjxfbp274xpdqcpuaykwkfb43omjotacm2p3za"
Enabled = true

[Miners.Proof]
Enabled = true

这样就激活了一个:

  • 拥有 1 个本地 PieceStore
  • 拥有 4 个本地 持久化 Store
  • 启用扇区分配,其初始编号为 1000
  • 不启用聚合 PreCommit
  • 启用聚合 ProveCommit
  • 启用 WinningPoSt 模块
  • 启用订单

damocles-manager 实例。