defmodule XRPL.LedgerEntry do @moduledoc """ The ledger_entry method returns a single ledger entry from the XRP Ledger in its raw format. See [ledger format](https://xrpl.org/ledger-object-types.html) for information on the different types of entries you can retrieve. Official documentation: https://xrpl.org/ledger_entry.html """ use XRPL @doc """ Retrieve any type of ledger object by its unique ID. Official documentation: https://xrpl.org/ledger_entry.html#get-ledger-object-by-id """ def by_id(params) do xrpl("ledger_entry", "by_id", params) end def by_id!(params), do: params |> by_id() |> unwrap_or_raise() defparams "by_id" do required(:index, :string, format: :ledger_entry) optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end @doc """ Retrieve an AccountRoot entry by its address. This is roughly equivalent to the account_info method. Official documentation: https://xrpl.org/ledger_entry.html#get-accountroot-object """ def account_root(params) do xrpl("ledger_entry", "account_root", params) end def account_root!(params), do: params |> account_root() |> unwrap_or_raise() defparams "account_root" do required(:account_root, :string, format: :account_address) optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end @doc """ Retrieve an Automated Market-Maker (AMM) object from the ledger. This is similar to amm_info method, but the ledger_entry version returns only the ledger entry as stored. Official documentation: https://xrpl.org/ledger_entry.html#get-amm-object """ def amm(%{amm: amm} = params) when is_map(amm) do xrpl("ledger_entry", "amm_string", params) end def amm(%{amm: amm} = params) when is_binary(amm) do xrpl("ledger_entry", "amm_object", params) end def amm(params) do xrpl("ledger_entry", "amm_string", params) end def amm!(params), do: params |> amm() |> unwrap_or_raise() defparams "amm_string" do required(:amm, :string, format: :ledger_entry) optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end defparams "amm_object" do required :amm, :map do required :asset, :map do required(:currency, :string, format: :currency) end required :asset2, :map do required(:currency, :string, format: :currency) required(:issuer, :string, format: :account_address) end end optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end @doc """ Retrieve a DirectoryNode, which contains a list of other ledger objects. Can be provided as string (object ID of the Directory) or as an object. Official documentation: https://xrpl.org/ledger_entry.html#get-directorynode-object """ def directory_node(%{directory: directory} = params) when is_binary(directory) do xrpl("ledger_entry", "directory_node_string", params) end def directory_node(%{directory: directory} = params) when is_map(directory) do xrpl("ledger_entry", "directory_node_object", params) end def directory_node(params) do xrpl("ledger_entry", "directory_node_string", params) end def directory_node!(params), do: params |> directory_node() |> unwrap_or_raise() defparams "directory_node_string" do required(:directory, :string, format: :ledger_entry) optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end defparams "directory_node_object" do required :directory, :map do optional(:dir_root, :string, format: :ledger_entry) optional(:owner, :string, format: :account_address) optional(:sub_index, :integer) end optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end @doc """ Retrieve an Offer entry, which defines an offer to exchange currency. Can be provided as string (unique index of the Offer) or as an object. Official documentation: https://xrpl.org/ledger_entry.html#get-offer-object """ def offer(%{offer: offer} = params) when is_binary(offer) do xrpl("ledger_entry", "offer_string", params) end def offer(%{offer: offer} = params) when is_map(offer) do xrpl("ledger_entry", "offer_object", params) end def offer(params) do xrpl("ledger_entry", "offer_string", params) end def offer!(params), do: params |> offer() |> unwrap_or_raise() defparams "offer_string" do required(:offer, :string, format: :ledger_entry) optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end defparams "offer_object" do required :offer, :map do required(:account, :string, format: :account_address) required(:seq, :integer) end optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end @doc """ Retrieve a RippleState entry, which tracks a (non-XRP) currency balance between two accounts. Official documentation: https://xrpl.org/ledger_entry.html#get-ripplestate-object """ def ripple_state(params) do xrpl("ledger_entry", "ripple_state", params) end def ripple_state!(params), do: params |> ripple_state() |> unwrap_or_raise() defparams "ripple_state" do required(:ripple_state, :map) do required(:accounts, {:array, :string}) required(:currency, :string, format: :currency) end optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end @doc """ Retrieve a Check entry, which is a potential payment that can be cashed by its recipient. Official documentation: https://xrpl.org/ledger_entry.html#get-check-object """ def check(params) do xrpl("ledger_entry", "check", params) end def check!(params), do: params |> check() |> unwrap_or_raise() defparams "check" do required(:check, :string, format: :ledger_entry) optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end @doc """ Retrieve an Escrow entry, which holds XRP until a specific time or condition is met. Can be provided as string (object ID of the Escrow) or as an object. Official documentation: https://xrpl.org/ledger_entry.html/#get-escrow-object """ def escrow(%{escrow: escrow} = params) when is_binary(escrow) do xrpl("ledger_entry", "escrow_string", params) end def escrow(%{escrow: escrow} = params) when is_map(escrow) do xrpl("ledger_entry", "escrow_object", params) end def escrow(params) do xrpl("ledger_entry", "escrow_string", params) end def escrow!(params), do: params |> escrow() |> unwrap_or_raise() defparams "escrow_string" do required(:escrow, :string, format: :ledger_entry) optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end defparams "escrow_object" do required :escrow, :map do required(:owner, :string, format: :account_address) required(:seq, :integer) end optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end @doc """ Retrieve a PayChannel entry, which holds XRP for asynchronous payments. Official documentation: https://xrpl.org/ledger_entry.html#get-paychannel-object """ def payment_channel(params) do xrpl("ledger_entry", "payment_channel", params) end def payment_channel!(params), do: params |> payment_channel() |> unwrap_or_raise() defparams "payment_channel" do required(:payment_channel, :string, format: :ledger_entry) optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end @doc """ Retrieve a DepositPreauth entry, which tracks preauthorization for payments to accounts requiring Deposit Authorization. Official documentation: https://xrpl.org/ledger_entry.html#get-depositpreauth-object """ def deposit_preauth(%{deposit_preauth: deposit_preauth} = params) when is_binary(deposit_preauth) do xrpl("ledger_entry", "deposit_preauth_string", params) end def deposit_preauth(%{deposit_preauth: deposit_preauth} = params) when is_map(deposit_preauth) do xrpl("ledger_entry", "deposit_preauth_object", params) end def deposit_preauth(params) do xrpl("ledger_entry", "deposit_preauth_string", params) end def deposit_preauth!(params), do: params |> deposit_preauth() |> unwrap_or_raise() defparams "deposit_preauth_string" do required(:deposit_preauth, :string, format: :ledger_entry) optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end defparams "deposit_preauth_object" do required(:deposit_preauth, :map) do required(:owner, :string, format: :account_address) required(:authorized, :string, format: :account_address) end optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end @doc """ Retrieve a Ticket entry, which represents a sequence number set aside for future use. (Added by the TicketBatch amendment) Official documentation: https://xrpl.org/ledger_entry.html#get-ticket-object """ def ticket(%{ticket: ticket} = params) when is_binary(ticket) do xrpl("ledger_entry", "ticket_string", params) end def ticket(%{ticket: ticket} = params) when is_map(ticket) do xrpl("ledger_entry", "ticket_object", params) end def ticket(params) do xrpl("ledger_entry", "ticket_string", params) end def ticket!(params), do: params |> ticket() |> unwrap_or_raise() defparams "ticket_string" do required(:ticket, :string, format: :ledger_entry) optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end defparams "ticket_object" do required(:ticket, :map) do required(:account, :string, format: :account_address) required(:ticket_seq, :integer) end optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end @doc """ Return an NFT Page in its raw ledger format. Official documentation: https://xrpl.org/ledger_entry.html#get-nft-page """ def nft_page(params) do xrpl("ledger_entry", "nft_page", params) end def nft_page!(params), do: params |> nft_page() |> unwrap_or_raise() defparams "nft_page" do required(:nft_page, :string, format: :ledger_entry) optional(:ledger_index, :string, format: :ledger_index) optional(:ledger_hash, :string, format: :ledger_entry) optional(:binary, :boolean, default: false) end end