Module: signatures

This module provides functions for validating and handling multisig transaction signatures.

Source:

Methods

(static) signatureNoSighashType(signature) → {string}

This function takes a DER encoded signature and returns it without the SIGHASH_BYTE

Parameters:
Name Type Description
signature string

inputSignature which includes DER encoding bytes and may include SIGHASH byte

Source:
Returns:

signature_no_sighash with sighash_byte removed

Type
string

(static) validateMultisigSignature(network, inputs, outputs, inputIndex, inputSignature) → {string|boolean}

Validate a multisig signature for given input and public key.

Parameters:
Name Type Description
network module:networks.NETWORKS

bitcoin network

inputs Array.<module:inputs.MultisigTransactionInput>

multisig transaction inputs

outputs Array.<module:outputs.TransactionOutput>

transaction outputs

inputIndex number

the index where the input appears in the transaction

inputSignature string

signature to validate

Source:
Returns:

false if invalid or corresponding public key

Type
string | boolean
Example
import {
  generateMultisigFromPublicKeys, TESTNET, P2SH,
  unsignedMultisigTransaction,
  validateMultisigSignature,
} from "unchained-bitcoin";
const pubkey1 = "03a...";
const pubkey2 = "03b...";
const multisig = generateMultisigFromPublicKeys(TESTNET, P2SH, 2, pubkey1, pubkey2);
const inputs = [
  {
    txid: "ae...",
    index: 0,
    multisig,
  },
  // other inputs...
];
const outputs = [
  {
    address: "2N...",
    amountSats: 90000,
  },
  // other outputs...
];
const unsignedTransaction = unsignedMultisigTransaction(TESTNET, inputs, outputs);
// Use unsignedTransaction to obtain a signature.
const transactionSignature = ["304...", // other input signatures...];
// Validate signature for input 0
const result = validateMultisigSignature(TESTNET, inputs, outputs, 0, transactionSignature[0]);
switch (result) {
  case false:
    // signature was invalid
  case pubkey1:
    // signature was valid for pubkey1
  case pubkey2:
    // signature was valid for pubkey2
  default:
    // ...
}

(inner) multisigSignatureBuffer(signature) → {Buffer}

Create a signature buffer that can be passed to ECPair.verify

Parameters:
Name Type Description
signature string

a DER encoded signature string

Source:
Returns:

signatureBuffer - correctly allocated buffer with relevant r, S information from the encoded signature

Type
Buffer

(inner) multisigSignatureHash(network, inputs, outputs, inputIndex) → {Buffer}

Returns the multisig Signature Hash for an input at inputIndex

Parameters:
Name Type Description
network module:networks.NETWORKS

bitcoin network

inputs Array.<module:inputs.MultisigTransactionInput>

multisig transaction inputs

outputs Array.<module:outputs.TransactionOutput>

transaction outputs

inputIndex number

the index where the input appears in the transaction

Source:
Returns:

unsignedTransaction hash in a Buffer for consumption by ECPair.verify

Type
Buffer