package builtin import ( actorstypes "github.com/filecoin-project/go-state-types/actors" "github.com/ipfs/go-cid" {{range .versions}} {{if (ge . 8)}} account{{.}} "github.com/filecoin-project/go-state-types/builtin/v{{.}}/account" {{end}} {{end}} "github.com/filecoin-project/go-state-types/cbor" rtt "github.com/filecoin-project/go-state-types/rt" "github.com/filecoin-project/lotus/chain/actors" ) var _ rtt.VMActor = (*RegistryEntry)(nil) type RegistryEntry struct { state cbor.Er code cid.Cid methods []interface{} } func (r RegistryEntry) State() cbor.Er { return r.state } func (r RegistryEntry) Exports() []interface{} { return r.methods } func (r RegistryEntry) Code() cid.Cid { return r.code } func MakeRegistry(av actorstypes.Version) []rtt.VMActor { if av < actorstypes.Version8 { panic("expected version v8 and up only, use specs-actors for v0-7") } registry := make([]rtt.VMActor, 0) codeIDs, err := actors.GetActorCodeIDs(av) if err != nil { panic(err) } switch av { {{range .versions}} {{if (ge . 8)}} case actorstypes.Version{{.}}: for key, codeID := range codeIDs { switch key { case actors.AccountKey: registry = append(registry, RegistryEntry{ code: codeID, methods: account{{.}}.Methods, state: new(account{{.}}.State), }) } } {{end}} {{end}} default: panic("expected version v8 and up only, use specs-actors for v0-7") } return registry }