Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@leather.io/bitcoin

Package Overview
Dependencies
Maintainers
2
Versions
156
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@leather.io/bitcoin - npm Package Compare versions

Comparing version
0.37.4
to
0.37.5
+241
src/signer/bitcoin-payer.ts
import { HARDENED_OFFSET, HDKey } from '@scure/bip32';
import * as btc from '@scure/btc-signer';
import { P2Ret, P2TROut } from '@scure/btc-signer/payment';
import { SigHash } from '@scure/btc-signer/transaction';
import * as bitcoin from 'bitcoinjs-lib';
import {
DerivationPathDepth,
appendAddressIndexToPath,
decomposeDescriptor,
deriveKeychainFromXpub,
extractAddressIndexFromPath,
extractChangeIndexFromPath,
fingerprintAsNumberToHex,
keyOriginToDerivationPath,
} from '@leather.io/crypto';
import type { BitcoinAddress, BitcoinNetworkModes, ValueOf } from '@leather.io/models';
import { signatureHash } from '@leather.io/rpc';
import { hexToNumber } from '@leather.io/utils';
import { getTaprootPaymentFromAddressIndex } from '../payments/p2tr-address-gen';
import { getNativeSegwitPaymentFromAddressIndex } from '../payments/p2wpkh-address-gen';
import {
SupportedPaymentType,
ecdsaPublicKeyToSchnorr,
extractExtendedPublicKeyFromPolicy,
inferPaymentTypeFromPath,
whenSupportedPaymentType,
} from '../utils/bitcoin.utils';
export type AllowedSighashTypes = ValueOf<typeof signatureHash> | SigHash;
export interface BitcoinAccountKeychain {
descriptor: string;
masterKeyFingerprint: string;
keyOrigin: string;
keychain: HDKey;
xpub: string;
}
export type WithDerivePayer<T, P extends BitcoinPayer> = T & {
derivePayer(args: BitcoinPayerInfo): P;
};
export interface BitcoinPayerBase {
paymentType: SupportedPaymentType;
network: BitcoinNetworkModes;
address: BitcoinAddress;
keyOrigin: string;
masterKeyFingerprint: string;
publicKey: Uint8Array;
}
export interface BitcoinNativeSegwitPayer extends BitcoinPayerBase {
paymentType: 'p2wpkh';
payment: P2Ret;
}
export interface BitcoinTaprootPayer extends BitcoinPayerBase {
paymentType: 'p2tr';
payment: P2TROut;
}
export type BitcoinPayer = BitcoinNativeSegwitPayer | BitcoinTaprootPayer;
export function initializeBitcoinAccountKeychainFromDescriptor(
descriptor: string
): BitcoinAccountKeychain {
const { fingerprint, keyOrigin } = decomposeDescriptor(descriptor);
return {
descriptor,
xpub: extractExtendedPublicKeyFromPolicy(descriptor),
keyOrigin,
masterKeyFingerprint: fingerprint,
keychain: deriveKeychainFromXpub(extractExtendedPublicKeyFromPolicy(descriptor)),
};
}
export interface BitcoinPayerInfo {
change: number;
addressIndex: number;
}
export function deriveBitcoinPayerFromAccount(descriptor: string, network: BitcoinNetworkModes) {
const { fingerprint, keyOrigin } = decomposeDescriptor(descriptor);
const accountKeychain = deriveKeychainFromXpub(extractExtendedPublicKeyFromPolicy(descriptor));
const paymentType = inferPaymentTypeFromPath(keyOrigin) as SupportedPaymentType;
if (accountKeychain.depth !== DerivationPathDepth.Account)
throw new Error('Keychain passed is not an account');
return ({ change, addressIndex }: BitcoinPayerInfo) => {
const childKeychain = accountKeychain.deriveChild(change).deriveChild(addressIndex);
const derivePayerFromAccount = whenSupportedPaymentType(paymentType)({
p2tr: getTaprootPaymentFromAddressIndex,
p2wpkh: getNativeSegwitPaymentFromAddressIndex,
});
const payment = derivePayerFromAccount(childKeychain, network);
return {
keyOrigin: appendAddressIndexToPath(keyOrigin, change, addressIndex),
masterKeyFingerprint: fingerprint,
paymentType,
network,
payment,
get address() {
if (!payment.address) throw new Error('Payment address could not be derived');
return payment.address;
},
get publicKey() {
if (!childKeychain.publicKey) throw new Error('Public key could not be derived');
return childKeychain.publicKey;
},
};
};
}
interface BtcSignerDerivationPath {
fingerprint: number;
path: number[];
}
export type BtcSignerDefaultBip32Derivation = [Uint8Array, BtcSignerDerivationPath];
export type BtcSignerTapBip32Derivation = [
Uint8Array,
{ hashes: Uint8Array[]; der: BtcSignerDerivationPath },
];
type BtcSignerBip32Derivation = BtcSignerDefaultBip32Derivation | BtcSignerTapBip32Derivation;
type PayerToBip32DerivationArgs = Pick<
BitcoinPayer,
'masterKeyFingerprint' | 'keyOrigin' | 'publicKey'
>;
/**
* @example
* ```ts
* tx.addInput({
* ...input,
* bip32Derivation: [payerToBip32Derivation(payer)],
* })
* ```
*/
export function payerToBip32Derivation(
args: PayerToBip32DerivationArgs
): BtcSignerDefaultBip32Derivation {
return [
args.publicKey,
{
fingerprint: hexToNumber(args.masterKeyFingerprint),
path: btc.bip32Path(keyOriginToDerivationPath(args.keyOrigin)),
},
];
}
/**
* @example
* ```ts
* tx.addInput({
* ...input,
* tapBip32Derivation: [payerToTapBip32Derivation(payer)],
* })
* ```
*/
export function payerToTapBip32Derivation(
args: PayerToBip32DerivationArgs
): BtcSignerTapBip32Derivation {
return [
// TODO: @kyranjamie to default to schnoor when TR so conversion isn't
// necessary here?
ecdsaPublicKeyToSchnorr(args.publicKey),
{
hashes: [],
der: {
fingerprint: hexToNumber(args.masterKeyFingerprint),
path: btc.bip32Path(keyOriginToDerivationPath(args.keyOrigin)),
},
},
];
}
type PsbtInputBitcoinJsLib = bitcoin.Psbt['data']['inputs']['0'];
type TapBip32DerivationBitcoinJsLib = NonNullable<PsbtInputBitcoinJsLib['tapBip32Derivation']>['0'];
export function payerToTapBip32DerivationBitcoinJsLib(
args: PayerToBip32DerivationArgs
): TapBip32DerivationBitcoinJsLib {
return {
masterFingerprint: Buffer.from(args.masterKeyFingerprint, 'hex'),
path: keyOriginToDerivationPath(args.keyOrigin),
leafHashes: [],
pubkey: Buffer.from(ecdsaPublicKeyToSchnorr(args.publicKey)),
};
}
type Bip32DerivationBitcoinJsLib = NonNullable<PsbtInputBitcoinJsLib['bip32Derivation']>['0'];
export function payerToBip32DerivationBitcoinJsLib(
args: PayerToBip32DerivationArgs
): Bip32DerivationBitcoinJsLib {
return {
masterFingerprint: Buffer.from(args.masterKeyFingerprint, 'hex'),
path: keyOriginToDerivationPath(args.keyOrigin),
pubkey: Buffer.from(args.publicKey),
};
}
export function extractPayerInfoFromDerivationPath(path: string) {
return {
change: extractChangeIndexFromPath(path),
addressIndex: extractAddressIndexFromPath(path),
};
}
/**
* @description
* Turns key format from @scure/btc-signer lib back into key origin string
* @example
* ```ts
* const [inputOne] = getPsbtTxInputs(tx);
* const keyOrigin = serializeKeyOrigin(inputOne.bip32Derivation[0][1]);
* ```
*/
export function serializeKeyOrigin({ fingerprint, path }: BtcSignerDerivationPath) {
const values = path.map(num => (num >= HARDENED_OFFSET ? num - HARDENED_OFFSET + "'" : num));
return `${fingerprintAsNumberToHex(fingerprint)}/${values.join('/')}`;
}
/**
* @description
* Of a given set of a `tx.input`s bip32 derivation paths from
* `@scure/btc-signer`, serialize the paths back to the string format used
* internally
*/
export function extractRequiredKeyOrigins(derivation: BtcSignerBip32Derivation[]) {
return derivation.map(([_pubkey, path]) =>
serializeKeyOrigin('hashes' in path ? path.der : path)
);
}
+7
-7
> @leather.io/bitcoin@0.37.4 build /home/runner/work/mono/mono/packages/bitcoin
> @leather.io/bitcoin@0.37.5 build /home/runner/work/mono/mono/packages/bitcoin
> tsdown

