@btc-vision/transaction
Version:
OPNet transaction library allows you to create and sign transactions for the OPNet network.
37 lines • 1.38 kB
JavaScript
import { backend } from '../ecc/backend.js';
import { tapTweakHash, toXOnly, } from '@btc-vision/bitcoin';
import {} from '@btc-vision/ecpair';
import { EcKeyPair } from '../keypair/EcKeyPair.js';
/**
* Type guard to check if a Signer is a UniversalSigner (has privateKey).
*/
export function isUniversalSigner(signer) {
return 'privateKey' in signer && signer.privateKey != null;
}
/**
* Class for tweaking signers
* @class TweakedSigner
*/
export class TweakedSigner {
/**
* Tweak a signer
* @param {UniversalSigner} signer - The signer to tweak (must have privateKey)
* @param {TweakSettings} opts - The tweak settings
* @returns {UniversalSigner} - The tweaked signer
*/
static tweakSigner(signer, opts = {}) {
let privateKey = signer.privateKey;
if (!privateKey) {
throw new Error('Private key is required for tweaking signer!');
}
if (signer.publicKey[0] === 3) {
privateKey = backend.privateNegate(privateKey);
}
const tweakedPrivateKey = backend.privateAdd(privateKey, tapTweakHash(toXOnly(signer.publicKey), opts.tweakHash));
if (!tweakedPrivateKey) {
throw new Error('Invalid tweaked private key!');
}
return EcKeyPair.fromPrivateKey(tweakedPrivateKey, opts.network);
}
}
//# sourceMappingURL=TweakedSigner.js.map