Merge branch 'feat/max-deal-collateral-multiplier' into next

This commit is contained in:
Łukasz Magiera 2021-03-10 11:13:15 +01:00
commit d11f2def6e
3 changed files with 24 additions and 10 deletions

View File

@ -38,6 +38,7 @@ import (
var addPieceRetryWait = 5 * time.Minute var addPieceRetryWait = 5 * time.Minute
var addPieceRetryTimeout = 6 * time.Hour var addPieceRetryTimeout = 6 * time.Hour
var defaultMaxProviderCollateralMultiplier = uint64(2)
var log = logging.Logger("storageadapter") var log = logging.Logger("storageadapter")
type ProviderNodeAdapter struct { type ProviderNodeAdapter struct {
@ -51,12 +52,13 @@ type ProviderNodeAdapter struct {
dealPublisher *DealPublisher dealPublisher *DealPublisher
addBalanceSpec *api.MessageSendSpec addBalanceSpec *api.MessageSendSpec
dsMatcher *dealStateMatcher maxDealCollateralMultiplier uint64
scMgr *SectorCommittedManager dsMatcher *dealStateMatcher
scMgr *SectorCommittedManager
} }
func NewProviderNodeAdapter(fc *config.MinerFeeConfig) func(mctx helpers.MetricsCtx, lc fx.Lifecycle, dag dtypes.StagingDAG, secb *sectorblocks.SectorBlocks, full api.FullNode, dealPublisher *DealPublisher) storagemarket.StorageProviderNode { func NewProviderNodeAdapter(fc *config.MinerFeeConfig, dc *config.DealmakingConfig) func(mctx helpers.MetricsCtx, lc fx.Lifecycle, dag dtypes.StagingDAG, secb *sectorblocks.SectorBlocks, full api.FullNode, dealPublisher *DealPublisher) storagemarket.StorageProviderNode {
return func(mctx helpers.MetricsCtx, lc fx.Lifecycle, dag dtypes.StagingDAG, secb *sectorblocks.SectorBlocks, full api.FullNode, dealPublisher *DealPublisher) storagemarket.StorageProviderNode { return func(mctx helpers.MetricsCtx, lc fx.Lifecycle, dag dtypes.StagingDAG, secb *sectorblocks.SectorBlocks, full api.FullNode, dealPublisher *DealPublisher) storagemarket.StorageProviderNode {
ctx := helpers.LifecycleCtx(mctx, lc) ctx := helpers.LifecycleCtx(mctx, lc)
@ -73,6 +75,10 @@ func NewProviderNodeAdapter(fc *config.MinerFeeConfig) func(mctx helpers.Metrics
if fc != nil { if fc != nil {
na.addBalanceSpec = &api.MessageSendSpec{MaxFee: abi.TokenAmount(fc.MaxMarketBalanceAddFee)} na.addBalanceSpec = &api.MessageSendSpec{MaxFee: abi.TokenAmount(fc.MaxMarketBalanceAddFee)}
} }
na.maxDealCollateralMultiplier = defaultMaxProviderCollateralMultiplier
if dc != nil {
na.maxDealCollateralMultiplier = dc.MaxProviderCollateralMultiplier
}
na.scMgr = NewSectorCommittedManager(ev, na, &apiWrapper{api: full}) na.scMgr = NewSectorCommittedManager(ev, na, &apiWrapper{api: full})
return na return na
@ -257,7 +263,11 @@ func (n *ProviderNodeAdapter) DealProviderCollateralBounds(ctx context.Context,
return abi.TokenAmount{}, abi.TokenAmount{}, err return abi.TokenAmount{}, abi.TokenAmount{}, err
} }
return bounds.Min, bounds.Max, nil // The maximum amount of collateral that the provider will put into escrow
// for a deal is calculated as a multiple of the minimum bounded amount
max := types.BigMul(bounds.Min, types.NewInt(n.maxDealCollateralMultiplier))
return bounds.Min, max, nil
} }
// TODO: Remove dealID parameter, change publishCid to be cid.Cid (instead of pointer) // TODO: Remove dealID parameter, change publishCid to be cid.Cid (instead of pointer)

View File

@ -408,7 +408,7 @@ var MinerNode = Options(
Override(new(dtypes.StorageDealFilter), modules.BasicDealFilter(nil)), Override(new(dtypes.StorageDealFilter), modules.BasicDealFilter(nil)),
Override(new(storagemarket.StorageProvider), modules.StorageProvider), Override(new(storagemarket.StorageProvider), modules.StorageProvider),
Override(new(*storageadapter.DealPublisher), storageadapter.NewDealPublisher(nil, storageadapter.PublishMsgConfig{})), Override(new(*storageadapter.DealPublisher), storageadapter.NewDealPublisher(nil, storageadapter.PublishMsgConfig{})),
Override(new(storagemarket.StorageProviderNode), storageadapter.NewProviderNodeAdapter(nil)), Override(new(storagemarket.StorageProviderNode), storageadapter.NewProviderNodeAdapter(nil, nil)),
Override(HandleMigrateProviderFundsKey, modules.HandleMigrateProviderFunds), Override(HandleMigrateProviderFundsKey, modules.HandleMigrateProviderFunds),
Override(HandleDealsKey, modules.HandleDeals), Override(HandleDealsKey, modules.HandleDeals),
@ -567,7 +567,7 @@ func ConfigStorageMiner(c interface{}) Option {
Period: time.Duration(cfg.Dealmaking.PublishMsgPeriod), Period: time.Duration(cfg.Dealmaking.PublishMsgPeriod),
MaxDealsPerMsg: cfg.Dealmaking.MaxDealsPerPublishMsg, MaxDealsPerMsg: cfg.Dealmaking.MaxDealsPerPublishMsg,
})), })),
Override(new(storagemarket.StorageProviderNode), storageadapter.NewProviderNodeAdapter(&cfg.Fees)), Override(new(storagemarket.StorageProviderNode), storageadapter.NewProviderNodeAdapter(&cfg.Fees, &cfg.Dealmaking)),
Override(new(sectorstorage.SealerConfig), cfg.Storage), Override(new(sectorstorage.SealerConfig), cfg.Storage),
Override(new(*storage.AddressSelector), modules.AddressSelector(&cfg.Addresses)), Override(new(*storage.AddressSelector), modules.AddressSelector(&cfg.Addresses)),

