Skip to content

Commit

Permalink
chore: add actors v13
Browse files Browse the repository at this point in the history
  • Loading branch information
kasteph committed Feb 28, 2023
1 parent 21cb850 commit 5086d95
Show file tree
Hide file tree
Showing 30 changed files with 3,622 additions and 78 deletions.
4 changes: 3 additions & 1 deletion chain/actors/actors.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin"
builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin"
builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin"
"github.com/ipfs/go-cid"
cid "github.com/ipfs/go-cid"
)

type Version int
Expand All @@ -27,6 +27,8 @@ const (
Version9 Version = 9
Version10 Version = 10
Version11 Version = 11
Version12 Version = 12
Version13 Version = 13
)
const (
AccountKey = "account"
Expand Down
22 changes: 19 additions & 3 deletions chain/actors/builtin/datacap/datacap.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
actorstypes "github.com/filecoin-project/go-state-types/actors"
builtin11 "github.com/filecoin-project/go-state-types/builtin"
builtin13 "github.com/filecoin-project/go-state-types/builtin"
"github.com/filecoin-project/go-state-types/cbor"
"github.com/ipfs/go-cid"

Expand All @@ -17,8 +17,8 @@ import (
)

var (
Address = builtin11.DatacapActorAddr
Methods = builtin11.MethodsDatacap
Address = builtin13.DatacapActorAddr
Methods = builtin13.MethodsDatacap
)

func Load(store adt.Store, act *types.Actor) (State, error) {
Expand All @@ -38,6 +38,12 @@ func Load(store adt.Store, act *types.Actor) (State, error) {
case actorstypes.Version11:
return load11(store, act.Head)

case actorstypes.Version12:
return load12(store, act.Head)

case actorstypes.Version13:
return load13(store, act.Head)

}
}

Expand All @@ -56,6 +62,12 @@ func MakeState(store adt.Store, av actorstypes.Version, governor address.Address
case actorstypes.Version11:
return make11(store, governor, bitwidth)

case actorstypes.Version12:
return make12(store, governor, bitwidth)

case actorstypes.Version13:
return make13(store, governor, bitwidth)

default:
return nil, xerrors.Errorf("datacap actor only valid for actors v9 and above, got %d", av)
}
Expand Down Expand Up @@ -83,6 +95,8 @@ func AllCodes() []cid.Cid {
(&state9{}).Code(),
(&state10{}).Code(),
(&state11{}).Code(),
(&state12{}).Code(),
(&state13{}).Code(),
}
}

Expand All @@ -91,5 +105,7 @@ func VersionCodes() map[actors.Version]cid.Cid {
actors.Version9: (&state9{}).Code(),
actors.Version10: (&state10{}).Code(),
actors.Version11: (&state11{}).Code(),
actors.Version12: (&state12{}).Code(),
actors.Version13: (&state13{}).Code(),
}
}
92 changes: 92 additions & 0 deletions chain/actors/builtin/datacap/v12.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package datacap

import (
"crypto/sha256"
"fmt"

"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/ipfs/go-cid"

"github.com/filecoin-project/lily/chain/actors"
"github.com/filecoin-project/lotus/chain/actors/adt"

datacap12 "github.com/filecoin-project/go-state-types/builtin/v12/datacap"
adt12 "github.com/filecoin-project/go-state-types/builtin/v12/util/adt"
)

var _ State = (*state12)(nil)

func load12(store adt.Store, root cid.Cid) (State, error) {
out := state12{store: store}
err := store.Get(store.Context(), root, &out)
if err != nil {
return nil, err
}
return &out, nil
}

func make12(store adt.Store, governor address.Address, bitwidth uint64) (State, error) {
out := state12{store: store}
s, err := datacap12.ConstructState(store, governor, bitwidth)
if err != nil {
return nil, err
}

out.State = *s

return &out, nil
}

type state12 struct {
datacap12.State
store adt.Store
}

func (s *state12) Governor() (address.Address, error) {
return s.State.Governor, nil
}

func (s *state12) GetState() interface{} {
return &s.State
}

func (s *state12) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error {
return forEachClient(s.store, actors.Version12, s.VerifiedClients, cb)
}

func (s *state12) VerifiedClients() (adt.Map, error) {
return adt12.AsMap(s.store, s.Token.Balances, int(s.Token.HamtBitWidth))
}

func (s *state12) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) {
return getDataCap(s.store, actors.Version12, s.VerifiedClients, addr)
}

func (s *state12) VerifiedClientsMapBitWidth() int {
return int(s.Token.HamtBitWidth)
}

func (s *state12) VerifiedClientsMapHashFunction() func(input []byte) []byte {
return func(input []byte) []byte {
res := sha256.Sum256(input)
return res[:]
}
}

func (s *state12) ActorKey() string {
return actors.DatacapKey
}

func (s *state12) ActorVersion() actors.Version {
return actors.Version12
}

func (s *state12) Code() cid.Cid {
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
if !ok {
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
}

return code
}
92 changes: 92 additions & 0 deletions chain/actors/builtin/datacap/v13.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package datacap

import (
"crypto/sha256"
"fmt"

"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-state-types/abi"
"github.com/ipfs/go-cid"

"github.com/filecoin-project/lily/chain/actors"
"github.com/filecoin-project/lotus/chain/actors/adt"

datacap13 "github.com/filecoin-project/go-state-types/builtin/v13/datacap"
adt13 "github.com/filecoin-project/go-state-types/builtin/v13/util/adt"
)

var _ State = (*state13)(nil)

func load13(store adt.Store, root cid.Cid) (State, error) {
out := state13{store: store}
err := store.Get(store.Context(), root, &out)
if err != nil {
return nil, err
}
return &out, nil
}

func make13(store adt.Store, governor address.Address, bitwidth uint64) (State, error) {
out := state13{store: store}
s, err := datacap13.ConstructState(store, governor, bitwidth)
if err != nil {
return nil, err
}

out.State = *s

return &out, nil
}

type state13 struct {
datacap13.State
store adt.Store
}

func (s *state13) Governor() (address.Address, error) {
return s.State.Governor, nil
}

func (s *state13) GetState() interface{} {
return &s.State
}

func (s *state13) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error {
return forEachClient(s.store, actors.Version13, s.VerifiedClients, cb)
}

func (s *state13) VerifiedClients() (adt.Map, error) {
return adt13.AsMap(s.store, s.Token.Balances, int(s.Token.HamtBitWidth))
}

func (s *state13) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) {
return getDataCap(s.store, actors.Version13, s.VerifiedClients, addr)
}

func (s *state13) VerifiedClientsMapBitWidth() int {
return int(s.Token.HamtBitWidth)
}

func (s *state13) VerifiedClientsMapHashFunction() func(input []byte) []byte {
return func(input []byte) []byte {
res := sha256.Sum256(input)
return res[:]
}
}

func (s *state13) ActorKey() string {
return actors.DatacapKey
}

func (s *state13) ActorVersion() actors.Version {
return actors.Version13
}

func (s *state13) Code() cid.Cid {
code, ok := actors.GetActorCodeID(s.ActorVersion(), s.ActorKey())
if !ok {
panic(fmt.Errorf("didn't find actor %v code id for actor version %d", s.ActorKey(), s.ActorVersion()))
}

return code
}
22 changes: 19 additions & 3 deletions chain/actors/builtin/init/init.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 5086d95

Please sign in to comment.