nimbus-eth1/nimbus
Jamie Lokier 537cac1bf5
EVM: Move where `continuation` is cleared to fix a potential stall
This fixes a bug spotted by @mjfh that was introduced by commit 2a7ccceb:

    try:
      if not c.continuation.isNil:
        (c.continuation)()
        c.continuation = nil
      c.selectVM(fork)
    except CatchableError as e:
      ...

The call to `(c.continuation)()` was moved by 2a7ccceb inside the `try` so
that, like all the Op functions do already, if the continuation raises, the
interpreter's general catch turns the exception into a an error status result.

But if the continuation raises an exception, `continuation` is not cleared in
the next line, and at the next resumption the continuation is called again.
It may loop doing this.

This doesn't currently happen because the continuations don't really raise, but
it's still a correctness issue.

This fix also allows a continuation to spawn a second continuation, if it
encounters a second suspension point.  This also doesn't happen currently,
but the pattern will become useful with async EVM.

Signed-off-by: Jamie Lokier <jamie@shareable.org>
2021-05-27 12:16:37 +01:00
..
db drop PublicNetwork enum usage and replace it with NetworkId 2021-05-20 14:04:16 +07:00
graphql add more query fields and resolvers to graphql api 2021-05-18 07:32:03 +07:00
p2p add validateKinship in persistBlocks of nimbus/p2p/chain.nim 2021-05-27 16:28:26 +07:00
rpc implement "net_nodeInfo" rpc 2021-05-19 16:35:13 +07:00
transaction Transaction: Don't calculate `contractAddress` redundantly 2021-05-27 12:01:47 +01:00
utils Deep copy semantics for LRU cache 2021-05-26 11:12:52 +01:00
vm EVM: Move where `continuation` is cleared to fix a potential stall 2021-05-27 12:16:37 +01:00
vm2 drop PublicNetwork enum usage and replace it with NetworkId 2021-05-20 14:04:16 +07:00
block_types.nim reduce compiler warnings 2019-11-13 21:49:39 +07:00
chain_config.nim drop PublicNetwork enum usage and replace it with NetworkId 2021-05-20 14:04:16 +07:00
conf_utils.nim add validateKinship in persistBlocks of nimbus/p2p/chain.nim 2021-05-27 16:28:26 +07:00
config.nim add missing poaEngine configuration in config.nim 2021-05-24 14:35:47 +07:00
constants.nim Clear up meaning of `ZERO_ADDRESS`, delete `CREATE_CONTRACT_ADDRESS` 2021-05-27 12:14:51 +01:00
errors.nim remove unused eraseReturnData 2020-01-20 18:36:58 +02:00
genesis.nim drop PublicNetwork enum usage and replace it with NetworkId 2021-05-20 14:04:16 +07:00
genesis_alloc.nim add goerli testnet genesis data[skip ci] 2020-04-09 19:13:17 +03:00
launcher.nim Premix-related changes 2019-01-28 12:38:23 +02:00
lightchain_shell.nim
makefile removed circular import dependencies 2021-04-28 15:24:14 +03:00
nim.cfg NAT port mapping 2019-04-17 03:56:28 +02:00
nimbus.nim don't mix customBootNodes and bootNodes usage 2021-05-20 14:04:17 +07:00
random_keys.nim move rng to configuration 2020-07-21 00:16:59 +07:00
tracer.nim fixes wrong usage of `chainId` in places where it should be networkId 2021-05-12 09:45:09 +07:00
transaction.nim EIP-2930: optional access list 2021-05-16 19:54:48 +07:00
utils.nim implement more eth rpc and keystore management 2020-07-23 14:54:32 +07:00
validation.nim reduce compiler warnings 2019-11-13 21:49:39 +07:00
vm_compile_info.nim print compiler warning about the VM used 2021-04-28 15:24:14 +03:00
vm_computation.nim re-named compu_helper.nim => computation.nim 2021-04-28 15:24:14 +03:00
vm_gas_costs.nim re-named v2gas_costs.nim to its original name v2gas_costs.nim 2021-04-28 15:24:14 +03:00
vm_internals.nim re-named compu_helper.nim => computation.nim 2021-04-28 15:24:14 +03:00
vm_message.nim re-named some v2*.nim sources to its original name *.nim (without the v2) 2021-04-28 15:24:14 +03:00
vm_precompiles.nim re-named some v2*.nim sources to its original name *.nim (without the v2) 2021-04-28 15:24:14 +03:00
vm_state.nim re-named some v2state_transactions.nim to its original name without the v2 2021-04-28 15:24:14 +03:00
vm_state_transactions.nim Transaction: Prepare txRefundGas to support txCallEvm 2021-05-03 19:51:20 +01:00
vm_types.nim re-named some v2*.nim sources to its original name *.nim (without the v2) 2021-04-28 15:24:14 +03:00
vm_types2.nim eliminated v2opcode_values, v2forks in favour of op_codes, forks_list 2021-04-28 15:24:14 +03:00