80 Commits

Author SHA1 Message Date
Jordan Hrycaj
261c0b51a7
Redesign of BaseVMState descriptor (#923)
* Redesign of BaseVMState descriptor

why:
  BaseVMState provides an environment for executing transactions. The
  current descriptor also provides data that cannot generally be known
  within the execution environment, e.g. the total gasUsed which is
  available not before after all transactions have finished.

  Also, the BaseVMState constructor has been replaced by a constructor
  that does not need pre-initialised input of the account database.

also:
  Previous constructor and some fields are provided with a deprecated
  annotation (producing a lot of noise.)

* Replace legacy directives in production sources

* Replace legacy directives in unit test sources

* fix CI (missing premix update)

* Remove legacy directives

* chase CI problem

* rebased

* Re-introduce 'AccountsCache' constructor optimisation for 'BaseVmState' re-initialisation

why:
  Constructing a new 'AccountsCache' descriptor can be avoided sometimes
  when the current state root is properly positioned already. Such a
  feature existed already as the update function 'initStateDB()' for the
  'BaseChanDB' where the accounts cache was linked into this desctiptor.

  The function 'initStateDB()' was removed and re-implemented into the
  'BaseVmState' constructor without optimisation. The old version was of
  restricted use as a wrong accounts cache state would unconditionally
  throw an exception rather than conceptually ask for a remedy.

  The optimised 'BaseVmState' re-initialisation has been implemented for
  the 'persistBlocks()' function.

also:
  moved some test helpers to 'test/replay' folder

* Remove unused & undocumented fields from Chain descriptor

why:
  Reduces attack surface in general & improves reading the code.
2022-01-18 16:19:32 +00:00
Jordan Hrycaj
cea2a83b0a
Update/clarify tx validation (#917)
details:
  1. The check for cumulativeGasUsed + tx.gasLimit <= header.gasLimit
     makes neither sense nor is it part of the Eip1559 specs. Nevertheless
     a check tx.gasLimit <= header.gasLimit is added to satisfy some
     unit test (see comments in validateTransaction() body.)
  2. As a replacement check for the one removed in 1, a check for
     cumulativeGasUsed + gasBurned <= header.gasLimit has been added
     (see comments in processTransactionImpl() body.)
  3. Prototypes for processTransaction() variants have been cleaned up and
     commented.

why:
  Detail 1. in particular produces an error for tightly packed blocks when
  the last tx in the list has a generous gasLimit.
2022-01-10 09:04:06 +00:00
jangko
baf508f6ae
move stateDB from VMState to chainDB
previously, every time the VMState was created, it will also create
new stateDB, and this action will nullify the advantages of cached accounts.

the new changes will conserve the accounts cache if the executed blocks
are contiguous. if not the stateDB need to be reinited.

this changes also allow rpcCallEvm and rpcEstimateGas executed properly
using current stateDB instead of creating new one each time they are called.
2021-10-28 18:57:08 +07:00
jangko
d47be9047f
London: fix test_blockchain_json and test_generalstate_json
new London HF requires update to test code
2021-06-30 20:41:29 +07:00
Jamie Lokier
7c90d8de70
EVM: Remove vm_forks everywhere, use common forks list instead
The common forks list was already used, redirected via `vm_forks` for
historical compatibility.  Remove the old `vm_forks` now and divert all imports
to the common forks list outside the EVM.

Signed-off-by: Jamie Lokier <jamie@shareable.org>
2021-06-08 15:36:31 +01:00
Jamie Lokier
775231eef1
EVM: Apply EIP-6 in the code (affects both vm and vm2)
The rationale in EIP-6[1] for changing names to `selfDestruct` applies to code
as much as it does to specs.  Also, Ethereum uses the new names consistently,
so it's useful for our code to match the terms used in later EIP specs and
testsuite entries.

This change is straightforward, and is a prerequisite for patches to come that
do things with the `selfDestruct` fields.

[1] https://eips.ethereum.org/EIPS/eip-6
Hudson Jameson, "EIP-6: Renaming SUICIDE opcode," Ethereum Improvement
Proposals, no. 6, November 2015.

Signed-off-by: Jamie Lokier <jamie@shareable.org>
2021-06-08 15:36:30 +01:00
jangko
39ce2390ae
fixes getRecipient: using sender param instead of calculating sender itself
usually, there is always a sender around `getRecipient` call.
no need to recalculate sender. and more important, in some of
JSON-RPC/GraphQL call, the sender is come from `rpcCallData`,
not from `tx.getSender`. or in ohter situation when the tx is
an unsigned tx, without `r,s,v` fields to calculate sender.
2021-05-04 15:31:47 +07:00
jangko
639674d341
add disableParamFiltering() to both test_generalstate_json and test_blockchain_json
disableParamFiltering() is called in test_all, so its ok when
called via test_all. but when test_generalstate_json or
test_blockchain_json is called independently, and we are using
command line switch, the default param handler from std/unittest
will interfere. hence need to disable it.
2021-04-25 12:20:03 +07:00
Jordan Hrycaj
c8582583ef
merge vm_memory, vm_interpreter, and vm_utils_numeric => vm_internals
why:
  currently used for tests only
2021-03-31 18:15:27 +01:00
Jordan Hrycaj
5ce7ca6b32
provide vm_interpreter as import/export wrapper
details:
  moved original vm/interpreter.nim => vm/nvm_interpreter.nim
2021-03-31 16:47:08 +01:00
jangko
03bed02512 split legacy and new test to save time 2021-01-14 23:22:28 +07:00
jangko
74cccdfe9e
fixes test codes to deal with eth_tests submodule 2021-01-06 17:02:19 +07:00
jangko
165f9fea2e
reduce warnings 2020-07-21 13:15:06 +07:00
jangko
46e9c11d3f
fix test_generalstate_json -> add a call to accounts_cache.persist 2020-06-01 11:49:56 +07:00
jangko
71514a0a66
replace state_db with accounts_cache 2020-05-30 10:14:59 +07:00
andri lim
af02a3b1b2
reduce unused import warnings 2020-04-15 19:05:57 +07:00
andri lim
32574fcebe allow user to turn pruning on/off when run test 2020-02-20 09:16:29 +02:00
andri lim
ed5710fa17 allow user to select legacy or new test suite for GST and BCT 2020-02-20 09:16:29 +02:00
andri lim
55494f06e5
move 'validateTransaction' from GST into 'processTransaction' 2020-01-24 19:52:55 +07:00
andri lim
63e886655b fixes coinbase suicide bugs 2020-01-20 18:36:58 +02:00
andri lim
f9c2f40021 uncomment general state tests 2019-12-10 12:34:48 +02:00
andri lim
1ffb992674 multi root state trie implementation 2019-12-10 12:34:48 +02:00
andri lim
2057f88dba
fixes #421, each tests have their own skip table 2019-12-06 15:01:49 +07:00
andri lim
d944138e63
fixes indentation 2019-11-19 21:26:58 +07:00
andri lim
6b053d8a89
skip failed tests 2019-11-19 13:12:13 +07:00
andri lim
dda26611c2
fixes bc and gst tester [skip ci] 2019-11-14 22:37:58 +07:00
andri lim
f66f49168a
fix bc/gst tester for istanbul [skip ci] 2019-11-14 21:20:34 +07:00
andri lim
c4dcf5da30
reduce compiler warnings 2019-11-13 21:49:39 +07:00
Ștefan Talpalaru
d84e4810d5
unittest2 (parallelism disabled)
This is https://github.com/status-im/nimbus/pull/332 with parallelism
disabled, while some threadpool deadlock is being debugged.
2019-10-31 06:17:01 +01:00
andri lim
321f13dc19
attempt to add simple cli to all_tests 2019-09-21 12:45:23 +07:00
andri lim
7c094a2a3e
initial implementation of transaction test 2019-08-29 19:54:38 +07:00
andri lim
e05108b7e4
add 'trace' switch to tester configuration 2019-08-20 14:17:22 +07:00
andri lim
742f53f5e9 reactivates GST 2019-08-19 20:41:27 +03:00
Jacek Sieka
2763bd0dd5
std_shims -> stew 2019-07-07 12:12:01 +02:00
andri lim
8ecbce6d0c
fix gst state clearing, GST +5 2019-04-26 07:31:15 +07:00
andri lim
6295e6a7e4
fix touched miner problem, GST +25 2019-04-26 07:31:11 +07:00
andri lim
03435c7beb
gst and processTransaction unification 2019-04-18 07:56:57 +07:00
Ștefan Talpalaru
59e1b3fa6b
delete trailing spaces 2019-03-21 15:35:25 +01:00
andri lim
51397537b7
add indexed test config to gst 2019-03-21 16:44:31 +07:00
andri lim
8688706d96
fix random state test 101 2019-03-18 21:18:04 +07:00
andri lim
a7c6531f08
fix block gaslimit problem, GST +70 2019-03-18 14:35:52 +07:00
andri lim
0b43b143b1
add config to gst 2019-03-18 10:05:24 +07:00
andri lim
2bd5c99b27
add debugging caps to gst 2019-03-18 08:55:02 +07:00
andri lim
e2311d798b
fix recurring symbol collision problem 2019-03-07 22:53:09 +07:00
andri lim
fdf9e04108
initial contract call/create unification 2019-03-07 22:09:22 +07:00
andri lim
4c5eeac41e make test green 2019-03-04 11:56:50 +02:00
andri lim
38757c956d gst refactor: share the same tx.getSender with rest of Nimbus 2019-03-04 11:56:50 +02:00
andri lim
9ee3458dd4 add logs hash check to GST 2019-02-28 12:06:23 +02:00
andri lim
0518802690 contract creation and contract call cleanup 2019-02-28 10:04:49 +02:00
andri lim
a99b3f2096 pass additional 9 GST 2019-02-27 13:30:18 +02:00