Solidity Variables and Opcodes

The table below defines the mapping of Solidity variables and operation codes to Hedera.

SolidityHedera

address

The address is a mapping of shard.realm.number (0.0.10) into a 20 byte Solidity address. The address can be a Hedera account ID or contract ID in Solidity format.

block.basefee

The BASEFEE opcode will return zero. Hedera does not use the Fee Market mechanism this is designed to support.

block.chainid

The CHAINID opcode will return 295(hex 0x0127) for mainnet, 296( hex 0x0128) for testnet, 297( hex 0x0129) for previewnet, and 298 (0x12A) for development networks.

block.coinbase

The COINBASE operation will return the funding account (Hedera transaction fee collecting account 0.0.98).

block.number

The index of the record file (not recommended use block.timestamp).

block.timestamp

The transaction consensus timestamp.

block.difficulty

Always zero

block.gaslimit

The GASLIMIT operation will return the gasLimit of the transaction. The transaction gasLimit will be the lowest of the gas limit requested in the transaction or a global upper gas limit configured for all smart contracts.

msg.sender

The address of the Hedera contract ID or account ID in Solidity format that called this contract. For the root level or for delegate chains that go to root it is the account ID paying for the transaction.

msg.value

The value associated to the transaction associated in tinybar.

tx.origin

The account ID paying for the transaction, regardless of depth.

tx.gasprice

Fixed (varies with the global fee schedule and exchange rate).

selfdestruct(address payable recipient)

Address will not be reusable due to Hedera’s account numbering policies.

<address>.code

Precompile contract addresses will report no code, including HTS System contract.

<address>.codehash

Precompile contract addresses will report the empty code hash.

SELFBALANCE

This opcode will operate as expected with no change from Ethereum Mainnet.

CREATE2

The CREATE2 operation is supported as of the 0.23 Hedera services release. Please check out the status page for network availabilty.

delegateCall

Contracts may no longer use delegateCall() to invoke system contracts. Contracts should instead use the call() method.

HBAR decimal places

The JSON RPC Relay msg.value uses 18 decimals when it returns HBAR. This was to provide an equivalent decimal length for web3 tools used across multiple EVM chains. As a result, the gasPrice also uses 18 decimal places since it is only utilized from the JSON RPC Relay. Refer to the HBAR page for a table of Hedera APIs and the decimal places they return.

Last updated