Signature Templates
When a contract function has a sig
parameter, it needs a cryptographic signature from a private key for the spending transaction.
In place of a signature, a SignatureTemplate
can be passed, which will automatically generate the correct signature once the transaction is built.
SignatureTemplate
Constructor
new SignatureTemplate(
signer: Keypair | Uint8Array | string,
hashtype?: HashType,
signatureAlgorithm?: SignatureAlgorithm
)
In place of a signature, a SignatureTemplate
can be passed, which will automatically generate the correct signature using the signer
parameter. This signer can be any representation of a private key, including BCHJS' ECPair
, bitcore-lib-cash' PrivateKey
, WIF strings, or raw private key buffers. This ensures that any BCH library can be used.
Example
const aliceWif = 'L4vmKsStbQaCvaKPnCzdRArZgdAxTqVx8vjMGLW5nHtWdRguiRi1';
const aliceSignatureTemplate = new SignatureTemplate(aliceWif)
const tx = await contract.functions
.transfer(aliceSignatureTemplate)
.to('bitcoincash:qrhea03074073ff3zv9whh0nggxc7k03ssh8jv9mkx', 10000n)
.send()
The hashtype
and signatureAlgorithm
options are covered under 'Advanced Usage'.
Advanced Usage
HashType
The default hashtype
is HashType.SIGHASH_ALL | HashType.SIGHASH_UTXOS
because this is the most secure option for smart contract use cases.
export enum HashType {
SIGHASH_ALL = 0x01,
SIGHASH_NONE = 0x02,
SIGHASH_SINGLE = 0x03,
SIGHASH_UTXOS = 0x20,
SIGHASH_ANYONECANPAY = 0x80,
}
If you're using "old-style" covenants (using CashScript v0.6.0 or lower), you need to configure HashType.SIGHASH_ALL
as the hashtype
parameter for the SignatureTemplate.
Example
const wif = 'L4vmKsStbQaCvaKPnCzdRArZgdAxTqVx8vjMGLW5nHtWdRguiRi1';
const signatureTemplate = new SignatureTemplate(
wif, HashType.SIGHASH_ALL | HashType.SIGHASH_UTXOS
);
SignatureAlgorithm
The signatureAlgorithm
parameter determines the cryptographic algorithm used for signing. By default, the modern and compact Schnorr algorithm is used.
export enum SignatureAlgorithm {
ECDSA = 0x00,
SCHNORR = 0x01,
}
Example
const wif = 'L4vmKsStbQaCvaKPnCzdRArZgdAxTqVx8vjMGLW5nHtWdRguiRi1';
const hashType = HashType.SIGHASH_ALL | HashType.SIGHASH_UTXOS
const signatureAlgorithm = SignatureAlgorithm.SCHNORR
const signatureTemplate = new SignatureTemplate(wif, hashType,signatureAlgorithm);