From 4fbe1762d35d958c0edbf98b491c0b38e37ce940 Mon Sep 17 00:00:00 2001 From: simlecode <69969590+simlecode@users.noreply.github.com> Date: Mon, 19 Aug 2024 14:02:52 +0800 Subject: [PATCH 1/3] fix: Fix DDO pledge math --- .../impl/commitmgr/commit_processor.go | 2 +- .../modules/impl/commitmgr/params.go | 35 +++++++++++++++++-- .../modules/util/pledge/pledge.go | 6 ++-- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/damocles-manager/modules/impl/commitmgr/commit_processor.go b/damocles-manager/modules/impl/commitmgr/commit_processor.go index 5e206832..fe41678a 100644 --- a/damocles-manager/modules/impl/commitmgr/commit_processor.go +++ b/damocles-manager/modules/impl/commitmgr/commit_processor.go @@ -125,7 +125,7 @@ func (c CommitProcessor) ProcessV2( } sectorsMap[p.ID.Number] = sectors[i] if mcfg.Commitment.Prove.SendFund { - sc, err := getSectorCollateral(ctx, c.api, mid, p.ID.Number, tok) + sc, err := getSectorCollateral(ctx, c.api, c.chain, §ors[i], mid, tok, mcfg.Sealing.UseSyntheticPoRep) if err != nil { plog.Errorf("get sector collateral for %d failed: %s\n", p.ID.Number, err) failed[sectors[i].ID] = struct{}{} diff --git a/damocles-manager/modules/impl/commitmgr/params.go b/damocles-manager/modules/impl/commitmgr/params.go index ca88b902..ceeff12e 100644 --- a/damocles-manager/modules/impl/commitmgr/params.go +++ b/damocles-manager/modules/impl/commitmgr/params.go @@ -8,8 +8,12 @@ import ( "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/builtin/v9/miner" + lminer "github.com/filecoin-project/lotus/chain/actors/builtin/miner" + v1 "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + "github.com/filecoin-project/venus/venus-shared/types" "github.com/ipfs-force-community/damocles/damocles-manager/core" + "github.com/ipfs-force-community/damocles/damocles-manager/modules/util/pledge" ) func (p PreCommitProcessor) preCommitInfo( @@ -87,16 +91,18 @@ func (p PreCommitProcessor) preCommitInfo( func getSectorCollateral( ctx context.Context, stateMgr SealingAPI, + chainAPI v1.FullNode, + sector *core.SectorState, mid abi.ActorID, - sn abi.SectorNumber, tok core.TipSetToken, + useSyntheticPoRep bool, ) (abi.TokenAmount, error) { maddr, err := address.NewIDAddress(uint64(mid)) if err != nil { return big.Zero(), fmt.Errorf("invalid miner actor id: %w", err) } - pci, err := stateMgr.StateSectorPreCommitInfo(ctx, maddr, sn, tok) + pci, err := stateMgr.StateSectorPreCommitInfo(ctx, maddr, sector.ID.Number, tok) if err != nil { return big.Zero(), fmt.Errorf("getting precommit info: %w", err) } @@ -104,7 +110,16 @@ func getSectorCollateral( return big.Zero(), fmt.Errorf("precommit info not found on chain") } - collateral, err := stateMgr.StateMinerInitialPledgeCollateral(ctx, maddr, pci.Info, tok) + sealProof, err := currentSealProof(ctx, maddr, chainAPI, useSyntheticPoRep) + if err != nil { + return big.Zero(), fmt.Errorf("getting current seal proof type: %w", err) + } + weight, err := pledge.SectorWeight(ctx, sector, sealProof, chainAPI, pci.Info.Expiration) + if err != nil { + return big.Zero(), fmt.Errorf("getting sector weight: %w", err) + } + + collateral, err := pledge.CalcPledgeForPower(ctx, chainAPI, weight) if err != nil { return big.Zero(), fmt.Errorf("getting initial pledge collateral: %w", err) } @@ -117,6 +132,20 @@ func getSectorCollateral( return collateral, nil } +func currentSealProof(ctx context.Context, maddr address.Address, chainAPI v1.FullNode, useSyntheticPoRep bool) (abi.RegisteredSealProof, error) { + mi, err := chainAPI.StateMinerInfo(ctx, maddr, types.EmptyTSK) + if err != nil { + return 0, err + } + + ver, err := chainAPI.StateNetworkVersion(ctx, types.EmptyTSK) + if err != nil { + return 0, err + } + + return lminer.PreferredSealProofTypeFromWindowPoStType(ver, mi.WindowPoStProofType, useSyntheticPoRep) +} + func getSectorCollateralNiPoRep( ctx context.Context, stateMgr SealingAPI, diff --git a/damocles-manager/modules/util/pledge/pledge.go b/damocles-manager/modules/util/pledge/pledge.go index f7cada7a..c18e797a 100644 --- a/damocles-manager/modules/util/pledge/pledge.go +++ b/damocles-manager/modules/util/pledge/pledge.go @@ -95,7 +95,7 @@ func SectorWeight( // get verified deal infos w, vw := big.Zero(), big.Zero() - + sectorDuration := big.NewInt(int64(expiration - ts.Height())) for _, piece := range sector.SectorPiece() { if !piece.HasDealInfo() { // todo StateMinerInitialPledgeCollateral doesn't add cc/padding to non-verified weight, is that correct? @@ -106,11 +106,11 @@ func SectorWeight( alloc, err := GetAllocation(ctx, chainAPI, ts.Key(), piece) if err != nil || alloc == nil { - w = big.Add(w, abi.NewStoragePower(int64(pieceInfo.Size))) + w = big.Add(w, big.Mul(sectorDuration, abi.NewStoragePower(int64(pieceInfo.Size)))) continue } - vw = big.Add(vw, abi.NewStoragePower(int64(pieceInfo.Size))) + w = big.Add(w, big.Mul(sectorDuration, abi.NewStoragePower(int64(pieceInfo.Size)))) } // load market actor From 0bc4c949b9b9482a00a356df00350883a3a0228d Mon Sep 17 00:00:00 2001 From: simlecode <69969590+simlecode@users.noreply.github.com> Date: Mon, 19 Aug 2024 14:22:20 +0800 Subject: [PATCH 2/3] fix: verified weight --- damocles-manager/modules/util/pledge/pledge.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/damocles-manager/modules/util/pledge/pledge.go b/damocles-manager/modules/util/pledge/pledge.go index c18e797a..d4ab4a50 100644 --- a/damocles-manager/modules/util/pledge/pledge.go +++ b/damocles-manager/modules/util/pledge/pledge.go @@ -110,7 +110,7 @@ func SectorWeight( continue } - w = big.Add(w, big.Mul(sectorDuration, abi.NewStoragePower(int64(pieceInfo.Size)))) + vw = big.Add(vw, big.Mul(sectorDuration, abi.NewStoragePower(int64(pieceInfo.Size)))) } // load market actor From c8337f059a6d8093b515417a51ce8c3e89afb727 Mon Sep 17 00:00:00 2001 From: simlecode <69969590+simlecode@users.noreply.github.com> Date: Mon, 19 Aug 2024 14:44:06 +0800 Subject: [PATCH 3/3] chore: fix lint --- damocles-manager/modules/impl/commitmgr/params.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/damocles-manager/modules/impl/commitmgr/params.go b/damocles-manager/modules/impl/commitmgr/params.go index ceeff12e..e18ba6d4 100644 --- a/damocles-manager/modules/impl/commitmgr/params.go +++ b/damocles-manager/modules/impl/commitmgr/params.go @@ -132,7 +132,12 @@ func getSectorCollateral( return collateral, nil } -func currentSealProof(ctx context.Context, maddr address.Address, chainAPI v1.FullNode, useSyntheticPoRep bool) (abi.RegisteredSealProof, error) { +func currentSealProof( + ctx context.Context, + maddr address.Address, + chainAPI v1.FullNode, + useSyntheticPoRep bool, +) (abi.RegisteredSealProof, error) { mi, err := chainAPI.StateMinerInfo(ctx, maddr, types.EmptyTSK) if err != nil { return 0, err