* use stack of contexts to implement snapshot revert
Closes#338
add exception revert test case
verify partial revert
mutate state after the reverted subcall
polish
update comments
name the module after the type name
remove the unnecessary Snapshot in outer layer
and add snapshot unit test
assert context stack is clean after tx processing
cleanups
fix context revert
fix comments
update comments
it's ok to commit in failed case too
Update x/evm/keeper/context_stack.go
Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
Update x/evm/keeper/context_stack.go
Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
Update x/evm/keeper/context_stack.go
Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
update comment and error message
add comment to cacheContext
k -> cs
Update x/evm/keeper/context_stack.go
Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
evm can handle state revert
renames and unit tests
* use table driven tests
* keep all the cosmos events
* changelog
* check for if commit function is nil
* fix changelog
* Update x/evm/keeper/context_stack.go
Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
* keep the original context for GetCommittedState api
* fix method mutation
* keep estimateGas consistant
* added test after the original context is recovered
* add integration test for the gas consumption of sstore
* test the committed case
* move methods to keeper module
Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
* return geth error format
* fix format in gasestimate
* deal with other evm errors
* fix import
* fix lint
* add test
Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
* add some unit tests for estimateGas
Also add some test environment setup, Closes#323
test estimateGas of erc20 token transfer
fix failed test case
the trick is to keep a clean transient store, by doing a commit
put artifacts to external file
* fix test failure
Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
The previous code is not incorrect since the method `SetBlockBloom` use the `ctx` passed in rather than the `k.ctx`.
It's confusing that sometimes methods use ctx in parameter, sometimes use `k.ctx`, but that's another issue.
Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
* do binary search to estimate gas
Closes#268
- Also refactor ApplyMessage to be more reuseable
move binary search to rpc api side to have a clean context each try
remove EstimateGas grpc api
* extract BinSearch function and add unit test
* do estimateGas in grpc query
Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
* fix evm set parameters
* recompute header hash only if its not set
* Update x/evm/keeper/state_transition.go
Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
* clean up logic by ignoring cosmos gas meter
* set gas used in txResponse
* reset and set the gas in context
* rename ante handler
* fix refundedgas logic
* remove gas update logic in keeper
* update context in keeper
* add test for EthSetupContextDecorator
* fix broken test due to gas logic change
* fix `AddLog` unmarshaling tx
Closes#187
* use cosmos tx in AddLog unit test
* Apply suggestions from code review
Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com>
* ante: check that sender is a EOA
* fix: GetCodeSize handles nil case and comments
* docs: add TODO comment
* fix: use EmptyCodeHash check
* lint: evmtypes instead of types
* lint: fix suite error
* test: set code to act not as EOA
* undo comment on GetCodeSize
* keeper: fix input checks
* Apply suggestions from code review
Co-authored-by: Akash Khosla <me@akashkhosla.com>
Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com>
* evm: keeper statedb refactor
* keeper: implement stateDB account, balance, nonce and suicide functions
* keeper: implement stateDB code and iterator functions
* keeper: implement stateDB log and preimage functions
* update code to use CommitStateDB
* tests updates
* journal changes (wip)
* cache fields
* journal and logs
* minor cleanup
* evm: state transition refactor
* evm: unpack revert errors
* evm: update state transition (wip)
* evm: remove journal related changes
* evm: delete empty account code and storage state
* update gas limit
* evm: header hash to/from context
* evm: minor params and state transition changes
* ante: state transition changes
* ante: refactor default sig gas consumer
* ante: ignore gas costs from ops other than intrinsic gas
* ante: CanTransferDecorator
* evm: refund gas
* update comments
* state transition comments
* ante: CanTransfer and AccessList decorator tests
* evm: cleanup state transition
* ignore nonce increment during ante handler on contract creation
* fix ante tests
* more test fixes
* ante: cherry-pick changes from state transition refactor
* ante: test setup
* ante: fixes
* ante: test (wip)
* ante: finish unit tests
* ante: intrinsic gas test
* ante: chaindecorators test (wip)
* update tests
* ante: cleanup tests
* ante: add test consuption test
* Add API for compatible query of two types of transactions
* format code
* optimize code
* optimize code
* format code
* optimize code
* add error handling
Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com>
* Roll back CommitStateDB after failing to execute handler in evm module
* add function CopyCommitStateDB
* add comment
* add comment
* Add ut about the dirty data generated by CommitStateDB
* format code
* fix panic when start a node with snapshot
* change the return value of evm.NewKeeper to a pointer, roll back the before change
* add changelog
* fix importer test
* evm: module specification
* params and events
* readme and messages
* minor updates
* concepts
* genesis state concept
* begin and end block
* update parameters and genesis
* state objects
* state table
* use permalink
* init and export genesis
* update abci
* extra eips param
* review comments
* precision
* link to photon doc
* fix hardcoded photon on account balance getter/setter
* types: testing suite
* balance test
* update zero diff
* add case for other coin
* changelog
* fix journal test
* Add deploy and call test example to handler_test.go (#271)
* Add deploy and call test example to handler_test.go
* fmt the file
* remove the smartcontract Bytecode comment
Co-authored-by: liuxiong <xiong.liu@okcoin.net>
Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com>
* fix test
Co-authored-by: Louis Liu <35095310+louisliu2048@users.noreply.github.com>
Co-authored-by: liuxiong <xiong.liu@okcoin.net>
* run suite
* add a few tests (#340)
* add a few tests
* fixes to tests
* add more tests
* check err to fix lint
* add preimage and refund tests
* add more more tests
* fix linting errs
* lint err
Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com>
* set stateDB on suite
* fix genesis
* logs tests
* remove dup imports
Co-authored-by: Daniel Choi <choidanielw@gmail.com>
* add test for sending tx w/ 21000 gas
* improve rpc transfer test
* use ctx in EndBlock
* UpdateAccounts and ClearStateObjects with passed in context
* log ethereum address on error
Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com>
Co-authored-by: Federico Kunze <federico.kunze94@gmail.com>
* add travis file
* update lint so it reports properly
* disable circleci
* separate test structure into Verify deps & Lint, Unit Tests, Race Tests, Integration Tests
* fix path issue now evident on ci build err
* fixed golangci version to latest stable
* Upgrade ci lint to go script and avoid cache issues #268
* fix lint issues #268
* bump go version for travis build to match go.mod version recently updated with Cosmos SDK upgrade
* add panic for err edge cases on os.Stat
* increase timeout to 10m since its failing on jenkins
* bump GOLANGCI_VERSION to 1.23.8 in order to try avoiding some weird errors on CI
* Changes necessary for enforced custom account encoding/decoding and keyring keybase changes
* updates cosmos dependency and fixes inconsistency in gas usage for simulated/real txs
* Update PR changes
* Remove unused password prompt when using OS keyring
* Update from changes to sdk
* Update to merged PR commit :the_horns:
* updated code to handle keyring backend options
* update documentation and replace cosmos-sdk with fork (temporarily)
* update cosmos dependency from fork
* update documentation
* Basic transactions set up (to be separated)
* Change transaction command to not include create operation (to include other command in next commit)
* set up create command and made minor changes
* wip implements module queries
* Added tests for query address decoding
* Added ambiguous encoding of to address in transaction and added tests
* Fix linting issue
* Move registering key types to application level to allow module usage to ignore
* Move genaccounts code to be reused
* Switches nonce increase to always happen in ante handler
* change SetNonce from keeper to point to actual nonce operation
* Remove no op nonce switch (not needed with clearing cache)
* Changes to update all accounts pre state transition and clear cache at end of block
* Update accounts before end of block commit (edge case where necessary)
* Fix nonce of sender going into evm in case it's checked, and let evm set contract starting nonce
* Migrate keybase back to Cosmos-sdk using temporary fork
* Cleaned up other affected code
* Change to updated tendermint
* fmt
* Change auth codec update
* clean up codec registration to respective packages
* Fix import fmt
* Remove no longer necessary replace
* Fix function comment
* Transition to updated sdk with modular ante handler and new genaccounts setup
* Update genesis account type to be an Ethermint account
* Change default keybase and tidy modules
* Fix lint
* Draft eth_estimateGas
* implemented eth_estimateGas
* refactored doCall to be used for both eth_call and eth_estiamteGas
* updated to reflect requested changes
* moved GenerateFromArgs func
* removed todo
* revert comment
* fixes dereference issue
* gofmted
* Fixed tx receipt error on failed transaction
* Add returnData to failed transaction for logs bloom
* Added simulate call option, without returning evm data
* Added encoding and decoding of data from EVM execution for usability
* Remove unused context parameter
* Fix function comment and remove unnecessary logging on eth_call
* Update sdk version, implement pending txs, fix nonce check
* Bump cached dependencies in circleCI
* bump circleci go version
* updated linter and fixed bugs relating to go version 1.13
* Set up gas consumption based on gas limit
* Convert evm gas meter to be infinite since being ignored
* Remove unnecessary declaration
* Update fees paid to validators to be function of gas limit and price instead of just gas
* added nonce check for node tx execution
* Increment account nonce after mempool check
* Remove unnecessary nonce increment
* Implement new tx message type for eth_call and module txs and abstracted state transition, prepared db for logs
* Added transaction indexing to evm keeper
* Alternative count type
* Set up block hash to height mapping storage and fixed linting issues
* fix typos
* Set up module query for block height
* fix bug with block mappings and implemented get block by hash
* Fix other consensus hash references
* wip Implement get transaction receipt, waiting on details to finalize
* Fix response format for tx receipt
* Fix duplicate err check
* remove cumulative gas field
* Used byte conversion function
* WIP implement eth_getBlockByNumber
* Implemented some missing fields
* Added gasLimit and updated previous fields
* Implement remaining pieces for eth_getBlock including decoding txs
* Add converting transaction objects into function for usability
* Clean up code
* format block in function for usability
* Fixed formatting and cached gasLimit value
- Updates RPC return types
- Removes custom query types in favour of default eth
- This is largely to allow for proper hexadecimal formatting (provided by `hexutil`), as the API is very specific about formatting.
* Set up framework for sending transaction with correct args and nonce mutex locking
* Set up printing ethereum address through emintkeys and getting chainid from flags
* Implemented defaults for eth_sendTransaction
* Fix bug with no data provided
* Updated comments and error, as well as RLP encoded tx bytes for return instead of amino encoded
* Implement sendRawTransaction (tx not being broadcasted to node from server)
* Add broadcast type flag to rpc API and fixed amount validation
* Add documentation
* WIP implementing state transition function
* Error handling and application setup fix
* Fixed error comment
* Allow creation of state objects with a BaseAccount
* Fixed parameters and finalise state after transaction
* updated transaction signing and cli signature
* Set up consistent account encoding and decoding
* Update txbuilder to get sequence before generating eth tx
* Added create functionality to the CLI command
* Remove need to copy over context for statedb interactions
* Updated account retriever
* Cleaned up handler code and updated TODO
* Make recoverEthSig private again
* Add error check for committing to kv store
* Remove commented out code
* Update evm chain config for state transition
* Add time in context for dapps
* WIP setting up evm tx command and updating emint keys output
* Fix linting issue
* Wip restructuring to allow for ethereum signing and encoding
* WIP setting up keybase and context to use Ethermint keys
* Fixed encoding and decoding of emint keys
* Adds command for generating explicit ethereum tx
* Fixed evm route for handling tx
* Fixed tx and msg encoding which allows transactions to be sent
* Added relevant documentation for changes and cleaned up code
* Added documentation and indicators why code was overriden
* Implement base handler framework
* Add comments for the missing state transition logic components for a tx
* Fix typo
* Remove TODO checks done by anteHandler
* WIP setting up Ethereum key CLI commands
* Functional key gen and showing Ethereum address
* Cleaned up changes
* WIP setting up Ethereum key CLI commands
* Functional key gen and showing Ethereum address
* Cleaned up changes
* Changed address to cosmos specific address
* Remove default bech32 prefixes and add basic add command test
* Changed Private key type to slice of bytes for compatibility and storability
* switch back to using cosmos crypto Keybase interfaces
* Changed key output to ethereum addressing instead of bitcoin and key generation to allow seeding from mnemonic and bip39 password
* Updated show command and added test
* Remove prefix requirement for showing keys and added existing keys commands to CLI temporarily
* Removed unnecessary duplicate code
* Readd prefixes for accounts temporarily
* Fix linting issue
* Remove TODO for setting PK to specific length of bytes (all functions use slice)
* Cleaned up descriptions to remove multi-sigs
- Adds ethermint query command (`emintcli query ethermint <query>`)
- Supports block number, storage, code, balance lookups
- Implements RPC API methods `eth_blockNumber`, `eth_getStorageAt`, `eth_getBalance`, and `eth_getCode`
- Adds tester utility for RPC calls
- Adheres to go test format, but should not be run with regular suite
- Requires daemon and RPC server to be running
- Excluded from `make test`, available with `make test-rpc`
- Implemented AppModule interface and added EVM module to app
- Required for routing
- Implements `InitGenesis` (`x/evm/genesis.go`) and stubs `ExportGenesis`
- Modifies GenesisAccount to match expected format
- Implements Keeper. This is a wrapper around the "real" keeper (CSDB). Since we need to pass the context into the keeper we need to abstract the CSDB from the
- Adds WithContext() to CSDB to support the above requirement
- Adds Keeper to app
* syncing with updated ethereum version with local versions
* Revert updates back to go-ethereum v1.8.27
* Fixed chain-test change from undoing recent go-ethereum changes
* Fixes linting issues
* Remove unused interface implementations
* Updates cosmos-sdk version from relative dependency and updates auxiliary changes
* Upgrading ethereum version back to most recent since 1.9 release <:)
* syncing with updated ethereum version with local versions
* Revert updates back to go-ethereum v1.8.27
* Fixed chain-test change from undoing recent go-ethereum changes
* Fixes linting issues
* Remove unused interface implementations
* Updates cosmos-sdk version from relative dependency and updates auxiliary changes
* Upgrading ethereum version back to most recent since 1.9 release <:)
* Added documentation for cloned functions
* Fixed circleci config and fixed linting warnings
* Updated circleCI for go version 1.12 and split jobs for build/testing
* updated go version to 1.12.5 for circleCI
* Go mod tidy dependencies
* Updated linting tools and cleared up code lint smells
* Added workflow to run build and test jobs
* Moved linting command to build workflow
* Get dependencies before linting by default
* Added go module flag to linter and increased deadline to pull packages
* Rename Ethereum tx message
* Use new tx decoder in the ethermint app
* Update ante handler to prevent spam/dos
* Update ethereum msg signing/verification logic
* Implement secp256k1 key types
* Remove pointer from To method
* Move sig check to after inartistic gas check
* Add comment on chainID parsing
* Updated validateIntrinsicGas godoc
* Implement Fee method on eth tx msg
* Add reference to spec for recoverEthSig
* Upgrade TM to v0.27.0