lib/address.ex

defmodule Cardanoex.Address do
  alias Cardanoex.Backend

  @moduledoc """
  The Address module lets you work with addresses for a wallet.
  """

  @type address :: %{
          id: String.t(),
          state: String.t(),
          derivation_path: list(String.t())
        }

  @type inspected_address :: %{
          address_style: String.t(),
          stake_reference: String.t(),
          network_tag: non_neg_integer() | nil,
          spending_key_hash: String.t(),
          spending_key_bech32: String.t(),
          stake_key_hash: String.t(),
          stake_key_bech32: String.t(),
          script_hash: String.t(),
          script_hash_bech32: String.t(),
          pointer: %{
            slot_num: non_neg_integer(),
            transaction_index: non_neg_integer(),
            output_index: non_neg_integer()
          },
          address_root: String.t(),
          derivation_path: String.t()
        }

  @spec list(String.t()) :: {:error, String.t()} | {:ok, address()}
  @doc """
  Return a list of known addresses, ordered from newest to oldest

  ## Options
    * `wallet_id` - hex based string. 40 characters
  """
  def list(wallet_id) do
    Backend.list_addresses(wallet_id)
  end

  @spec inspect(String.t()) :: {:error, String.t()} | {:ok, inspected_address}
  @doc """
  Give useful information about the structure of a given address.

  ## Options
    * `address`
  """
  def inspect(address) do
    Backend.inspect_address(address)
  end
end