diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index be02558fe..6b7f0021e 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -563,6 +563,7 @@ module.exports = { collapsable: false, children: [ ['saas.md', 'SaaS'], + ['market-attributes-self-config.md', '市场的交易属性配置'], ] }, { diff --git a/docs/zh/research/market-attributes-self-config.md b/docs/zh/research/market-attributes-self-config.md new file mode 100644 index 000000000..008c8f18c --- /dev/null +++ b/docs/zh/research/market-attributes-self-config.md @@ -0,0 +1,195 @@ + + +# 市场属性配置 + +## Simple Summary (概述) + +矿工可以自己配置存储市场和检索市场的属性。 + +## Abstract (功能简介) + +`venus-market` 支持矿工的市场交易属性可独立配置,并可以由矿工自己配置,而不是通过链服务维护人员间接进行。 + +关联: +- [ ] 提案的[issue](https://github.com/filecoin-project/venus/issues/5410) +- [ ] [社区discussion](https://github.com/filecoin-project/venus/discussions/5425) + +## Motivation (来源/背景) + + + +`Filecoin` 网络中的矿工参与市场交易需要一些属性来保证交易过程正常进行,也可以通过一些属性来设置自己的交易取向,如:仅接受可验证订单、只进行离线订单等。可配置属性如下: + +```toml +# Default config: +ConsiderOnlineStorageDeals = true +ConsiderOfflineStorageDeals = true +ConsiderOnlineRetrievalDeals = true +ConsiderOfflineRetrievalDeals = true +ConsiderVerifiedStorageDeals = true +ConsiderUnverifiedStorageDeals = true +PieceCidBlocklist = [] +ExpectedSealDuration = "24h0m0s" +MaxDealStartDelay = "336h0m0s" +PublishMsgPeriod = "30s" +MaxDealsPerPublishMsg = 8 +MaxProviderCollateralMultiplier = 2 +Filter = "" +RetrievalFilter = "" +TransfePath = "" +MaxPublishDealsFee = "0 FIL" +MaxMarketBalanceAddFee = "0 FIL" + +[AddressConfig] + DisableWorkerFallback = false + +[RetrievalPricing] + Strategy = "default" + [RetrievalPricing.Default] + VerifiedDealsFreeTransfer = true + [RetrievalPricing.External] + Path = "" +``` + +在目前的 `venus-market` 实现中,所有的矿工共用一份配置,无法单独为某个矿工配置交易属性。 + + +### 延伸问题 + +- 批量发单的问题: `market-client` 需要支持批量发单:自动切分文件、发单; + +- `venus-market` 统一 `pool-run` 和 `solo-run` 两种部署模式为一种,倾向于部署在链下。 + + +## Specification (feature Spec) + + + +### 属性配置 + +- 有一套全局的属性表,当矿工没有独立配置时采用全局配置; +- 支持矿工有独立的属性表; +- 提供更新属性的 `API`及界面。 + +支持多矿工属性的配置项如下: +```toml +# global +[CommonProviderConfig] + ConsiderOnlineStorageDeals = true + ConsiderOfflineStorageDeals = true + ConsiderOnlineRetrievalDeals = true + ConsiderOfflineRetrievalDeals = true + ConsiderVerifiedStorageDeals = true + ConsiderUnverifiedStorageDeals = true + PieceCidBlocklist = [] + ExpectedSealDuration = "24h0m0s" + MaxDealStartDelay = "336h0m0s" + PublishMsgPeriod = "1h0m0s" + MaxDealsPerPublishMsg = 8 + MaxProviderCollateralMultiplier = 2 + Filter = "" + RetrievalFilter = "" + TransferPath = "" + MaxPublishDealsFee = "0 FIL" + MaxMarketBalanceAddFee = "0 FIL" + [CommonProviderConfig.RetrievalPricing] + Strategy = "default" + [CommonProviderConfig.RetrievalPricing.Default] + VerifiedDealsFreeTransfer = true + [CommonProviderConfig.RetrievalPricing.External] + Path = "" + [CommonProviderConfig.AddressConfig] + DisableWorkerFallback = false + +# 每个矿工的属性表,没有配置则使用全局配置 +[[Miners]] + Addr = "f01000" + Account = "testuser01" + + ConsiderOnlineStorageDeals = true + ConsiderOfflineStorageDeals = true + ConsiderOnlineRetrievalDeals = true + ConsiderOfflineRetrievalDeals = true + ConsiderVerifiedStorageDeals = true + ConsiderUnverifiedStorageDeals = true + PieceCidBlocklist = [] + ExpectedSealDuration = "24h0m0s" + MaxDealStartDelay = "336h0m0s" + PublishMsgPeriod = "1h0m0s" + MaxDealsPerPublishMsg = 8 + MaxProviderCollateralMultiplier = 2 + Filter = "" + RetrievalFilter = "" + TransferPath = "" + MaxPublishDealsFee = "0 FIL" + MaxMarketBalanceAddFee = "0 FIL" + [CommonProviderConfig.RetrievalPricing] + Strategy = "default" + [CommonProviderConfig.RetrievalPricing.Default] + VerifiedDealsFreeTransfer = true + [CommonProviderConfig.RetrievalPricing.External] + Path = "" + [CommonProviderConfig.AddressConfig] + DisableWorkerFallback = false + +[[Miners]] + Addr = "f01002" + Account = "testuser02" + + ConsiderOnlineStorageDeals = true + ConsiderOfflineStorageDeals = true + ConsiderOnlineRetrievalDeals = true + ConsiderOfflineRetrievalDeals = true + ConsiderVerifiedStorageDeals = true + ConsiderUnverifiedStorageDeals = true + PieceCidBlocklist = [] + ExpectedSealDuration = "24h0m0s" + MaxDealStartDelay = "336h0m0s" + PublishMsgPeriod = "1h0m0s" + MaxDealsPerPublishMsg = 8 + MaxProviderCollateralMultiplier = 2 + Filter = "" + RetrievalFilter = "" + TransferPath = "" + MaxPublishDealsFee = "0 FIL" + MaxMarketBalanceAddFee = "0 FIL" + [CommonProviderConfig.RetrievalPricing] + Strategy = "default" + [CommonProviderConfig.RetrievalPricing.Default] + VerifiedDealsFreeTransfer = true + [CommonProviderConfig.RetrievalPricing.External] + Path = "" + [CommonProviderConfig.AddressConfig] + DisableWorkerFallback = false +``` + +### 用户界面 + +- `venus-market` 的命令行; +- `venus-sector-manager/venus-tools` 的命令行(可选); + + +## Design Rationale (设计思路) + + + +## Backwards Compatibility(兼容性) + + + +本需求的实现会改变配置项的结构,需要实现配置文件的自动升级. + +## Test Cases (测试用例) + + + +- 配置文件自动升级; +- 矿工交易属性可通过命令行或手动改配置文件设置; + +## Security Considerations (安全考量) + + + +## Implementation(实施) + +