Skip to content

Commit dbe511a

Browse files
committed
fix(miner)!: remove DEAL_WEIGHT_MULTIPLIER and its input to QAP calc
Ref: filecoin-project/builtin-actors#1573 Ref: filecoin-project/builtin-actors#1574
1 parent 6e096a2 commit dbe511a

File tree

3 files changed

+68
-21
lines changed

3 files changed

+68
-21
lines changed

builtin/network.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ var TotalFilecoin = big.Mul(big.NewIntUnsigned(2_000_000_000), TokenPrecision)
5151
var QualityBaseMultiplier = big.NewInt(10)
5252

5353
// Quality multiplier for unverified deals in a sector
54+
// DEPRECATED: This is no longer used, but is kept here for reference.
5455
var DealWeightMultiplier = big.NewInt(10)
5556

5657
// Quality multiplier for verified deals in a sector

builtin/v15/miner/policy.go

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -141,30 +141,24 @@ const MinSectorExpiration = 180 * builtin.EpochsInDay // PARAM_SPEC
141141
// the associated seal proof's maximum lifetime.
142142
const MaxSectorExpirationExtension = 1278 * builtin.EpochsInDay // PARAM_SPEC
143143

144-
// DealWeight and VerifiedDealWeight are spacetime occupied by regular deals and verified deals in a sector.
145-
// Sum of DealWeight and VerifiedDealWeight should be less than or equal to total SpaceTime of a sector.
146-
// Sectors full of VerifiedDeals will have a SectorQuality of VerifiedDealWeightMultiplier/QualityBaseMultiplier.
147-
// Sectors full of Deals will have a SectorQuality of DealWeightMultiplier/QualityBaseMultiplier.
148-
// Sectors with neither will have a SectorQuality of QualityBaseMultiplier/QualityBaseMultiplier.
149-
// SectorQuality of a sector is a weighted average of multipliers based on their proportions.
150-
func QualityForWeight(size abi.SectorSize, duration abi.ChainEpoch, dealWeight, verifiedWeight abi.DealWeight) abi.SectorQuality {
144+
// QualityForWeight calculates the quality of a sector with the given size, duration, and verified weight.
145+
// VerifiedDealWeight is spacetime occupied by verified pieces in a sector.
146+
// VerifiedDealWeight should be less than or equal to total SpaceTime of a sector.
147+
// Sectors full of VerifiedDeals will have a BigInt of VerifiedDealWeightMultiplier/QualityBaseMultiplier.
148+
// Sectors without VerifiedDeals will have a BigInt of QualityBaseMultiplier/QualityBaseMultiplier.
149+
// BigInt of a sector is a weighted average of multipliers based on their proportions.
150+
func QualityForWeight(size abi.SectorSize, duration abi.ChainEpoch, verifiedWeight abi.DealWeight) abi.SectorQuality {
151151
// sectorSpaceTime = size * duration
152152
sectorSpaceTime := big.Mul(big.NewIntUnsigned(uint64(size)), big.NewInt(int64(duration)))
153-
// totalDealSpaceTime = dealWeight + verifiedWeight
154-
totalDealSpaceTime := big.Add(dealWeight, verifiedWeight)
155-
156-
// Base - all size * duration of non-deals
157-
// weightedBaseSpaceTime = (sectorSpaceTime - totalDealSpaceTime) * QualityBaseMultiplier
158-
weightedBaseSpaceTime := big.Mul(big.Sub(sectorSpaceTime, totalDealSpaceTime), builtin.QualityBaseMultiplier)
159-
// Deal - all deal size * deal duration * 10
160-
// weightedDealSpaceTime = dealWeight * DealWeightMultiplier
161-
weightedDealSpaceTime := big.Mul(dealWeight, builtin.DealWeightMultiplier)
153+
// Base - all size * duration of non-verified deals
154+
// weightedBaseSpaceTime = (sectorSpaceTime - verifiedWeight) * QualityBaseMultiplier
155+
weightedBaseSpaceTime := big.Mul(big.Sub(sectorSpaceTime, verifiedWeight), builtin.QualityBaseMultiplier)
162156
// Verified - all verified deal size * verified deal duration * 100
163157
// weightedVerifiedSpaceTime = verifiedWeight * VerifiedDealWeightMultiplier
164158
weightedVerifiedSpaceTime := big.Mul(verifiedWeight, builtin.VerifiedDealWeightMultiplier)
165159
// Sum - sum of all spacetime
166-
// weightedSumSpaceTime = weightedBaseSpaceTime + weightedDealSpaceTime + weightedVerifiedSpaceTime
167-
weightedSumSpaceTime := big.Sum(weightedBaseSpaceTime, weightedDealSpaceTime, weightedVerifiedSpaceTime)
160+
// weightedSumSpaceTime = weightedBaseSpaceTime + weightedVerifiedSpaceTime
161+
weightedSumSpaceTime := big.Sum(weightedBaseSpaceTime, weightedVerifiedSpaceTime)
168162
// scaledUpWeightedSumSpaceTime = weightedSumSpaceTime * 2^20
169163
scaledUpWeightedSumSpaceTime := big.Lsh(weightedSumSpaceTime, builtin.SectorQualityPrecision)
170164

@@ -173,15 +167,15 @@ func QualityForWeight(size abi.SectorSize, duration abi.ChainEpoch, dealWeight,
173167
}
174168

175169
// The power for a sector size, committed duration, and weight.
176-
func QAPowerForWeight(size abi.SectorSize, duration abi.ChainEpoch, dealWeight, verifiedWeight abi.DealWeight) abi.StoragePower {
177-
quality := QualityForWeight(size, duration, dealWeight, verifiedWeight)
170+
func QAPowerForWeight(size abi.SectorSize, duration abi.ChainEpoch, verifiedWeight abi.DealWeight) abi.StoragePower {
171+
quality := QualityForWeight(size, duration, verifiedWeight)
178172
return big.Rsh(big.Mul(big.NewIntUnsigned(uint64(size)), quality), builtin.SectorQualityPrecision)
179173
}
180174

181175
// The quality-adjusted power for a sector.
182176
func QAPowerForSector(size abi.SectorSize, sector *SectorOnChainInfo) abi.StoragePower {
183177
duration := sector.Expiration - sector.PowerBaseEpoch
184-
return QAPowerForWeight(size, duration, sector.DealWeight, sector.VerifiedDealWeight)
178+
return QAPowerForWeight(size, duration, sector.VerifiedDealWeight)
185179
}
186180

187181
const MaxAggregatedSectors = 819

builtin/v15/miner/policy_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package miner_test
2+
3+
import (
4+
"testing"
5+
6+
abi "github.com/filecoin-project/go-state-types/abi"
7+
"github.com/filecoin-project/go-state-types/big"
8+
"github.com/filecoin-project/go-state-types/builtin"
9+
v14miner "github.com/filecoin-project/go-state-types/builtin/v14/miner"
10+
"github.com/filecoin-project/go-state-types/builtin/v15/miner"
11+
"github.com/stretchr/testify/require"
12+
)
13+
14+
func TestQualityForWeight(t *testing.T) {
15+
emptyQuality := big.NewInt(1 << builtin.SectorQualityPrecision)
16+
verifiedQuality := big.Mul(emptyQuality, big.Div(builtin.VerifiedDealWeightMultiplier, builtin.QualityBaseMultiplier))
17+
halfVerifiedQuality := big.Add(big.Div(emptyQuality, big.NewInt(2)), big.Div(verifiedQuality, big.NewInt(2)))
18+
19+
sizeRange := []abi.SectorSize{
20+
abi.SectorSize(2 << 10),
21+
abi.SectorSize(8 << 20),
22+
abi.SectorSize(512 << 20),
23+
abi.SectorSize(32 << 30),
24+
abi.SectorSize(64 << 30),
25+
}
26+
durationRange := []abi.ChainEpoch{
27+
abi.ChainEpoch(1),
28+
abi.ChainEpoch(10),
29+
abi.ChainEpoch(1000),
30+
1000 * builtin.EpochsInDay,
31+
}
32+
33+
for _, size := range sizeRange {
34+
for _, duration := range durationRange {
35+
fullWeight := big.NewInt(int64(size) * int64(duration))
36+
halfWeight := big.Div(fullWeight, big.NewInt(2))
37+
38+
require.Equal(t, emptyQuality, miner.QualityForWeight(size, duration, big.Zero()))
39+
require.Equal(t, verifiedQuality, miner.QualityForWeight(size, duration, fullWeight))
40+
require.Equal(t, halfVerifiedQuality, miner.QualityForWeight(size, duration, halfWeight))
41+
42+
// test against old form that takes a dealWeight argument
43+
require.Equal(t, emptyQuality, v14miner.QualityForWeight(size, duration, big.Zero(), big.Zero()))
44+
require.Equal(t, emptyQuality, v14miner.QualityForWeight(size, duration, halfWeight, big.Zero()))
45+
require.Equal(t, emptyQuality, v14miner.QualityForWeight(size, duration, fullWeight, big.Zero()))
46+
require.Equal(t, verifiedQuality, v14miner.QualityForWeight(size, duration, big.Zero(), fullWeight))
47+
require.Equal(t, verifiedQuality, v14miner.QualityForWeight(size, duration, fullWeight, fullWeight))
48+
require.Equal(t, halfVerifiedQuality, v14miner.QualityForWeight(size, duration, big.Zero(), halfWeight))
49+
require.Equal(t, halfVerifiedQuality, v14miner.QualityForWeight(size, duration, halfWeight, halfWeight))
50+
}
51+
}
52+
}

0 commit comments

Comments
 (0)