Commit Graph

1993 Commits

Author SHA1 Message Date
coffeepots fd7062fecb Fix VMTest message creation in 32 bits, also duplicated word in comment 2018-08-17 17:16:40 +03:00
coffeepots ff52d75fc0 Fix overflowing int in 32 bit 2018-08-17 17:16:40 +03:00
coffeepots 66adba9037 Fix for gas costs in 32 bit 2018-08-17 17:16:40 +03:00
coffeepots 0db650199b
Merge pull request #108 from status-im/moreRpcs1
More rpcs
2018-08-16 15:46:43 +01:00
coffeepots 22590dea32 eth_getBlockByNumber, using actual BlockHeader hash now 2018-08-15 14:12:49 +01:00
coffeepots 845866fc97 eth_getBlockByHash, changes to support returning marshalled Nim types 2018-08-15 14:08:40 +01:00
coffeepots 1826c0ce92 Add JSON transform for bloom filter 2018-08-15 14:07:06 +01:00
coffeepots b6a73327c3 Converted rpc types to Nimbus types in line with changes to hexstrings 2018-08-15 13:14:32 +01:00
coffeepots 4b03f6d4db Updated hexstrings to translate common Nimbus types to hex strings 2018-08-15 13:13:30 +01:00
coffeepots 88ab097a61 Add json converters for byte array and UInt256 types to hex string 2018-08-14 20:22:04 +01:00
coffeepots ee15f4a995 eth_getCode and helper func strToAddress 2018-08-14 18:22:31 +01:00
coffeepots 25f8123c6f eth_getUncleCountByBlockNumber 2018-08-14 16:55:57 +01:00
coffeepots 0e9edf8032 eth_getUncleCountByBlockHash 2018-08-14 16:55:28 +01:00
coffeepots b9906fb263 eth_getBlockTransactionCountByNumber 2018-08-14 16:54:59 +01:00
coffeepots 1871a7b090 eth_getBlockTransactionCountByHash 2018-08-14 16:53:45 +01:00
coffeepots 404d4d883d eth_getTransactionCount 2018-08-14 16:52:30 +01:00
Yuriy Glukhov 55b5dbd719 Raise KeyError when key not found 2018-08-14 18:40:59 +03:00
Dustin Brody f91bb16bdd Initial EVMC message type API matching: reorder overlapping fields to match EMVC; rename to to destination; replace isStatic with more general flags (with only one non-zero value); remove superfluous-seeming shouldTransferValue; keep internalFoo fields, which aren't in PyEVM either, so weren't per se part of PyEVM matching 2018-08-14 15:03:18 +03:00
coffeepots c3fbb0a098 Add eth_syncing, eth_getStorageAt, eth_blockNumber, eth_coinbase and some stubs 2018-08-13 19:29:38 +01:00
coffeepots 370da80478 Add types to support RPC data transfer 2018-08-13 19:25:21 +01:00
coffeepots 4c38ede9c9 Add EthHashStr validation 2018-08-13 18:39:17 +01:00
coffeepots e4d1c6817a Added EthAddressStr to validation 2018-08-13 17:33:57 +01:00
coffeepots 581b4a98ef Fixed allowing "0x" for data but not quantity, less exports 2018-08-09 13:50:49 +03:00
coffeepots 07e28ac01e proc to func and update names 2018-08-09 13:50:49 +03:00
coffeepots b37bdecc02 Convert some procs to funcs and a bit of renaming, use unlikely 2018-08-09 13:50:49 +03:00
coffeepots 64b96cd8f5 Remove redundant conversion 2018-08-09 13:50:49 +03:00
coffeepots a027ca2b25 eth_getBalance in p2p 2018-08-09 13:50:49 +03:00
coffeepots da8849a5a0 Removed eth_getBalance from common 2018-08-09 13:50:49 +03:00
coffeepots 4773559739 Fixes for short strings, added raise-on-failed-validation procs 2018-08-09 13:50:49 +03:00
coffeepots 723ef3cf70 Fix for json conversion of hexstrings 2018-08-09 13:50:49 +03:00
coffeepots d4571c01dd Add JSON RPC hex strings support 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
Zahary Karadjov 350188bd29 address review comments 2018-08-09 12:25:37 +03:00
Zahary Karadjov d902be66ee Fix the genesis state hash computation
The account database needed to use the secure flavour of the Hexary
Trie. This means all keys are SHA3 hashed before being inserted.
2018-08-08 15:48:34 +03: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
Dustin Brody 2136bc74fd
Sanitize memory addresses and lengths (#97)
* add a helper function to ensure for memory addressing and length purposes, especially as applied to array indexing and bounds-checking, that non-negative UInt256 numbers remain non-negative when lossily converted to int's
2018-08-06 16:33:20 +00:00
Yuriy Glukhov 467a9c3d7a
Merge pull request #93 from status-im/genesis
Added genesis initialization
2018-08-06 18:02:39 +03:00
Yuriy Glukhov e4929d4f60 Slightly reworked ChainDB interface to more consistent 2018-08-03 14:56:49 +03:00
Yuriy Glukhov db62ef132e More comments addressed 2018-08-03 14:10:07 +03:00
Dustin Brody 71679d6d95 fix assorted test fixtures which have been un-skipped 2018-08-02 15:57:28 -07:00
Yuriy Glukhov 39d604a8d7 Fixed rinkeby alloc data 2018-08-02 17:16:34 +03:00
Yuriy Glukhov ebfe25fc2c Comments addressed 2018-08-02 17:08:10 +03:00
Yuriy Glukhov 3ec46fa668 Use real file for sqlite 2018-08-02 17:07:44 +03:00
Yuriy Glukhov 04f404fb22 Fixed toPublicNetwork 2018-08-02 11:18:12 +03:00
Yuriy Glukhov c4f4a37d2c Added genesis initialization 2018-08-01 15:50:44 +03:00
Yuriy Glukhov 84515b78a9 Align DB backend interfaces with eth_trie. Init BaseChainDB in nimbus. 2018-07-30 16:05:32 +03:00
Dustin Brody dcf97d8198 memory expansion boilerplate usage wasn't 100% consistent, so extcodecopy and codecopy were returning far too low gas costs in many cases (#88) 2018-07-28 09:59:33 +02:00
Yuriy Glukhov f6f355b6c8 Workaround for nim issue 7833 2018-07-26 16:14:16 +03:00
Dustin Brody 5d82493a9c fix comment to correctly reflect REVERT opcode 2018-07-25 16:30:18 -07:00
Yuriy Glukhov 04bacca35c
Merge pull request #81 from status-im/ClampMemoryGasCostToNonnegative
accessing memory can't cost less than nothing
2018-07-25 13:48:21 +03:00
Yuriy Glukhov 8713939bfe
Merge pull request #82 from status-im/ImplementSelfDestructOp
Implemented selfDestruct op
2018-07-25 13:41:14 +03:00
coffeepots 47e5081f86 TODO comment for other forks on the selfdestruct op 2018-07-25 10:40:08 +01:00
Dustin Brody 85e1c39a83 accessing memory can't cost less than nothing 2018-07-24 18:37:56 -07:00
Dustin Brody c2ed3bf11e mstore8 wants LSB of BE representation, i.e. last byte 2018-07-24 12:25:21 -07:00
coffeepots 52daaf49c0 Implemented selfDestruct op 2018-07-24 17:21:29 +01:00
Yuriy Glukhov 473140f586
Merge pull request #79 from status-im/FixExtCodeCopyCost
ExtCodeCopy is a memory expansion operation for gas computation purposes
2018-07-24 12:19:04 +03:00
Yuriy Glukhov e8453e3876
Merge pull request #78 from status-im/FixZeroSizeSha3
add subcase of yellow paper equation (297) for zero-length memory ranges
2018-07-24 12:15:41 +03:00
Dustin Brody df23f802c6 ExtCodeCopy is a memory expansion operation for gas computation purposes 2018-07-23 17:00:06 -07:00
Zahary Karadjov 870eb175c0 update to the latest eth_p2p 2018-07-24 00:44:04 +03:00
Dustin Brody 00cd33febd add subcase of yellow paper equation (297) for zero-length memory ranges 2018-07-23 14:00:49 -07:00
Zahary Karadjov 7f4d97dca0 add the ETH and LES protocol implementations to the nimbus build 2018-07-23 00:34:43 +03:00
Zahary Karadjov 1602c8ca03 restore the compilation of the main nimbus executable 2018-07-20 20:02:19 +03:00
Yuriy Glukhov 01a920b3b6
Merge pull request #76 from status-im/FixFailOnEmptyChildComputation
Only write to child computation if data present
2018-07-20 11:15:12 +03:00
Yuriy Glukhov 31c9365e48
Merge pull request #75 from status-im/RemoveValidateCanonicalAddress
Remove validateCanonicalAddress
2018-07-20 11:15:00 +03:00
coffeepots 6e10e306a6 Change import from eth-rpc to json_rpc 2018-07-20 08:57:51 +01:00
coffeepots 868f2b1959 Remove if statement for actualOutputSize - 1 2018-07-20 08:53:56 +01:00
coffeepots 6ce46c0163 Only write to child computation if data present 2018-07-19 19:14:17 +01:00
coffeepots e33bc85bfa Remove validateCanonicalAddress 2018-07-19 19:04:01 +01:00
Yuriy Glukhov feaff16e9d Corrected jump boundary check. Nonexistent sload pushes 0. (#74) 2018-07-19 15:11:52 +02:00
Yuriy Glukhov b2acf3a5e3 GasMeter is an object now (#73) 2018-07-18 14:18:17 +02:00
Yuriy Glukhov 6c67115ef5 Fixed sstore gas computation, empty sha3, smod, sdiv (#71)
* Fixed sstore gas computation, fixed empty sha3

* Fixed smod and sdiv

* Comments addressed
2018-07-18 11:14:28 +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
Yuriy Glukhov 46a8b5dc49 Refactored log opcodes, added validation, fixed a couple of tests 2018-07-16 11:14:52 +02:00
Zahary Karadjov 9c88710ed6 Apply the P2PServer -> EthereumNode rename 2018-07-12 14:14:04 +03: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
zah 6f28d11866 Few steps towards having 64-bit block numbers (#57)
Some of the other clients don't bother to store block numbers as
256-bit integers (64 bits or even 32 bit are enough).

The changes here are based on helpers introduced in eth_common
that try to abstract away all conversion steps in the code between
VM words and block numbers in variables in fields. Unfortunately,
this turn out to be more work than anticipated and I've postponed
finishing the refactoring for now (Block numbers are still 256 bit).
2018-06-26 16:09:50 +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
Yuriy Glukhov 1c79d1ab3d Persist* functions 2018-06-24 18:37:02 +03:00
cheatfate 533bd6caf4 Integrated P2P & RPC servers. 2018-06-20 20:27:32 +03:00
Zahary Karadjov 48fdf6a644 build nimbus with nimble build 2018-06-20 14:12:29 +03:00
Zahary Karadjov eacf13ed97 ethp2p was renamed to eth_p2p 2018-06-16 22:14:31 +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
mratsim 8d76cab46a Was confused about ∧ in the Yellow paper. Fix #50 - pass 2 new tests. Only 1 arithmetic failure left. 2018-06-13 16:05:52 +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
Mamy Ratsimbazafy 8528f1b704
Dirty fix #46 (test_vm_json segfaults from #45), incidentally fix #32 (#47) 2018-06-06 20:40:44 +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