lib/transaction/spec/output.ex

defmodule BitcoinLib.Transaction.Spec.Output do
  @moduledoc """
  A simplified version of a %BitcoinLib.Transaction.Output that can be filled with human readable formats
  """

  defstruct [:script_pub_key, :value]

  alias BitcoinLib.Transaction.Spec
  alias BitcoinLib.Transaction

  @doc """
  Converts a human readable output into a %Transaction.Output{}

  ## Examples
      iex> %BitcoinLib.Transaction.Spec.Output{
      ...>   script_pub_key: BitcoinLib.Script.Types.P2pkh.create(<<0xfc8ca28ea75e45f538242c257e1f07fe19baa0f3::160>>),
      ...>   value: 1000
      ...> }
      ...> |> BitcoinLib.Transaction.Spec.Output.to_transaction_output()
      %BitcoinLib.Transaction.Output{
        script_pub_key: [
          %BitcoinLib.Script.Opcodes.Stack.Dup{},
          %BitcoinLib.Script.Opcodes.Crypto.Hash160{},
          %BitcoinLib.Script.Opcodes.Data{value: <<0xfc8ca28ea75e45f538242c257e1f07fe19baa0f3::160>>},
          %BitcoinLib.Script.Opcodes.BitwiseLogic.EqualVerify{},
          %BitcoinLib.Script.Opcodes.Crypto.CheckSig{script: <<0x76a914fc8ca28ea75e45f538242c257e1f07fe19baa0f388ac::200>>}
        ],
        value: 1000
      }
  """
  @spec to_transaction_output(%Spec.Output{}) :: %Transaction.Output{}
  def to_transaction_output(%Spec.Output{script_pub_key: script_pub_key, value: value}) do
    %Transaction.Output{
      script_pub_key: script_pub_key,
      value: value
    }
  end
end