interop: unify VM price getter setting

This commit is contained in:
Roman Khimov 2022-06-06 22:00:16 +03:00
parent 638b04b29a
commit bdc6624c9d
2 changed files with 3 additions and 7 deletions

View file

@ -1109,7 +1109,6 @@ func (bc *Blockchain) storeBlock(block *block.Block, txpool *mempool.Pool) error
systemInterop := bc.newInteropContext(trigger.Application, cache, block, tx) systemInterop := bc.newInteropContext(trigger.Application, cache, block, tx)
v := systemInterop.SpawnVM() v := systemInterop.SpawnVM()
v.LoadScriptWithFlags(tx.Script, callflag.All) v.LoadScriptWithFlags(tx.Script, callflag.All)
v.SetPriceGetter(systemInterop.GetPrice)
v.GasLimit = tx.SystemFee v.GasLimit = tx.SystemFee
err := systemInterop.Exec() err := systemInterop.Exec()
@ -1283,7 +1282,6 @@ func (bc *Blockchain) runPersist(script []byte, block *block.Block, cache *dao.S
systemInterop := bc.newInteropContext(trig, cache, block, nil) systemInterop := bc.newInteropContext(trig, cache, block, nil)
v := systemInterop.SpawnVM() v := systemInterop.SpawnVM()
v.LoadScriptWithFlags(script, callflag.All) v.LoadScriptWithFlags(script, callflag.All)
v.SetPriceGetter(systemInterop.GetPrice)
if err := systemInterop.Exec(); err != nil { if err := systemInterop.Exec(); err != nil {
return nil, fmt.Errorf("VM has failed: %w", err) return nil, fmt.Errorf("VM has failed: %w", err)
} else if _, err := systemInterop.DAO.Persist(); err != nil { } else if _, err := systemInterop.DAO.Persist(); err != nil {
@ -2166,8 +2164,7 @@ func (bc *Blockchain) GetEnrollments() ([]state.Validator, error) {
// GetTestVM returns an interop context with VM set up for a test run. // GetTestVM returns an interop context with VM set up for a test run.
func (bc *Blockchain) GetTestVM(t trigger.Type, tx *transaction.Transaction, b *block.Block) *interop.Context { func (bc *Blockchain) GetTestVM(t trigger.Type, tx *transaction.Transaction, b *block.Block) *interop.Context {
systemInterop := bc.newInteropContext(t, bc.dao, b, tx) systemInterop := bc.newInteropContext(t, bc.dao, b, tx)
vm := systemInterop.SpawnVM() _ = systemInterop.SpawnVM() // All the other code suppose that the VM is ready.
vm.SetPriceGetter(systemInterop.GetPrice)
return systemInterop return systemInterop
} }
@ -2200,8 +2197,7 @@ func (bc *Blockchain) GetTestHistoricVM(t trigger.Type, tx *transaction.Transact
return nil, fmt.Errorf("failed to initialize native cache backed by historic DAO: %w", err) return nil, fmt.Errorf("failed to initialize native cache backed by historic DAO: %w", err)
} }
systemInterop := bc.newInteropContext(t, dTrie, b, tx) systemInterop := bc.newInteropContext(t, dTrie, b, tx)
vm := systemInterop.SpawnVM() _ = systemInterop.SpawnVM() // All the other code suppose that the VM is ready.
vm.SetPriceGetter(systemInterop.GetPrice)
return systemInterop, nil return systemInterop, nil
} }
@ -2276,7 +2272,6 @@ func (bc *Blockchain) verifyHashAgainstScript(hash util.Uint160, witness *transa
} }
vm := interopCtx.SpawnVM() vm := interopCtx.SpawnVM()
vm.SetPriceGetter(interopCtx.GetPrice)
vm.GasLimit = gas vm.GasLimit = gas
if err := bc.InitVerificationContext(interopCtx, hash, witness); err != nil { if err := bc.InitVerificationContext(interopCtx, hash, witness); err != nil {
return 0, err return 0, err

View file

@ -329,6 +329,7 @@ func (ic *Context) SpawnVM() *vm.VM {
v.LoadToken = ic.LoadToken v.LoadToken = ic.LoadToken
v.GasLimit = -1 v.GasLimit = -1
v.SyscallHandler = ic.SyscallHandler v.SyscallHandler = ic.SyscallHandler
v.SetPriceGetter(ic.GetPrice)
ic.VM = v ic.VM = v
return v return v
} }