defmodule BitcoinLib.Script.Opcodes.Arithmetic.Negate do @moduledoc """ Based on https://en.bitcoin.it/wiki/Script Word OP_NEGATE Opcode 143 Hex 0x8f Input in Output out The sign of the input is flipped. """ @behaviour BitcoinLib.Script.Opcode defstruct [] alias BitcoinLib.Script.Opcodes.Arithmetic.Negate @value 0x8F @doc """ Returns 0x8f ## Examples iex> BitcoinLib.Script.Opcodes.Arithmetic.Negate.v() 0x8f """ @spec v() :: 0x8F def v do @value end @doc """ Returns <<0x8f>> ## Examples iex> BitcoinLib.Script.Opcodes.Arithmetic.Negate.encode() <<0x8f>> """ @spec encode() :: <<_::8>> def encode() do <<@value::8>> end @doc """ The sign of the input is flipped. ## Examples iex> BitcoinLib.Script.Opcodes.Arithmetic.Negate.execute( ...> %BitcoinLib.Script.Opcodes.Arithmetic.Negate{}, ...> [2, 3, 1] ...> ) {:ok, [-2, 3, 1]} """ @spec execute(%Negate{}, list()) :: {:ok, list()} def execute(%Negate{}, [first] ++ remaining) do {:ok, [-first | remaining]} end end