expose state tree on vmcontext for the init actor
This commit is contained in:
parent
f42df886be
commit
d88c857deb
@ -101,10 +101,14 @@ func (ia InitActor) Exec(act *types.Actor, vmctx types.VMContext, p *ExecParams)
|
|||||||
|
|
||||||
// NOTE: This is a privileged call that only the init actor is allowed to make
|
// NOTE: This is a privileged call that only the init actor is allowed to make
|
||||||
// FIXME: Had to comment this because state is not in interface
|
// FIXME: Had to comment this because state is not in interface
|
||||||
_ = actor
|
state, err := vmctx.StateTree()
|
||||||
//if err := vmctx.state.SetActor(idAddr, &actor); err != nil {
|
if err != nil {
|
||||||
//return InvokeRet{}, errors.Wrap(err, "inserting new actor into state tree")
|
return InvokeRet{}, err
|
||||||
//}
|
}
|
||||||
|
|
||||||
|
if err := state.SetActor(idAddr, &actor); err != nil {
|
||||||
|
return InvokeRet{}, errors.Wrap(err, "inserting new actor into state tree")
|
||||||
|
}
|
||||||
|
|
||||||
c, err := vmctx.Storage().Put(self)
|
c, err := vmctx.Storage().Put(self)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -19,6 +19,11 @@ type Storage interface {
|
|||||||
Commit(oldh cid.Cid, newh cid.Cid) error
|
Commit(oldh cid.Cid, newh cid.Cid) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type StateTree interface {
|
||||||
|
SetActor(addr address.Address, act *Actor) error
|
||||||
|
GetActor(addr address.Address) (*Actor, error)
|
||||||
|
}
|
||||||
|
|
||||||
type VMContext interface {
|
type VMContext interface {
|
||||||
Message() *Message
|
Message() *Message
|
||||||
Ipld() *hamt.CborIpldStore
|
Ipld() *hamt.CborIpldStore
|
||||||
@ -26,4 +31,5 @@ type VMContext interface {
|
|||||||
BlockHeight() uint64
|
BlockHeight() uint64
|
||||||
GasUsed() BigInt
|
GasUsed() BigInt
|
||||||
Storage() Storage
|
Storage() Storage
|
||||||
|
StateTree() (StateTree, error)
|
||||||
}
|
}
|
||||||
|
@ -88,6 +88,14 @@ func (vmc *VMContext) GasUsed() types.BigInt {
|
|||||||
return types.NewInt(0)
|
return types.NewInt(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (vmc *VMContext) StateTree() (types.StateTree, error) {
|
||||||
|
if vmc.msg.To != InitActorAddress {
|
||||||
|
return nil, fmt.Errorf("only init actor can access state tree directly")
|
||||||
|
}
|
||||||
|
|
||||||
|
return vmc.state, nil
|
||||||
|
}
|
||||||
|
|
||||||
func makeVMContext(state *StateTree, bs bstore.Blockstore, sroot cid.Cid, msg *types.Message, height uint64) *VMContext {
|
func makeVMContext(state *StateTree, bs bstore.Blockstore, sroot cid.Cid, msg *types.Message, height uint64) *VMContext {
|
||||||
cst := hamt.CSTFromBstore(bs)
|
cst := hamt.CSTFromBstore(bs)
|
||||||
return &VMContext{
|
return &VMContext{
|
||||||
|
Loading…
Reference in New Issue
Block a user