Hyperledger Besu EVM
The EthereumJ virtual machine was replaced with the Hyperledger Besu virtual machine in the Hedera Services release 0.19 as a result of HIP-26. This migration enables Hedera to maintain parity with Ethereum Mainnet evolutions, such as the EVM container formats, new opcodes, and precompiled contracts.
The smart contract platform is upgraded to support the EVM visible changes for the “Shanghai” hard fork. This includes changes introduced in the "London", “Istanbul”, and “Berlin” hard forks. Changes relating to block production, data serialization, and the fee market will not be implemented because they are not relevant to Hedera’s architecture.
Starting in the Hedera Services 0.22 release, the __ intrinsic gas cost and input data will be charged. The intrinsic gas cost is a constant that is charged before any code is executed. The intrinsic gas cost is 21,000 gas. The input data is 16 gas per non-zero byte and 4 gas per zero byte. The input data is the data provided to the external contract function parameters when calling a contract. To learn more about gas fees, check out this page.
The Hedera Smart Contract Service will use the Gas Schedule from the "Shanghai" hard fork. Notable changes include warm/cold account access and refund reductions.
The "Berlin" hard fork introduced the notion of warm and cold accounts and storage slots. The first access to an account or storage slot in a transaction will need to pay the "cold" costs and all subsequent calls will pay the lower "warm" access costs. EIP-2929 contains the full details of the new cost scheduling.
Hedera does not at this time allow for "pre-warming" addresses and storage slots as part of the transaction as seen in EIP-2930. Future HIPs may support this scheme.
In the Shanghai gas schedule, the amount of gas that can be returned from storage access usage patterns has been significantly reduced. Account refunds from
SELFDESTRUCT
have been completely removed.Table of Gas Cost Changes
Operation | Shanghai Cost (Gas) | Current Hedera (Gas) |
---|---|---|
Code deposit | 200 * bytes | Max of Shanghai
or Hedera |
BALANCE
(cold account) | 2600 | 2600 |
BALANCE
(warm account) | 100 | 100 |
EXP | 10 + 50/byte | 10 + 50/byte |
EXTCODECOPY
(cold account) | 2600 + Mem | 2600 + Mem |
EXTCODECOPY
(warm account) | 100 + Mem | 100 + Mem |
EXTCODEHASH
(cold account) | 2600 | 2600 |
EXTCODEHASH
(warm account) | 100 | 100 |
EXTCODESIZE
(cold account) | 2600 | 2600 |
EXTCODESIZE
(warm account) | 100 | 100 |
LOG0, LOG1, LOG2,
LOG3, LOG4 | 375 + 375*topics
+ data Mem | Max of Shanghai
or Hedera |
SLOAD
(cold slot) | 2100 | 2100 |
SLOAD
(warm slot) | 100 | 100 |
SSTORE
(new slot) | 22,100 | Max of Shanghai
or Hedera |
SSTORE
(existing slot,
cold access) | 2,900 | 2,900 |
SSTORE
(existing slot,
warm access) | 100 | 100 |
SSTORE
refund | Only transient
storage slots | Only transient
storage slots |
CALL et al.
(cold recipient) | 2,600 | 2,600 |
CALL et al.
(warm recipient) | 100 | 100 |
CALL et al.
Hbar/Eth Transfer Surcharge | 9,000 | 9,000 |
CALL et al.
New Account Surcharge | 25,000 | revert |
SELFDESTRUCT
(cold beneficiary) | 2600 | 2600 |
SELFDESTRUCT
(warm beneficiary) | 0 | 0 |
The terms 'warm' and 'cold' in the above table correspond with whether the account or storage slot has been read or written to within the current smart contract transaction, even if within a child call frame.
'CALL et al.' includes with limitation
CALL
, CALLCODE
, DELEGATECALL
, and STATICCALL
Last modified 2mo ago