lib/script/opcodes/crypto/check_multisig_verify.ex

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

  Word OP_CHECKMULTISIGVERIFY
  Opcode 175
  Hex 0xaf
  Input x sig1 sig2 ... <number of signatures> pub1 pub2 ... <number of public keys>
  Output Nothing / fail
  Description Same as OP_CHECKMULTISIG, but OP_VERIFY is executed afterward.
  """

  @behaviour BitcoinLib.Script.Opcode

  defstruct []

  alias BitcoinLib.Script.Opcodes.Crypto.CheckMultiSigVerify

  @value 0xAF

  @doc """
  Returns 0xaf

  ## Examples
      iex> BitcoinLib.Script.Opcodes.Crypto.CheckMultiSigVerify.v()
      0xaf
  """
  @spec v() :: 0xAF
  def v do
    @value
  end

  @doc """
  Returns <<0xaf>>

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

  @doc """
  NOT IMPLEMENTED YET
  """
  def execute(%CheckMultiSigVerify{}, []) do
    throw("OP_CHECKMULTISIGVERIFY execution has not ben implemented yet")
  end
end