Add a boolean HasMinPower to return of GetPower
This commit is contained in:
parent
b4ee519282
commit
90853e24cf
@ -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 {
|
||||||
|
@ -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,
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user