package power import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/lotus/chain/actors/builtin" v0power "github.com/filecoin-project/specs-actors/actors/builtin/power" "github.com/filecoin-project/specs-actors/actors/util/adt" ) type v0State struct { v0power.State store adt.Store } func (s *v0State) TotalLocked() (abi.TokenAmount, error) { return s.TotalPledgeCollateral, nil } func (s *v0State) TotalPower() (Claim, error) { return Claim{ RawBytePower: s.TotalRawBytePower, QualityAdjPower: s.TotalQualityAdjPower, }, nil } func (s *v0State) MinerPower(addr address.Address) (Claim, bool, error) { claims, err := adt.AsMap(s.store, s.Claims) if err != nil { return Claim{}, false, err } var claim v0power.Claim ok, err := claims.Get(abi.AddrKey(addr), &claim) if err != nil { return Claim{}, false, err } return Claim{ RawBytePower: claim.RawBytePower, QualityAdjPower: claim.QualityAdjPower, }, ok, nil } func (s *v0State) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) } func (s *v0State) TotalPowerSmoothed() (builtin.FilterEstimate, error) { return *s.State.ThisEpochQAPowerSmoothed, nil } func (s *v0State) ListAllMiners() ([]address.Address, error) { claims, err := adt.AsMap(s.store, s.Claims) if err != nil { return nil, err } var miners []address.Address err = claims.ForEach(nil, func(k string) error { a, err := address.NewFromBytes([]byte(k)) if err != nil { return err } miners = append(miners, a) return nil }) if err != nil { return nil, err } return miners, nil }