feat: use either lotus vm or fvm consistently

This commit is contained in:
Aayush 2022-02-22 22:43:14 -05:00
parent 9bb936b75c
commit b6682f4bbe
3 changed files with 26 additions and 7 deletions

View File

@ -112,7 +112,12 @@ func (sm *StateManager) Call(ctx context.Context, msg *types.Message, ts *types.
) )
} }
fromActor, err := vmi.StateTree().GetActor(msg.From) stTree, err := sm.StateTree(bstate)
if err != nil {
return nil, err
}
fromActor, err := stTree.GetActor(msg.From)
if err != nil { if err != nil {
return nil, xerrors.Errorf("call raw get actor: %s", err) return nil, xerrors.Errorf("call raw get actor: %s", err)
} }
@ -219,7 +224,12 @@ func (sm *StateManager) CallWithGas(ctx context.Context, msg *types.Message, pri
} }
} }
fromActor, err := vmi.StateTree().GetActor(msg.From) stTree, err := sm.StateTree(state)
if err != nil {
return nil, err
}
fromActor, err := stTree.GetActor(msg.From)
if err != nil { if err != nil {
return nil, xerrors.Errorf("call raw get actor: %s", err) return nil, xerrors.Errorf("call raw get actor: %s", err)
} }

View File

@ -84,7 +84,7 @@ type StateManager struct {
compWait map[string]chan struct{} compWait map[string]chan struct{}
stlk sync.Mutex stlk sync.Mutex
genesisMsigLk sync.Mutex genesisMsigLk sync.Mutex
newVM func(context.Context, *vm.VMOpts) (*vm.VM, error) newVM func(context.Context, *vm.VMOpts) (vm.VMI, error)
Syscalls vm.SyscallBuilder Syscalls vm.SyscallBuilder
preIgnitionVesting []msig0.State preIgnitionVesting []msig0.State
postIgnitionVesting []msig0.State postIgnitionVesting []msig0.State
@ -142,7 +142,7 @@ func NewStateManager(cs *store.ChainStore, exec Executor, sys vm.SyscallBuilder,
latestVersion: lastVersion, latestVersion: lastVersion,
stateMigrations: stateMigrations, stateMigrations: stateMigrations,
expensiveUpgrades: expensiveUpgrades, expensiveUpgrades: expensiveUpgrades,
newVM: vm.NewLotusVM, newVM: vm.NewVM,
Syscalls: sys, Syscalls: sys,
cs: cs, cs: cs,
tsExec: exec, tsExec: exec,
@ -347,12 +347,12 @@ func (sm *StateManager) ValidateChain(ctx context.Context, ts *types.TipSet) err
return nil return nil
} }
func (sm *StateManager) SetVMConstructor(nvm func(context.Context, *vm.VMOpts) (*vm.VM, error)) { func (sm *StateManager) SetVMConstructor(nvm func(context.Context, *vm.VMOpts) (vm.VMI, error)) {
sm.newVM = nvm sm.newVM = nvm
} }
func (sm *StateManager) VMConstructor() func(context.Context, *vm.VMOpts) (*vm.VM, error) { func (sm *StateManager) VMConstructor() func(context.Context, *vm.VMOpts) (vm.VMI, error) {
return func(ctx context.Context, opts *vm.VMOpts) (*vm.VM, error) { return func(ctx context.Context, opts *vm.VMOpts) (vm.VMI, error) {
return sm.newVM(ctx, opts) return sm.newVM(ctx, opts)
} }
} }

View File

@ -2,6 +2,7 @@ package vm
import ( import (
"context" "context"
"os"
"github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/chain/types"
"github.com/ipfs/go-cid" "github.com/ipfs/go-cid"
@ -12,3 +13,11 @@ type VMI interface {
ApplyImplicitMessage(ctx context.Context, msg *types.Message) (*ApplyRet, error) ApplyImplicitMessage(ctx context.Context, msg *types.Message) (*ApplyRet, error)
Flush(ctx context.Context) (cid.Cid, error) Flush(ctx context.Context) (cid.Cid, error)
} }
func NewVM(ctx context.Context, opts *VMOpts) (VMI, error) {
if os.Getenv("LOTUS_USE_FVM_DOESNT_WORK_YET") == "1" {
return NewFVM(ctx, opts)
}
return NewLotusVM(ctx, opts)
}