neo-go/pkg/core/interop
Roman Khimov 20b19d4599 interop/contract: fix state rollbacks for nested contexts
Our wrapping optimization relied on the caller context having a TRY block,
but each context (including internal calls!) has an exception handling stack
of its own, which means that for an invocation stack of

    entry
    A.someMethodFromEntry()   # this one has a TRY
    A.internalMethodViaCALL() # this one doesn't
    B.someMethod()

we get `HasTryBlock() == false` for `A.internalMethodViaCALL()` context, which
leads to missing wrapper and missing rollbacks if B is to THROW. What this
patch does instead is it checks for any context within contract boundaries.

Fixes #3045.

Signed-off-by: Roman Khimov <roman@nspcc.ru>
2023-06-29 11:35:10 +03:00
..
contract interop/contract: fix state rollbacks for nested contexts 2023-06-29 11:35:10 +03:00
crypto *: replace interface{} with any keyword 2023-04-04 13:22:42 +03:00
interopnames *: use require.ErrorIs instead of require.True(t, error.Is()) 2023-05-04 17:03:47 +03:00
iterator rpc: implement iterator sessions 2022-07-08 17:05:18 +03:00
runtime *: replace interface{} with any keyword 2023-04-04 13:22:42 +03:00
storage *: use require.ErrorIs instead of require.True(t, error.Is()) 2023-05-04 17:03:47 +03:00
context.go core: add InitializeCache method to Contract interface 2023-04-26 12:57:48 +03:00
doc.go *: add more package-specific documentation 2021-03-19 16:18:45 +03:00
gas_price.go interop: fetch baseExecFee once and keep it in the Context 2021-08-11 15:42:23 +03:00