- port to new APIs
- added copyright headers
- bumped the copyright interval in modified files
- fixed tests
- reorganised imports
- normalised function names
- deleted some trailing space
- added test_rpc to all_tests
- assert() -> doAssert()
- moved the RPC port in a constant for the test suite
The existing vmState tracing is plugged into chronicles, at the TRACE
level, to facilitate state test debugging.
Some useful chronicles defines are added to "tests/nim.cfg" to simplify
the compile-and-run command for individual tests.
- skipped the tests in allowedFailInCurrentBuild()
- replaced doAssert() with check() in testFixtureIndexes() so we can see
both hash values on failure
- checking filename extension for JSON tests to avoid editor swap files
- replaced the duplicated block values in the main net's ChainConfig
with values from forkBlocks
- allowed overriding the current fork in computations, because the old
strategy of only looking at the block number doesn't work with JSON tests
where the block number is usually 1
- explicitly pass the fork to gasCosts() and use it for conditional cost
calculation
- fixed a logic error in the CREATE opcode
- fixed VM selection based on current fork in updateOpcodeExec()
- single point of control for supported forks in tests (just one fork, at the
moment)
- 44 new test failures (that were probably passing for the wrong reasons)
Also implements transactional block persistence. Two issues
in the transaction processing code have been discovered that
might affect other usages such as the CALL instruction.
The main fix gets us past block 49000.
You may need to clean up your database.
* checkpoint where refactoring and calling from GST runner doesn't break anything
* 14 new GSTs pass by refactoring contract creation out of p2p/chain and using from GST test runner
* 2 of 14 new tests fail in 32-bit builds
* switch from CREATE_CONTRACT_ADDRESS to isContractCreation
* switch another CREATE_CONTRACT_ADDRESS to isContactCreation
By default, the database files will be written in the
platform-specific application data folder:
$HOME/AppData/Roaming/Nimbus/DB
$HOME/Library/Application Support/Nimbus/DB
$HOME/.cache/nimbus/db
* partly fix state_db getCode to get 20 new working GeneralStateTests; remove 2 functions which existed as workarounds; switch all remaining setBalance calls in GeneralStateTestRunner to subBalance (addBalance calls already changed)
* two of the 20 new tests don't work in 32-bit builds
* fix 32-bit issue in AppVeyor
* allow another dozen or so GeneralStateTest fixtures which work on 64-bit, but not on 32-bit platforms, to safely-fail, but demarcate them separately to facilitate debugging
* steal fa672600eb from @coffeepots fix-int32-high-zero branch
This blindly changes logging to nim-chronicles - issues that ensue:
* keeps gas cost computation logs hidden behind flag
* unclear if logScope is practical - for example, since vm is split over
many files, topics get lost when using simple top-level per-module
topics
* when passing named object around, scope should incliude the name of
the object but this is caught neither by logScope nor by dynamicLogScope
(1) callcreates, empirically, is always missing or empty in VMTests
(2) by policy, callcreates will not be in new VMTests
(3) the code was broken regardless, in a couple of since-removed VMTests which had non-empty callcreates
* Delete utilities: address, padding, bytes
* Remove bigEndianToInt
* Fix C compiler error: member reference base type 'char' is not a structure or union
* fix todo comment
* move forks constants, rename errors
* Move vm/utils to vm/interpreter/utils
* initial opcodes refactoring
* Add refactored Comparison & Bitwise Logic Operations
* Add sha3 and address, simplify macro, support pop 0
* balance, origin, caller, callValue
* fix gas copy opcodes gas costs, add callDataLoad/Size/Copy, CodeSize/Copy and gas price opcode
* Update with 30s, 40s, 50s opcodes + impl of balance + stack improvement
* add push, dup, swap, log, create and call operations
* finish opcode implementation
* Add the new dispatching logic
* Pass the opcode test
* Make test_vm_json compile
* halt execution without exceptions for Return, Revert, selfdestruct (fix#62)
* Properly catch and recover from EVM exceptions (stack underflow ...)
* Fix byte op
* Fix jump regressions
* Update for latest devel, don't import old dispatch code as quasiBoolean macro is broken by latest devel
* Fix sha3 regression on empty memory slice and until end of range slice
* Fix padding / range error on expXY_success (gas computation left)
* update logging procs
* Add tracing - expXY_success is not a regression, sload stub was accidentally passing the test
* Reuse the same stub as OO implementation
* Delete previous opcode implementation
* Delete object oriented fork code
* Delete exceptions that were used as control flows
* delete base.nim 🔥, yet another OO remnants
* Delete opcode table
* Enable omputed gotos and compile-time gas fees
* Revert const gasCosts -> generates SIGSEGV
* inline push, swap and dup opcodes
* loggers are now template again, why does this pass new tests?
* Trigger CI rebuild after rocksdb fix https://github.com/status-im/nim-rocksdb/pull/5
* Address review comment on "push" + VMTests in debug mode (not release)
* Address review comment: don't tag fork by default, make opcode impl grepable
* Static compilation fixes after rebasing
* fix the initialization of the VM database
* add a missing import
* Deactivate balance and sload test following #59
* Reactivate stack check (deactivated in #59, necessary to pass tests)
* Merge remaining opcodes implementation from #59
* Merge callDataLoad and codeCopy fixes, todo simplify see #67
Merge note: currently cannot compile due to `quasiBoolean` (#63). This will be solved by https://github.com/status-im/nimbus/pull/65
----
* Implemented most of the stubbed out state handling instructions
The code compiles, but still fails at the moment due to incorrect
initialization of the VM. Don't merge yet. More commits will be
pushed in the coming days.
* Fixed crash
* trie put and del are void now
* getBlockTransactionData and getReceipts
* Working code for extcodesize0.json
* fix origin.json
* fix calldatasize1
* fix calldataloadSizeTooHighPartial
* fix calldataloadSizeTooHigh
* more efficient PushX implementation
* fix and, or, xor
* `usedBytes` was not named appropriately. it indicates the last
populated position in the data (the last valid index) for slicing
purposes (i.e. the position is passed to `toOpenArray`)
* Fixed the `==` operator for DBKeys
* Use one-byte key for the 'canonical head hash'
* Move and cleanup interpreter files - prepare for redesign of VM
* fix call comment aobut recursive dependencies
* memory: use a template again and avoid (?) a cstring-> string conversion
* Fix stack test regression
* Fix recursive dependency on logging_ops, test_vm_json compiles but regression :/
* Fix signextend regression
* Fix 3 signed test and sha3 test
* Decoupling op logic and gas - introduce gasometer, rework opcode declaration
* Remove gas constants for gas opcode computation
* Remove gas constants for precompiled contracts
* make vm_types compile
* Make opcode, call and computation compile
* Distinguish between dynamic and complex gas costs, fix arithmetic
* Fix context and sha3
* update memory and storage ops
* Log opcode uses memory expansion code
* update/stub system_ops with gas costs
* Make test compile. Deactivate stub test_vm
* all tests compiles, opcode fails due to https://github.com/nim-lang/Nim/issues/8007 (const object variant in tables reset at runtime)
* Create an enum without holes - workaround: https://github.com/nim-lang/Nim/issues/8007
* Use arrays instead of tables for GasCosts, remove some unused imports - passing all basic tests!
* Make test_vm_json compile
* Fix test_vm_json - workaround https://github.com/nim-lang/Nim/issues/8015
* fix memory expansion cost bug
* Remove leftover special handling from before GckMemExpansion
* cleanup outdated comment, better align =
* Fix sha3 gas cost not taking memory expansion into account
* Improve gas error reporting of test_vm_json
* Fix gas computation regression due to mem expansion
* mass replace for memExpansion->RequestedMemSize was too eager
* fix log gas cost (no tests :/)
* missed a static FeeSchedule
* static as expression is fickle
* Start by renaming the fork by chronological order
* initial commit - groundwork: support different gasCosts depending on VMs
* Running VMTests with new gas config - only push32AndSuicide changed
* Introduce newNimbusVM that (temporarily) abstract over Frontier and Tangerine VM creation
* Fix Gas - push32AndSuicide repassing and expXY_success passing - fixes#34
* case sensitive imports (thank you auto-completion) fix Travis on Linux
* Add pre and post EIP-150 tests
* Nimify gas identifiers that supports multiple forks
* Stack underflow: Add failing test to catch #31
* ensurePop, use proc instead of template + add comment for future refactoring of popInternal
* Check stack underflows before popping values
* run json tests again
* Constants and accounts compile as standalone
* Mass replace ttmath by Stint
* Adapt utils_numeric proc
* Adapt memory.nim
* Deactivate "ValidationError" test that requires pow(2, 256) function
* Fix state_db toByteArrayBE
* Fix more getUint toInt conversion
* Remove absolute value ambiguous call
* Stub-ify proc and opcode that requires pow - https://github.com/status-im/nim-stint/issues/37
* Enable vm_tests, remove usage of from keyword as a variable name
* Fix Genesis types and use the new EthTime
* Add a new VMKind enum (py-evm vmclass runtime type)
* renaming block_obj to block_types
* chain.BlockHeader and utils.header.Header are the same thing (BlockHeader in py-evm)
* For now blockNumbers are UInt256
* EoD merge: vm_test compiles and does not throw computation error
* running full transactions is too early
Todo
Pass most VM opcode tests that we can (of those that don't depend
too much on porting the whole py-evm)
Simplify a bit the current py-evm-inspired internal loop arch