evm v0.1.1 EVM.Gas

Functions for interacting wth gas and costs of opscodes.

Link to this section Summary

Functions

Returns the cost to execute the given a cycle of the VM. This is defined in Appenix H of the Yellow Paper, Eq.(220) and is denoted C

Returns the cost of a call to sstore. This is defined in Appenfix H.2. of the Yellow Paper under the definition of SSTORE, referred to as C_SSTORE

Paid for every transaction

Paid by all contract-creating transactions after the Homestead transition

Returns the gas cost for G_txdata{zero, nonzero} as defined in Appendix G (Fee Schedule) of the Yellow Paper

Returns the instruction cost for every possible instruction. This is defined in Appendix H of the Yellow Paper

Link to this section Types

Link to this type gas_price()
gas_price() :: EVM.Wei.t

Link to this section Functions

Link to this function cost(state, machine_state, exec_env)

Returns the cost to execute the given a cycle of the VM. This is defined in Appenix H of the Yellow Paper, Eq.(220) and is denoted C.

Examples

# TODO: Figure out how to hand in state
iex> EVM.Gas.cost(%{}, %EVM.MachineState{}, %EVM.ExecEnv{})
0
Link to this function cost_call(state, machine_state)
Link to this function cost_mem(active_words)
Link to this function cost_sstore(state, machine_state)
cost_sstore(EVM.state, EVM.MachineState.t) :: t

Returns the cost of a call to sstore. This is defined in Appenfix H.2. of the Yellow Paper under the definition of SSTORE, referred to as C_SSTORE.

TODO: Implement and add examples

Link to this function cost_suicide(state, machine_state)
Link to this function g_transaction()
g_transaction() :: t

Paid for every transaction.

Link to this function g_txcreate()
g_txcreate() :: t

Paid by all contract-creating transactions after the Homestead transition.

Link to this function g_txdata(data)
g_txdata(binary) :: t

Returns the gas cost for G_txdata{zero, nonzero} as defined in Appendix G (Fee Schedule) of the Yellow Paper.

This implements g_txdatazero and g_txdatanonzero

Examples

iex> EVM.Gas.g_txdata(<<1, 2, 3, 0, 4, 5>>)
5 * 68 + 4

iex> EVM.Gas.g_txdata(<<0>>)
4

iex> EVM.Gas.g_txdata(<<0, 0>>)
8

iex> EVM.Gas.g_txdata(<<>>)
0
Link to this function instr_cost(instr, state, machine_state, exec_env)
instr_cost(atom, EVM.state, EVM.MachineState.t, EVM.ExecEnv.t) ::
  t |
  nil

Returns the instruction cost for every possible instruction. This is defined in Appendix H of the Yellow Paper.

Examples

# TODO: Verify
iex> EVM.Gas.instr_cost(:sstore, nil, nil, nil)
0

iex> EVM.Gas.instr_cost(:exp, nil, %EVM.MachineState{stack: [0, 0]}, nil)
10

# TODO: Verify
iex> EVM.Gas.instr_cost(:exp, nil, %EVM.MachineState{stack: [0, 10241]}, nil)
30

iex> EVM.Gas.instr_cost(:jumpdest, nil, nil, nil)
1

iex> EVM.Gas.instr_cost(:blockhash, nil, nil, nil)
20