EOS EVM v0.5.0 Release Notes
This release contains changes to all major components of the EOS EVM.
Components
EOS EVM Contract
Action to execute read-only transactions
The EOS EVM contract now has a new action called exec
which allows the caller to execute EVM code and get the return value. No side-effects will be committed to state and this action is intended to be used for read-only executions, e.g. calling Solidity view functions.
There are two ways of getting the return value. If no callback is specified in the arguments of the exec
action, then the EVM contract message call return value will be included as part of the return value of the exec
action. Otherwise, if a callback (of the form of a contract account name and action name) is specified, the EOS EVM Contract will deliver the return value as an inline action call made to contract specified in the callback.
This feature is a necesssary component for Yield+ integration with the EOS EVM.
Increased stack size to allow deeper nested calls
The EOS EVM Contact has a limit on the stack used within WASM linear memory. This puts a limit to how deeply nested EVM contract calls can get within the EVM implementation before it runs out of stack.
The stack limit in prior releases allow nested calls to get to a depth of 5. Optimizations in the EOS EVM Contract implementation have allowed for almost doubling the stack size which has correspondingly increased the EVM call depth limit by a significant amount thus enabling contract use cases that may have been rejected before.
Other improvements to the EOS EVM Contract
PRs
The inevm
table now shows up in the ABI which should allow for easy exploration of the total sum of the EOS balances within the EVM environment using an EOS block explorer. Note that this balance does not include any of the other balances held by the EOS EVM Contract on the EOS side, e.g. the accumulated gas fees in the eosio.evm
balances or the balances of miners who have explicitly opened an account in the contract using the open
action.
The withdraw
action has been modified to take an optional extra argument called to
. Normally, when to
is not specified, the funds beloging to the owner
are withdraw to the balance within the eosio.token
contract belonging to owner
. If to
is specified, then the funds are instead sent to the to
account.
The EOS EVM Contract will now reject any non-EOS tokens, e.g. USDT
, that are sent to it. As a reminder, the trustless bridge does not yet support any tokens other than EOS.
A more descriptive error message is now returned if validation of a pushed EVM transaction fails.
EOS EVM Node and RPC
Various bug fixes
PRs
A bug in the history index of EOS EVM Node was fixed. This bug caused the block explorer to show incorrect records. To resolve this issue in an already deployed instance, it is necessary to replay the EOS EVM Node and then it is necessary to re-index the block explorer that used data from the buggy EOS EVM Node.
Additional bugs in EOS EVM RPC were fixed. An eth_call
request without an explicit from
value specified now works correctly. Gas estimation now returns expected responses under certain error conditions, and other fixes were made to gas estimation in EOS EVM RPC.
TX-Wrapper
Configurable permission and expiration
Prior to this release, TX-Wrapper had a hard-coded expiration for the EOS wrapped transaction set to 50 minutes in the future. In this release, the expiration time is configurable with the optional EXPIRE_SEC
parameter (takes the expiration duration in seconds). If not specified, the expiration time will default to 5 minutes.
TX-Wrapper also now requires an additional parameter EOS_PERMISSION
to set the permission to use for the miner's authorization of the pushtx
action. To maintain existing behavior, ensure this parameter is set to "active"
. The permission can be changed to a custom permission on the account specified by EOS_SENDER
. However, ensure that linkauth
is used to allow that custom permission to satisfy the pushtx
action of the EOS EVM Contract, otherwise TX-Wrapper will not function correctly.
Building, compatibility, and upgrading
Building
The README in the eos-evm repository contains instructions on how to build the components.
Compatibility and upgrading
The components can be upgraded from any prior 0.4.x release.
The EOS EVM Contract is simply upgrading by deploying the WASM and ABI.
EOS EVM Node needs to replay from genesis. Block explorers leveraging data from EOS EVM Node are recommended to re-index.
The .env
file used by TX-Wrapper should first ensure the line EOS_PERMISSION="active"
is added before starting the new TX-Wrapper to ensure it can start up and behave the same way as before.
Deprecations, removals, and dropped support
TX-Wrapper deprecated
TX-Wrapper has been deprecated and will be removed in a future release. Users are recommended to switch to eos-evm-miner instead.
Further details on changes since last release
Contributors
Special thanks to the contributors that submitted patches for this release:
Full list of changes since last release
PRs
- (505) [0.4 -> main] Bring recent 0.4.x changes into main. Bump version to 0.5.0
- (508) [0.4 -> main] add missing nginx log settings
- (511) Update README to include links to EOS EVM docs and evm-public-docs
- (503) configurable permission in tx_wrapper
- (522) Remove flask_proxy
- (532) evmone version
- (534) [0.4 -> main] Enable keep alive to read and test endpoint
- (538) [0.4 -> main] fix silkworm stability
- (521) fix #465 #451 extra param for withdraw, inevm table abi
- (544) Reject non eos token in bridging
- (546) add some additional tests for invalid addresses in EOS->EVM bridge memos
- (550) more briging tests
- (474) Remove advanced execution to increase nested call level
- (553) eth_call: use default from address when not specified
- (555) Fix Wrong History Index
- (557) Fix gas estimation return value
- (541) Return error number and more descriptive message when validation failed
- (547) Add read-only transaction execution support to EVM contract
- (593) [0.5] EstimateGasOracle: fix estimate_gas
- (594) [0.5] Return better result when accessed by GET
Full Changelog: v0.4.2...v0.5.0