From 90853e24cfd9e3ef749855fbdf319a821f4403aa Mon Sep 17 00:00:00 2001 From: Aayush Rajasekaran Date: Wed, 16 Sep 2020 01:47:24 -0400 Subject: [PATCH] Add a boolean HasMinPower to return of GetPower --- api/api_full.go | 5 +++-- chain/stmgr/utils.go | 32 ++++++++++++++++---------------- chain/sync.go | 2 +- cmd/lotus-shed/balances.go | 3 +-- node/impl/full/state.go | 3 ++- 5 files changed, 23 insertions(+), 22 deletions(-) diff --git a/api/api_full.go b/api/api_full.go index 88496d669..fbbf92d8b 100644 --- a/api/api_full.go +++ b/api/api_full.go @@ -600,8 +600,9 @@ type VoucherCreateResult struct { } type MinerPower struct { - MinerPower power.Claim - TotalPower power.Claim + MinerPower power.Claim + TotalPower power.Claim + HasMinPower bool } type QueryOffer struct { diff --git a/chain/stmgr/utils.go b/chain/stmgr/utils.go index e295725f8..e58d69156 100644 --- a/chain/stmgr/utils.go +++ b/chain/stmgr/utils.go @@ -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) } -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) } -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) 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 { - return power.Claim{}, power.Claim{}, err + return power.Claim{}, power.Claim{}, false, err } - tpow, err := mas.TotalPower() + tpow, err := pas.TotalPower() if err != nil { - return power.Claim{}, power.Claim{}, err + return power.Claim{}, power.Claim{}, false, err } var mpow power.Claim if maddr != address.Undef { var found bool - mpow, found, err = mas.MinerPower(maddr) + mpow, found, err = pas.MinerPower(maddr) if err != nil || !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) { @@ -470,7 +475,7 @@ func MinerGetBaseInfo(ctx context.Context, sm *StateManager, bcs beacon.Schedule return nil, nil } - mpow, tpow, err := GetPowerRaw(ctx, sm, lbst, maddr) + mpow, tpow, hmp, err := GetPowerRaw(ctx, sm, lbst, maddr) if err != nil { 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) } - 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{ MinerPower: mpow.QualityAdjPower, NetworkPower: tpow.QualityAdjPower, diff --git a/chain/sync.go b/chain/sync.go index c16821889..1d4e1f02b 100644 --- a/chain/sync.go +++ b/chain/sync.go @@ -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") } - 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 { return xerrors.Errorf("failed getting power: %w", err) } diff --git a/cmd/lotus-shed/balances.go b/cmd/lotus-shed/balances.go index 7dbfe2eb7..248f3b26e 100644 --- a/cmd/lotus-shed/balances.go +++ b/cmd/lotus-shed/balances.go @@ -12,7 +12,6 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "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/stmgr" "github.com/filecoin-project/lotus/chain/store" @@ -193,7 +192,7 @@ var chainBalanceStateCmd = &cli.Command{ } 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 { return xerrors.Errorf("failed to get power: %w", err) } diff --git a/node/impl/full/state.go b/node/impl/full/state.go index d69ba0a41..a19edb1ca 100644 --- a/node/impl/full/state.go +++ b/node/impl/full/state.go @@ -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) } - m, net, err := stmgr.GetPower(ctx, a.StateManager, ts, addr) + m, net, hmp, err := stmgr.GetPower(ctx, a.StateManager, ts, addr) if err != nil { return nil, err } @@ -261,6 +261,7 @@ func (a *StateAPI) StateMinerPower(ctx context.Context, addr address.Address, ts return &api.MinerPower{ MinerPower: m, TotalPower: net, + HasMinPower: hmp, }, nil }