Commit Graph

94 Commits

Author SHA1 Message Date
Dustin Brody 7ba90fda54
48 new working GeneralStateTests, via fixing some overflows/underflows, creating a rudimentary balance commit/revert scheme, and implementing account deletion for the selfdestruct instruction (#146) 2018-09-14 13:43:40 +00:00
Dustin Brody 22882edf4d
get 106 more generalstatetests working by detecting computation errors and allowing empty code accounts (#145) 2018-09-13 15:00:23 +00:00
Dustin Brody 3cc7e9d8fd
skip 1000+ tests which either are slow (quadratic tests) or don't support Homestead; add ~50 new working tests (#143) 2018-09-12 16:33:53 +00:00
Yuriy Glukhov 62260c786d Caching DB backend 2018-09-12 17:53:15 +03:00
Dustin Brody 00c4df6153
detect erronous transactions and roll back to previous state, without refunding any gas, per yellow paper (#141) 2018-09-11 13:15:59 +00:00
Dustin Brody e24f7fe144 unskip some other (failing) tests 2018-09-10 19:42:45 +03:00
Dustin Brody fd07d6fed1 A simple/basic GeneralStateTest runner which gets 400+ of them correct 2018-09-10 19:42:45 +03:00
Yuriy Glukhov 3a1ec035b3 Various fixes towards state reconstruction 2018-09-07 14:00:37 +03:00
Dustin Brody 9e1be6438e Extract transaction senders from GeneralStateTest fixtures 2018-09-06 11:20:43 +03:00
Dustin Brody 4262ea8670 fix (1) overflow/signed confusion when reading large-valued storage entries; (2) adjust test fixture validity for GeneralStateTests; (3) remove incorrect usage of state trie for code (not codehash) storage; add ability to display state; (4) avoid double-hashing keys for already-hashed SecureHexaryTrie for storage; (5) add intentionally local workaround for empty code in GeneralStateTest fixtures lacking 0x prefix; (6) fix nonce parsing, which is always hex string in test fixtures 2018-09-04 17:55:30 +03:00
coffeepots bda219f8fe Make tests green (AccountNonce) 2018-09-02 03:26:22 +01:00
Jacek Sieka db202dc35f
replace logging module with nim-chronicles (fixes #38)
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
2018-08-29 16:13:03 -06:00
Yuriy Glukhov e3be8ca30a Separate Chain from ChainDB 2018-08-29 11:49:01 +03:00
coffeepots fd7062fecb Fix VMTest message creation in 32 bits, also duplicated word in comment 2018-08-17 17:16:40 +03:00
coffeepots 5cd81ef3ac Update doAssert to display the correct contents of stint values 2018-08-17 17:16:40 +03:00
coffeepots 1bf432fd46 Fix for VMTest parseHex in 32 bit 2018-08-17 17:16:40 +03:00
Dustin Brody a12b0771d6 remove superflous when true block, retained from when VMTests wasn't passing 2018-08-16 16:07:45 -04:00
coffeepots fb185b7965 Update RPC signatures 2018-08-13 19:26:34 +01:00
coffeepots 0b5d8d53be Added EthHashStr tests 2018-08-13 19:03:09 +01:00
coffeepots d1f283b004 Updated test_rpc to use EthAddressStr 2018-08-13 17:34:54 +01:00
coffeepots 6aab8b05c5 Included tests for EthAddressStr 2018-08-13 17:34:14 +01:00
Dustin Brody 3c0d27021e
remove callcreates-handling code in VMTests harness (#102)
(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
2018-08-09 21:58:51 +00:00
coffeepots ac2de74d8f Standardised test between data and quantity, added tests for "0x" 2018-08-09 13:50:49 +03:00
coffeepots a0833475d4 Rename test suite 2018-08-09 13:50:49 +03:00
coffeepots a48e1e96c5 Rename test suite 2018-08-09 13:50:49 +03:00
coffeepots f3ccd72f91 Remove redundant account creation, already done in mutateStateDb 2018-08-09 13:50:49 +03:00
coffeepots 155457d47f Basic eth node setup for RPC testing (WIP) 2018-08-09 13:50:49 +03:00
coffeepots c5514155ee Add tests for JSON RPC hex strings 2018-08-09 13:50:49 +03:00
coffeepots 79abeafa41 Setup test rpc server, initial call to eth_getBalance 2018-08-09 13:50:49 +03:00
Dustin Brody 7fd2fa6184 Run VMTests as part of nimble tests, as well as Appveyor and Travis CI 2018-08-07 13:15:56 -07:00
Dustin Brody 21fcaeb8ef add inexpensive vmPerformanceTests, especially Ackermann and Fibonacci tests; whole suite still runs in a few seconds 2018-08-07 12:24:37 -07:00
Dustin Brody ea2f3b71bf
Complete VM Test sync, with EXP(0, 0) defined as 1 now (#98) 2018-08-07 18:41:01 +00:00
Yuriy Glukhov 467a9c3d7a
Merge pull request #93 from status-im/genesis
Added genesis initialization
2018-08-06 18:02:39 +03:00
Dustin Brody 6a3fa4cb22
Merge pull request #94 from status-im/FixLog3Log4CallDataCopyRandomTestFixtures
fix assorted test fixtures which have been un-skipped
2018-08-03 21:07:36 +00:00
Dustin Brody e2dd3ae051 Import current official GeneralStateTests 2018-08-03 13:18:04 -07:00
Dustin Brody 71679d6d95 fix assorted test fixtures which have been un-skipped 2018-08-02 15:57:28 -07:00
Dustin Brody 8325b6461f Stop skipping all but time-intensive vmPerformance VMTests by default 2018-08-02 09:37:16 -07:00
Dustin Brody d94dfbdb43 following https://github.com/ethereum/tests/pull/444 synchronize with upstream test changes by removing many which rely on mocking BLOCKHASH/BALANCE just for VM tests (#92) 2018-08-02 14:21:42 +02:00
Yuriy Glukhov c4f4a37d2c Added genesis initialization 2018-08-01 15:50:44 +03:00
Dustin Brody 1b781aefe9 pursuant to discussion in https://github.com/ethereum/tests/pull/444 refactor tests to not require special-cased codepaths for a VMTest mode by allowing BLOCKHASH-dependent tests to live where actual blockchain state is provided by fixture 2018-07-31 17:09:37 -07:00
Dustin Brody 1921f9b389 arith.json, boolean.json, and mktx.json test fixtures don't provide useful information (#90) 2018-07-30 17:29:13 +02:00
Yuriy Glukhov 84515b78a9 Align DB backend interfaces with eth_trie. Init BaseChainDB in nimbus. 2018-07-30 16:05:32 +03:00
cheatfate d40638af8c Let Appveyor testing again.
Fix test_storage_backends.nim for Windows.
2018-07-28 12:42:40 +03:00
Dustin Brody 90165f4f6b Ethereum test fixtures provide storage values as hex literals (e.g., 0x04), not decimal literals 2018-07-25 09:31:57 -07:00
Yuriy Glukhov b2acf3a5e3 GasMeter is an object now (#73) 2018-07-18 14:18:17 +02:00
Yuriy Glukhov 601db4d9f3 Fixed a few more tests (#70)
* Fixed getting reading balance from the test fixtures

* Fixed sha3 opcode
2018-07-17 10:57:13 +02:00
Mamy Ratsimbazafy 4dd75aee84
Delete utilities: address, padding, bytes (#68)
* 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
2018-07-06 17:08:31 +02:00
Mamy Ratsimbazafy 4b5eada322
Refactor interpreter dispatch (#65)
* 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
2018-07-06 09:52:31 +02:00
zah 18b7bbb3b0 Implemented most of the stubbed-out state handling instructions (#59)
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
2018-07-05 14:41:01 +02:00
Zahary Karadjov 3060452d96 review changes
* `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'
2018-06-26 13:46:54 +03:00