defmodule BitcoinLib.Signing.Psbt.Global.UnsignedTx do alias BitcoinLib.Transaction # TODO: document def parse(keypair) do keypair |> validate_keypair() |> decode_transaction() end defp validate_keypair(keypair) do case keypair.key.data do "" -> {:ok, keypair} value -> {:error, "PSBT_GLOBAL_UNSIGNED_TX key shouldn't contain a value (#{inspect(value)})"} end end defp decode_transaction({:error, message}) do {:error, message} end defp decode_transaction({:ok, keypair}) do case Transaction.decode(keypair.value.data) do {:error, message} -> {:error, message} {:ok, unsigned_tx} -> case Transaction.check_if_unsigned(unsigned_tx) do true -> {:ok, unsigned_tx} false -> {:error, "the supposedly unsigned transaction has already been signed"} end end end end