e040e2671a
* Added basic async capabilities for vm2. This is a whole new Git branch, not the same one as last time (https://github.com/status-im/nimbus-eth1/pull/1250) - there wasn't much worth salvaging. Main differences: I didn't do the "each opcode has to specify an async handler" junk that I put in last time. Instead, in oph_memory.nim you can see sloadOp calling asyncChainTo and passing in an async operation. That async operation is then run by the execCallOrCreate (or asyncExecCallOrCreate) code in interpreter_dispatch.nim. In the test code, the (previously existing) macro called "assembler" now allows you to add a section called "initialStorage", specifying fake data to be used by the EVM computation run by that test. (In the long run we'll obviously want to write tests that for-real use the JSON-RPC API to asynchronously fetch data; for now, this was just an expedient way to write a basic unit test that exercises the async-EVM code pathway.) There's also a new macro called "concurrentAssemblers" that allows you to write a test that runs multiple assemblers concurrently (and then waits for them all to finish). There's one example test using this, in test_op_memory_lazy.nim, though you can't actually see it doing so unless you uncomment some echo statements in async_operations.nim (in which case you can see the two concurrently running EVM computations each printing out what they're doing, and you'll see that they interleave). A question: is it possible to make EVMC work asynchronously? (For now, this code compiles and "make test" passes even if ENABLE_EVMC is turned on, but it doesn't actually work asynchronously, it just falls back on doing the usual synchronous EVMC thing. See FIXME-asyncAndEvmc.) * Moved the AsyncOperationFactory to the BaseVMState object. * Made the AsyncOperationFactory into a table of fn pointers. Also ditched the plain-data Vm2AsyncOperation type; it wasn't really serving much purpose. Instead, the pendingAsyncOperation field directly contains the Future. * Removed the hasStorage idea. It's not the right solution to the "how do we know whether we still need to fetch the storage value or not?" problem. I haven't implemented the right solution yet, but at least we're better off not putting in a wrong one. * Added/modified/removed some comments. (Based on feedback on the PR.) * Removed the waitFor from execCallOrCreate. There was some back-and-forth in the PR regarding whether nested waitFor calls are acceptable: https://github.com/status-im/nimbus-eth1/pull/1260#discussion_r998587449 The eventual decision was to just change the waitFor to a doAssert (since we probably won't want this extra functionality when running synchronously anyway) to make sure that the Future is already finished. |
||
---|---|---|
.. | ||
amphora | ||
bootstrap | ||
customgenesis | ||
db | ||
fixtures | ||
graphql | ||
keystore | ||
merge | ||
replay | ||
rpcclient | ||
test_clique | ||
test_jwt_auth | ||
test_sync_snap | ||
test_txpool | ||
README.md | ||
all_tests.nim | ||
asynctest.nim | ||
evm_tests.nim | ||
macro_assembler.nim | ||
nim.cfg | ||
persistBlockTestGen.nim | ||
test_accounts_cache.nim | ||
test_allowed_to_fail.nim | ||
test_block_fixture.nim | ||
test_blockchain_json.nim | ||
test_clique.nim | ||
test_code_stream.nim | ||
test_config.nim | ||
test_configuration.nim | ||
test_custom_network.nim | ||
test_difficulty.nim | ||
test_filters.nim | ||
test_forkid.nim | ||
test_gas_meter.nim | ||
test_generalstate_json.nim | ||
test_genesis.nim | ||
test_graphql.nim | ||
test_helpers.nim | ||
test_jwt_auth.nim | ||
test_keyed_queue_rlp.nim | ||
test_memory.nim | ||
test_merge.nim | ||
test_misc.nim | ||
test_op_arith.nim | ||
test_op_bit.nim | ||
test_op_custom.nim | ||
test_op_env.nim | ||
test_op_memory.nim | ||
test_op_memory_lazy.nim | ||
test_op_misc.nim | ||
test_persistblock_json.nim | ||
test_pow.nim | ||
test_precompiles.nim | ||
test_rpc.nim | ||
test_skeleton.nim | ||
test_stack.nim | ||
test_state_db.nim | ||
test_sync_snap.nim | ||
test_tools_build.nim | ||
test_tracer_json.nim | ||
test_transaction_json.nim | ||
test_txpool.nim | ||
test_txpool2.nim | ||
test_wire_protocol.nim | ||
tracerTestGen.nim |
README.md
tests
TODO: more GeneralStateTest fixtures!