convert lotus-shed balances
This commit is contained in:
parent
a41bf74bad
commit
916421b247
@ -18,6 +18,15 @@ import (
|
|||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Returns true if the specified actor code ID is a miner actor.
|
||||||
|
func Is(code cid.Cid) bool {
|
||||||
|
switch code {
|
||||||
|
case builtin0.StorageMinerActorCodeID:
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func Load(store adt.Store, act *types.Actor) (st State, err error) {
|
func Load(store adt.Store, act *types.Actor) (st State, err error) {
|
||||||
switch act.Code {
|
switch act.Code {
|
||||||
case builtin0.StorageMinerActorCodeID:
|
case builtin0.StorageMinerActorCodeID:
|
||||||
@ -46,6 +55,7 @@ type State interface {
|
|||||||
GetSectorExpiration(abi.SectorNumber) (*SectorExpiration, error)
|
GetSectorExpiration(abi.SectorNumber) (*SectorExpiration, error)
|
||||||
GetPrecommittedSector(abi.SectorNumber) (*SectorPreCommitOnChainInfo, error)
|
GetPrecommittedSector(abi.SectorNumber) (*SectorPreCommitOnChainInfo, error)
|
||||||
LoadSectors(sectorNos *bitfield.BitField) ([]*SectorOnChainInfo, error)
|
LoadSectors(sectorNos *bitfield.BitField) ([]*SectorOnChainInfo, error)
|
||||||
|
NumLiveSectors() (uint64, error)
|
||||||
IsAllocated(abi.SectorNumber) (bool, error)
|
IsAllocated(abi.SectorNumber) (bool, error)
|
||||||
|
|
||||||
LoadDeadline(idx uint64) (Deadline, error)
|
LoadDeadline(idx uint64) (Deadline, error)
|
||||||
|
@ -79,6 +79,21 @@ func (s *state0) FindSector(num abi.SectorNumber) (*SectorLocation, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *state0) NumLiveSectors() (uint64, error) {
|
||||||
|
dls, err := s.State.LoadDeadlines(s.store)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
var total uint64
|
||||||
|
if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner0.Deadline) error {
|
||||||
|
total += dl.LiveSectors
|
||||||
|
return nil
|
||||||
|
}); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return total, nil
|
||||||
|
}
|
||||||
|
|
||||||
// GetSectorExpiration returns the effective expiration of the given sector.
|
// GetSectorExpiration returns the effective expiration of the given sector.
|
||||||
//
|
//
|
||||||
// If the sector isn't found or has already been terminated, this method returns
|
// If the sector isn't found or has already been terminated, this method returns
|
||||||
|
@ -12,6 +12,8 @@ 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/lotus/chain/actors/adt"
|
||||||
|
"github.com/filecoin-project/lotus/chain/actors/builtin/miner"
|
||||||
"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"
|
||||||
@ -21,9 +23,6 @@ import (
|
|||||||
"github.com/filecoin-project/lotus/extern/sector-storage/ffiwrapper"
|
"github.com/filecoin-project/lotus/extern/sector-storage/ffiwrapper"
|
||||||
"github.com/filecoin-project/lotus/lib/blockstore"
|
"github.com/filecoin-project/lotus/lib/blockstore"
|
||||||
"github.com/filecoin-project/lotus/node/repo"
|
"github.com/filecoin-project/lotus/node/repo"
|
||||||
"github.com/filecoin-project/specs-actors/actors/builtin"
|
|
||||||
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
|
|
||||||
"github.com/filecoin-project/specs-actors/actors/util/adt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type accountInfo struct {
|
type accountInfo struct {
|
||||||
@ -90,7 +89,7 @@ var chainBalanceCmd = &cli.Command{
|
|||||||
Type: string(act.Code.Hash()[2:]),
|
Type: string(act.Code.Hash()[2:]),
|
||||||
}
|
}
|
||||||
|
|
||||||
if act.Code == builtin.StorageMinerActorCodeID {
|
if miner.Is(act.Code) {
|
||||||
pow, err := api.StateMinerPower(ctx, addr, tsk)
|
pow, err := api.StateMinerPower(ctx, addr, tsk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("failed to get power: %w", err)
|
return xerrors.Errorf("failed to get power: %w", err)
|
||||||
@ -167,6 +166,7 @@ var chainBalanceStateCmd = &cli.Command{
|
|||||||
cs := store.NewChainStore(bs, mds, vm.Syscalls(ffiwrapper.ProofVerifier))
|
cs := store.NewChainStore(bs, mds, vm.Syscalls(ffiwrapper.ProofVerifier))
|
||||||
|
|
||||||
cst := cbor.NewCborStore(bs)
|
cst := cbor.NewCborStore(bs)
|
||||||
|
store := adt.WrapStore(ctx, cst)
|
||||||
|
|
||||||
sm := stmgr.NewStateManager(cs)
|
sm := stmgr.NewStateManager(cs)
|
||||||
|
|
||||||
@ -191,7 +191,7 @@ var chainBalanceStateCmd = &cli.Command{
|
|||||||
PreCommits: types.FIL(big.NewInt(0)),
|
PreCommits: types.FIL(big.NewInt(0)),
|
||||||
}
|
}
|
||||||
|
|
||||||
if act.Code == builtin.StorageMinerActorCodeID && minerInfo {
|
if minerInfo && miner.Is(act.Code) {
|
||||||
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)
|
||||||
@ -199,24 +199,29 @@ var chainBalanceStateCmd = &cli.Command{
|
|||||||
|
|
||||||
ai.Power = pow.RawBytePower
|
ai.Power = pow.RawBytePower
|
||||||
|
|
||||||
var st miner.State
|
st, err := miner.Load(store, act)
|
||||||
if err := cst.Get(ctx, act.Head, &st); err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("failed to read miner state: %w", err)
|
return xerrors.Errorf("failed to read miner state: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
sectors, err := adt.AsArray(cs.Store(ctx), st.Sectors)
|
liveSectorCount, err := st.NumLiveSectors()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("failed to load sector set: %w", err)
|
return xerrors.Errorf("failed to compute live sector count: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ai.InitialPledge = types.FIL(st.InitialPledgeRequirement)
|
lockedFunds, err := st.LockedFunds()
|
||||||
ai.LockedFunds = types.FIL(st.LockedFunds)
|
if err != nil {
|
||||||
ai.PreCommits = types.FIL(st.PreCommitDeposits)
|
return xerrors.Errorf("failed to compute locked funds: %w", err)
|
||||||
ai.Sectors = sectors.Length()
|
}
|
||||||
|
|
||||||
var minfo miner.MinerInfo
|
ai.InitialPledge = types.FIL(lockedFunds.InitialPledgeRequirement)
|
||||||
if err := cst.Get(ctx, st.Info, &minfo); err != nil {
|
ai.LockedFunds = types.FIL(lockedFunds.VestingFunds)
|
||||||
return xerrors.Errorf("failed to read miner info: %w", err)
|
ai.PreCommits = types.FIL(lockedFunds.PreCommitDeposits)
|
||||||
|
ai.Sectors = liveSectorCount
|
||||||
|
|
||||||
|
minfo, err := st.Info()
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("failed to get miner info: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ai.Worker = minfo.Worker
|
ai.Worker = minfo.Worker
|
||||||
|
Loading…
Reference in New Issue
Block a user