evm v0.1.14 EVM.Operation.BlockInformation

Link to this section Summary

Functions

Get the hash of one of the 256 most recent complete blocks

Get the block’s beneficiary address

Get the block’s difficulty

Get the block’s gas limit

Get the block’s number

Get the block’s timestamp

Link to this section Functions

Get the hash of one of the 256 most recent complete blocks.

TODO: Test 256 limit

Examples

iex> block_b = %Block.Header{number: 2, mix_hash: "block_b"}
iex> block_a = %Block.Header{number: 1, mix_hash: "block_a"}
iex> genesis_block = %Block.Header{number: 0, mix_hash: <<0x00::256>>}
iex> block_map = %{<<0x00::256>> => genesis_block, "block_a" => block_a, "block_b" => block_b}
iex> block_interface = EVM.Interface.Mock.MockBlockInterface.new(block_b, block_map)
iex> exec_env = %EVM.ExecEnv{block_interface: block_interface}
iex> EVM.Operation.BlockInformation.blockhash([3], %{exec_env: exec_env})
0
iex> EVM.Operation.BlockInformation.blockhash([2], %{exec_env: exec_env})
"block_b"
iex> EVM.Operation.BlockInformation.blockhash([1], %{exec_env: exec_env})
"block_a"
iex> EVM.Operation.BlockInformation.blockhash([0], %{exec_env: exec_env})
<<0::256>>
iex> EVM.Operation.BlockInformation.blockhash([-1], %{exec_env: exec_env})
0

Get the block’s beneficiary address.

Examples

iex> block_interface = EVM.Interface.Mock.MockBlockInterface.new(%Block.Header{beneficiary: <<0x55::160>>})
iex> exec_env = %EVM.ExecEnv{block_interface: block_interface}
iex> EVM.Operation.BlockInformation.coinbase([], %{exec_env: exec_env})
<<0x55::160>>

Get the block’s difficulty

Examples

iex> block_interface = EVM.Interface.Mock.MockBlockInterface.new(%Block.Header{difficulty: 2_000_000})
iex> exec_env = %EVM.ExecEnv{block_interface: block_interface}
iex> EVM.Operation.BlockInformation.difficulty([], %{exec_env: exec_env})
2_000_000

Get the block’s gas limit.

Examples

iex> block_interface = EVM.Interface.Mock.MockBlockInterface.new(%Block.Header{gas_limit: 3_000_000})
iex> exec_env = %EVM.ExecEnv{block_interface: block_interface}
iex> EVM.Operation.BlockInformation.gaslimit([], %{exec_env: exec_env})
3_000_000

Get the block’s number

Examples

iex> block_interface = EVM.Interface.Mock.MockBlockInterface.new(%Block.Header{number: 1_500_000})
iex> exec_env = %EVM.ExecEnv{block_interface: block_interface}
iex> EVM.Operation.BlockInformation.number([], %{exec_env: exec_env})
1_500_000

Get the block’s timestamp

Examples

iex> block_interface = EVM.Interface.Mock.MockBlockInterface.new(%Block.Header{timestamp: 1_000_000})
iex> exec_env = %EVM.ExecEnv{block_interface: block_interface}
iex> EVM.Operation.BlockInformation.timestamp([], %{exec_env: exec_env})
1_000_000