Add a boolean HasMinPower to return of GetPower

This commit is contained in:
Aayush Rajasekaran 2020-09-16 01:47:24 -04:00
parent b4ee519282
commit 90853e24cf
5 changed files with 23 additions and 22 deletions

View File

@ -602,6 +602,7 @@ type VoucherCreateResult struct {
type MinerPower struct { type MinerPower struct {
MinerPower power.Claim MinerPower power.Claim
TotalPower power.Claim TotalPower power.Claim
HasMinPower bool
} }
type QueryOffer struct { type QueryOffer struct {

View File

@ -79,37 +79,42 @@ func GetMinerWorkerRaw(ctx context.Context, sm *StateManager, st cid.Cid, maddr
return vm.ResolveToKeyAddr(state, sm.cs.Store(ctx), info.Worker) return vm.ResolveToKeyAddr(state, sm.cs.Store(ctx), info.Worker)
} }
func GetPower(ctx context.Context, sm *StateManager, ts *types.TipSet, maddr address.Address) (power.Claim, power.Claim, error) { func GetPower(ctx context.Context, sm *StateManager, ts *types.TipSet, maddr address.Address) (power.Claim, power.Claim, bool, error) {
return GetPowerRaw(ctx, sm, ts.ParentState(), maddr) return GetPowerRaw(ctx, sm, ts.ParentState(), maddr)
} }
func GetPowerRaw(ctx context.Context, sm *StateManager, st cid.Cid, maddr address.Address) (power.Claim, power.Claim, error) { func GetPowerRaw(ctx context.Context, sm *StateManager, st cid.Cid, maddr address.Address) (power.Claim, power.Claim, bool, error) {
act, err := sm.LoadActorRaw(ctx, builtin.StoragePowerActorAddr, st) act, err := sm.LoadActorRaw(ctx, builtin.StoragePowerActorAddr, st)
if err != nil { if err != nil {
return power.Claim{}, power.Claim{}, xerrors.Errorf("(get sset) failed to load power actor state: %w", err) return power.Claim{}, power.Claim{}, false, xerrors.Errorf("(get sset) failed to load power actor state: %w", err)
} }
mas, err := power.Load(sm.cs.Store(ctx), act) pas, err := power.Load(sm.cs.Store(ctx), act)
if err != nil { if err != nil {
return power.Claim{}, power.Claim{}, err return power.Claim{}, power.Claim{}, false, err
} }
tpow, err := mas.TotalPower() tpow, err := pas.TotalPower()
if err != nil { if err != nil {
return power.Claim{}, power.Claim{}, err return power.Claim{}, power.Claim{}, false, err
} }
var mpow power.Claim var mpow power.Claim
if maddr != address.Undef { if maddr != address.Undef {
var found bool var found bool
mpow, found, err = mas.MinerPower(maddr) mpow, found, err = pas.MinerPower(maddr)
if err != nil || !found { if err != nil || !found {
// TODO: return an error when not found? // TODO: return an error when not found?
return power.Claim{}, power.Claim{}, err return power.Claim{}, power.Claim{}, false, err
} }
} }
return mpow, tpow, nil minpow, err := pas.MinerNominalPowerMeetsConsensusMinimum(maddr)
if err != nil {
return power.Claim{}, power.Claim{}, false, err
}
return mpow, tpow, minpow, nil
} }
func PreCommitInfo(ctx context.Context, sm *StateManager, maddr address.Address, sid abi.SectorNumber, ts *types.TipSet) (*miner.SectorPreCommitOnChainInfo, error) { func PreCommitInfo(ctx context.Context, sm *StateManager, maddr address.Address, sid abi.SectorNumber, ts *types.TipSet) (*miner.SectorPreCommitOnChainInfo, error) {
@ -470,7 +475,7 @@ func MinerGetBaseInfo(ctx context.Context, sm *StateManager, bcs beacon.Schedule
return nil, nil return nil, nil
} }
mpow, tpow, err := GetPowerRaw(ctx, sm, lbst, maddr) mpow, tpow, hmp, err := GetPowerRaw(ctx, sm, lbst, maddr)
if err != nil { if err != nil {
return nil, xerrors.Errorf("failed to get power: %w", err) return nil, xerrors.Errorf("failed to get power: %w", err)
} }
@ -485,11 +490,6 @@ func MinerGetBaseInfo(ctx context.Context, sm *StateManager, bcs beacon.Schedule
return nil, xerrors.Errorf("resolving worker address: %w", err) return nil, xerrors.Errorf("resolving worker address: %w", err)
} }
hmp, err := MinerHasMinPower(ctx, sm, maddr, lbts)
if err != nil {
return nil, xerrors.Errorf("determining if miner has min power failed: %w", err)
}
return &api.MiningBaseInfo{ return &api.MiningBaseInfo{
MinerPower: mpow.QualityAdjPower, MinerPower: mpow.QualityAdjPower,
NetworkPower: tpow.QualityAdjPower, NetworkPower: tpow.QualityAdjPower,

View File

@ -853,7 +853,7 @@ func (syncer *Syncer) ValidateBlock(ctx context.Context, b *types.FullBlock) (er
return xerrors.Errorf("received block was from slashed or invalid miner") return xerrors.Errorf("received block was from slashed or invalid miner")
} }
mpow, tpow, err := stmgr.GetPowerRaw(ctx, syncer.sm, lbst, h.Miner) mpow, tpow, _, err := stmgr.GetPowerRaw(ctx, syncer.sm, lbst, h.Miner)
if err != nil { if err != nil {
return xerrors.Errorf("failed getting power: %w", err) return xerrors.Errorf("failed getting power: %w", err)
} }

View File

@ -12,7 +12,6 @@ import (
"github.com/filecoin-project/go-address" "github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/go-state-types/network"
"github.com/filecoin-project/lotus/chain/state" "github.com/filecoin-project/lotus/chain/state"
"github.com/filecoin-project/lotus/chain/stmgr" "github.com/filecoin-project/lotus/chain/stmgr"
"github.com/filecoin-project/lotus/chain/store" "github.com/filecoin-project/lotus/chain/store"
@ -193,7 +192,7 @@ var chainBalanceStateCmd = &cli.Command{
} }
if act.Code == builtin.StorageMinerActorCodeID && minerInfo { if act.Code == builtin.StorageMinerActorCodeID && minerInfo {
pow, _, err := stmgr.GetPowerRaw(ctx, sm, sroot, addr) pow, _, _, err := stmgr.GetPowerRaw(ctx, sm, sroot, addr)
if err != nil { if err != nil {
return xerrors.Errorf("failed to get power: %w", err) return xerrors.Errorf("failed to get power: %w", err)
} }

View File

@ -253,7 +253,7 @@ func (a *StateAPI) StateMinerPower(ctx context.Context, addr address.Address, ts
return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err) return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err)
} }
m, net, err := stmgr.GetPower(ctx, a.StateManager, ts, addr) m, net, hmp, err := stmgr.GetPower(ctx, a.StateManager, ts, addr)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -261,6 +261,7 @@ func (a *StateAPI) StateMinerPower(ctx context.Context, addr address.Address, ts
return &api.MinerPower{ return &api.MinerPower{
MinerPower: m, MinerPower: m,
TotalPower: net, TotalPower: net,
HasMinPower: hmp,
}, nil }, nil
} }