defmodule XRPL.Payment do @moduledoc """ XRPL.Payment is a module to interact with payment modules on the XRP Ledger. Payment channels are a tool for facilitating repeated, unidirectional payments, or temporary credit between two parties. Use these methods to work with payment channels. Official documentation: https://xrpl.org/payment-channel-methods.html """ use XRPL @doc """ The channel_authorize method creates a signature that can be used to redeem a specific amount of XRP from a payment channel. Official documentation: https://xrpl.org/docs/references/http-websocket-apis/public-api-methods/payment-channel-methods/channel_authorize/ """ def channel_authorize(%{secret: _} = params) do xrpl("channel_authorize", "channel_authorize_with_secret", params) end def channel_authorize(%{seed: _} = params) do xrpl("channel_authorize", "channel_authorize_with_seed", params) end def channel_authorize(%{seed_hex: _} = params) do xrpl("channel_authorize", "channel_authorize_with_seed_hex", params) end def channel_authorize(%{passphrase: _} = params) do xrpl("channel_authorize", "channel_authorize_with_passphrase", params) end def channel_authorize(_params) do {:error, :invalid_params} end def channel_authorize!(params), do: params |> channel_authorize() |> unwrap_or_raise() defparams "channel_authorize_with_secret" do required(:channel_id, :string) required(:amount, :string) required(:secret, :string) optional(:key_type, :enum, values: ["ed25519", "secp256k1"], default: "secp256k1") end defparams "channel_authorize_with_seed" do required(:channel_id, :string) required(:amount, :string) required(:seed, :string) optional(:key_type, :enum, values: ["ed25519", "secp256k1"], default: "secp256k1") end defparams "channel_authorize_with_seed_hex" do required(:channel_id, :string) required(:amount, :string) required(:seed_hex, :string) optional(:key_type, :enum, values: ["ed25519", "secp256k1"], default: "secp256k1") end defparams "channel_authorize_with_passphrase" do required(:channel_id, :string) required(:amount, :string) required(:passphrase, :string) optional(:key_type, :enum, values: ["ed25519", "secp256k1"], default: "secp256k1") end @doc """ The channel_verify method verifies a signature that can be used to redeem a specific amount of XRP from a payment channel. Official documentation: https://xrpl.org/docs/references/http-websocket-apis/public-api-methods/payment-channel-methods/channel_verify/ """ def channel_verify(params) do xrpl("channel_verify", params) end def channel_verify!(params), do: params |> channel_verify() |> unwrap_or_raise() defparams "channel_verify" do required(:channel_id, :string) required(:amount, :string) required(:public_key, :string) required(:signature, :string) end end