85 Commits

Author SHA1 Message Date
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
Zahary Karadjov
583c72fa54 Implement storage backends using RocksDB and SQLite 2018-06-26 13:46:54 +03:00
mratsim
05703fc86f logging: non-debug costless, avoid allocating constant string messages 2018-06-15 14:20:42 +02:00
Mamy Ratsimbazafy
c26c751f9b
Reorganize VM/interpreter + cleanup (#52)
* 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
2018-06-15 11:11:25 +02:00
Mamy Ratsimbazafy
05275f9773
Activate logging, sha3, arith tests (#51)
* Activate the tests

* Use 3 params in memExpansion gas costs, fix 31 log tests and 8 sha3 tests

* Activate Control Flow tests as well
2018-06-13 19:33:47 +02:00
Mamy Ratsimbazafy
90c3ca4a96
Gas refactoring - decouple opcode logic and gas (#49)
* 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
2018-06-12 17:33:47 +02:00
Yuriy Glukhov
d8a4e5cbfb Fixed compilation of test_vm_json. Still fails because of Op.Call :( 2018-05-31 10:58:59 +03:00
Yuriy Glukhov
8bdf09683b Hash256/EthAddrres refactoring 2018-05-30 19:11:15 +03:00
Yuriy Glukhov
51b572d8b8 Some renames 2018-05-28 13:22:28 +03:00
Mamy Ratsimbazafy
cb49352b6a
Gas & Memory ops refactoring - uses native integer instead of uint256 fixes #35 and #39 (#40)
* Gas refactoring - uses int64

* Use primitive int in test_vm_json
2018-05-25 12:25:19 +02:00