Skip to content

Commit

Permalink
feat: limit PoSted partitions to 3
Browse files Browse the repository at this point in the history
  • Loading branch information
arajasek committed Oct 11, 2023
1 parent d09d549 commit 2a644e2
Show file tree
Hide file tree
Showing 10 changed files with 47 additions and 49 deletions.
10 changes: 9 additions & 1 deletion chain/actors/policy/policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -622,7 +622,8 @@ func GetMaxPoStPartitions(nv network.Version, p abi.RegisteredPoStProof) (int, e
if err != nil {
return 0, err
}
return int(uint64(maxSectors) / sectorsPerPart), nil

return min(miner12.PoStedPartitionsMax, int(uint64(maxSectors)/sectorsPerPart)), nil
}

func GetDefaultAggregationProof() abi.RegisteredAggregationProof {
Expand Down Expand Up @@ -865,3 +866,10 @@ func AggregatePreCommitNetworkFee(nwVer network.Version, aggregateSize int, base
return big.Zero(), xerrors.Errorf("unsupported network version")
}
}

func min(a, b int) int {
if a < b {
return a
}
return b
}
10 changes: 9 additions & 1 deletion chain/actors/policy/policy.go.template
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,8 @@ func GetMaxPoStPartitions(nv network.Version, p abi.RegisteredPoStProof) (int, e
if err != nil {
return 0, err
}
return int(uint64(maxSectors) / sectorsPerPart), nil

return min(miner{{.latestVersion}}.PoStedPartitionsMax, int(uint64(maxSectors) / sectorsPerPart)), nil
}

func GetDefaultAggregationProof() abi.RegisteredAggregationProof {
Expand Down Expand Up @@ -341,3 +342,10 @@ func AggregatePreCommitNetworkFee(nwVer network.Version, aggregateSize int, base
return big.Zero(), xerrors.Errorf("unsupported network version")
}
}

func min(a, b int) int {
if a < b {
return a
}
return b
}
11 changes: 0 additions & 11 deletions chain/actors/policy/policy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"github.com/stretchr/testify/require"

"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/network"
builtin0 "github.com/filecoin-project/specs-actors/actors/builtin"
miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner"
paych0 "github.com/filecoin-project/specs-actors/actors/builtin/paych"
Expand Down Expand Up @@ -74,13 +73,3 @@ func TestPartitionSizes(t *testing.T) {
require.Equal(t, sizeOld, sizeNew)
}
}

func TestPoStSize(t *testing.T) {
//stm: @BLOCKCHAIN_POLICY_GET_MAX_POST_PARTITIONS_001
v12PoStSize, err := GetMaxPoStPartitions(network.Version12, abi.RegisteredPoStProof_StackedDrgWindow64GiBV1)
require.Equal(t, 4, v12PoStSize)
require.NoError(t, err)
v13PoStSize, err := GetMaxPoStPartitions(network.Version13, abi.RegisteredPoStProof_StackedDrgWindow64GiBV1)
require.NoError(t, err)
require.Equal(t, 10, v13PoStSize)
}
7 changes: 2 additions & 5 deletions documentation/en/default-lotus-miner-config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -427,13 +427,10 @@
# env var: LOTUS_PROVING_DISABLEWDPOSTPRECHECKS
#DisableWDPoStPreChecks = false

