package verifreg 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/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/actors/adt" builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" "github.com/ipfs/go-cid" "golang.org/x/xerrors" ) // Assumes that the bitwidth for v3 HAMTs is the DefaultHamtBitwidth func getDataCap(store adt.Store, ver actors.Version, root cid.Cid, addr address.Address) (bool, abi.StoragePower, error) { if addr.Protocol() != address.ID { return false, big.Zero(), xerrors.Errorf("can only look up ID addresses") } vh, err := adt.AsMap(store, root, ver, builtin3.DefaultHamtBitwidth) if err != nil { return false, big.Zero(), xerrors.Errorf("loading verifreg: %w", err) } var dcap abi.StoragePower if found, err := vh.Get(abi.AddrKey(addr), &dcap); err != nil { return false, big.Zero(), xerrors.Errorf("looking up addr: %w", err) } else if !found { return false, big.Zero(), nil } return true, dcap, nil } // Assumes that the bitwidth for v3 HAMTs is the DefaultHamtBitwidth func forEachCap(store adt.Store, ver actors.Version, root cid.Cid, cb func(addr address.Address, dcap abi.StoragePower) error) error { vh, err := adt.AsMap(store, root, ver, builtin3.DefaultHamtBitwidth) if err != nil { return xerrors.Errorf("loading verified clients: %w", err) } var dcap abi.StoragePower return vh.ForEach(&dcap, func(key string) error { a, err := address.NewFromBytes([]byte(key)) if err != nil { return err } return cb(a, dcap) }) }