lib/block_keys.ex

defmodule BlockKeys do
  @moduledoc """
  Generates or restores a wallet from mnemonic phrases
  """

  alias BlockKeys.Mnemonic
  alias BlockKeys.CKD

  def generate(network \\ :mainnet) do
    phrase = Mnemonic.generate_phrase()

    %{
      mnemonic: phrase,
      root_key: from_mnemonic(phrase, network)
    }
  end

  def from_mnemonic(phrase, network \\ :mainnet) do
    phrase
    |> Mnemonic.generate_seed()
    |> CKD.master_keys()
    |> CKD.master_private_key(network)
  end
end