core: introduce CheckReturnState constants
At the moment we should have 3 possible options to check return state during vm context unloading: * no check * ensure the stack is empty * ensure the stack is not empty It is necessary to distinguish them because new _deploy method shouldn't left anything on stack. Example: if we use _deploy method before some ordinary contract method which returns one value. Without these changes the contract invocation will fail due to 2 elements on stack left after invocation (the first `null` element is from _deploy, the second element is return-value from the ordinary contract method).
This commit is contained in:
parent
659fb89beb
commit
fe1f0a7245
5 changed files with 29 additions and 9 deletions
|
@ -912,7 +912,7 @@ func TestContractCreateDeploy(t *testing.T) {
|
|||
require.NoError(t, ic.VM.Run())
|
||||
|
||||
v.LoadScriptWithFlags(currCs.Script, smartcontract.All)
|
||||
err := contract.CallExInternal(ic, cs, "getValue", nil, smartcontract.All)
|
||||
err := contract.CallExInternal(ic, cs, "getValue", nil, smartcontract.All, vm.EnsureNotEmpty)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, v.Run())
|
||||
require.Equal(t, "create", v.Estack().Pop().String())
|
||||
|
@ -933,7 +933,7 @@ func TestContractCreateDeploy(t *testing.T) {
|
|||
require.NoError(t, v.Run())
|
||||
|
||||
v.LoadScriptWithFlags(currCs.Script, smartcontract.All)
|
||||
err = contract.CallExInternal(ic, newCs, "getValue", nil, smartcontract.All)
|
||||
err = contract.CallExInternal(ic, newCs, "getValue", nil, smartcontract.All, vm.EnsureNotEmpty)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, v.Run())
|
||||
require.Equal(t, "update", v.Estack().Pop().String())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue