defmodule Stellar.TxBuild.Spec do @moduledoc """ Defines contracts to build a Stellar transaction. """ alias StellarBase.XDR.SorobanTransactionData alias Stellar.TxBuild alias Stellar.TxBuild.{ Account, AccountMerge, BaseFee, BumpSequence, BeginSponsoringFutureReserves, ChangeTrust, Clawback, ClawbackClaimableBalance, CreateAccount, CreatePassiveSellOffer, EndSponsoringFutureReserves, ManageData, ManageSellOffer, ManageBuyOffer, Memo, Payment, PathPaymentStrictSend, PathPaymentStrictReceive, SequenceNumber, SetOptions, Signature, TimeBounds, Preconditions } @type opts :: Keyword.t() @type account :: Account.t() @type network_passphrase :: String.t() @type sequence_number :: SequenceNumber.t() @type memo :: Memo.t() @type base_fee :: BaseFee.t() @type time_bounds :: TimeBounds.t() @type preconditions :: Preconditions.t() @type signatures :: Signature.t() | list(Signature.t()) @type operation :: AccountMerge.t() | BumpSequence.t() | BeginSponsoringFutureReserves.t() | ChangeTrust.t() | Clawback.t() | ClawbackClaimableBalance.t() | CreateAccount.t() | CreatePassiveSellOffer.t() | EndSponsoringFutureReserves.t() | ManageData.t() | ManageSellOffer.t() | ManageBuyOffer.t() | Payment.t() | PathPaymentStrictSend.t() | PathPaymentStrictReceive.t() | SetOptions.t() @type soroban_data :: String.t() | SorobanTransactionData.t() @type operations :: list(operation()) @type envelope :: String.t() @type hash :: String.t() @type tx_build :: {:ok, TxBuild.t()} | {:error, atom()} @type tx_envelope :: {:ok, envelope()} | {:error, atom()} @type tx_hash :: {:ok, hash()} | {:error, atom()} @callback new(account(), opts()) :: tx_build() @callback set_network_passphrase(tx_build(), network_passphrase()) :: tx_build() @callback add_memo(tx_build(), memo()) :: tx_build() @callback set_time_bounds(tx_build(), time_bounds()) :: tx_build() @callback set_preconditions(tx_build(), preconditions()) :: tx_build() @callback set_base_fee(tx_build(), base_fee()) :: tx_build() @callback set_sequence_number(tx_build(), sequence_number()) :: tx_build() @callback add_operation(tx_build(), operation()) :: tx_build() @callback add_operations(tx_build(), operations()) :: tx_build() @callback set_soroban_data(tx_build(), soroban_data()) :: tx_build() @callback sign(tx_build(), signatures()) :: tx_build() @callback build(tx_build()) :: tx_build() @callback envelope(tx_build()) :: tx_envelope() @callback sign_envelope(envelope(), signatures(), network_passphrase()) :: tx_envelope() @callback hash(tx_build()) :: tx_hash() @optional_callbacks add_memo: 2, set_base_fee: 2, set_time_bounds: 2, set_preconditions: 2, set_sequence_number: 2 end