defmodule BitcoinLib.Script.Opcodes.Arithmetic.LessThan do @moduledoc """ Based on https://en.bitcoin.it/wiki/Script Word OP_LESSTHAN Opcode 159 Hex 0x9f Input in Output out Returns 1 if a is less than b, 0 otherwise. """ @behaviour BitcoinLib.Script.Opcode defstruct [] alias BitcoinLib.Script.Opcodes.Arithmetic.LessThan @type t :: LessThan @value 0x9F @doc """ Returns 0x9f ## Examples iex> BitcoinLib.Script.Opcodes.Arithmetic.LessThan.v() 0x9f """ @spec v() :: 0x9F def v do @value end @doc """ Returns <<0x9f>> ## Examples iex> BitcoinLib.Script.Opcodes.Arithmetic.LessThan.encode() <<0x9f>> """ @spec encode() :: <<_::8>> def encode() do <<@value::8>> end @doc """ Returns 1 if a is less than b, 0 otherwise. ## Examples iex> BitcoinLib.Script.Opcodes.Arithmetic.LessThan.execute( ...> %BitcoinLib.Script.Opcodes.Arithmetic.LessThan{}, ...> [2, 3, 4] ...> ) {:ok, [1, 4]} """ @spec execute(LessThan.t(), list()) :: {:ok, list()} def execute(%LessThan{}, [first, second] ++ remaining) do case first < second do true -> {:ok, [1 | remaining]} false -> {:ok, [0 | remaining]} end end end