View File

@ -55,6 +55,9 @@ type DealmakingConfig struct {
// The maximum number of deals to include in a single PublishStorageDeals // The maximum number of deals to include in a single PublishStorageDeals
// message // message
MaxDealsPerPublishMsg uint64 MaxDealsPerPublishMsg uint64
// The maximum collateral that the provider will put up against a deal,
// as a multiplier of the minimum collateral bound
MaxProviderCollateralMultiplier uint64
Filter string Filter string
RetrievalFilter string RetrievalFilter string
@ -241,9 +244,10 @@ func DefaultStorageMiner() *StorageMiner {
ConsiderUnverifiedStorageDeals: true, ConsiderUnverifiedStorageDeals: true,
PieceCidBlocklist: []cid.Cid{}, PieceCidBlocklist: []cid.Cid{},
// TODO: It'd be nice to set this based on sector size // TODO: It'd be nice to set this based on sector size
ExpectedSealDuration: Duration(time.Hour * 24), ExpectedSealDuration: Duration(time.Hour * 24),
PublishMsgPeriod: Duration(time.Hour), PublishMsgPeriod: Duration(time.Hour),
MaxDealsPerPublishMsg: 8, MaxDealsPerPublishMsg: 8,
MaxProviderCollateralMultiplier: 2,
}, },
Fees: MinerFeeConfig{ Fees: MinerFeeConfig{