lib/ledger.ex

defmodule XRPL.Ledger do
  @moduledoc """
  XRPL.Ledger is a module to interact with ledgers on the XRP Ledger.
  A ledger version contains a header, a transaction tree, and a state tree, which contain account settings, trustlines, balances, transactions, and other data.
  Use these methods to retrieve ledger info.

  Official RPC documentation: https://xrpl.org/ledger-methods.html
  """

  use XRPL

  @doc """
  Retrieve information about the public ledger.

  Official documentation: https://xrpl.org/ledger.html
  """
  def ledger(params) do
    xrpl("ledger", params)
  end

  def ledger!(params), do: params |> ledger() |> unwrap_or_raise()

  defparams "ledger" do
    optional(:ledger_hash, :string, format: :ledger_entry)
    optional(:ledger_index, :string, format: :ledger_index)
    optional(:transactions, :boolean, default: false)
    optional(:expand, :boolean, default: false)
    optional(:owner_funds, :boolean, default: false)
    optional(:binary, :boolean)
    optional(:queue, :boolean)
  end

  @doc """
  The ledger_closed method returns the unique identifiers of the most recently closed ledger.
  (This ledger is not necessarily validated and immutable yet.)

  Official documentation: https://xrpl.org/ledger_closed.html
  """
  def ledger_closed do
    xrpl("ledger_closed", %{})
  end

  def ledger_closed!, do: unwrap_or_raise(ledger_closed())

  defparams "ledger_closed" do
  end

  @doc """
  The ledger_current method returns the unique identifiers of the current in-progress ledger.

  This command is mostly useful for testing, because the ledger returned is still in flux.

  Official documentation: https://xrpl.org/ledger_current.html
  """
  def ledger_current do
    xrpl("ledger_current", %{})
  end

  def ledger_current!, do: unwrap_or_raise(ledger_current())

  defparams "ledger_current" do
  end

  @doc """
  The ledger_data method retrieves contents of the specified ledger.
  You can iterate through several calls to retrieve the entire contents of a single ledger version.

  Official documentation: https://xrpl.org/ledger_data.html
  """
  def ledger_data(params) do
    xrpl("ledger_data", params)
  end

  def ledger_data!(params), do: params |> ledger_data() |> unwrap_or_raise()

  defparams "ledger_data" do
    optional(:ledger_hash, :string, format: :ledger_entry)
    optional(:ledger_index, :string, format: :ledger_index)
    optional(:binary, :boolean, default: false)
    optional(:limit, :integer, max: 256, default: 256)
    optional(:marker, :string)

    optional(:type, :enum,
      values: [
        "account",
        "amendments",
        "amm",
        "check",
        "deposit_preauth",
        "directory",
        "escrow",
        "fee",
        "hashes",
        "nft_offer",
        "offer",
        "payment_channel",
        "signer_list",
        "state",
        "ticket"
      ]
    )
  end
end