# Maximum number of partitions to prove in a single SubmitWindowPoSt messace. 0 = network limit (10 in nv16)
# Maximum number of partitions to prove in a single SubmitWindowPoSt messace. 0 = network limit (3 in nv21)
#
# A single partition may contain up to 2349 32GiB sectors, or 2300 64GiB sectors.
#
# The maximum number of sectors which can be proven in a single PoSt message is 25000 in network version 16, which
# means that a single message can prove at most 10 partitions
#
# //
# Note that setting this value lower may result in less efficient gas use - more messages will be sent,
# to prove each deadline, resulting in more total gas use (but each message will have lower gas limit)
#
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ require (
github.com/filecoin-project/go-jsonrpc v0.3.1
github.com/filecoin-project/go-padreader v0.0.1
github.com/filecoin-project/go-paramfetch v0.0.4
github.com/filecoin-project/go-state-types v0.12.4-0.20231002153316-c656c180c4d2
github.com/filecoin-project/go-state-types v0.12.4
github.com/filecoin-project/go-statemachine v1.0.3
github.com/filecoin-project/go-statestore v0.2.0
github.com/filecoin-project/go-storedcounter v0.1.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -338,8 +338,8 @@ github.com/filecoin-project/go-state-types v0.1.0/go.mod h1:ezYnPf0bNkTsDibL/psS
github.com/filecoin-project/go-state-types v0.1.6/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q=
github.com/filecoin-project/go-state-types v0.1.10/go.mod h1:UwGVoMsULoCK+bWjEdd/xLCvLAQFBC7EDT477SKml+Q=
github.com/filecoin-project/go-state-types v0.11.2-0.20230712101859-8f37624fa540/go.mod h1:SyNPwTsU7I22gL2r0OAPcImvLoTVfgRwdK/Y5rR1zz8=
github.com/filecoin-project/go-state-types v0.12.4-0.20231002153316-c656c180c4d2 h1:eZvCTWl1Z3FxKB45gKN4RdDbaI0qBt+w2mG/lFEE3rs=
github.com/filecoin-project/go-state-types v0.12.4-0.20231002153316-c656c180c4d2/go.mod h1:iJTqGdWDvzXhuVf64Lw0hzt4TIoitMo0VgHdxdjNDZI=
github.com/filecoin-project/go-state-types v0.12.4 h1:F1yQRCgFGvg+UmBGWxskHcvNswjh061Ok/kOk0OWhQY=
github.com/filecoin-project/go-state-types v0.12.4/go.mod h1:iJTqGdWDvzXhuVf64Lw0hzt4TIoitMo0VgHdxdjNDZI=
github.com/filecoin-project/go-statemachine v0.0.0-20200925024713-05bd7c71fbfe/go.mod h1:FGwQgZAt2Gh5mjlwJUlVB62JeYdo+if0xWxSEfBD9ig=
github.com/filecoin-project/go-statemachine v1.0.3 h1:N07o6alys+V1tNoSTi4WuuoeNC4erS/6jE74+NsgQuk=
github.com/filecoin-project/go-statemachine v1.0.3/go.mod h1:jZdXXiHa61n4NmgWFG4w8tnqgvZVHYbJ3yW7+y8bF54=
Expand Down
7 changes: 2 additions & 5 deletions node/config/doc_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 2 additions & 5 deletions node/config/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -290,13 +290,10 @@ type ProvingConfig struct {
// 'lotus-miner proving compute window-post 0'
DisableWDPoStPreChecks bool

// Maximum number of partitions to prove in a single SubmitWindowPoSt messace. 0 = network limit (10 in nv16)
// Maximum number of partitions to prove in a single SubmitWindowPoSt messace. 0 = network limit (3 in nv21)
//
// A single partition may contain up to 2349 32GiB sectors, or 2300 64GiB sectors.
//
// The maximum number of sectors which can be proven in a single PoSt message is 25000 in network version 16, which
// means that a single message can prove at most 10 partitions
//
// //
// Note that setting this value lower may result in less efficient gas use - more messages will be sent,
// to prove each deadline, resulting in more total gas use (but each message will have lower gas limit)
//
Expand Down
18 changes: 10 additions & 8 deletions node/impl/full/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -934,10 +934,11 @@ func (a *StateAPI) stateComputeDataCIDv1(ctx context.Context, maddr address.Addr
return cid.Undef, xerrors.Errorf("computing params for ComputeDataCommitment: %w", err)
}
ccmt := &types.Message{
To: market.Address,
From: maddr,
Value: types.NewInt(0),
Method: market.Methods.ComputeDataCommitment,
To: market.Address,
From: maddr,
Value: types.NewInt(0),
// Hard coded, because the method has since been deprecated
Method: 8,
Params: ccparams,
}
r, err := a.StateCall(ctx, ccmt, tsk)
Expand Down Expand Up @@ -971,10 +972,11 @@ func (a *StateAPI) stateComputeDataCIDv2(ctx context.Context, maddr address.Addr
return cid.Undef, xerrors.Errorf("computing params for ComputeDataCommitment: %w", err)
}
ccmt := &types.Message{
To: market.Address,
From: maddr,
Value: types.NewInt(0),
Method: market.Methods.ComputeDataCommitment,
To: market.Address,
From: maddr,
Value: types.NewInt(0),
// Hard coded, because the method has since been deprecated
Method: 8,
Params: ccparams,
}
r, err := a.StateCall(ctx, ccmt, tsk)
Expand Down
20 changes: 10 additions & 10 deletions storage/wdpost/wdpost_run_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ func TestWDPostDoPostPartLimitConfig(t *testing.T) {
//stm: @CHAIN_SYNCER_COLLECT_CHAIN_001, @CHAIN_SYNCER_COLLECT_HEADERS_001, @CHAIN_SYNCER_VALIDATE_TIPSET_001
//stm: @CHAIN_SYNCER_NEW_PEER_HEAD_001, @CHAIN_SYNCER_VALIDATE_MESSAGE_META_001, @CHAIN_SYNCER_STOP_001
ctx := context.Background()
expectedMsgCount := 364
expectedMsgCount := 8

proofType := abi.RegisteredPoStProof_StackedDrgWindow2KiBV1
postAct := tutils.NewIDAddr(t, 100)
Expand All @@ -318,15 +318,15 @@ func TestWDPostDoPostPartLimitConfig(t *testing.T) {
partitionsPerMsg = minertypes.AddressedPartitionsMax
}

partitionCount := 4 * partitionsPerMsg
partitionCount := 5 * partitionsPerMsg

// Assert that user config is less than network limit
userPartLimit := 33
lastMsgParts := 21
require.Greater(t, partitionCount, userPartLimit)
userPartLimit := 2
lastMsgParts := 1
require.Greater(t, partitionsPerMsg, userPartLimit)

// Assert that we consts are correct
require.Equal(t, (expectedMsgCount-1)*userPartLimit+lastMsgParts, 4*partitionsPerMsg)
require.Equal(t, (expectedMsgCount-1)*userPartLimit+lastMsgParts, partitionCount)

var partitions []api.Partition
for p := 0; p < partitionCount; p++ {
Expand Down Expand Up @@ -398,7 +398,7 @@ func TestBatchPartitionsRecoverySectors(t *testing.T) {

mockStgMinerAPI := newMockStorageMinerAPI()

userPartLimit := 4
userPartLimit := 2

scheduler := &WindowPoStScheduler{
api: mockStgMinerAPI,
Expand Down Expand Up @@ -426,12 +426,12 @@ func TestBatchPartitionsRecoverySectors(t *testing.T) {
}
partitions = append(partitions, generatePartition(100, 10))

expectedBatchLens := []int{4, 1, 1, 4, 2, 1}
expectedBatchLens := []int{2, 2, 1, 1, 2, 2, 2, 1}

batches, err := scheduler.BatchPartitions(partitions, network.Version16)
batches, err := scheduler.BatchPartitions(partitions, network.Version21)
require.NoError(t, err)

require.Equal(t, len(batches), 6)
require.Equal(t, len(batches), len(expectedBatchLens))

for i, batch := range batches {
require.Equal(t, len(batch), expectedBatchLens[i])
Expand Down

0 comments on commit 2a644e2

Please sign in to comment.