lib/script/opcodes/crypto/check_sig_verify.ex

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

  Word OP_CHECKSIGVERIFY
  Opcode 173
  Hex 0xad
  Input sig pubkey
  Output Nothing / fail
  Description Same as OP_CHECKSIG, but OP_VERIFY is executed afterward.
  """

  @behaviour BitcoinLib.Script.Opcode

  defstruct []

  alias BitcoinLib.Script.Opcodes.Crypto.CheckSigVerify

  @value 0xAD

  @doc """
  Returns 0xad

  ## Examples
      iex> BitcoinLib.Script.Opcodes.Crypto.CheckSigVerify.v()
      0xad
  """
  @spec v() :: 0xAD
  def v do
    @value
  end

  @doc """
  Returns <<0xad>>

  ## Examples
      iex> BitcoinLib.Script.Opcodes.Crypto.CheckSigVerify.encode()
      <<0xad>>
  """
  @spec encode() :: <<_::8>>
  def encode() do
    <<@value::8>>
  end

  @doc """
  NOT IMPLEMENTED YET
  """
  @spec execute(%CheckSigVerify{}, list()) :: {:ok, [list()]} | {:error, binary()}
  def execute(%CheckSigVerify{}, []) do
    throw("OP_CHECKSIGVERIFY execution has not ben implemented yet")
  end
end