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