lib/script/opcodes/constants/three.ex

defmodule BitcoinLib.Script.Opcodes.Constants.Three do
  @moduledoc """
  Based on https://en.bitcoin.it/wiki/Script

  Word OP_3
  Opcode 83
  Hex 0x53
  Input Nothing
  Output 3
  The number 3 is pushed onto the stack.
  """

  @behaviour BitcoinLib.Script.Opcode

  defstruct []

  alias BitcoinLib.Script.Opcodes.Constants.Three

  @value 0x53

  @doc """
  Returns 0x53

  ## Examples
      iex> BitcoinLib.Script.Opcodes.Constants.Three.v()
      0x53
  """
  @spec v() :: 0x53
  def v do
    @value
  end

  @doc """
  Returns <<0x53>>

  ## Examples
      iex> BitcoinLib.Script.Opcodes.Constants.Three.encode()
      <<0x53>>
  """
  @spec encode() :: <<_::8>>
  def encode() do
    <<@value::8>>
  end

  @doc """
  The number 3 is pushed onto the stack.

  ## Examples
      iex> BitcoinLib.Script.Opcodes.Constants.Three.execute(
      ...>  %BitcoinLib.Script.Opcodes.Constants.Three{},
      ...>  [4]
      ...> )
      {:ok, [3, 4]}
  """
  def execute(%Three{}, remaining) do
    {:ok, [3 | remaining]}
  end
end