* Remove broken gas metering attempt
* Add newline to fix lint
* hardcode return value of eth_estimateGas to gas limit
* evm: fix log message
* state manager: safer calling
* rpc: leave comment to help future debugging
Co-authored-by: Karl Floersch <karl@karlfloersch.com>
Co-authored-by: Kevin Ho <kevinjho1996@gmail.com>
* Get basic getStorage/setStorage stubs working
* Clean up tests
* Add state_manager
* Add StateManager set & getStorage
* Add state mananger create function
* Add get & increment nonce
* Add getCodeContractBytecode
* Add GetCodeContractHash
* Add getCodeContractHash to the state manager
* Add associateCodeContract to state manager
* Pass the tests
* go fmt
* Add stateTransition to test with
* Fix tests
* Test deploying contract with transition state
* Call executeTransaction on contract deployment
* Added ExecutionManager deployment
* Get contract deployments working
* Cleanup logging
* Get stubbed ExecutionManager working
* Get a simple contract to deploy through the ExecutionManager
* Refactor simpleAbiEncode
* Revert unnecessary changes
* Remove comments
* Revert changes outside of this PR
* Revert changes outside of this PR
* Revert changes outside of this PR
* Fix broken tests
* Move OVM bytecode & ABI into constants
* Add crazy printlines
* Remove crazy comments
* Add a bunch of debug printlns
* Add helper fn for applying msgs to the EVM
* Update ExecutionManager bytecode
* Shim CREATE for EM to use correct addr
* Add SimpleStorage test
* Add the EM/SM to all new states
* Force all txs to be routed through the EM
* Remove unused files
* Remove unused comments
* Increment nonce after failed tx
* Add debug statements
* Use evm.Time for timestamp
* Change EM deployment, fix broken tests, clean up
* Add an OVM test & remove printlns
* Fix lint errors & remove final printlns
* Final cleanup--remove some comments
* Limiting Geth to one transaction per block (#3)
* Limiting Geth to one transaction per block
* Adding TransitionBatchBuilder to build & submit rollup blocks
* Adding L1MessageSender to Transaction (#4)
* Adding L1MessageSender to Transaction
* Adding logic to omit L1MessageSender in encoding / decoding when nil and never use it in hash computation
Co-authored-by: ben-chain <ben@pseudonym.party>
* Fixing Geth Tests (#6)
Fixing broken tests, skipping tests we intentionally break, and configuring CI within Github Actions
* Hex Trie -> Binary Trie (#7)
*** Changing Hex Trie to Binary Trie ***
Note: This changes and/or comments out a bunch of tests, so if things break down the line, this is likely the cause!
* Ingest Block Batches (#8)
Handling BlockBatches in Geth at `SendBlockBatches` endpoint (eth_sendBlockBatches)
Other:
* Adding PR template
* Adding ability to set timestamp and making blocks use configured timestamp
* Adding ability to encode original tx nonce in calldata
* Adding L1MessageSender to Contract Creation Txs
* Add L1MessageSender to Message
* Increment nonce on CREATE failure
* Fix bug where evm.Time=0
* Use state dump with hardcoded EM & SM addrs
- ExecutionMgr address should always be 0x0000...dead0000
- StateMgr address should always be 0x0000...dead0001
* Move EM deployment into genesis block maker
* Update EM contracts to latest version
* Update EM to remove events
* Fix the OVM tests
* Skip an ungodly number of tests
* Fix lint errors
* Clean up logging
* Cleanup more logs
* Use local reference to state manager
* Rename applyOvmToState(..)
* Remove unneeded check
* Clean up logging & add EM ABI panic
* Add gas metering to SM & small refactor
* Update core/vm/state_manager.go
Co-authored-by: Kevin Ho <kevinjho1996@gmail.com>
Co-authored-by: Mason Fischer <mason@kissr.co>
Co-authored-by: Will Meister <william.k.meister@gmail.com>
Co-authored-by: ben-chain <ben@pseudonym.party>
Co-authored-by: Kevin Ho <kevinjho1996@gmail.com>
* build: use golangci-lint
This changes build/ci.go to download and run golangci-lint instead
of gometalinter.
* core/state: fix unnecessary conversion
* p2p/simulations: fix lock copying (found by go vet)
* signer/core: fix unnecessary conversions
* crypto/ecies: remove unused function cmpPublic
* core/rawdb: remove unused function print
* core/state: remove unused function xTestFuzzCutter
* core/vm: disable TestWriteExpectedValues in a different way
* core/forkid: remove unused function checksum
* les: remove unused type proofsData
* cmd/utils: remove unused functions prefixedNames, prefixFor
* crypto/bn256: run goimports
* p2p/nat: fix goimports lint issue
* cmd/clef: avoid using unkeyed struct fields
* les: cancel context in testRequest
* rlp: delete unreachable code
* core: gofmt
* internal/build: simplify DownloadFile for Go 1.11 compatibility
* build: remove go test --short flag
* .travis.yml: disable build cache
* whisper/whisperv6: fix ineffectual assignment in TestWhisperIdentityManagement
* .golangci.yml: enable goconst and ineffassign linters
* build: print message when there are no lint issues
* internal/build: refactor download a bit
* core/evm, contracts: avoid copying memory for input in calls + make ecrecover not modify input buffer
* core/vm: optimize mstore a bit
* core/vm: change Get -> GetCopy in vm memory access
The precompile at 0x09 wraps the BLAKE2b F compression function:
https://tools.ietf.org/html/rfc7693#section-3.2
The precompile requires 6 inputs tightly encoded, taking exactly 213
bytes, as explained below.
- `rounds` - the number of rounds - 32-bit unsigned big-endian word
- `h` - the state vector - 8 unsigned 64-bit little-endian words
- `m` - the message block vector - 16 unsigned 64-bit little-endian words
- `t_0, t_1` - offset counters - 2 unsigned 64-bit little-endian words
- `f` - the final block indicator flag - 8-bit word
[4 bytes for rounds][64 bytes for h][128 bytes for m][8 bytes for t_0]
[8 bytes for t_1][1 byte for f]
The boolean `f` parameter is considered as `true` if set to `1`.
The boolean `f` parameter is considered as `false` if set to `0`.
All other values yield an invalid encoding of `f` error.
The precompile should compute the F function as specified in the RFC
(https://tools.ietf.org/html/rfc7693#section-3.2) and return the updated
state vector `h` with unchanged encoding (little-endian).
See EIP-152 for details.
* params: add IsIstanbul to config + rules
IstanbulBlock, used to determine if the config IsIstanbul, is currently
left nil until an actual block is chosen.
* params, core/vm: implement EIP-1108
Old gas costs for elliptic curve operations are given the PreIstanbul
prefix, while current gas costs retain the unprefixed names. The actual
precompile implementations are the same, so they are factored out into
common functions that are called by the pre-Istanbul and current
precompile structs. Finally, an Istanbul precompile list is added that
references the new precompile structs, which in turn reference the new
gas costs.
* params: fix fork ordering, add missing chain compatibility check
* params, core/vm: deprecating gastable, part 1
* core/vm, params: deprecate gastable, use both constant and dynamic gas
* core/vm, params: remove gastable, remove copypaste
* core/vm: make use of the chainrules
* interpreter: make tracing count constant+dynamic gas
* core/vm: review concerns (param/method name changes)
* core/vm: make use of chainrules more
This PR makes it easy to generate and execute testcases for VM arithmetic operations. By enabling and running the testcase TestWriteExpectedValues, a set of json files are created which contain input and output for each arith operation.
The test TestJsonTestcases executes all of those tests.
While meaningless as is, this PR makes it less risky to make changes (optimizations) to the vm operations, since there will be a larger body of testcases.
* core/vm: remove function call for stack validation from evm runloop
* core/vm: separate gas calc into static + dynamic
* core/vm: optimize push1
* core/vm: reuse pooled bigints for ADDRESS, ORIGIN and CALLER
* core/vm: use generic error message for jump/jumpi, to avoid string interpolation
* testdata: fix tests for new error message
* core/vm: use 64-bit memory calculations
* core/vm: fix error in memory calculation
* core/vm: address review concerns
* core/vm: avoid unnecessary use of big.Int:BitLen()
This PR adds a new fork which disables EIP-1283. Internally it's called Petersburg,
but the genesis/config field is ConstantinopleFix.
The block numbers are:
7280000 for Constantinople on Mainnet
7280000 for ConstantinopleFix on Mainnet
4939394 for ConstantinopleFix on Ropsten
9999999 for ConstantinopleFix on Rinkeby (real number decided later)
This PR also defaults to using the same ConstantinopleFix number as whatever
Constantinople is set to. That is, it will default to mainnet behaviour if ConstantinopleFix
is not set.This means that for private networks which have already transitioned
to Constantinople, this PR will break the network unless ConstantinopleFix is
explicitly set!
This adds the global accumulated refund counter to the standard
json output as a numeric json value. Previously this was not very
interesting since it was not used much, but with the new sstore
gas changes the value is a lot more interesting from a consensus
investigation perspective.
* first impl of eth_getProof
* fixed docu
* added comments and refactored based on comments from holiman
* created structs
* handle errors correctly
* change Value to *hexutil.Big in order to have the same output as parity
* use ProofList as return type
Interpreter initialization is left to the PRs implementing them.
Options for external interpreters are passed after a colon in the
`--vm.ewasm` and `--vm.evm` switches.