Skip to main content

EVM Compatibility

Overview

The tEVM is generally compatible with any smart contract written in Solidity. Care must be taken to validate throughout the smart contract development life cycle that the contract is functioning as expected. It is always recommended to thoroughly test any contract on the Telos testnet before deploying to the Telos mainnet.

Solidity Versions

Due to the nature of the Telos EVM's implementation, certain versions of Solidity may not always be supported. Currently, version 0.8.23 is fully supported and all versions before 0.8.23 should be supported, but version > 0.7.0 is recommended.

Version 0.8.24 is partially supported. 0.8.24 can be used if the following functions are not called within the code: tstore(), tload(), blobhash(), basefee(), blobbasefee() and mcopy()

Supported EIPs

As verified by Sentnl's Audit all gas values are consistent with gETH. An explicit effort was made to align the tEVM with EIP-2929 in order to conform with Gas costs. In addition to the Audit verification, all Open-Zeppelin tests have been run ensuring EVM compatibility.
With the tEVM 1.5 upgrade, EIP-3855 is now supported.

RPC Methods

Currently supported JSON RPC methods:

rpc_modules

net_listening
net_version
parity_pendingTransactions // No-op

web3_clientVersion

eth_blockNumber
eth_chainId
eth_accounts
eth_getTransactionCount
eth_getCode
eth_getStorageAt
eth_estimateGas
eth_gasPrice
eth_getBalance
eth_getBalanceHuman // custom, returns the float balance instead of wei
eth_call
eth_sendRawTransaction
eth_sendTransaction
eth_getTransactionReceipt
eth_getTransactionByHash
eth_getTransactionByBlockHashAndIndex
eth_getBlockByNumber
eth_getBlockByHash
eth_getBlockTransactionCountByHash
eth_getBlockTransactionCountByNumber
eth_getUncleCountByBlockHash
eth_getUncleCountByBlockNumber
eth_getLogs
eth_syncing

// trace APIs only support the 'trace' type and not 'vmTrace' or 'stateDiff'
trace_filter
trace_transaction
trace_replayTransaction
trace_replayBlockTransactions
trace_block