@@ -10,7 +10,7 @@

ℹ Build start
ℹ dist/index.js  58.24 kB │ gzip: 13.65 kB
ℹ dist/index.js.map 117.86 kB │ gzip: 27.60 kB
ℹ dist/index.d.ts.map  11.65 kB │ gzip: 4.75 kB
ℹ dist/index.d.ts  33.54 kB │ gzip: 6.96 kB
ℹ 4 files, total: 221.29 kB
✔ Build complete in 3849ms
ℹ dist/index.js  57.43 kB │ gzip: 13.44 kB
ℹ dist/index.js.map 115.81 kB │ gzip: 27.07 kB
ℹ dist/index.d.ts.map  11.12 kB │ gzip: 4.51 kB
ℹ dist/index.d.ts  32.80 kB │ gzip: 6.80 kB
ℹ 4 files, total: 217.16 kB
✔ Build complete in 4189ms

@@ -321,3 +321,3 @@ import { Bip21Options } from "bip21";

//#endregion
//#region src/signer/bitcoin-signer.d.ts
//#region src/signer/bitcoin-payer.d.ts
type AllowedSighashTypes = ValueOf<typeof signatureHash> | SigHash;

@@ -331,15 +331,5 @@ interface BitcoinAccountKeychain {

}
type WithDerivePayer<T, P> = T & {
type WithDerivePayer<T, P extends BitcoinPayer> = T & {
derivePayer(args: BitcoinPayerInfo): P;
};
interface BitcoinSigner<Payment> {
network: BitcoinNetworkModes;
payment: Payment;
keychain: HDKey;
derivationPath: string;
address: BitcoinAddress;
publicKey: Uint8Array;
sign(tx: btc.Transaction): void;
signIndex(tx: btc.Transaction, index: number, allowedSighash?: AllowedSighashTypes[]): void;
}
interface BitcoinPayerBase {

@@ -458,3 +448,2 @@ paymentType: SupportedPaymentType;

}
declare function initBitcoinAccount(derivationPath: string, policy: string): BitcoinAccount;
/**

@@ -516,5 +505,2 @@ * Represents a map of `BitcoinNetworkModes` to `NetworkModes`. While Bitcoin

declare function getInputPaymentType(input: TransactionInput, network: BitcoinNetworkModes): BitcoinPaymentTypes;
declare function lookUpLedgerKeysByPath(getDerivationPath: (network: BitcoinNetworkModes, accountIndex: number) => string): (ledgerKeyMap: Record<string, {
policy: string;
} | undefined>, network: BitcoinNetworkModes) => (accountIndex: number) => BitcoinAccount | undefined;
interface GetAddressArgs {

@@ -548,5 +534,5 @@ changeIndex: number;

declare function getBitcoinInputValue(input: TransactionInput): number;
declare function isNativeSegwitDerivationPath(path: string): boolean;
declare function isTaprootDerivationPath(path: string): boolean;
declare function isNativeSegwitDerivationPath(path: string): boolean;
declare function isP2TROut(signer: BitcoinSigner<P2Ret | P2TROut> | null): signer is BitcoinSigner<P2TROut>;
declare function isTaprootPayer(payer: BitcoinPayer | null): payer is BitcoinTaprootPayer;
//#endregion

@@ -831,3 +817,3 @@ //#region src/payments/p2tr-address-gen.d.ts

//#endregion
export { AllowedSighashTypes, BitcoinAccount, BitcoinAccountKeychain, BitcoinError, BitcoinErrorKey, BitcoinFees, BitcoinNativeSegwitPayer, BitcoinPayer, BitcoinPayerBase, BitcoinPayerInfo, BitcoinSigner, BitcoinTaprootPayer, BtcSignerDefaultBip32Derivation, BtcSignerLibPaymentTypeIdentifers, BtcSignerNetwork, BtcSignerTapBip32Derivation, BtcSizeFeeEstimator, CalculateMaxSpendResponse, CoinSelectionOutput, CoinSelectionRecipient, DeriveAddressesFromDescriptorArgs, DeriveAddressesFromDescriptorResult, DetermineUtxosForSpendArgs, GenerateBitcoinUnsignedTransactionArgs, GetBitcoinFeesArgs, InputData, InputScriptType, MixedInputTxSizerParams, PaymentTypeMap, PsbtInput, PsbtOutput, PsbtOutputWithAddress, RawPsbt, SupportedPaymentType, SupportedPaymentTypeMap, TEST_ACCOUNT_1_NATIVE_SEGWIT_ADDRESS, TEST_ACCOUNT_1_TAPROOT_ADDRESS, TEST_ACCOUNT_2_TAPROOT_ADDRESS, TEST_TESNET_ACCOUNT_1_NATIVE_SEGWIT_ADDRESS, TEST_TESTNET_ACCOUNT_2_BTC_ADDRESS, TEST_TESTNET_ACCOUNT_2_TAPROOT_ADDRESS, TxSizerParams, WithDerivePayer, bip21, bip322TransactionToSignValues, bitcoinNetworkModeToCoreNetworkMode, bitcoinNetworkToCoreNetworkMap, btcAddressNetworkValidator, btcAddressValidator, btcSignerLibPaymentTypeToPaymentTypeMap, calculateMaxSpend, coinTypeMap, countInputsByScriptType, createBitcoinAddress, createNativeSegwitBitcoinJsSigner, createTaprootBitcoinJsSigner, createToSpendTx, createWalletIdDecoratedPath, decodeBitcoinTx, decodeCompressedWifPrivateKey, deconstructBtcAddress, deriveAddressIndexKeychainFromAccount, deriveAddressIndexZeroFromAccount, deriveAddressesFromDescriptor, deriveBitcoinPayerFromAccount, deriveBtcBip49SeedFromMnemonic, deriveNativeSegwitAccountFromRootKeychain, deriveNativeSegwitReceiveAddressIndexZero, deriveRootBtcKeychain, deriveTaprootAccount, deriveTaprootReceiveAddressIndexZero, determineUtxosForSpend, determineUtxosForSpendAll, ecPairFromPrivateKey, ecdsaPublicKeyLength, ecdsaPublicKeyToSchnorr, encodeMessageWitnessData, extractExtendedPublicKeyFromPolicy, extractPayerInfoFromDerivationPath, extractRequiredKeyOrigins, extractXpubFromDescriptor, filterUneconomicalUtxos, generateBitcoinUnsignedTransaction, getAddressFromOutScript, getBitcoinAddressNetworkType, getBitcoinCoinTypeIndexByNetwork, getBitcoinFees, getBitcoinInputAddress, getBitcoinInputValue, getBitcoinJsLibNetworkConfigByMode, getBitcoinTransactionFee, getBtcSignerLibNetworkConfigByMode, getDescriptorFromKeychain, getHdKeyVersionsFromNetwork, getInputPaymentType, getNativeSegwitAccountDerivationPath, getNativeSegwitAddress, getNativeSegwitAddressIndexDerivationPath, getNativeSegwitPaymentFromAddressIndex, getNetworkTypeFromAddress, getParsedInputs, getParsedOutputs, getPsbtAsTransaction, getPsbtDetails, getPsbtTotals, getPsbtTxInputs, getPsbtTxOutputs, getRawPsbt, getSizeInfo, getSpendableAmount, getTaprootAccountDerivationPath, getTaprootAddress, getTaprootAddressIndexDerivationPath, getTaprootPayment, getTaprootPaymentFromAddressIndex, getUtxoTotal, hashBip322Message, inValidCharactersAddress, inValidLengthAddress, inferNetworkFromAddress, inferNetworkFromPath, inferPaymentTypeFromAddress, inferPaymentTypeFromDescriptor, inferPaymentTypeFromPath, initBitcoinAccount, initializeBitcoinAccountKeychainFromDescriptor, invalidAddress, isBitcoinAddress, isBtcBalanceSufficient, isBtcMinimumSpend, isBtcSignerLibPaymentType, isNativeSegwitDerivationPath, isP2TROut, isSupportedMessageSigningPaymentType, isTaprootDerivationPath, isValidBitcoinAddress, isValidBitcoinNetworkAddress, legacyAddress, lookUpLedgerKeysByPath, lookupDerivationByAddress, makeNativeSegwitAccountDerivationPath, makeNativeSegwitAddressIndexDerivationPath, makePayToScriptHashAddress, makePayToScriptHashAddressBytes, makePayToScriptHashKeyHash, makeTaprootAccountDerivationPath, makeTaprootAddressIndexDerivationPath, mnemonicToRootNode, nonEmptyStringValidator, parseKnownPaymentType, payToScriptHashTestnetPrefix, payerToBip32Derivation, payerToBip32DerivationBitcoinJsLib, payerToTapBip32Derivation, payerToTapBip32DerivationBitcoinJsLib, paymentTypeMap, publicKeyToPayToScriptHashAddress, recipientAddress, segwitAddress, serializeKeyOrigin, signBip322MessageSimple, taprootAddress, toXOnly, tweakSigner, whenBitcoinNetwork, whenPaymentType, whenSupportedPaymentType };
export { AllowedSighashTypes, BitcoinAccount, BitcoinAccountKeychain, BitcoinError, BitcoinErrorKey, BitcoinFees, BitcoinNativeSegwitPayer, BitcoinPayer, BitcoinPayerBase, BitcoinPayerInfo, BitcoinTaprootPayer, BtcSignerDefaultBip32Derivation, BtcSignerLibPaymentTypeIdentifers, BtcSignerNetwork, BtcSignerTapBip32Derivation, BtcSizeFeeEstimator, CalculateMaxSpendResponse, CoinSelectionOutput, CoinSelectionRecipient, DeriveAddressesFromDescriptorArgs, DeriveAddressesFromDescriptorResult, DetermineUtxosForSpendArgs, GenerateBitcoinUnsignedTransactionArgs, GetBitcoinFeesArgs, InputData, InputScriptType, MixedInputTxSizerParams, PaymentTypeMap, PsbtInput, PsbtOutput, PsbtOutputWithAddress, RawPsbt, SupportedPaymentType, SupportedPaymentTypeMap, TEST_ACCOUNT_1_NATIVE_SEGWIT_ADDRESS, TEST_ACCOUNT_1_TAPROOT_ADDRESS, TEST_ACCOUNT_2_TAPROOT_ADDRESS, TEST_TESNET_ACCOUNT_1_NATIVE_SEGWIT_ADDRESS, TEST_TESTNET_ACCOUNT_2_BTC_ADDRESS, TEST_TESTNET_ACCOUNT_2_TAPROOT_ADDRESS, TxSizerParams, WithDerivePayer, bip21, bip322TransactionToSignValues, bitcoinNetworkModeToCoreNetworkMode, bitcoinNetworkToCoreNetworkMap, btcAddressNetworkValidator, btcAddressValidator, btcSignerLibPaymentTypeToPaymentTypeMap, calculateMaxSpend, coinTypeMap, countInputsByScriptType, createBitcoinAddress, createNativeSegwitBitcoinJsSigner, createTaprootBitcoinJsSigner, createToSpendTx, createWalletIdDecoratedPath, decodeBitcoinTx, decodeCompressedWifPrivateKey, deconstructBtcAddress, deriveAddressIndexKeychainFromAccount, deriveAddressIndexZeroFromAccount, deriveAddressesFromDescriptor, deriveBitcoinPayerFromAccount, deriveBtcBip49SeedFromMnemonic, deriveNativeSegwitAccountFromRootKeychain, deriveNativeSegwitReceiveAddressIndexZero, deriveRootBtcKeychain, deriveTaprootAccount, deriveTaprootReceiveAddressIndexZero, determineUtxosForSpend, determineUtxosForSpendAll, ecPairFromPrivateKey, ecdsaPublicKeyLength, ecdsaPublicKeyToSchnorr, encodeMessageWitnessData, extractExtendedPublicKeyFromPolicy, extractPayerInfoFromDerivationPath, extractRequiredKeyOrigins, extractXpubFromDescriptor, filterUneconomicalUtxos, generateBitcoinUnsignedTransaction, getAddressFromOutScript, getBitcoinAddressNetworkType, getBitcoinCoinTypeIndexByNetwork, getBitcoinFees, getBitcoinInputAddress, getBitcoinInputValue, getBitcoinJsLibNetworkConfigByMode, getBitcoinTransactionFee, getBtcSignerLibNetworkConfigByMode, getDescriptorFromKeychain, getHdKeyVersionsFromNetwork, getInputPaymentType, getNativeSegwitAccountDerivationPath, getNativeSegwitAddress, getNativeSegwitAddressIndexDerivationPath, getNativeSegwitPaymentFromAddressIndex, getNetworkTypeFromAddress, getParsedInputs, getParsedOutputs, getPsbtAsTransaction, getPsbtDetails, getPsbtTotals, getPsbtTxInputs, getPsbtTxOutputs, getRawPsbt, getSizeInfo, getSpendableAmount, getTaprootAccountDerivationPath, getTaprootAddress, getTaprootAddressIndexDerivationPath, getTaprootPayment, getTaprootPaymentFromAddressIndex, getUtxoTotal, hashBip322Message, inValidCharactersAddress, inValidLengthAddress, inferNetworkFromAddress, inferNetworkFromPath, inferPaymentTypeFromAddress, inferPaymentTypeFromDescriptor, inferPaymentTypeFromPath, initializeBitcoinAccountKeychainFromDescriptor, invalidAddress, isBitcoinAddress, isBtcBalanceSufficient, isBtcMinimumSpend, isBtcSignerLibPaymentType, isNativeSegwitDerivationPath, isSupportedMessageSigningPaymentType, isTaprootDerivationPath, isTaprootPayer, isValidBitcoinAddress, isValidBitcoinNetworkAddress, legacyAddress, lookupDerivationByAddress, makeNativeSegwitAccountDerivationPath, makeNativeSegwitAddressIndexDerivationPath, makePayToScriptHashAddress, makePayToScriptHashAddressBytes, makePayToScriptHashKeyHash, makeTaprootAccountDerivationPath, makeTaprootAddressIndexDerivationPath, mnemonicToRootNode, nonEmptyStringValidator, parseKnownPaymentType, payToScriptHashTestnetPrefix, payerToBip32Derivation, payerToBip32DerivationBitcoinJsLib, payerToTapBip32Derivation, payerToTapBip32DerivationBitcoinJsLib, paymentTypeMap, publicKeyToPayToScriptHashAddress, recipientAddress, segwitAddress, serializeKeyOrigin, signBip322MessageSimple, taprootAddress, toXOnly, tweakSigner, whenBitcoinNetwork, whenPaymentType, whenSupportedPaymentType };
//# sourceMappingURL=index.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","names":[],"sources":["../src/bip21/bip21.ts","../src/bip322/bip322-utils.ts","../src/bip322/sign-message-bip322-bitcoinjs.ts","../src/coin-selection/coin-selection.ts","../src/coin-selection/coin-selection.utils.ts","../src/coin-selection/calculate-max-spend.ts","../src/fees/bitcoin-fees.ts","../src/fees/btc-size-fee-estimator.ts","../src/mocks/mocks.ts","../src/schemas/address-schema.ts","../src/signer/bitcoin-signer.ts","../src/utils/bitcoin.network.ts","../src/utils/bitcoin.utils.ts","../src/payments/p2tr-address-gen.ts","../src/payments/p2wpkh-address-gen.ts","../src/payments/p2wsh-p2sh-address-gen.ts","../src/psbt/psbt-inputs.ts","../src/psbt/psbt-outputs.ts","../src/psbt/psbt-totals.ts","../src/psbt/psbt-details.ts","../src/psbt/utils.ts","../src/transactions/generate-unsigned-transaction.ts","../src/validation/address-validation.ts","../src/validation/amount-validation.ts","../src/validation/bitcoin-address.ts","../src/validation/bitcoin-error.ts","../src/utils/bitcoin.descriptors.ts","../src/utils/lookup-derivation-by-address.ts","../src/utils/deconstruct-btc-address.ts"],"sourcesContent":[],"mappings":"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"}
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/bip21/bip21.ts","../src/bip322/bip322-utils.ts","../src/bip322/sign-message-bip322-bitcoinjs.ts","../src/coin-selection/coin-selection.ts","../src/coin-selection/coin-selection.utils.ts","../src/coin-selection/calculate-max-spend.ts","../src/fees/bitcoin-fees.ts","../src/fees/btc-size-fee-estimator.ts","../src/mocks/mocks.ts","../src/schemas/address-schema.ts","../src/signer/bitcoin-payer.ts","../src/utils/bitcoin.network.ts","../src/utils/bitcoin.utils.ts","../src/payments/p2tr-address-gen.ts","../src/payments/p2wpkh-address-gen.ts","../src/payments/p2wsh-p2sh-address-gen.ts","../src/psbt/psbt-inputs.ts","../src/psbt/psbt-outputs.ts","../src/psbt/psbt-totals.ts","../src/psbt/psbt-details.ts","../src/psbt/utils.ts","../src/transactions/generate-unsigned-transaction.ts","../src/validation/address-validation.ts","../src/validation/amount-validation.ts","../src/validation/bitcoin-address.ts","../src/validation/bitcoin-error.ts","../src/utils/bitcoin.descriptors.ts","../src/utils/lookup-derivation-by-address.ts","../src/utils/deconstruct-btc-address.ts"],"sourcesContent":[],"mappings":"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"}
import { decode, encode } from "bip21";
import { assertUnreachable, createCounter, createMoney, defaultWalletKeyId, hexToNumber, isDefined, isEmptyString, isError, isString, isUndefined, satToBtc, subtractMoney, sumMoney, sumNumbers, whenNetwork } from "@leather.io/utils";
import { assertUnreachable, createCounter, createMoney, hexToNumber, isDefined, isEmptyString, isError, isString, isUndefined, satToBtc, subtractMoney, sumMoney, sumNumbers, whenNetwork } from "@leather.io/utils";
import ecc from "@bitcoinerlab/secp256k1";

@@ -12,3 +12,3 @@ import { sha256 } from "@noble/hashes/sha256";

import * as btc from "@scure/btc-signer";
import { DerivationPathDepth, appendAddressIndexToPath, decomposeDescriptor, deriveBip39SeedFromMnemonic, deriveKeychainFromXpub, deriveRootBip32Keychain, extractAccountIndexFromPath, extractAddressIndexFromPath, extractChangeIndexFromPath, extractPurposeFromPath, fingerprintAsNumberToHex, keyOriginToDerivationPath } from "@leather.io/crypto";
import { DerivationPathDepth, appendAddressIndexToPath, decomposeDescriptor, deriveBip39SeedFromMnemonic, deriveKeychainFromXpub, deriveRootBip32Keychain, extractAddressIndexFromPath, extractChangeIndexFromPath, extractPurposeFromPath, fingerprintAsNumberToHex, keyOriginToDerivationPath } from "@leather.io/crypto";
import validate$1, { AddressType, Network, getAddressInfo, validate } from "bitcoin-address-validation";

@@ -204,13 +204,2 @@ import { base58check, base64 } from "@scure/base";

//#region src/utils/bitcoin.utils.ts
function initBitcoinAccount(derivationPath, policy) {
const xpub = extractExtendedPublicKeyFromPolicy(policy);
const network = inferNetworkFromPath(derivationPath);
return {
keychain: HDKey.fromExtendedKey(xpub, getHdKeyVersionsFromNetwork(network)),
network,
derivationPath,
type: inferPaymentTypeFromPath(derivationPath),
accountIndex: extractAccountIndexFromPath(derivationPath)
};
}
/**

@@ -357,10 +346,2 @@ * Represents a map of `BitcoinNetworkModes` to `NetworkModes`. While Bitcoin

}
function lookUpLedgerKeysByPath(getDerivationPath) {
return (ledgerKeyMap, network) => (accountIndex) => {
const path = getDerivationPath(network, accountIndex);
const account = ledgerKeyMap[path.replace("m", defaultWalletKeyId)];
if (!account) return;
return initBitcoinAccount(path, account.policy);
};
}
function getTaprootAddress({ changeIndex, addressIndex, keychain, network }) {

@@ -430,11 +411,11 @@ if (!keychain) throw new Error("Expected keychain to be provided");

}
function isNativeSegwitDerivationPath(path) {
return extractPurposeFromPath(path) === 84;
}
function isTaprootDerivationPath(path) {
return extractPurposeFromPath(path) === 86;
}
function isNativeSegwitDerivationPath(path) {
return extractPurposeFromPath(path) === 84;
function isTaprootPayer(payer) {
return !!payer && isTaprootDerivationPath(payer.keyOrigin);
}
function isP2TROut(signer) {
return !!signer && isTaprootDerivationPath(signer.derivationPath);
}

@@ -1173,3 +1154,3 @@ //#endregion

//#endregion
//#region src/signer/bitcoin-signer.ts
//#region src/signer/bitcoin-payer.ts
function initializeBitcoinAccountKeychainFromDescriptor(descriptor) {

@@ -1488,3 +1469,3 @@ const { fingerprint, keyOrigin } = decomposeDescriptor(descriptor);

//#endregion
export { BitcoinError, BtcSizeFeeEstimator, TEST_ACCOUNT_1_NATIVE_SEGWIT_ADDRESS, TEST_ACCOUNT_1_TAPROOT_ADDRESS, TEST_ACCOUNT_2_TAPROOT_ADDRESS, TEST_TESNET_ACCOUNT_1_NATIVE_SEGWIT_ADDRESS, TEST_TESTNET_ACCOUNT_2_BTC_ADDRESS, TEST_TESTNET_ACCOUNT_2_TAPROOT_ADDRESS, bip21, bip322TransactionToSignValues, bitcoinNetworkModeToCoreNetworkMode, bitcoinNetworkToCoreNetworkMap, btcAddressNetworkValidator, btcAddressValidator, btcSignerLibPaymentTypeToPaymentTypeMap, calculateMaxSpend, coinTypeMap, countInputsByScriptType, createBitcoinAddress, createNativeSegwitBitcoinJsSigner, createTaprootBitcoinJsSigner, createToSpendTx, createWalletIdDecoratedPath, decodeBitcoinTx, decodeCompressedWifPrivateKey, deconstructBtcAddress, deriveAddressIndexKeychainFromAccount, deriveAddressIndexZeroFromAccount, deriveAddressesFromDescriptor, deriveBitcoinPayerFromAccount, deriveBtcBip49SeedFromMnemonic, deriveNativeSegwitAccountFromRootKeychain, deriveNativeSegwitReceiveAddressIndexZero, deriveRootBtcKeychain, deriveTaprootAccount, deriveTaprootReceiveAddressIndexZero, determineUtxosForSpend, determineUtxosForSpendAll, ecPairFromPrivateKey, ecdsaPublicKeyLength, ecdsaPublicKeyToSchnorr, encodeMessageWitnessData, extractExtendedPublicKeyFromPolicy, extractPayerInfoFromDerivationPath, extractRequiredKeyOrigins, extractXpubFromDescriptor, filterUneconomicalUtxos, generateBitcoinUnsignedTransaction, getAddressFromOutScript, getBitcoinAddressNetworkType, getBitcoinCoinTypeIndexByNetwork, getBitcoinFees, getBitcoinInputAddress, getBitcoinInputValue, getBitcoinJsLibNetworkConfigByMode, getBitcoinTransactionFee, getBtcSignerLibNetworkConfigByMode, getDescriptorFromKeychain, getHdKeyVersionsFromNetwork, getInputPaymentType, getNativeSegwitAccountDerivationPath, getNativeSegwitAddress, getNativeSegwitAddressIndexDerivationPath, getNativeSegwitPaymentFromAddressIndex, getNetworkTypeFromAddress, getParsedInputs, getParsedOutputs, getPsbtAsTransaction, getPsbtDetails, getPsbtTotals, getPsbtTxInputs, getPsbtTxOutputs, getRawPsbt, getSizeInfo, getSpendableAmount, getTaprootAccountDerivationPath, getTaprootAddress, getTaprootAddressIndexDerivationPath, getTaprootPayment, getTaprootPaymentFromAddressIndex, getUtxoTotal, hashBip322Message, inValidCharactersAddress, inValidLengthAddress, inferNetworkFromAddress, inferNetworkFromPath, inferPaymentTypeFromAddress, inferPaymentTypeFromDescriptor, inferPaymentTypeFromPath, initBitcoinAccount, initializeBitcoinAccountKeychainFromDescriptor, invalidAddress, isBitcoinAddress, isBtcBalanceSufficient, isBtcMinimumSpend, isBtcSignerLibPaymentType, isNativeSegwitDerivationPath, isP2TROut, isSupportedMessageSigningPaymentType, isTaprootDerivationPath, isValidBitcoinAddress, isValidBitcoinNetworkAddress, legacyAddress, lookUpLedgerKeysByPath, lookupDerivationByAddress, makeNativeSegwitAccountDerivationPath, makeNativeSegwitAddressIndexDerivationPath, makePayToScriptHashAddress, makePayToScriptHashAddressBytes, makePayToScriptHashKeyHash, makeTaprootAccountDerivationPath, makeTaprootAddressIndexDerivationPath, mnemonicToRootNode, nonEmptyStringValidator, parseKnownPaymentType, payToScriptHashTestnetPrefix, payerToBip32Derivation, payerToBip32DerivationBitcoinJsLib, payerToTapBip32Derivation, payerToTapBip32DerivationBitcoinJsLib, paymentTypeMap, publicKeyToPayToScriptHashAddress, recipientAddress, segwitAddress, serializeKeyOrigin, signBip322MessageSimple, taprootAddress, toXOnly, tweakSigner, whenBitcoinNetwork, whenPaymentType, whenSupportedPaymentType };
export { BitcoinError, BtcSizeFeeEstimator, TEST_ACCOUNT_1_NATIVE_SEGWIT_ADDRESS, TEST_ACCOUNT_1_TAPROOT_ADDRESS, TEST_ACCOUNT_2_TAPROOT_ADDRESS, TEST_TESNET_ACCOUNT_1_NATIVE_SEGWIT_ADDRESS, TEST_TESTNET_ACCOUNT_2_BTC_ADDRESS, TEST_TESTNET_ACCOUNT_2_TAPROOT_ADDRESS, bip21, bip322TransactionToSignValues, bitcoinNetworkModeToCoreNetworkMode, bitcoinNetworkToCoreNetworkMap, btcAddressNetworkValidator, btcAddressValidator, btcSignerLibPaymentTypeToPaymentTypeMap, calculateMaxSpend, coinTypeMap, countInputsByScriptType, createBitcoinAddress, createNativeSegwitBitcoinJsSigner, createTaprootBitcoinJsSigner, createToSpendTx, createWalletIdDecoratedPath, decodeBitcoinTx, decodeCompressedWifPrivateKey, deconstructBtcAddress, deriveAddressIndexKeychainFromAccount, deriveAddressIndexZeroFromAccount, deriveAddressesFromDescriptor, deriveBitcoinPayerFromAccount, deriveBtcBip49SeedFromMnemonic, deriveNativeSegwitAccountFromRootKeychain, deriveNativeSegwitReceiveAddressIndexZero, deriveRootBtcKeychain, deriveTaprootAccount, deriveTaprootReceiveAddressIndexZero, determineUtxosForSpend, determineUtxosForSpendAll, ecPairFromPrivateKey, ecdsaPublicKeyLength, ecdsaPublicKeyToSchnorr, encodeMessageWitnessData, extractExtendedPublicKeyFromPolicy, extractPayerInfoFromDerivationPath, extractRequiredKeyOrigins, extractXpubFromDescriptor, filterUneconomicalUtxos, generateBitcoinUnsignedTransaction, getAddressFromOutScript, getBitcoinAddressNetworkType, getBitcoinCoinTypeIndexByNetwork, getBitcoinFees, getBitcoinInputAddress, getBitcoinInputValue, getBitcoinJsLibNetworkConfigByMode, getBitcoinTransactionFee, getBtcSignerLibNetworkConfigByMode, getDescriptorFromKeychain, getHdKeyVersionsFromNetwork, getInputPaymentType, getNativeSegwitAccountDerivationPath, getNativeSegwitAddress, getNativeSegwitAddressIndexDerivationPath, getNativeSegwitPaymentFromAddressIndex, getNetworkTypeFromAddress, getParsedInputs, getParsedOutputs, getPsbtAsTransaction, getPsbtDetails, getPsbtTotals, getPsbtTxInputs, getPsbtTxOutputs, getRawPsbt, getSizeInfo, getSpendableAmount, getTaprootAccountDerivationPath, getTaprootAddress, getTaprootAddressIndexDerivationPath, getTaprootPayment, getTaprootPaymentFromAddressIndex, getUtxoTotal, hashBip322Message, inValidCharactersAddress, inValidLengthAddress, inferNetworkFromAddress, inferNetworkFromPath, inferPaymentTypeFromAddress, inferPaymentTypeFromDescriptor, inferPaymentTypeFromPath, initializeBitcoinAccountKeychainFromDescriptor, invalidAddress, isBitcoinAddress, isBtcBalanceSufficient, isBtcMinimumSpend, isBtcSignerLibPaymentType, isNativeSegwitDerivationPath, isSupportedMessageSigningPaymentType, isTaprootDerivationPath, isTaprootPayer, isValidBitcoinAddress, isValidBitcoinNetworkAddress, legacyAddress, lookupDerivationByAddress, makeNativeSegwitAccountDerivationPath, makeNativeSegwitAddressIndexDerivationPath, makePayToScriptHashAddress, makePayToScriptHashAddressBytes, makePayToScriptHashKeyHash, makeTaprootAccountDerivationPath, makeTaprootAddressIndexDerivationPath, mnemonicToRootNode, nonEmptyStringValidator, parseKnownPaymentType, payToScriptHashTestnetPrefix, payerToBip32Derivation, payerToBip32DerivationBitcoinJsLib, payerToTapBip32Derivation, payerToTapBip32DerivationBitcoinJsLib, paymentTypeMap, publicKeyToPayToScriptHashAddress, recipientAddress, segwitAddress, serializeKeyOrigin, signBip322MessageSimple, taprootAddress, toXOnly, tweakSigner, whenBitcoinNetwork, whenPaymentType, whenSupportedPaymentType };
//# sourceMappingURL=index.js.map

@@ -5,3 +5,3 @@ {

"description": "Shared bitcoin utilities",
"version": "0.37.4",
"version": "0.37.5",
"license": "MIT",

@@ -36,6 +36,6 @@ "homepage": "https://github.com/leather.io/mono/tree/dev/packages/bitcoin",

"zod": "4.0.17",
"@leather.io/constants": "0.35.0",
"@leather.io/crypto": "1.12.21",
"@leather.io/models": "0.55.0",
"@leather.io/utils": "0.51.2"
"@leather.io/crypto": "1.12.22",
"@leather.io/constants": "0.35.1",
"@leather.io/models": "0.56.0",
"@leather.io/utils": "0.51.3"
},

@@ -49,3 +49,3 @@ "devDependencies": {

"@leather.io/prettier-config": "0.9.0",
"@leather.io/rpc": "2.21.15",
"@leather.io/rpc": "2.21.16",
"@leather.io/test-config": "0.1.3",

@@ -52,0 +52,0 @@ "@leather.io/tsconfig-config": "0.11.1"

@@ -26,3 +26,3 @@ export * from './bip21/bip21';

export * from './signer/bitcoin-signer';
export * from './signer/bitcoin-payer';

@@ -29,0 +29,0 @@ export * from './transactions/generate-unsigned-transaction';

@@ -1,2 +0,2 @@

import { serializeKeyOrigin } from './bitcoin-signer';
import { serializeKeyOrigin } from './bitcoin-payer';

@@ -3,0 +3,0 @@ describe(serializeKeyOrigin.name, () => {

@@ -14,3 +14,3 @@ import * as btc from '@scure/btc-signer';

payerToTapBip32Derivation,
} from '../signer/bitcoin-signer';
} from '../signer/bitcoin-payer';
import { BtcSignerNetwork } from '../utils/bitcoin.network';

@@ -17,0 +17,0 @@ import { BitcoinError } from '../validation/bitcoin-error';

@@ -5,14 +5,9 @@ import { hexToBytes } from '@noble/hashes/utils';

import * as btc from '@scure/btc-signer';
import type { P2Ret, P2TROut } from '@scure/btc-signer/payment';
import { TransactionInput, TransactionOutput } from '@scure/btc-signer/psbt';
import type { BitcoinSigner } from 'signer/bitcoin-signer';
import type { BitcoinPayer, BitcoinTaprootPayer } from 'signer/bitcoin-payer';
import {
DerivationPathDepth,
extractAccountIndexFromPath,
extractPurposeFromPath,
} from '@leather.io/crypto';
import { DerivationPathDepth, extractPurposeFromPath } from '@leather.io/crypto';
import { BitcoinAddress, BitcoinNetworkModes, NetworkModes } from '@leather.io/models';
import type { BitcoinPaymentTypes } from '@leather.io/rpc';
import { defaultWalletKeyId, isDefined, whenNetwork } from '@leather.io/utils';
import { isDefined, whenNetwork } from '@leather.io/utils';

@@ -31,13 +26,2 @@ import { getTaprootPayment } from '../payments/p2tr-address-gen';

}
export function initBitcoinAccount(derivationPath: string, policy: string): BitcoinAccount {
const xpub = extractExtendedPublicKeyFromPolicy(policy);
const network = inferNetworkFromPath(derivationPath);
return {
keychain: HDKey.fromExtendedKey(xpub, getHdKeyVersionsFromNetwork(network)),
network,
derivationPath,
type: inferPaymentTypeFromPath(derivationPath),
accountIndex: extractAccountIndexFromPath(derivationPath),
};
}

@@ -260,20 +244,2 @@ /**

// Ledger wallets are keyed by their derivation path. To reuse the look up logic
// between payment types, this factory fn accepts a fn that generates the path
export function lookUpLedgerKeysByPath(
getDerivationPath: (network: BitcoinNetworkModes, accountIndex: number) => string
) {
return (
ledgerKeyMap: Record<string, { policy: string } | undefined>,
network: BitcoinNetworkModes
) =>
(accountIndex: number) => {
const path = getDerivationPath(network, accountIndex);
// Single wallet mode, hardcoded default walletId
const account = ledgerKeyMap[path.replace('m', defaultWalletKeyId)];
if (!account) return;
return initBitcoinAccount(path, account.policy);
};
}
interface GetAddressArgs {

@@ -389,2 +355,6 @@ changeIndex: number;

export function isNativeSegwitDerivationPath(path: string) {
return extractPurposeFromPath(path) === 84;
}
export function isTaprootDerivationPath(path: string) {

@@ -394,10 +364,4 @@ return extractPurposeFromPath(path) === 86;

export function isNativeSegwitDerivationPath(path: string) {
return extractPurposeFromPath(path) === 84;
export function isTaprootPayer(payer: BitcoinPayer | null): payer is BitcoinTaprootPayer {
return !!payer && isTaprootDerivationPath(payer.keyOrigin);
}
export function isP2TROut(
signer: BitcoinSigner<P2Ret | P2TROut> | null
): signer is BitcoinSigner<P2TROut> {
return !!signer && isTaprootDerivationPath(signer.derivationPath);
}
import { HARDENED_OFFSET, HDKey } from '@scure/bip32';
import * as btc from '@scure/btc-signer';
import { P2Ret, P2TROut } from '@scure/btc-signer/payment';
import { SigHash } from '@scure/btc-signer/transaction';
import * as bitcoin from 'bitcoinjs-lib';
import {
DerivationPathDepth,
appendAddressIndexToPath,
decomposeDescriptor,
deriveKeychainFromXpub,
extractAddressIndexFromPath,
extractChangeIndexFromPath,
fingerprintAsNumberToHex,
keyOriginToDerivationPath,
} from '@leather.io/crypto';
import type { BitcoinAddress, BitcoinNetworkModes, ValueOf } from '@leather.io/models';
import { signatureHash } from '@leather.io/rpc';
import { hexToNumber } from '@leather.io/utils';
import { getTaprootPaymentFromAddressIndex } from '../payments/p2tr-address-gen';
import { getNativeSegwitPaymentFromAddressIndex } from '../payments/p2wpkh-address-gen';
import {
SupportedPaymentType,
ecdsaPublicKeyToSchnorr,
extractExtendedPublicKeyFromPolicy,
inferPaymentTypeFromPath,
whenSupportedPaymentType,
} from '../utils/bitcoin.utils';
export type AllowedSighashTypes = ValueOf<typeof signatureHash> | SigHash;
export interface BitcoinAccountKeychain {
descriptor: string;
masterKeyFingerprint: string;
keyOrigin: string;
keychain: HDKey;
xpub: string;
}
export type WithDerivePayer<T, P> = T & { derivePayer(args: BitcoinPayerInfo): P };
export interface BitcoinSigner<Payment> {
network: BitcoinNetworkModes;
payment: Payment;
keychain: HDKey;
derivationPath: string;
address: BitcoinAddress;
publicKey: Uint8Array;
sign(tx: btc.Transaction): void;
signIndex(tx: btc.Transaction, index: number, allowedSighash?: AllowedSighashTypes[]): void;
}
export interface BitcoinPayerBase {
paymentType: SupportedPaymentType;
network: BitcoinNetworkModes;
address: BitcoinAddress;
keyOrigin: string;
masterKeyFingerprint: string;
publicKey: Uint8Array;
}
export interface BitcoinNativeSegwitPayer extends BitcoinPayerBase {
paymentType: 'p2wpkh';
payment: P2Ret;
}
export interface BitcoinTaprootPayer extends BitcoinPayerBase {
paymentType: 'p2tr';
payment: P2TROut;
}
export type BitcoinPayer = BitcoinNativeSegwitPayer | BitcoinTaprootPayer;
export function initializeBitcoinAccountKeychainFromDescriptor(
descriptor: string
): BitcoinAccountKeychain {
const { fingerprint, keyOrigin } = decomposeDescriptor(descriptor);
return {
descriptor,
xpub: extractExtendedPublicKeyFromPolicy(descriptor),
keyOrigin,
masterKeyFingerprint: fingerprint,
keychain: deriveKeychainFromXpub(extractExtendedPublicKeyFromPolicy(descriptor)),
};
}
export interface BitcoinPayerInfo {
change: number;
addressIndex: number;
}
export function deriveBitcoinPayerFromAccount(descriptor: string, network: BitcoinNetworkModes) {
const { fingerprint, keyOrigin } = decomposeDescriptor(descriptor);
const accountKeychain = deriveKeychainFromXpub(extractExtendedPublicKeyFromPolicy(descriptor));
const paymentType = inferPaymentTypeFromPath(keyOrigin) as SupportedPaymentType;
if (accountKeychain.depth !== DerivationPathDepth.Account)
throw new Error('Keychain passed is not an account');
return ({ change, addressIndex }: BitcoinPayerInfo) => {
const childKeychain = accountKeychain.deriveChild(change).deriveChild(addressIndex);
const derivePayerFromAccount = whenSupportedPaymentType(paymentType)({
p2tr: getTaprootPaymentFromAddressIndex,
p2wpkh: getNativeSegwitPaymentFromAddressIndex,
});
const payment = derivePayerFromAccount(childKeychain, network);
return {
keyOrigin: appendAddressIndexToPath(keyOrigin, change, addressIndex),
masterKeyFingerprint: fingerprint,
paymentType,
network,
payment,
get address() {
if (!payment.address) throw new Error('Payment address could not be derived');
return payment.address;
},
get publicKey() {
if (!childKeychain.publicKey) throw new Error('Public key could not be derived');
return childKeychain.publicKey;
},
};
};
}
interface BtcSignerDerivationPath {
fingerprint: number;
path: number[];
}
export type BtcSignerDefaultBip32Derivation = [Uint8Array, BtcSignerDerivationPath];
export type BtcSignerTapBip32Derivation = [
Uint8Array,
{ hashes: Uint8Array[]; der: BtcSignerDerivationPath },
];
type BtcSignerBip32Derivation = BtcSignerDefaultBip32Derivation | BtcSignerTapBip32Derivation;
type PayerToBip32DerivationArgs = Pick<
BitcoinPayer,
'masterKeyFingerprint' | 'keyOrigin' | 'publicKey'
>;
/**
* @example
* ```ts
* tx.addInput({
* ...input,
* bip32Derivation: [payerToBip32Derivation(payer)],
* })
* ```
*/
export function payerToBip32Derivation(
args: PayerToBip32DerivationArgs
): BtcSignerDefaultBip32Derivation {
return [
args.publicKey,
{
fingerprint: hexToNumber(args.masterKeyFingerprint),
path: btc.bip32Path(keyOriginToDerivationPath(args.keyOrigin)),
},
];
}
/**
* @example
* ```ts
* tx.addInput({
* ...input,
* tapBip32Derivation: [payerToTapBip32Derivation(payer)],
* })
* ```
*/
export function payerToTapBip32Derivation(
args: PayerToBip32DerivationArgs
): BtcSignerTapBip32Derivation {
return [
// TODO: @kyranjamie to default to schnoor when TR so conversion isn't
// necessary here?
ecdsaPublicKeyToSchnorr(args.publicKey),
{
hashes: [],
der: {
fingerprint: hexToNumber(args.masterKeyFingerprint),
path: btc.bip32Path(keyOriginToDerivationPath(args.keyOrigin)),
},
},
];
}
type PsbtInputBitcoinJsLib = bitcoin.Psbt['data']['inputs']['0'];
type TapBip32DerivationBitcoinJsLib = NonNullable<PsbtInputBitcoinJsLib['tapBip32Derivation']>['0'];
export function payerToTapBip32DerivationBitcoinJsLib(
args: PayerToBip32DerivationArgs
): TapBip32DerivationBitcoinJsLib {
return {
masterFingerprint: Buffer.from(args.masterKeyFingerprint, 'hex'),
path: keyOriginToDerivationPath(args.keyOrigin),
leafHashes: [],
pubkey: Buffer.from(ecdsaPublicKeyToSchnorr(args.publicKey)),
};
}
type Bip32DerivationBitcoinJsLib = NonNullable<PsbtInputBitcoinJsLib['bip32Derivation']>['0'];
export function payerToBip32DerivationBitcoinJsLib(
args: PayerToBip32DerivationArgs
): Bip32DerivationBitcoinJsLib {
return {
masterFingerprint: Buffer.from(args.masterKeyFingerprint, 'hex'),
path: keyOriginToDerivationPath(args.keyOrigin),
pubkey: Buffer.from(args.publicKey),
};
}
export function extractPayerInfoFromDerivationPath(path: string) {
return {
change: extractChangeIndexFromPath(path),
addressIndex: extractAddressIndexFromPath(path),
};
}
/**
* @description
* Turns key format from @scure/btc-signer lib back into key origin string
* @example
* ```ts
* const [inputOne] = getPsbtTxInputs(tx);
* const keyOrigin = serializeKeyOrigin(inputOne.bip32Derivation[0][1]);
* ```
*/
export function serializeKeyOrigin({ fingerprint, path }: BtcSignerDerivationPath) {
const values = path.map(num => (num >= HARDENED_OFFSET ? num - HARDENED_OFFSET + "'" : num));
return `${fingerprintAsNumberToHex(fingerprint)}/${values.join('/')}`;
}
/**
* @description
* Of a given set of a `tx.input`s bip32 derivation paths from
* `@scure/btc-signer`, serialize the paths back to the string format used
* internally
*/
export function extractRequiredKeyOrigins(derivation: BtcSignerBip32Derivation[]) {
return derivation.map(([_pubkey, path]) =>
serializeKeyOrigin('hashes' in path ? path.der : path)
);
}

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display