Skip to content
Ethereum utilities for Elixir
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Hex Version Hex docs


The essential Elixir library for interacting with Ethereum blockchain. You can now create Ethereum wallets, query the blockchain and sign/send transactions, all from Elixir / Erlang Virtual Machine.


  wallet = ETH.Wallet.create
  # %{eth_address: "0x31CF67A272A23C7A11128C97FC3B2F4C13AFD87F",
  #   mnemonic_phrase: "similar bleak naive absorb picnic avoid sponsor canoe inform misery crisp hotel critic have parent couch wrong survey staff primary wet wear velvet horse",
  #   private_key: "C8E2F24A806A422034990C7391B4CEB7133CD3680987FEBB5750555F99F0FC83",
  #   public_key: "04C4AA07F234226CA90FB3E8BB1590D5BEB703E449700FE0B2DF539A948289EA75220CC837CA68F429F3FB3D6677B2D63CF66277888B8209D0B3F3229CE339654C"}

  specific_private_key = "9756371A51D7FC25EDFC95A49DEF3806ED34DF2EBCA2065E543369E708C47374"
  another_wallet = ETH.Wallet.create(specific_private_key)
  # %{eth_address: "0x6A26B49D8046DC5B74D41E29F9A5CA7AD78EEC9B",
  #   mnemonic_phrase: "nuclear random shoot photo lemon base retire naive pig urge sock assist spy hurdle road nephew alien verify art stable identify giraffe soccer mushroom",
  #   private_key: "9756371A51D7FC25EDFC95A49DEF3806ED34DF2EBCA2065E543369E708C47374",
  #   public_key: "04D1F70F6048D1E22FBEBBF3AF462E3356747AB2BB81EC269C600BE6A53C3223472AA336DF0060719C6F3AEC45E40AE57ED39735B61B8F5EF989466D46CA1B72C0"}

  accounts_in_your_client = ETH.get_accounts
  # ["0xfdf5d02f2082753dda0817492d6efff7e76e47aa",
  #  "0xb9906b679aa8edd03fdf7fe396af4d9a77af4108",
  #  "0xae6463bf32efc106ad4300d902e572e1c43e6e9c",
  #  "0xb764c82ae23467be2cf90ab9019ee2464a3946f9",
  #  "0xfc5b5a6cd171f4123439f28fad9986c70572b35f",
  #  "0x7605c8812cfb51a7d2d16e598f521c9302d0ed7f",
  #  "0x7dab29cc88c2ecd69ec216b7d089a82bb95fe1ad",
  #  "0xba3a30f3c4fd2b4a44936b42ceea87ec3e53294a",
  #  "0xb3f4869ce14d6bbd659dc5d2f9a515b58b2765d2",
  #  "0x8c9cec7feacdbbf472ebcc4f61224d83c880896b"]

  first_account_in_your_client = List.first(accounts_in_your_client)
  first_account_private_key = "f121f608500f7e3379c813aa6df62864e35aa0b6cd11a2ff2c20ac84b5771fb2"

  ETH.get_balance("0x31CF67A272A23C7A11128C97FC3B2F4C13AFD87F") # {:ok, 0} # this account holds no ether
  ETH.get_balance!(first_account_in_your_client, :wei) # 1.0e20 -> in this example this address holds 100 ether / 1.0e20 wei

  ETH.get_transaction_count(first_account_in_your_client) # {:ok, 0}

  {:ok, tx_hash} = ETH.send_transaction(%{
    from: first_account_in_your_client, to: wallet[:eth_address], value: 22
  }, first_account_private_key)
  # {:ok, "0x13893d677251ddb9259263490504f3e611a0a7bff23b108641d2cb08b7af21dc"}

  # %{block_hash: "0xf9917088fc6750677cc1cfb4f7dcab453b21c7de2cb22ed7e6753df058bec5cf",
  #   block_number: 1, from: "0xfdf5d02f2082753dda0817492d6efff7e76e47aa",
  #   gas: 21000, gas_price: 20000000000,
  #   hash: "0x13893d677251ddb9259263490504f3e611a0a7bff23b108641d2cb08b7af21dc",
  #   input: "0", nonce: 0, to: "0x725316bb37d202b0eb203cd83238c31e983a7936",
  #   transaction_index: 0, value: 22}

  ETH.get_balance!(first_account_in_your_client) # 99.99958 # in ether
  ETH.get_balance(wallet[:eth_address], :wei) # {:ok, 22.0} # in wei

Warning: This library uses the Ethereum JSON-RPC under the hood, so you need an ethereum client such as parity/geth or testrpc to use of most of the API.


  • Izel Nakri - I reverse engineered ethereum JavaScript libraries in Elixir so you don't have to.

Additionally this library wouldnt exist without the libraries below:

  • ExRLP
  • Ethereumex
  • keccakf1600
  • libsecp256k1


To properly use this package, you will need to run rebar compile eunit for libsecp256k1.


Ethereum Smart Contracts, small enhancements


If available in Hex, the package can be installed by adding eth to your list of dependencies in mix.exs:

def deps do
    {:eth, "~> 0.3.0"}

Running the tests

Install a testrpc(now renamed to ganache-cli) to run ethereum locally: npm install -g ganache-cli

Elixir tests automatically spawns and kills the ganache-cli process. All you need to do now is to run the tests in sequence thus --seed 0: mix test --seed 0

The docs can be found at

You can’t perform that action at this time.