lotus/chain/actors/builtin/registry.go.template

70 lines
1.7 KiB
Plaintext
Raw Normal View History

2022-09-06 15:49:29 +00:00
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
}