Add some validity checks to runtime.CreateActor()
This commit is contained in:
parent
bd1ac4d91b
commit
a047e158ed
@ -32,7 +32,6 @@ import (
|
|||||||
blockstore "github.com/ipfs/go-ipfs-blockstore"
|
blockstore "github.com/ipfs/go-ipfs-blockstore"
|
||||||
cbor "github.com/ipfs/go-ipld-cbor"
|
cbor "github.com/ipfs/go-ipld-cbor"
|
||||||
logging "github.com/ipfs/go-log"
|
logging "github.com/ipfs/go-log"
|
||||||
mh "github.com/multiformats/go-multihash"
|
|
||||||
cbg "github.com/whyrusleeping/cbor-gen"
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -113,12 +112,6 @@ func TestForkHeightTriggers(t *testing.T) {
|
|||||||
|
|
||||||
inv := vm.NewInvoker()
|
inv := vm.NewInvoker()
|
||||||
|
|
||||||
pref := cid.NewPrefixV1(cid.Raw, mh.IDENTITY)
|
|
||||||
actcid, err := pref.Sum([]byte("testactor"))
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// predicting the address here... may break if other assumptions change
|
// predicting the address here... may break if other assumptions change
|
||||||
taddr, err := address.NewIDAddress(1002)
|
taddr, err := address.NewIDAddress(1002)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -158,7 +151,7 @@ func TestForkHeightTriggers(t *testing.T) {
|
|||||||
return st.Flush(ctx)
|
return st.Flush(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
inv.Register(actcid, &testActor{}, &testActorState{})
|
inv.Register(builtin.PaymentChannelActorCodeID, &testActor{}, &testActorState{})
|
||||||
sm.SetVMConstructor(func(c cid.Cid, h abi.ChainEpoch, r vm.Rand, b blockstore.Blockstore, s runtime.Syscalls) (*vm.VM, error) {
|
sm.SetVMConstructor(func(c cid.Cid, h abi.ChainEpoch, r vm.Rand, b blockstore.Blockstore, s runtime.Syscalls) (*vm.VM, error) {
|
||||||
nvm, err := vm.NewVM(c, h, r, b, s)
|
nvm, err := vm.NewVM(c, h, r, b, s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -172,7 +165,7 @@ func TestForkHeightTriggers(t *testing.T) {
|
|||||||
|
|
||||||
var msgs []*types.SignedMessage
|
var msgs []*types.SignedMessage
|
||||||
|
|
||||||
enc, err := actors.SerializeParams(&init_.ExecParams{CodeCID: actcid})
|
enc, err := actors.SerializeParams(&init_.ExecParams{CodeCID: builtin.PaymentChannelActorCodeID})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -235,8 +235,20 @@ func (rt *Runtime) NewActorAddress() address.Address {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (rt *Runtime) CreateActor(codeId cid.Cid, address address.Address) {
|
func (rt *Runtime) CreateActor(codeId cid.Cid, address address.Address) {
|
||||||
|
if !builtin.IsBuiltinActor(codeId) {
|
||||||
|
rt.Abortf(exitcode.SysErrorIllegalArgument, "Can only create built-in actors.")
|
||||||
|
}
|
||||||
|
|
||||||
|
if builtin.IsSingletonActor(codeId) {
|
||||||
|
rt.Abortf(exitcode.SysErrorIllegalArgument, "Can only have one instance of singleton actors.")
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := rt.state.GetActor(address)
|
||||||
|
if err == nil {
|
||||||
|
rt.Abortf(exitcode.SysErrorIllegalArgument, "Actor address already exists")
|
||||||
|
}
|
||||||
|
|
||||||
rt.ChargeGas(rt.Pricelist().OnCreateActor())
|
rt.ChargeGas(rt.Pricelist().OnCreateActor())
|
||||||
var err error
|
|
||||||
|
|
||||||
err = rt.state.SetActor(address, &types.Actor{
|
err = rt.state.SetActor(address, &types.Actor{
|
||||||
Code: codeId,
|
Code: codeId,
|
||||||
|
Loading…
Reference in New Issue
Block a user