miner: Fix actor control list cli

This commit is contained in:
Łukasz Magiera 2020-12-02 20:46:07 +01:00
parent 7246ef273f
commit f74a1b70ab
5 changed files with 66 additions and 12 deletions

View File

@ -5,21 +5,22 @@ import (
"context"
"time"
datatransfer "github.com/filecoin-project/go-data-transfer"
"github.com/google/uuid"
"github.com/ipfs/go-cid"
"github.com/libp2p/go-libp2p-core/peer"
"github.com/filecoin-project/go-address"
datatransfer "github.com/filecoin-project/go-data-transfer"
"github.com/filecoin-project/go-fil-markets/piecestore"
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
"github.com/filecoin-project/go-fil-markets/storagemarket"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/specs-storage/storage"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/extern/sector-storage/fsutil"
"github.com/filecoin-project/lotus/extern/sector-storage/stores"
"github.com/filecoin-project/lotus/extern/sector-storage/storiface"
"github.com/filecoin-project/specs-storage/storage"
)
// StorageMiner is a low-level interface to the Filecoin network storage miner node
@ -29,6 +30,7 @@ type StorageMiner interface {
ActorAddress(context.Context) (address.Address, error)
ActorSectorSize(context.Context, address.Address) (abi.SectorSize, error)
ActorAddressConfig(ctx context.Context) (AddressConfig, error)
MiningBase(context.Context) (*types.TipSet, error)
@ -198,3 +200,8 @@ func (st *SealSeed) Equals(ost *SealSeed) bool {
}
type SectorState string
type AddressConfig struct {
PreCommitControl []address.Address
CommitControl []address.Address
}

View File

@ -279,6 +279,7 @@ type StorageMinerStruct struct {
Internal struct {
ActorAddress func(context.Context) (address.Address, error) `perm:"read"`
ActorSectorSize func(context.Context, address.Address) (abi.SectorSize, error) `perm:"read"`
ActorAddressConfig func(ctx context.Context) (api.AddressConfig, error)`perm:"read"`
MiningBase func(context.Context) (*types.TipSet, error) `perm:"read"`
@ -1230,6 +1231,10 @@ func (c *StorageMinerStruct) ActorSectorSize(ctx context.Context, addr address.A
return c.Internal.ActorSectorSize(ctx, addr)
}
func (c *StorageMinerStruct) ActorAddressConfig(ctx context.Context) (api.AddressConfig, error) {
return c.Internal.ActorAddressConfig(ctx)
}
func (c *StorageMinerStruct) PledgeSector(ctx context.Context) error {
return c.Internal.PledgeSector(ctx)
}

View File

@ -27,7 +27,6 @@ import (
"github.com/filecoin-project/lotus/chain/types"
lcli "github.com/filecoin-project/lotus/cli"
"github.com/filecoin-project/lotus/lib/tablewriter"
"github.com/filecoin-project/lotus/storage"
)
var actorCmd = &cli.Command{
@ -414,9 +413,37 @@ var actorControlList = &cli.Command{
tablewriter.Col("balance"),
)
postAddr, _, err := storage.AddressFor(ctx, api, mi, storage.PoStAddr, types.FromFil(1), types.FromFil(1))
ac, err := nodeApi.ActorAddressConfig(ctx)
if err != nil {
return xerrors.Errorf("getting address for post: %w", err)
return err
}
commit := map[address.Address]struct{}{}
precommit := map[address.Address]struct{}{}
post := map[address.Address]struct{}{}
for _, ca := range mi.ControlAddresses {
post[ca] = struct{}{}
}
for _, ca := range ac.PreCommitControl {
ca, err := api.StateLookupID(ctx, ca, types.EmptyTSK)
if err != nil {
return err
}
delete(post, ca)
precommit[ca] = struct{}{}
}
for _, ca := range ac.CommitControl {
ca, err := api.StateLookupID(ctx, ca, types.EmptyTSK)
if err != nil {
return err
}
delete(post, ca)
commit[ca] = struct{}{}
}
printKey := func(name string, a address.Address) {
@ -451,9 +478,15 @@ var actorControlList = &cli.Command{
if a == mi.Worker {
uses = append(uses, color.YellowString("other"))
}
if a == postAddr {
if _, ok := post[a]; ok {
uses = append(uses, color.GreenString("post"))
}
if _, ok := precommit[a]; ok {
uses = append(uses, color.CyanString("precommit"))
}
if _, ok := commit[a]; ok {
uses = append(uses, color.BlueString("commit"))
}
tw.Write(map[string]interface{}{
"name": name,

View File

@ -57,6 +57,7 @@ type StorageMinerAPI struct {
storiface.WorkerReturn
DataTransfer dtypes.ProviderDataTransfer
Host host.Host
AddrSel *storage.AddressSelector
DS dtypes.MetadataDS
@ -573,4 +574,9 @@ func (sm *StorageMinerAPI) CheckProvable(ctx context.Context, pp abi.RegisteredP
return out, nil
}
func (sm *StorageMinerAPI) ActorAddressConfig(ctx context.Context) (api.AddressConfig, error) {
return sm.AddrSel.AddressConfig, nil
}
var _ api.StorageMiner = &StorageMinerAPI{}

View File

@ -5,6 +5,8 @@ import (
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/chain/actors/builtin/miner"
"github.com/filecoin-project/lotus/chain/types"
)
@ -26,8 +28,7 @@ type addrSelectApi interface {
}
type AddressSelector struct {
PreCommitControl []address.Address
CommitControl []address.Address
api.AddressConfig
}
func (as *AddressSelector) AddressFor(ctx context.Context, a addrSelectApi, mi miner.MinerInfo, use AddrUse, goodFunds, minFunds abi.TokenAmount) (address.Address, abi.TokenAmount, error) {
@ -77,10 +78,12 @@ func pickAddress(ctx context.Context, a addrSelectApi, mi miner.MinerInfo, goodF
}
for _, addr := range addrs {
addr, err := a.StateLookupID(ctx, addr, types.EmptyTSK)
if err != nil {
log.Warnw("looking up control address", "address", addr, "error", err)
continue
if addr.Protocol() != address.ID {
addr, err := a.StateLookupID(ctx, addr, types.EmptyTSK)
if err != nil {
log.Warnw("looking up control address", "address", addr, "error", err)
continue
}
}
if _, ok := ctl[addr]; !ok {