2020-09-23 19:24:51 +00:00
|
|
|
package policy
|
|
|
|
|
|
|
|
import (
|
2020-10-08 01:09:33 +00:00
|
|
|
"sort"
|
|
|
|
|
2021-06-09 01:40:52 +00:00
|
|
|
"github.com/filecoin-project/go-state-types/big"
|
2021-08-10 17:07:30 +00:00
|
|
|
"golang.org/x/xerrors"
|
2021-06-09 01:40:52 +00:00
|
|
|
|
2020-09-23 19:24:51 +00:00
|
|
|
"github.com/filecoin-project/go-state-types/abi"
|
2020-09-30 20:30:24 +00:00
|
|
|
"github.com/filecoin-project/go-state-types/network"
|
2020-09-29 00:28:16 +00:00
|
|
|
"github.com/filecoin-project/lotus/chain/actors"
|
2021-01-21 18:44:13 +00:00
|
|
|
|
2020-09-30 20:30:24 +00:00
|
|
|
market0 "github.com/filecoin-project/specs-actors/actors/builtin/market"
|
2020-09-23 19:24:51 +00:00
|
|
|
miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner"
|
|
|
|
power0 "github.com/filecoin-project/specs-actors/actors/builtin/power"
|
|
|
|
verifreg0 "github.com/filecoin-project/specs-actors/actors/builtin/verifreg"
|
2021-01-21 18:44:13 +00:00
|
|
|
|
2020-09-29 00:28:16 +00:00
|
|
|
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
|
2020-09-30 20:30:24 +00:00
|
|
|
market2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/market"
|
2020-09-29 00:28:16 +00:00
|
|
|
miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner"
|
|
|
|
verifreg2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/verifreg"
|
2021-01-21 18:44:13 +00:00
|
|
|
|
|
|
|
builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin"
|
|
|
|
market3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/market"
|
|
|
|
miner3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/miner"
|
|
|
|
verifreg3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/verifreg"
|
2021-04-23 12:29:46 +00:00
|
|
|
|
|
|
|
builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin"
|
|
|
|
market4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/market"
|
|
|
|
miner4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/miner"
|
|
|
|
verifreg4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/verifreg"
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-05-06 05:44:11 +00:00
|
|
|
builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin"
|
|
|
|
market5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/market"
|
|
|
|
miner5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/miner"
|
|
|
|
verifreg5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/verifreg"
|
|
|
|
|
2021-09-15 15:22:25 +00:00
|
|
|
builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin"
|
|
|
|
market6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/market"
|
|
|
|
miner6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/miner"
|
|
|
|
verifreg6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/verifreg"
|
|
|
|
|
2021-11-04 15:59:29 +00:00
|
|
|
builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin"
|
|
|
|
market7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/market"
|
|
|
|
miner7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/miner"
|
|
|
|
verifreg7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/verifreg"
|
|
|
|
|
|
|
|
paych7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/paych"
|
2020-09-29 00:28:16 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
2021-11-04 15:59:29 +00:00
|
|
|
ChainFinality = miner7.ChainFinality
|
2021-04-27 07:34:12 +00:00
|
|
|
SealRandomnessLookback = ChainFinality
|
2021-11-04 15:59:29 +00:00
|
|
|
PaychSettleDelay = paych7.SettleDelay
|
|
|
|
MaxPreCommitRandomnessLookback = builtin7.EpochsInDay + SealRandomnessLookback
|
2020-09-23 19:24:51 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// SetSupportedProofTypes sets supported proof types, across all actor versions.
|
|
|
|
// This should only be used for testing.
|
|
|
|
func SetSupportedProofTypes(types ...abi.RegisteredSealProof) {
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2020-11-07 05:05:16 +00:00
|
|
|
miner0.SupportedProofTypes = make(map[abi.RegisteredSealProof]struct{}, len(types))
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2020-11-07 05:05:16 +00:00
|
|
|
miner2.PreCommitSealProofTypesV0 = make(map[abi.RegisteredSealProof]struct{}, len(types))
|
2020-11-20 09:24:52 +00:00
|
|
|
miner2.PreCommitSealProofTypesV7 = make(map[abi.RegisteredSealProof]struct{}, len(types)*2)
|
2020-11-07 05:05:16 +00:00
|
|
|
miner2.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types))
|
|
|
|
|
2021-01-21 18:44:13 +00:00
|
|
|
miner3.PreCommitSealProofTypesV0 = make(map[abi.RegisteredSealProof]struct{}, len(types))
|
2021-01-22 16:30:58 +00:00
|
|
|
miner3.PreCommitSealProofTypesV7 = make(map[abi.RegisteredSealProof]struct{}, len(types)*2)
|
2021-01-21 18:44:13 +00:00
|
|
|
miner3.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types))
|
|
|
|
|
2021-04-23 12:29:46 +00:00
|
|
|
miner4.PreCommitSealProofTypesV0 = make(map[abi.RegisteredSealProof]struct{}, len(types))
|
|
|
|
miner4.PreCommitSealProofTypesV7 = make(map[abi.RegisteredSealProof]struct{}, len(types)*2)
|
|
|
|
miner4.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types))
|
|
|
|
|
2021-05-06 05:44:11 +00:00
|
|
|
miner5.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types))
|
|
|
|
|
2021-09-15 15:22:25 +00:00
|
|
|
miner6.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types))
|
|
|
|
|
2021-11-04 15:59:29 +00:00
|
|
|
miner7.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types))
|
|
|
|
|
2020-11-07 05:05:16 +00:00
|
|
|
AddSupportedProofTypes(types...)
|
2020-09-23 19:24:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// AddSupportedProofTypes sets supported proof types, across all actor versions.
|
|
|
|
// This should only be used for testing.
|
|
|
|
func AddSupportedProofTypes(types ...abi.RegisteredSealProof) {
|
|
|
|
for _, t := range types {
|
2020-11-07 05:05:16 +00:00
|
|
|
if t >= abi.RegisteredSealProof_StackedDrg2KiBV1_1 {
|
|
|
|
panic("must specify v1 proof types only")
|
|
|
|
}
|
2020-09-25 21:33:25 +00:00
|
|
|
// Set for all miner versions.
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2020-09-25 21:33:25 +00:00
|
|
|
miner0.SupportedProofTypes[t] = struct{}{}
|
2020-11-07 05:05:16 +00:00
|
|
|
|
2021-04-23 12:29:46 +00:00
|
|
|
miner2.PreCommitSealProofTypesV0[t] = struct{}{}
|
2020-11-08 04:05:52 +00:00
|
|
|
miner2.PreCommitSealProofTypesV7[t] = struct{}{}
|
2020-11-07 05:05:16 +00:00
|
|
|
miner2.PreCommitSealProofTypesV7[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{}
|
|
|
|
miner2.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{}
|
2021-01-21 18:44:13 +00:00
|
|
|
|
|
|
|
miner3.PreCommitSealProofTypesV0[t] = struct{}{}
|
|
|
|
miner3.PreCommitSealProofTypesV7[t] = struct{}{}
|
|
|
|
miner3.PreCommitSealProofTypesV7[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{}
|
|
|
|
miner3.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{}
|
2021-04-23 12:29:46 +00:00
|
|
|
|
|
|
|
miner4.PreCommitSealProofTypesV0[t] = struct{}{}
|
|
|
|
miner4.PreCommitSealProofTypesV7[t] = struct{}{}
|
|
|
|
miner4.PreCommitSealProofTypesV7[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{}
|
|
|
|
miner4.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{}
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-05-06 05:44:11 +00:00
|
|
|
miner5.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{}
|
2021-05-31 22:50:29 +00:00
|
|
|
wpp, err := t.RegisteredWindowPoStProof()
|
|
|
|
if err != nil {
|
|
|
|
// Fine to panic, this is a test-only method
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
miner5.WindowPoStProofTypes[wpp] = struct{}{}
|
2021-05-06 05:44:11 +00:00
|
|
|
|
2021-09-15 15:22:25 +00:00
|
|
|
miner6.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{}
|
|
|
|
wpp, err = t.RegisteredWindowPoStProof()
|
|
|
|
if err != nil {
|
|
|
|
// Fine to panic, this is a test-only method
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
miner6.WindowPoStProofTypes[wpp] = struct{}{}
|
|
|
|
|
2021-11-04 15:59:29 +00:00
|
|
|
miner7.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{}
|
|
|
|
wpp, err = t.RegisteredWindowPoStProof()
|
|
|
|
if err != nil {
|
|
|
|
// Fine to panic, this is a test-only method
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
miner7.WindowPoStProofTypes[wpp] = struct{}{}
|
|
|
|
|
2020-09-23 19:24:51 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// SetPreCommitChallengeDelay sets the pre-commit challenge delay across all
|
|
|
|
// actors versions. Use for testing.
|
|
|
|
func SetPreCommitChallengeDelay(delay abi.ChainEpoch) {
|
|
|
|
// Set for all miner versions.
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2020-09-23 19:24:51 +00:00
|
|
|
miner0.PreCommitChallengeDelay = delay
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2020-09-29 00:28:16 +00:00
|
|
|
miner2.PreCommitChallengeDelay = delay
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-01-21 18:44:13 +00:00
|
|
|
miner3.PreCommitChallengeDelay = delay
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-04-23 12:29:46 +00:00
|
|
|
miner4.PreCommitChallengeDelay = delay
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-05-06 05:44:11 +00:00
|
|
|
miner5.PreCommitChallengeDelay = delay
|
|
|
|
|
2021-09-15 15:22:25 +00:00
|
|
|
miner6.PreCommitChallengeDelay = delay
|
|
|
|
|
2021-11-04 15:59:29 +00:00
|
|
|
miner7.PreCommitChallengeDelay = delay
|
|
|
|
|
2020-09-23 19:24:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// TODO: this function shouldn't really exist. Instead, the API should expose the precommit delay.
|
|
|
|
func GetPreCommitChallengeDelay() abi.ChainEpoch {
|
2021-11-04 15:59:29 +00:00
|
|
|
return miner7.PreCommitChallengeDelay
|
2020-09-23 19:24:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// SetConsensusMinerMinPower sets the minimum power of an individual miner must
|
|
|
|
// meet for leader election, across all actor versions. This should only be used
|
|
|
|
// for testing.
|
|
|
|
func SetConsensusMinerMinPower(p abi.StoragePower) {
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2020-09-23 19:24:51 +00:00
|
|
|
power0.ConsensusMinerMinPower = p
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2020-09-29 00:28:16 +00:00
|
|
|
for _, policy := range builtin2.SealProofPolicies {
|
|
|
|
policy.ConsensusMinerMinPower = p
|
|
|
|
}
|
2021-01-21 18:44:13 +00:00
|
|
|
|
|
|
|
for _, policy := range builtin3.PoStProofPolicies {
|
|
|
|
policy.ConsensusMinerMinPower = p
|
|
|
|
}
|
2021-04-23 12:29:46 +00:00
|
|
|
|
|
|
|
for _, policy := range builtin4.PoStProofPolicies {
|
|
|
|
policy.ConsensusMinerMinPower = p
|
|
|
|
}
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-05-06 05:44:11 +00:00
|
|
|
for _, policy := range builtin5.PoStProofPolicies {
|
|
|
|
policy.ConsensusMinerMinPower = p
|
|
|
|
}
|
|
|
|
|
2021-09-15 15:22:25 +00:00
|
|
|
for _, policy := range builtin6.PoStProofPolicies {
|
|
|
|
policy.ConsensusMinerMinPower = p
|
|
|
|
}
|
|
|
|
|
2021-11-04 15:59:29 +00:00
|
|
|
for _, policy := range builtin7.PoStProofPolicies {
|
|
|
|
policy.ConsensusMinerMinPower = p
|
|
|
|
}
|
|
|
|
|
2020-09-23 19:24:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// SetMinVerifiedDealSize sets the minimum size of a verified deal. This should
|
|
|
|
// only be used for testing.
|
|
|
|
func SetMinVerifiedDealSize(size abi.StoragePower) {
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2020-09-23 19:24:51 +00:00
|
|
|
verifreg0.MinVerifiedDealSize = size
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2020-09-29 00:28:16 +00:00
|
|
|
verifreg2.MinVerifiedDealSize = size
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-01-21 18:44:13 +00:00
|
|
|
verifreg3.MinVerifiedDealSize = size
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-04-23 12:29:46 +00:00
|
|
|
verifreg4.MinVerifiedDealSize = size
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-05-06 05:44:11 +00:00
|
|
|
verifreg5.MinVerifiedDealSize = size
|
|
|
|
|
2021-09-15 15:22:25 +00:00
|
|
|
verifreg6.MinVerifiedDealSize = size
|
|
|
|
|
2021-11-04 15:59:29 +00:00
|
|
|
verifreg7.MinVerifiedDealSize = size
|
|
|
|
|
2020-09-29 00:28:16 +00:00
|
|
|
}
|
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
func GetMaxProveCommitDuration(ver actors.Version, t abi.RegisteredSealProof) (abi.ChainEpoch, error) {
|
2020-09-29 00:28:16 +00:00
|
|
|
switch ver {
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2020-09-29 00:28:16 +00:00
|
|
|
case actors.Version0:
|
2021-08-10 17:32:00 +00:00
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
return miner0.MaxSealDuration[t], nil
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2020-09-29 00:28:16 +00:00
|
|
|
case actors.Version2:
|
2021-08-10 17:32:00 +00:00
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
return miner2.MaxProveCommitDuration[t], nil
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-01-21 18:44:13 +00:00
|
|
|
case actors.Version3:
|
2021-08-10 17:32:00 +00:00
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
return miner3.MaxProveCommitDuration[t], nil
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-04-23 12:29:46 +00:00
|
|
|
case actors.Version4:
|
2021-08-10 17:32:00 +00:00
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
return miner4.MaxProveCommitDuration[t], nil
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-05-06 05:44:11 +00:00
|
|
|
case actors.Version5:
|
2021-08-10 17:32:00 +00:00
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
return miner5.MaxProveCommitDuration[t], nil
|
2021-05-06 05:44:11 +00:00
|
|
|
|
2021-09-15 15:22:25 +00:00
|
|
|
case actors.Version6:
|
|
|
|
|
|
|
|
return miner6.MaxProveCommitDuration[t], nil
|
|
|
|
|
2021-11-04 15:59:29 +00:00
|
|
|
case actors.Version7:
|
|
|
|
|
|
|
|
return miner7.MaxProveCommitDuration[t], nil
|
|
|
|
|
2020-09-29 00:28:16 +00:00
|
|
|
default:
|
2021-08-10 17:07:30 +00:00
|
|
|
return 0, xerrors.Errorf("unsupported actors version")
|
2020-09-29 00:28:16 +00:00
|
|
|
}
|
2020-09-23 19:24:51 +00:00
|
|
|
}
|
2020-09-30 20:30:24 +00:00
|
|
|
|
2021-07-08 16:54:56 +00:00
|
|
|
// SetProviderCollateralSupplyTarget sets the percentage of normalized circulating
|
|
|
|
// supply that must be covered by provider collateral in a deal. This should
|
|
|
|
// only be used for testing.
|
2021-07-07 17:35:27 +00:00
|
|
|
func SetProviderCollateralSupplyTarget(num, denom big.Int) {
|
|
|
|
|
|
|
|
market2.ProviderCollateralSupplyTarget = builtin2.BigFrac{
|
|
|
|
Numerator: num,
|
|
|
|
Denominator: denom,
|
|
|
|
}
|
|
|
|
|
|
|
|
market3.ProviderCollateralSupplyTarget = builtin3.BigFrac{
|
|
|
|
Numerator: num,
|
|
|
|
Denominator: denom,
|
|
|
|
}
|
|
|
|
|
|
|
|
market4.ProviderCollateralSupplyTarget = builtin4.BigFrac{
|
|
|
|
Numerator: num,
|
|
|
|
Denominator: denom,
|
|
|
|
}
|
|
|
|
|
|
|
|
market5.ProviderCollateralSupplyTarget = builtin5.BigFrac{
|
|
|
|
Numerator: num,
|
|
|
|
Denominator: denom,
|
|
|
|
}
|
|
|
|
|
2021-09-15 15:22:25 +00:00
|
|
|
market6.ProviderCollateralSupplyTarget = builtin6.BigFrac{
|
|
|
|
Numerator: num,
|
|
|
|
Denominator: denom,
|
|
|
|
}
|
|
|
|
|
2021-11-04 15:59:29 +00:00
|
|
|
market7.ProviderCollateralSupplyTarget = builtin7.BigFrac{
|
|
|
|
Numerator: num,
|
|
|
|
Denominator: denom,
|
|
|
|
}
|
|
|
|
|
2021-07-07 17:35:27 +00:00
|
|
|
}
|
|
|
|
|
2020-09-30 20:30:24 +00:00
|
|
|
func DealProviderCollateralBounds(
|
|
|
|
size abi.PaddedPieceSize, verified bool,
|
|
|
|
rawBytePower, qaPower, baselinePower abi.StoragePower,
|
|
|
|
circulatingFil abi.TokenAmount, nwVer network.Version,
|
2021-08-10 17:07:30 +00:00
|
|
|
) (min, max abi.TokenAmount, err error) {
|
|
|
|
v, err := actors.VersionForNetwork(nwVer)
|
|
|
|
if err != nil {
|
|
|
|
return big.Zero(), big.Zero(), err
|
|
|
|
}
|
|
|
|
switch v {
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2020-09-30 20:30:24 +00:00
|
|
|
case actors.Version0:
|
2021-08-10 17:32:00 +00:00
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
min, max := market0.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil, nwVer)
|
|
|
|
return min, max, nil
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2020-09-30 20:30:24 +00:00
|
|
|
case actors.Version2:
|
2021-08-10 17:32:00 +00:00
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
min, max := market2.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil)
|
|
|
|
return min, max, nil
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-01-21 18:44:13 +00:00
|
|
|
case actors.Version3:
|
2021-08-10 17:32:00 +00:00
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
min, max := market3.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil)
|
|
|
|
return min, max, nil
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-04-23 12:29:46 +00:00
|
|
|
case actors.Version4:
|
2021-08-10 17:32:00 +00:00
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
min, max := market4.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil)
|
|
|
|
return min, max, nil
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-05-06 05:44:11 +00:00
|
|
|
case actors.Version5:
|
2021-08-10 17:32:00 +00:00
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
min, max := market5.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil)
|
|
|
|
return min, max, nil
|
2021-05-06 05:44:11 +00:00
|
|
|
|
2021-09-15 15:22:25 +00:00
|
|
|
case actors.Version6:
|
|
|
|
|
|
|
|
min, max := market6.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil)
|
|
|
|
return min, max, nil
|
|
|
|
|
2021-11-04 15:59:29 +00:00
|
|
|
case actors.Version7:
|
|
|
|
|
|
|
|
min, max := market7.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil)
|
|
|
|
return min, max, nil
|
|
|
|
|
2020-09-30 20:30:24 +00:00
|
|
|
default:
|
2021-08-10 17:07:30 +00:00
|
|
|
return big.Zero(), big.Zero(), xerrors.Errorf("unsupported actors version")
|
2020-09-30 20:30:24 +00:00
|
|
|
}
|
|
|
|
}
|
2020-10-05 21:28:47 +00:00
|
|
|
|
2020-12-30 08:02:53 +00:00
|
|
|
func DealDurationBounds(pieceSize abi.PaddedPieceSize) (min, max abi.ChainEpoch) {
|
2021-11-04 15:59:29 +00:00
|
|
|
return market7.DealDurationBounds(pieceSize)
|
2020-12-30 08:02:53 +00:00
|
|
|
}
|
|
|
|
|
2020-10-05 21:28:47 +00:00
|
|
|
// Sets the challenge window and scales the proving period to match (such that
|
|
|
|
// there are always 48 challenge windows in a proving period).
|
|
|
|
func SetWPoStChallengeWindow(period abi.ChainEpoch) {
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2020-10-05 21:28:47 +00:00
|
|
|
miner0.WPoStChallengeWindow = period
|
|
|
|
miner0.WPoStProvingPeriod = period * abi.ChainEpoch(miner0.WPoStPeriodDeadlines)
|
|
|
|
|
|
|
|
miner2.WPoStChallengeWindow = period
|
|
|
|
miner2.WPoStProvingPeriod = period * abi.ChainEpoch(miner2.WPoStPeriodDeadlines)
|
2021-01-21 18:44:13 +00:00
|
|
|
|
|
|
|
miner3.WPoStChallengeWindow = period
|
|
|
|
miner3.WPoStProvingPeriod = period * abi.ChainEpoch(miner3.WPoStPeriodDeadlines)
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-01-22 19:15:43 +00:00
|
|
|
// by default, this is 2x finality which is 30 periods.
|
|
|
|
// scale it if we're scaling the challenge period.
|
|
|
|
miner3.WPoStDisputeWindow = period * 30
|
2021-04-23 12:29:46 +00:00
|
|
|
|
|
|
|
miner4.WPoStChallengeWindow = period
|
|
|
|
miner4.WPoStProvingPeriod = period * abi.ChainEpoch(miner4.WPoStPeriodDeadlines)
|
2021-04-26 14:48:20 +00:00
|
|
|
|
|
|
|
// by default, this is 2x finality which is 30 periods.
|
|
|
|
// scale it if we're scaling the challenge period.
|
|
|
|
miner4.WPoStDisputeWindow = period * 30
|
|
|
|
|
2021-05-06 05:44:11 +00:00
|
|
|
miner5.WPoStChallengeWindow = period
|
|
|
|
miner5.WPoStProvingPeriod = period * abi.ChainEpoch(miner5.WPoStPeriodDeadlines)
|
|
|
|
|
|
|
|
// by default, this is 2x finality which is 30 periods.
|
|
|
|
// scale it if we're scaling the challenge period.
|
|
|
|
miner5.WPoStDisputeWindow = period * 30
|
|
|
|
|
2021-09-15 15:22:25 +00:00
|
|
|
miner6.WPoStChallengeWindow = period
|
|
|
|
miner6.WPoStProvingPeriod = period * abi.ChainEpoch(miner6.WPoStPeriodDeadlines)
|
|
|
|
|
|
|
|
// by default, this is 2x finality which is 30 periods.
|
|
|
|
// scale it if we're scaling the challenge period.
|
|
|
|
miner6.WPoStDisputeWindow = period * 30
|
|
|
|
|
2021-11-04 15:59:29 +00:00
|
|
|
miner7.WPoStChallengeWindow = period
|
|
|
|
miner7.WPoStProvingPeriod = period * abi.ChainEpoch(miner7.WPoStPeriodDeadlines)
|
|
|
|
|
|
|
|
// by default, this is 2x finality which is 30 periods.
|
|
|
|
// scale it if we're scaling the challenge period.
|
|
|
|
miner7.WPoStDisputeWindow = period * 30
|
|
|
|
|
2020-10-05 21:28:47 +00:00
|
|
|
}
|
2020-10-06 09:26:25 +00:00
|
|
|
|
|
|
|
func GetWinningPoStSectorSetLookback(nwVer network.Version) abi.ChainEpoch {
|
|
|
|
if nwVer <= network.Version3 {
|
|
|
|
return 10
|
|
|
|
}
|
|
|
|
|
2021-05-05 20:54:01 +00:00
|
|
|
// NOTE: if this ever changes, adjust it in a (*Miner).mineOne() logline as well
|
2020-10-06 09:26:25 +00:00
|
|
|
return ChainFinality
|
|
|
|
}
|
2020-10-08 01:09:33 +00:00
|
|
|
|
|
|
|
func GetMaxSectorExpirationExtension() abi.ChainEpoch {
|
2021-11-04 15:59:29 +00:00
|
|
|
return miner7.MaxSectorExpirationExtension
|
2020-10-08 01:09:33 +00:00
|
|
|
}
|
|
|
|
|
2021-07-11 17:57:09 +00:00
|
|
|
func GetMinSectorExpiration() abi.ChainEpoch {
|
2021-11-04 15:59:29 +00:00
|
|
|
return miner7.MinSectorExpiration
|
2021-07-11 17:57:09 +00:00
|
|
|
}
|
|
|
|
|
2021-06-16 23:39:23 +00:00
|
|
|
func GetMaxPoStPartitions(nv network.Version, p abi.RegisteredPoStProof) (int, error) {
|
2021-11-04 15:59:29 +00:00
|
|
|
sectorsPerPart, err := builtin7.PoStProofWindowPoStPartitionSectors(p)
|
2020-10-08 01:09:33 +00:00
|
|
|
if err != nil {
|
|
|
|
return 0, err
|
|
|
|
}
|
2021-08-10 17:07:30 +00:00
|
|
|
maxSectors, err := GetAddressedSectorsMax(nv)
|
|
|
|
if err != nil {
|
|
|
|
return 0, err
|
|
|
|
}
|
|
|
|
return int(uint64(maxSectors) / sectorsPerPart), nil
|
2020-10-08 01:09:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func GetDefaultSectorSize() abi.SectorSize {
|
2020-11-08 04:05:52 +00:00
|
|
|
// supported sector sizes are the same across versions.
|
2021-11-04 15:59:29 +00:00
|
|
|
szs := make([]abi.SectorSize, 0, len(miner7.PreCommitSealProofTypesV8))
|
|
|
|
for spt := range miner7.PreCommitSealProofTypesV8 {
|
2020-10-08 01:09:33 +00:00
|
|
|
ss, err := spt.SectorSize()
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
szs = append(szs, ss)
|
|
|
|
}
|
|
|
|
|
|
|
|
sort.Slice(szs, func(i, j int) bool {
|
|
|
|
return szs[i] < szs[j]
|
|
|
|
})
|
|
|
|
|
|
|
|
return szs[0]
|
|
|
|
}
|
2021-04-04 02:02:06 +00:00
|
|
|
|
2021-05-17 18:47:41 +00:00
|
|
|
func GetDefaultAggregationProof() abi.RegisteredAggregationProof {
|
|
|
|
return abi.RegisteredAggregationProof_SnarkPackV1
|
|
|
|
}
|
|
|
|
|
2021-04-04 02:02:06 +00:00
|
|
|
func GetSectorMaxLifetime(proof abi.RegisteredSealProof, nwVer network.Version) abi.ChainEpoch {
|
|
|
|
if nwVer <= network.Version10 {
|
2021-05-27 19:54:31 +00:00
|
|
|
return builtin4.SealProofPoliciesV0[proof].SectorMaxLifetime
|
2021-04-04 02:02:06 +00:00
|
|
|
}
|
|
|
|
|
2021-11-04 15:59:29 +00:00
|
|
|
return builtin7.SealProofPoliciesV11[proof].SectorMaxLifetime
|
2021-04-04 02:02:06 +00:00
|
|
|
}
|
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
func GetAddressedSectorsMax(nwVer network.Version) (int, error) {
|
|
|
|
v, err := actors.VersionForNetwork(nwVer)
|
|
|
|
if err != nil {
|
|
|
|
return 0, err
|
|
|
|
}
|
|
|
|
switch v {
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-04-04 02:02:06 +00:00
|
|
|
case actors.Version0:
|
2021-08-10 17:07:30 +00:00
|
|
|
return miner0.AddressedSectorsMax, nil
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-04-04 02:02:06 +00:00
|
|
|
case actors.Version2:
|
2021-08-10 17:07:30 +00:00
|
|
|
return miner2.AddressedSectorsMax, nil
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-04-04 02:02:06 +00:00
|
|
|
case actors.Version3:
|
2021-08-10 17:07:30 +00:00
|
|
|
return miner3.AddressedSectorsMax, nil
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-04-23 12:29:46 +00:00
|
|
|
case actors.Version4:
|
2021-08-10 17:07:30 +00:00
|
|
|
return miner4.AddressedSectorsMax, nil
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-05-06 05:44:11 +00:00
|
|
|
case actors.Version5:
|
2021-08-10 17:07:30 +00:00
|
|
|
return miner5.AddressedSectorsMax, nil
|
2021-05-06 05:44:11 +00:00
|
|
|
|
2021-09-15 15:22:25 +00:00
|
|
|
case actors.Version6:
|
|
|
|
return miner6.AddressedSectorsMax, nil
|
|
|
|
|
2021-11-04 15:59:29 +00:00
|
|
|
case actors.Version7:
|
|
|
|
return miner7.AddressedSectorsMax, nil
|
|
|
|
|
2021-04-04 02:02:06 +00:00
|
|
|
default:
|
2021-08-10 17:07:30 +00:00
|
|
|
return 0, xerrors.Errorf("unsupported network version")
|
2021-04-04 02:02:06 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
func GetDeclarationsMax(nwVer network.Version) (int, error) {
|
|
|
|
v, err := actors.VersionForNetwork(nwVer)
|
|
|
|
if err != nil {
|
|
|
|
return 0, err
|
|
|
|
}
|
|
|
|
switch v {
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-04-04 02:02:06 +00:00
|
|
|
case actors.Version0:
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
// TODO: Should we instead error here since the concept doesn't exist yet?
|
|
|
|
return miner0.AddressedPartitionsMax, nil
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-04-04 02:02:06 +00:00
|
|
|
case actors.Version2:
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
return miner2.DeclarationsMax, nil
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-04-04 02:02:06 +00:00
|
|
|
case actors.Version3:
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
return miner3.DeclarationsMax, nil
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-04-23 12:29:46 +00:00
|
|
|
case actors.Version4:
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
return miner4.DeclarationsMax, nil
|
2021-04-26 14:48:20 +00:00
|
|
|
|
2021-05-06 05:44:11 +00:00
|
|
|
case actors.Version5:
|
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
return miner5.DeclarationsMax, nil
|
2021-05-06 05:44:11 +00:00
|
|
|
|
2021-09-15 15:22:25 +00:00
|
|
|
case actors.Version6:
|
|
|
|
|
|
|
|
return miner6.DeclarationsMax, nil
|
|
|
|
|
2021-11-04 15:59:29 +00:00
|
|
|
case actors.Version7:
|
|
|
|
|
|
|
|
return miner7.DeclarationsMax, nil
|
|
|
|
|
2021-04-04 02:02:06 +00:00
|
|
|
default:
|
2021-08-10 17:32:00 +00:00
|
|
|
return 0, xerrors.Errorf("unsupported network version")
|
2021-04-04 02:02:06 +00:00
|
|
|
}
|
|
|
|
}
|
2021-06-09 01:40:52 +00:00
|
|
|
|
2021-10-01 14:23:21 +00:00
|
|
|
func AggregateProveCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) {
|
2021-08-10 17:07:30 +00:00
|
|
|
v, err := actors.VersionForNetwork(nwVer)
|
|
|
|
if err != nil {
|
|
|
|
return big.Zero(), err
|
|
|
|
}
|
|
|
|
switch v {
|
2021-06-09 01:40:52 +00:00
|
|
|
|
|
|
|
case actors.Version0:
|
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
return big.Zero(), nil
|
2021-06-09 01:40:52 +00:00
|
|
|
|
|
|
|
case actors.Version2:
|
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
return big.Zero(), nil
|
2021-06-09 01:40:52 +00:00
|
|
|
|
|
|
|
case actors.Version3:
|
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
return big.Zero(), nil
|
2021-06-09 01:40:52 +00:00
|
|
|
|
|
|
|
case actors.Version4:
|
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
return big.Zero(), nil
|
2021-06-09 01:40:52 +00:00
|
|
|
|
|
|
|
case actors.Version5:
|
|
|
|
|
2021-08-10 17:07:30 +00:00
|
|
|
return miner5.AggregateNetworkFee(aggregateSize, baseFee), nil
|
2021-06-09 01:40:52 +00:00
|
|
|
|
2021-09-15 15:22:25 +00:00
|
|
|
case actors.Version6:
|
|
|
|
|
2021-10-01 14:23:21 +00:00
|
|
|
return miner6.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil
|
|
|
|
|
2021-11-04 15:59:29 +00:00
|
|
|
case actors.Version7:
|
|
|
|
|
|
|
|
return miner7.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil
|
|
|
|
|
2021-10-01 14:23:21 +00:00
|
|
|
default:
|
|
|
|
return big.Zero(), xerrors.Errorf("unsupported network version")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func AggregatePreCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) {
|
|
|
|
v, err := actors.VersionForNetwork(nwVer)
|
|
|
|
if err != nil {
|
|
|
|
return big.Zero(), err
|
|
|
|
}
|
|
|
|
switch v {
|
|
|
|
|
|
|
|
case actors.Version0:
|
|
|
|
|
|
|
|
return big.Zero(), nil
|
|
|
|
|
|
|
|
case actors.Version2:
|
|
|
|
|
|
|
|
return big.Zero(), nil
|
|
|
|
|
|
|
|
case actors.Version3:
|
|
|
|
|
|
|
|
return big.Zero(), nil
|
|
|
|
|
|
|
|
case actors.Version4:
|
|
|
|
|
|
|
|
return big.Zero(), nil
|
|
|
|
|
|
|
|
case actors.Version5:
|
|
|
|
|
|
|
|
return big.Zero(), nil
|
|
|
|
|
|
|
|
case actors.Version6:
|
|
|
|
|
|
|
|
return miner6.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil
|
2021-09-15 15:22:25 +00:00
|
|
|
|
2021-11-04 15:59:29 +00:00
|
|
|
case actors.Version7:
|
|
|
|
|
|
|
|
return miner7.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil
|
|
|
|
|
2021-06-09 01:40:52 +00:00
|
|
|
default:
|
2021-08-10 17:07:30 +00:00
|
|
|
return big.Zero(), xerrors.Errorf("unsupported network version")
|
2021-06-09 01:40:52 +00:00
|
|
|
}
|
|
|
|
}
|