@atomicfinance/bitcoin-js-wallet-provider 3.5.3 → 3.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import
|
|
3
|
-
import { Address, bitcoin as bT, CreateMultisigResponse, finalizePSBTResponse, Input, Output, Transaction } from '@atomicfinance/types';
|
|
2
|
+
import { bitcoin as bT, CreateMultisigResponse, finalizePSBTResponse, Input, Output, Transaction } from '@atomicfinance/types';
|
|
4
3
|
import { BIP32Interface } from 'bip32';
|
|
5
4
|
import { BitcoinNetwork } from 'bitcoin-networks';
|
|
6
5
|
import * as bitcoin from 'bitcoinjs-lib';
|
|
7
|
-
import { ECPairInterface } from '
|
|
8
|
-
type WalletProviderConstructor<T = Provider> = new (...args: any[]) => T;
|
|
6
|
+
import { ECPairInterface } from 'ecpair';
|
|
9
7
|
interface BitcoinJsWalletProviderOptions {
|
|
10
8
|
network: BitcoinNetwork;
|
|
11
9
|
mnemonic: string;
|
|
@@ -14,101 +12,8 @@ interface BitcoinJsWalletProviderOptions {
|
|
|
14
12
|
addressIndex?: number;
|
|
15
13
|
changeAddressIndex?: number;
|
|
16
14
|
}
|
|
17
|
-
declare const
|
|
18
|
-
|
|
19
|
-
_unusedAddressesBlacklist: {
|
|
20
|
-
[address: string]: true;
|
|
21
|
-
};
|
|
22
|
-
_maxAddressesToDerive: number;
|
|
23
|
-
_baseDerivationPath: string;
|
|
24
|
-
_addressType: bT.AddressType;
|
|
25
|
-
_addressIndex: number;
|
|
26
|
-
_changeAddressIndex: number;
|
|
27
|
-
_derivationCache: {
|
|
28
|
-
[index: string]: Address;
|
|
29
|
-
};
|
|
30
|
-
baseDerivationNode(): Promise<BIP32Interface>;
|
|
31
|
-
_buildTransaction(targets: bT.OutputTarget[], feePerByte?: number, fixedInputs?: bT.Input[]): Promise<{
|
|
32
|
-
hex: string;
|
|
33
|
-
fee: number;
|
|
34
|
-
}>;
|
|
35
|
-
_buildSweepTransaction(externalChangeAddress: string, feePerByte?: number): Promise<{
|
|
36
|
-
hex: string;
|
|
37
|
-
fee: number;
|
|
38
|
-
}>;
|
|
39
|
-
signPSBT(data: string, inputs: bT.PsbtInputTarget[]): Promise<string>;
|
|
40
|
-
signBatchP2SHTransaction(inputs: [{
|
|
41
|
-
inputTxHex: string;
|
|
42
|
-
index: number;
|
|
43
|
-
vout: any;
|
|
44
|
-
outputScript: Buffer;
|
|
45
|
-
}], addresses: string, tx: any, lockTime?: number, segwit?: boolean): Promise<Buffer[]>;
|
|
46
|
-
getDerivationCache(): {
|
|
47
|
-
[index: string]: Address;
|
|
48
|
-
};
|
|
49
|
-
setDerivationCache(derivationCache: {
|
|
50
|
-
[index: string]: Address;
|
|
51
|
-
}): Promise<void>;
|
|
52
|
-
sendOptionsToOutputs(transactions: import("@atomicfinance/types").SendOptions[]): bT.OutputTarget[];
|
|
53
|
-
buildTransaction(output: bT.OutputTarget, feePerByte: number): Promise<{
|
|
54
|
-
hex: string;
|
|
55
|
-
fee: number;
|
|
56
|
-
}>;
|
|
57
|
-
buildBatchTransaction(outputs: bT.OutputTarget[]): Promise<{
|
|
58
|
-
hex: string;
|
|
59
|
-
fee: number;
|
|
60
|
-
}>;
|
|
61
|
-
_sendTransaction(transactions: bT.OutputTarget[], feePerByte?: number): Promise<Transaction<bT.Transaction>>;
|
|
62
|
-
sendTransaction(options: import("@atomicfinance/types").SendOptions): Promise<Transaction<bT.Transaction>>;
|
|
63
|
-
sendBatchTransaction(transactions: import("@atomicfinance/types").SendOptions[]): Promise<Transaction<bT.Transaction>>;
|
|
64
|
-
buildSweepTransaction(externalChangeAddress: string, feePerByte: number): Promise<{
|
|
65
|
-
hex: string;
|
|
66
|
-
fee: number;
|
|
67
|
-
}>;
|
|
68
|
-
sendSweepTransaction(externalChangeAddress: string | Address, feePerByte: number): Promise<Transaction<bT.Transaction>>;
|
|
69
|
-
getUnusedAddressesBlacklist(): {
|
|
70
|
-
[address: string]: true;
|
|
71
|
-
};
|
|
72
|
-
setUnusedAddressesBlacklist(unusedAddressesBlacklist: {
|
|
73
|
-
[address: string]: true;
|
|
74
|
-
}): void;
|
|
75
|
-
setMaxAddressesToDerive(maxAddressesToDerive: number): void;
|
|
76
|
-
getMaxAddressesToDerive(): number;
|
|
77
|
-
updateTransactionFee(tx: string | Transaction<bitcoin.Transaction>, newFeePerByte: number): Promise<Transaction<bT.Transaction>>;
|
|
78
|
-
getUnusedAddress(change?: boolean, numAddressPerCall?: number): Promise<any>;
|
|
79
|
-
_getUsedUnusedAddresses(numAddressPerCall: number, addressType: any): Promise<{
|
|
80
|
-
usedAddresses: any[];
|
|
81
|
-
unusedAddress: {
|
|
82
|
-
change: any;
|
|
83
|
-
nonChange: any;
|
|
84
|
-
};
|
|
85
|
-
firstUnusedAddress: any;
|
|
86
|
-
}>;
|
|
87
|
-
getWalletAddress(address: string): Promise<Address>;
|
|
88
|
-
getAddressFromPublicKey(publicKey: Buffer): string;
|
|
89
|
-
getPaymentVariantFromPublicKey(publicKey: Buffer): bitcoin.payments.Payment;
|
|
90
|
-
getDerivationPathAddress(path: string): Promise<Address>;
|
|
91
|
-
getAddresses(startingIndex?: number, numAddresses?: number, change?: boolean): Promise<Address[]>;
|
|
92
|
-
findAddress(addresses: string[], change?: boolean): Promise<Address>;
|
|
93
|
-
getUsedAddresses(numAddressPerCall?: number): Promise<any[]>;
|
|
94
|
-
withCachedUtxos(func: () => any): Promise<any>;
|
|
95
|
-
getTotalFee(opts: import("@atomicfinance/types").SendOptions, max: boolean): Promise<number>;
|
|
96
|
-
getTotalFees(transactions: import("@atomicfinance/types").SendOptions[], max: boolean): Promise<any>;
|
|
97
|
-
getInputsForAmount(_targets: bT.OutputTarget[], feePerByte?: number, fixedInputs?: bT.Input[], numAddressPerCall?: number, sweep?: boolean): Promise<{
|
|
98
|
-
inputs: bT.UTXO[];
|
|
99
|
-
change: import("@atomicfinance/bitcoin-utils").CoinSelectTarget;
|
|
100
|
-
outputs: import("@atomicfinance/bitcoin-utils").CoinSelectTarget[];
|
|
101
|
-
fee: number;
|
|
102
|
-
}>;
|
|
103
|
-
getInputsForDualFunding(collaterals: number[], feePerByte?: number, fixedInputs?: bT.Input[], numAddressPerCall?: number): Promise<{
|
|
104
|
-
inputs: import("@node-dlc/core").UTXO[];
|
|
105
|
-
fee: bigint;
|
|
106
|
-
}>;
|
|
107
|
-
client: import("@atomicfinance/types").IClient;
|
|
108
|
-
setClient(client?: import("@atomicfinance/types").IClient): void;
|
|
109
|
-
getMethod(method: string, requestor?: any): (...args: any[]) => any;
|
|
110
|
-
}) & WalletProviderConstructor<Provider>;
|
|
111
|
-
export default class BitcoinJsWalletProvider extends BitcoinJsWalletProvider_base {
|
|
15
|
+
declare const BaseProvider: any;
|
|
16
|
+
export default class BitcoinJsWalletProvider extends BaseProvider {
|
|
112
17
|
_mnemonic: string;
|
|
113
18
|
_seedNode: BIP32Interface;
|
|
114
19
|
_baseDerivationNode: BIP32Interface;
|
|
@@ -182,11 +87,11 @@ export default class BitcoinJsWalletProvider extends BitcoinJsWalletProvider_bas
|
|
|
182
87
|
}>;
|
|
183
88
|
_buildTransaction(targets: bT.OutputTarget[], feePerByte?: number, fixedInputs?: bT.Input[]): Promise<{
|
|
184
89
|
hex: string;
|
|
185
|
-
fee:
|
|
90
|
+
fee: any;
|
|
186
91
|
}>;
|
|
187
92
|
_buildSweepTransaction(externalChangeAddress: string, feePerByte: number): Promise<{
|
|
188
93
|
hex: string;
|
|
189
|
-
fee:
|
|
94
|
+
fee: any;
|
|
190
95
|
}>;
|
|
191
96
|
signPSBT(data: string, inputs: bT.PsbtInputTarget[]): Promise<string>;
|
|
192
97
|
signBatchP2SHTransaction(inputs: [
|
|
@@ -198,8 +103,8 @@ export default class BitcoinJsWalletProvider extends BitcoinJsWalletProvider_bas
|
|
|
198
103
|
txInputIndex?: number;
|
|
199
104
|
}
|
|
200
105
|
], addresses: string, tx: any, _lockTime?: number, segwit?: boolean): Promise<Buffer[]>;
|
|
201
|
-
getScriptType(): "
|
|
202
|
-
getConnectedNetwork(): Promise<
|
|
106
|
+
getScriptType(): "p2pkh" | "p2sh-p2wpkh" | "p2wpkh";
|
|
107
|
+
getConnectedNetwork(): Promise<any>;
|
|
203
108
|
isWalletAvailable(): Promise<boolean>;
|
|
204
109
|
}
|
|
205
110
|
export {};
|
|
@@ -35,10 +35,16 @@ const bip32_1 = require("bip32");
|
|
|
35
35
|
const bip39_1 = require("bip39");
|
|
36
36
|
const bitcoin = __importStar(require("bitcoinjs-lib"));
|
|
37
37
|
const bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
|
38
|
+
const ecpair_1 = require("ecpair");
|
|
39
|
+
const ecc = __importStar(require("tiny-secp256k1"));
|
|
40
|
+
const ECPair = (0, ecpair_1.ECPairFactory)(ecc);
|
|
38
41
|
const bitcoinjs_message_1 = require("bitcoinjs-message");
|
|
39
42
|
const secp256k1_1 = __importDefault(require("secp256k1"));
|
|
40
43
|
const FEE_PER_BYTE_FALLBACK = 5;
|
|
41
|
-
|
|
44
|
+
// TypeScript has difficulty inferring the complex return type of the mixin pattern
|
|
45
|
+
// Using 'any' here is safe as we know the mixin returns the correct enhanced class
|
|
46
|
+
const BaseProvider = (0, bitcoin_wallet_provider_1.default)(provider_1.default);
|
|
47
|
+
class BitcoinJsWalletProvider extends BaseProvider {
|
|
42
48
|
constructor(options) {
|
|
43
49
|
const { network, mnemonic, baseDerivationPath, addressType = types_1.bitcoin.AddressType.BECH32, addressIndex = 0, changeAddressIndex = 0, } = options;
|
|
44
50
|
super({
|
|
@@ -68,7 +74,7 @@ class BitcoinJsWalletProvider extends (0, bitcoin_wallet_provider_1.default)(pro
|
|
|
68
74
|
}
|
|
69
75
|
async keyPair(derivationPath) {
|
|
70
76
|
const wif = await this._toWIF(derivationPath);
|
|
71
|
-
return
|
|
77
|
+
return ECPair.fromWIF(wif, this._network);
|
|
72
78
|
}
|
|
73
79
|
async _toWIF(derivationPath) {
|
|
74
80
|
const node = await this.seedNode();
|
|
@@ -178,7 +184,7 @@ class BitcoinJsWalletProvider extends (0, bitcoin_wallet_provider_1.default)(pro
|
|
|
178
184
|
psbt.signInput(i, keyPair);
|
|
179
185
|
}));
|
|
180
186
|
}));
|
|
181
|
-
psbt.validateSignaturesOfAllInputs(); // ensure all signatures are valid!
|
|
187
|
+
psbt.validateSignaturesOfAllInputs((pubkey, msghash, signature) => ecc.verify(msghash, pubkey, signature)); // ensure all signatures are valid!
|
|
182
188
|
return psbt.toBase64();
|
|
183
189
|
}
|
|
184
190
|
/**
|
|
@@ -192,7 +198,7 @@ class BitcoinJsWalletProvider extends (0, bitcoin_wallet_provider_1.default)(pro
|
|
|
192
198
|
finalizePSBT(psbtString) {
|
|
193
199
|
const psbt = bitcoin.Psbt.fromBase64(psbtString);
|
|
194
200
|
try {
|
|
195
|
-
psbt.validateSignaturesOfAllInputs(); // ensure all signatures are valid!
|
|
201
|
+
psbt.validateSignaturesOfAllInputs((pubkey, msghash, signature) => ecc.verify(msghash, pubkey, signature)); // ensure all signatures are valid!
|
|
196
202
|
psbt.finalizeAllInputs();
|
|
197
203
|
}
|
|
198
204
|
catch (error) {
|
|
@@ -265,35 +271,49 @@ class BitcoinJsWalletProvider extends (0, bitcoin_wallet_provider_1.default)(pro
|
|
|
265
271
|
const network = this._network;
|
|
266
272
|
const { fee } = this._getInputForAmountWithoutUtxoCheck(outputs, feePerByte, fixedInputs);
|
|
267
273
|
const inputs = fixedInputs;
|
|
268
|
-
const
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
const prevOutScriptType = 'p2wpkh';
|
|
274
|
+
const psbt = new bitcoinjs_lib_1.Psbt({ network });
|
|
275
|
+
const needsWitness = [
|
|
276
|
+
types_1.bitcoin.AddressType.BECH32,
|
|
277
|
+
types_1.bitcoin.AddressType.P2SH_SEGWIT,
|
|
278
|
+
].includes(this._addressType);
|
|
274
279
|
for (let i = 0; i < inputs.length; i++) {
|
|
275
280
|
const wallet = await this.getWalletAddress(inputs[i].address);
|
|
276
281
|
const keyPair = await this.keyPair(wallet.derivationPath);
|
|
277
282
|
const paymentVariant = this.getPaymentVariantFromPublicKey(keyPair.publicKey);
|
|
278
|
-
|
|
283
|
+
const psbtInput = {
|
|
284
|
+
hash: inputs[i].txid,
|
|
285
|
+
index: inputs[i].vout,
|
|
286
|
+
sequence: 0,
|
|
287
|
+
};
|
|
288
|
+
if (needsWitness) {
|
|
289
|
+
psbtInput.witnessUtxo = {
|
|
290
|
+
script: paymentVariant.output,
|
|
291
|
+
value: inputs[i].value,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
const inputTxRaw = await this.getMethod('getRawTransactionByHash')(inputs[i].txid);
|
|
296
|
+
psbtInput.nonWitnessUtxo = Buffer.from(inputTxRaw, 'hex');
|
|
297
|
+
}
|
|
298
|
+
if (this._addressType === types_1.bitcoin.AddressType.P2SH_SEGWIT) {
|
|
299
|
+
psbtInput.redeemScript = paymentVariant.redeem.output;
|
|
300
|
+
}
|
|
301
|
+
psbt.addInput(psbtInput);
|
|
302
|
+
}
|
|
303
|
+
for (const output of outputs) {
|
|
304
|
+
psbt.addOutput({
|
|
305
|
+
value: output.value,
|
|
306
|
+
address: output.to,
|
|
307
|
+
});
|
|
279
308
|
}
|
|
280
309
|
for (let i = 0; i < inputs.length; i++) {
|
|
281
310
|
const wallet = await this.getWalletAddress(inputs[i].address);
|
|
282
311
|
const keyPair = await this.keyPair(wallet.derivationPath);
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
const signParams = {
|
|
286
|
-
prevOutScriptType,
|
|
287
|
-
vin: i,
|
|
288
|
-
keyPair,
|
|
289
|
-
witnessValue: 0,
|
|
290
|
-
};
|
|
291
|
-
if (needsWitness) {
|
|
292
|
-
signParams.witnessValue = inputs[i].value;
|
|
293
|
-
}
|
|
294
|
-
txb.sign(signParams);
|
|
312
|
+
psbt.signInput(i, keyPair);
|
|
313
|
+
psbt.validateSignaturesOfInput(i, (pubkey, msghash, signature) => ecc.verify(msghash, pubkey, signature));
|
|
295
314
|
}
|
|
296
|
-
|
|
315
|
+
psbt.finalizeAllInputs();
|
|
316
|
+
return { hex: psbt.extractTransaction().toHex(), fee };
|
|
297
317
|
}
|
|
298
318
|
async _buildTransaction(targets, feePerByte, fixedInputs) {
|
|
299
319
|
const network = this._network;
|
|
@@ -352,7 +372,7 @@ class BitcoinJsWalletProvider extends (0, bitcoin_wallet_provider_1.default)(pro
|
|
|
352
372
|
const wallet = await this.getWalletAddress(inputs[i].address);
|
|
353
373
|
const keyPair = await this.keyPair(wallet.derivationPath);
|
|
354
374
|
psbt.signInput(i, keyPair);
|
|
355
|
-
psbt.validateSignaturesOfInput(i);
|
|
375
|
+
psbt.validateSignaturesOfInput(i, (pubkey, msghash, signature) => ecc.verify(msghash, pubkey, signature));
|
|
356
376
|
}
|
|
357
377
|
psbt.finalizeAllInputs();
|
|
358
378
|
return { hex: psbt.extractTransaction().toHex(), fee };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitcoinJsWalletProvider.js","sourceRoot":"","sources":["../lib/BitcoinJsWalletProvider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BitcoinJsWalletProvider.js","sourceRoot":"","sources":["../lib/BitcoinJsWalletProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gEAIsC;AACtC,qGAA2E;AAC3E,uEAA+C;AAC/C,gDAQ8B;AAC9B,oDAA4B;AAC5B,iCAAiD;AACjD,iCAAuC;AAEvC,uDAAyC;AACzC,iDAIuB;AACvB,mCAAwD;AACxD,oDAAsC;AAEtC,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,GAAG,CAAC,CAAC;AAClC,yDAAoE;AACpE,0DAAkC;AAElC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAehC,mFAAmF;AACnF,mFAAmF;AACnF,MAAM,YAAY,GAAQ,IAAA,iCAAqB,EAC7C,kBAAqC,CACtC,CAAC;AAEF,MAAqB,uBAAwB,SAAQ,YAAY;IAK/D,YAAY,OAAuC;QACjD,MAAM,EACJ,OAAO,EACP,QAAQ,EACR,kBAAkB,EAClB,WAAW,GAAG,eAAE,CAAC,WAAW,CAAC,MAAM,EACnC,YAAY,GAAG,CAAC,EAChB,kBAAkB,GAAG,CAAC,GACvB,GAAG,OAAO,CAAC;QACZ,KAAK,CAAC;YACJ,OAAO;YACP,kBAAkB;YAClB,WAAW;YACX,YAAY;YACZ,kBAAkB;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAE/D,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC;QAE1C,MAAM,IAAI,GAAG,MAAM,IAAA,sBAAc,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,IAAA,gBAAQ,EAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE/C,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,IAAI,CAAC,mBAAmB;YAAE,OAAO,IAAI,CAAC,mBAAmB,CAAC;QAE9D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvC,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAEzE,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,cAAsB;QAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC9C,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,cAAsB;QACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,IAAY;QAC7C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,MAAM,IAAA,6BAAkB,EACxC,OAAO,EACP,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,UAAU,CACnB,CAAC;QACF,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,sBAAsB,CAAC,CAAS,EAAE,OAAiB;QACjD,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE;YACtB,MAAM,IAAI,KAAK,CACb,iCAAiC,OAAO,CAAC,MAAM,4BAA4B,CAAC,aAAa,CAC1F,CAAC;SACH;QACD,yBAAyB;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjC,CAAC,EAAE,CAAC;YACJ,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC9D,OAAO,EAAE,IAAI,CAAC,QAAQ;SACvB,CAAC,CAAC;QAEH,4BAA4B;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;YACnC,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI,CAAC,QAAQ;SACvB,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACH,cAAc,CAAC,CAAS,EAAE,OAAiB;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC;SACpD,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,iBAAiB,CACf,CAAS,EACT,OAAiB,EACjB,MAAe,EACf,OAAiB;QAEjB,IAAA,gBAAM,EAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,iBAAiB,CAAC,CAAC;QAC7C,IAAA,gBAAM,EAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAE/C,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAEtD,0DAA0D;QAC1D,IAAA,gBAAM,EACJ,MAAM,CAAC,KAAK,CACV,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,YAAY,CACtE,EACD,sDAAsD,CACvD,CAAC;QAEF,UAAU;QACV,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE1D,UAAU;QACV,MAAM,CAAC,OAAO,CAAC,CAAC,KAAY,EAAE,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC;gBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,IAAI;gBACjB,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;gBACzD,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;aACnC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,CAAC,CAAC,MAAc,EAAE,EAAE;YACjC,IAAI,CAAC,SAAS,CAAC;gBACb,OAAO,EAAE,MAAM,CAAC,EAAE;gBAClB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,iBAAiB,CAAC,UAAkB;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEjD,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,CAAS,EAAE,EAAE;YAC9C,IAAA,gBAAM,EACJ,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,EAC5C,2BAA2B,CAC5B,CAAC;YAEF,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAChC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,mBAAS,CAAC,eAAe,CAAC,IAAI,CAAC,CACnE,CAAC;YAEF,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACxB,8BAA8B;gBAC9B,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACzD,MAAM,EAAE,GAAa;oBACrB,OAAO,EAAE,IAAI,CAAC,QAAQ;iBACvB,CAAC,CAAC;gBAEH,oDAAoD;gBACpD,MAAM,OAAO,GAAY,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;gBAEjE,0CAA0C;gBAC1C,IAAI,CAAC,OAAO;oBAAE,OAAO;gBAErB,iBAAiB;gBACjB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAE3D,0BAA0B;gBAC1B,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC7B,CAAC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,6BAA6B,CAChC,CAAC,MAAc,EAAE,OAAe,EAAE,SAAiB,EAAE,EAAE,CACrD,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CACzC,CAAC,CAAC,mCAAmC;QACtC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED;;;;;;;OAOG;IACH,YAAY,CAAC,UAAkB;QAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEjD,IAAI;YACF,IAAI,CAAC,6BAA6B,CAChC,CAAC,MAAc,EAAE,OAAe,EAAE,SAAiB,EAAE,EAAE,CACrD,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CACzC,CAAC,CAAC,mCAAmC;YACtC,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;QAAC,OAAO,KAAK,EAAE;YACd,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;gBACrB,QAAQ,EAAE,KAAK;aAChB,CAAC;SACH;QACD,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;YACrB,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE;YACtC,QAAQ,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kCAAkC,CACtC,qBAA6B,EAC7B,UAAkB,EAClB,QAAkB,EAClB,WAAoB;QAEpB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,oCAAoC,CAClE,qBAAqB,EACrB,UAAU,EACV,QAAQ,EACR,WAAW,CACZ,CAAC;QACF,MAAM,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC;QAChD,OAAO,IAAA,0CAA0B,EAC/B,IAAA,oCAAoB,EAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,EACxC,GAAG,CACJ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mCAAmC,CACvC,qBAA6B,EAC7B,UAAkB,EAClB,QAAkB,EAClB,WAAoB;QAKpB,OAAO,IAAI,CAAC,oCAAoC,CAC9C,qBAAqB,EACrB,UAAU,EACV,QAAQ,EACR,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,oCAAoC,CACxC,qBAA6B,EAC7B,UAAkB,EAClB,WAAqB,EAAE,EACvB,WAAoB;QAKpB,MAAM,WAAW,GACf,UAAU;YACV,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;YACzC,qBAAqB,CAAC;QACxB,MAAM,MAAM,GAAY,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI;YACF,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,kBAAkB,CACnD,QAAQ,EACR,WAAW,EACV,WAAqC,EACtC,GAAG,EACH,IAAI,CACL,CAAC;YACF,IAAI,eAAe,CAAC,MAAM,EAAE;gBAC1B,MAAM,KAAK,CAAC,yDAAyD,CAAC,CAAC;aACxE;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAE,eAAe,CAAC,MAAkB,IAAI,EAAE,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;SAClD;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC5B,MAAM,KAAK,CACT,6DAA6D,CAC9D,CAAC;aACH;YAED,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,kCAAkC,CACnE,QAAQ,EACR,WAAW,EACX,WAAW,CACZ,CAAC;YACF,MAAM,CAAC,IAAI,CACT,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CACtE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;SAClD;QACD,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC1B,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CACnC,CAAC,WAAmB,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,CAC5D,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,qBAAqB;YACzB,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;SACxB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,iCAAiC,CAC3C,QAAQ,EACR,WAAW,EACX,MAAM,CACP,CAAC;IACJ,CAAC;IAED,kCAAkC,CAChC,QAAkB,EAClB,WAAmB,EACnB,WAAoB;QAOpB,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,YAAY,GAChB,WAAW;YACX,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,0BAA0B;QAEnG,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3C,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC,CAAC;QACJ,IAAI,YAAY,GAAG,aAAa,GAAG,CAAC,EAAE;YACpC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,aAAa,EAAE,CAAC,CAAC;SACnE;QAED,OAAO,IAAA,2BAAW,EAChB,WAAW,EACX,OAAO,EACP,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EACtB,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iCAAiC,CACrC,OAAiB,EACjB,UAAkB,EAClB,WAAoB;QAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE9B,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,kCAAkC,CACrD,OAAO,EACP,UAAU,EACV,WAAW,CACZ,CAAC;QACF,MAAM,MAAM,GAAG,WAAW,CAAC;QAE3B,MAAM,IAAI,GAAG,IAAI,oBAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAEnC,MAAM,YAAY,GAAG;YACnB,eAAE,CAAC,WAAW,CAAC,MAAM;YACrB,eAAE,CAAC,WAAW,CAAC,WAAW;SAC3B,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,8BAA8B,CACxD,OAAO,CAAC,SAAS,CAClB,CAAC;YAEF,MAAM,SAAS,GAAQ;gBACrB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;gBACpB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;gBACrB,QAAQ,EAAE,CAAC;aACZ,CAAC;YAEF,IAAI,YAAY,EAAE;gBAChB,SAAS,CAAC,WAAW,GAAG;oBACtB,MAAM,EAAE,cAAc,CAAC,MAAM;oBAC7B,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;iBACvB,CAAC;aACH;iBAAM;gBACL,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAChE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CACf,CAAC;gBACF,SAAS,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;aAC3D;YAED,IAAI,IAAI,CAAC,YAAY,KAAK,eAAE,CAAC,WAAW,CAAC,WAAW,EAAE;gBACpD,SAAS,CAAC,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;aACvD;YAED,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SAC1B;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,IAAI,CAAC,SAAS,CAAC;gBACb,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO,EAAE,MAAM,CAAC,EAAE;aACnB,CAAC,CAAC;SACJ;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC1D,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,yBAAyB,CAC5B,CAAC,EACD,CAAC,MAAc,EAAE,OAAe,EAAE,SAAiB,EAAE,EAAE,CACrD,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CACzC,CAAC;SACH;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,OAA0B,EAC1B,UAAmB,EACnB,WAAwB;QAExB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE9B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAC3D,OAAO,EACP,UAAU,EACV,WAAW,CACZ,CAAC;QAEF,IAAI,MAAM,EAAE;YACV,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,aAAa,CAAC,OAAO;gBAC9B,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;SACJ;QAED,MAAM,IAAI,GAAG,IAAI,oBAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAEnC,MAAM,YAAY,GAAG;YACnB,eAAE,CAAC,WAAW,CAAC,MAAM;YACrB,eAAE,CAAC,WAAW,CAAC,WAAW;SAC3B,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,8BAA8B,CACxD,OAAO,CAAC,SAAS,CAClB,CAAC;YAEF,MAAM,SAAS,GAAQ;gBACrB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;gBACpB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;gBACrB,QAAQ,EAAE,CAAC;aACZ,CAAC;YAEF,IAAI,YAAY,EAAE;gBAChB,SAAS,CAAC,WAAW,GAAG;oBACtB,MAAM,EAAE,cAAc,CAAC,MAAM;oBAC7B,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;iBACvB,CAAC;aACH;iBAAM;gBACL,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAChE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CACf,CAAC;gBACF,SAAS,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;aAC3D;YAED,IAAI,IAAI,CAAC,YAAY,KAAK,eAAE,CAAC,WAAW,CAAC,WAAW,EAAE;gBACpD,SAAS,CAAC,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;aACvD;YAED,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SAC1B;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,IAAI,MAAM,CAAC,MAAM,EAAE;gBACjB,IAAI,CAAC,SAAS,CAAC;oBACb,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;iBACtB,CAAC,CAAC;aACJ;iBAAM;gBACL,IAAI,CAAC,SAAS,CAAC;oBACb,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;iBACxB,CAAC,CAAC;aACJ;SACF;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC1D,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,yBAAyB,CAC5B,CAAC,EACD,CAAC,MAAc,EAAE,OAAe,EAAE,SAAiB,EAAE,EAAE,CACrD,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CACzC,CAAC;SACH;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,qBAA6B,EAC7B,UAAkB;QAElB,IAAI,WAAW,GAAG,UAAU,IAAI,IAAI,CAAC;QACrC,IAAI,CAAC,WAAW;YAAE,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;QAExE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAC/D,EAAE,EACF,WAAW,EACX,EAAE,EACF,GAAG,EACH,IAAI,CACL,CAAC;QAEF,IAAI,MAAM,EAAE;YACV,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;SACH;QAED,MAAM,QAAQ,GAAG;YACf;gBACE,OAAO,EAAE,qBAAqB;gBAC9B,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;aACxB;SACF,CAAC;QAEF,OAAO,IAAI,CAAC,iBAAiB,CAC3B,QAAQ,EACR,UAAU,EACT,MAAgC,CAClC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,MAA4B;QACvD,MAAM,IAAI,GAAG,oBAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACzD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SACtC;QACD,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC5B,MAQC,EACD,SAAiB,EACjB,EAAO,EACP,SAAkB,EAClB,MAAgB;QAEhB,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE;YAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC1D,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACxB;QAED,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY;gBAClC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY;gBACxB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACpB,IAAI,OAAO,CAAC;YACZ,IAAI,MAAM,EAAE;gBACV,OAAO,GAAG,EAAE,CAAC,gBAAgB,CAC3B,KAAK,EACL,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,EACtB,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EACnB,2BAAoB,CAAC,WAAW,CACjC,CAAC;aACH;iBAAM;gBACL,OAAO,GAAG,EAAE,CAAC,gBAAgB,CAC3B,KAAK,EACL,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,EACtB,2BAAoB,CAAC,WAAW,CACjC,CAAC;aACH;YAED,MAAM,GAAG,GAAG,sBAAM,CAAC,SAAS,CAAC,MAAM,CACjC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EACzB,2BAAoB,CAAC,WAAW,CACjC,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAChB;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,YAAY,KAAK,eAAE,CAAC,WAAW,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC;aAC3D,IAAI,IAAI,CAAC,YAAY,KAAK,eAAE,CAAC,WAAW,CAAC,WAAW;YACvD,OAAO,aAAa,CAAC;aAClB,IAAI,IAAI,CAAC,YAAY,KAAK,eAAE,CAAC,WAAW,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAxoBD,0CAwoBC"}
|
|
@@ -20,12 +20,14 @@ import { mnemonicToSeed } from 'bip39';
|
|
|
20
20
|
import { BitcoinNetwork } from 'bitcoin-networks';
|
|
21
21
|
import * as bitcoin from 'bitcoinjs-lib';
|
|
22
22
|
import {
|
|
23
|
-
ECPair,
|
|
24
|
-
ECPairInterface,
|
|
25
23
|
Psbt,
|
|
26
24
|
script,
|
|
27
25
|
Transaction as BitcoinJsTransaction,
|
|
28
26
|
} from 'bitcoinjs-lib';
|
|
27
|
+
import { ECPairFactory, ECPairInterface } from 'ecpair';
|
|
28
|
+
import * as ecc from 'tiny-secp256k1';
|
|
29
|
+
|
|
30
|
+
const ECPair = ECPairFactory(ecc);
|
|
29
31
|
import { signAsync as signBitcoinMessage } from 'bitcoinjs-message';
|
|
30
32
|
import secp256k1 from 'secp256k1';
|
|
31
33
|
|
|
@@ -33,6 +35,8 @@ const FEE_PER_BYTE_FALLBACK = 5;
|
|
|
33
35
|
|
|
34
36
|
type WalletProviderConstructor<T = Provider> = new (...args: any[]) => T;
|
|
35
37
|
|
|
38
|
+
type BaseWalletProvider = ReturnType<typeof BitcoinWalletProvider>;
|
|
39
|
+
|
|
36
40
|
interface BitcoinJsWalletProviderOptions {
|
|
37
41
|
network: BitcoinNetwork;
|
|
38
42
|
mnemonic: string;
|
|
@@ -42,9 +46,13 @@ interface BitcoinJsWalletProviderOptions {
|
|
|
42
46
|
changeAddressIndex?: number;
|
|
43
47
|
}
|
|
44
48
|
|
|
45
|
-
|
|
49
|
+
// TypeScript has difficulty inferring the complex return type of the mixin pattern
|
|
50
|
+
// Using 'any' here is safe as we know the mixin returns the correct enhanced class
|
|
51
|
+
const BaseProvider: any = BitcoinWalletProvider(
|
|
46
52
|
Provider as WalletProviderConstructor,
|
|
47
|
-
)
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
export default class BitcoinJsWalletProvider extends BaseProvider {
|
|
48
56
|
_mnemonic: string;
|
|
49
57
|
_seedNode: BIP32Interface;
|
|
50
58
|
_baseDerivationNode: BIP32Interface;
|
|
@@ -248,7 +256,10 @@ export default class BitcoinJsWalletProvider extends BitcoinWalletProvider(
|
|
|
248
256
|
}),
|
|
249
257
|
);
|
|
250
258
|
|
|
251
|
-
psbt.validateSignaturesOfAllInputs(
|
|
259
|
+
psbt.validateSignaturesOfAllInputs(
|
|
260
|
+
(pubkey: Buffer, msghash: Buffer, signature: Buffer) =>
|
|
261
|
+
ecc.verify(msghash, pubkey, signature),
|
|
262
|
+
); // ensure all signatures are valid!
|
|
252
263
|
return psbt.toBase64();
|
|
253
264
|
}
|
|
254
265
|
|
|
@@ -264,7 +275,10 @@ export default class BitcoinJsWalletProvider extends BitcoinWalletProvider(
|
|
|
264
275
|
const psbt = bitcoin.Psbt.fromBase64(psbtString);
|
|
265
276
|
|
|
266
277
|
try {
|
|
267
|
-
psbt.validateSignaturesOfAllInputs(
|
|
278
|
+
psbt.validateSignaturesOfAllInputs(
|
|
279
|
+
(pubkey: Buffer, msghash: Buffer, signature: Buffer) =>
|
|
280
|
+
ecc.verify(msghash, pubkey, signature),
|
|
281
|
+
); // ensure all signatures are valid!
|
|
268
282
|
psbt.finalizeAllInputs();
|
|
269
283
|
} catch (error) {
|
|
270
284
|
return {
|
|
@@ -423,14 +437,12 @@ export default class BitcoinJsWalletProvider extends BitcoinWalletProvider(
|
|
|
423
437
|
);
|
|
424
438
|
const inputs = fixedInputs;
|
|
425
439
|
|
|
426
|
-
const
|
|
427
|
-
|
|
428
|
-
for (const output of outputs) {
|
|
429
|
-
const to = output.to; // Allow for OP_RETURN
|
|
430
|
-
txb.addOutput(to, output.value);
|
|
431
|
-
}
|
|
440
|
+
const psbt = new Psbt({ network });
|
|
432
441
|
|
|
433
|
-
const
|
|
442
|
+
const needsWitness = [
|
|
443
|
+
bT.AddressType.BECH32,
|
|
444
|
+
bT.AddressType.P2SH_SEGWIT,
|
|
445
|
+
].includes(this._addressType);
|
|
434
446
|
|
|
435
447
|
for (let i = 0; i < inputs.length; i++) {
|
|
436
448
|
const wallet = await this.getWalletAddress(inputs[i].address);
|
|
@@ -439,32 +451,52 @@ export default class BitcoinJsWalletProvider extends BitcoinWalletProvider(
|
|
|
439
451
|
keyPair.publicKey,
|
|
440
452
|
);
|
|
441
453
|
|
|
442
|
-
|
|
454
|
+
const psbtInput: any = {
|
|
455
|
+
hash: inputs[i].txid,
|
|
456
|
+
index: inputs[i].vout,
|
|
457
|
+
sequence: 0,
|
|
458
|
+
};
|
|
459
|
+
|
|
460
|
+
if (needsWitness) {
|
|
461
|
+
psbtInput.witnessUtxo = {
|
|
462
|
+
script: paymentVariant.output,
|
|
463
|
+
value: inputs[i].value,
|
|
464
|
+
};
|
|
465
|
+
} else {
|
|
466
|
+
const inputTxRaw = await this.getMethod('getRawTransactionByHash')(
|
|
467
|
+
inputs[i].txid,
|
|
468
|
+
);
|
|
469
|
+
psbtInput.nonWitnessUtxo = Buffer.from(inputTxRaw, 'hex');
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
if (this._addressType === bT.AddressType.P2SH_SEGWIT) {
|
|
473
|
+
psbtInput.redeemScript = paymentVariant.redeem.output;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
psbt.addInput(psbtInput);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
for (const output of outputs) {
|
|
480
|
+
psbt.addOutput({
|
|
481
|
+
value: output.value,
|
|
482
|
+
address: output.to,
|
|
483
|
+
});
|
|
443
484
|
}
|
|
444
485
|
|
|
445
486
|
for (let i = 0; i < inputs.length; i++) {
|
|
446
487
|
const wallet = await this.getWalletAddress(inputs[i].address);
|
|
447
488
|
const keyPair = await this.keyPair(wallet.derivationPath);
|
|
448
|
-
|
|
449
|
-
|
|
489
|
+
psbt.signInput(i, keyPair);
|
|
490
|
+
psbt.validateSignaturesOfInput(
|
|
491
|
+
i,
|
|
492
|
+
(pubkey: Buffer, msghash: Buffer, signature: Buffer) =>
|
|
493
|
+
ecc.verify(msghash, pubkey, signature),
|
|
450
494
|
);
|
|
451
|
-
const needsWitness = true;
|
|
452
|
-
|
|
453
|
-
const signParams = {
|
|
454
|
-
prevOutScriptType,
|
|
455
|
-
vin: i,
|
|
456
|
-
keyPair,
|
|
457
|
-
witnessValue: 0,
|
|
458
|
-
};
|
|
459
|
-
|
|
460
|
-
if (needsWitness) {
|
|
461
|
-
signParams.witnessValue = inputs[i].value;
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
txb.sign(signParams);
|
|
465
495
|
}
|
|
466
496
|
|
|
467
|
-
|
|
497
|
+
psbt.finalizeAllInputs();
|
|
498
|
+
|
|
499
|
+
return { hex: psbt.extractTransaction().toHex(), fee };
|
|
468
500
|
}
|
|
469
501
|
|
|
470
502
|
async _buildTransaction(
|
|
@@ -545,7 +577,11 @@ export default class BitcoinJsWalletProvider extends BitcoinWalletProvider(
|
|
|
545
577
|
const wallet = await this.getWalletAddress(inputs[i].address);
|
|
546
578
|
const keyPair = await this.keyPair(wallet.derivationPath);
|
|
547
579
|
psbt.signInput(i, keyPair);
|
|
548
|
-
psbt.validateSignaturesOfInput(
|
|
580
|
+
psbt.validateSignaturesOfInput(
|
|
581
|
+
i,
|
|
582
|
+
(pubkey: Buffer, msghash: Buffer, signature: Buffer) =>
|
|
583
|
+
ecc.verify(msghash, pubkey, signature),
|
|
584
|
+
);
|
|
549
585
|
}
|
|
550
586
|
|
|
551
587
|
psbt.finalizeAllInputs();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atomicfinance/bitcoin-js-wallet-provider",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"module": "dist/index.js",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -24,18 +24,20 @@
|
|
|
24
24
|
"node": ">=14"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@atomicfinance/bitcoin-utils": "^3.
|
|
28
|
-
"@atomicfinance/bitcoin-wallet-provider": "^3.
|
|
29
|
-
"@atomicfinance/types": "^3.
|
|
30
|
-
"@atomicfinance/utils": "^3.
|
|
27
|
+
"@atomicfinance/bitcoin-utils": "^3.6.1",
|
|
28
|
+
"@atomicfinance/bitcoin-wallet-provider": "^3.6.1",
|
|
29
|
+
"@atomicfinance/types": "^3.6.1",
|
|
30
|
+
"@atomicfinance/utils": "^3.6.1",
|
|
31
31
|
"@babel/runtime": "^7.12.1",
|
|
32
|
-
"@node-dlc/core": "0.
|
|
32
|
+
"@node-dlc/core": "0.24.0",
|
|
33
33
|
"bip32": "^2.0.6",
|
|
34
34
|
"bip39": "^3.0.2",
|
|
35
35
|
"bitcoin-networks": "^1.0.0",
|
|
36
|
-
"bitcoinjs-lib": "
|
|
36
|
+
"bitcoinjs-lib": "6.1.7",
|
|
37
37
|
"bitcoinjs-message": "^2.1.0",
|
|
38
|
-
"
|
|
38
|
+
"ecpair": "^2.1.0",
|
|
39
|
+
"secp256k1": "^4.0.3",
|
|
40
|
+
"tiny-secp256k1": "^2.2.0"
|
|
39
41
|
},
|
|
40
42
|
"publishConfig": {
|
|
41
43
|
"access": "public"
|
|
@@ -1,424 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
const bitcoin_utils_1 = require("@atomicfinance/bitcoin-utils");
|
|
30
|
-
const bitcoin_wallet_provider_1 = __importDefault(require("@atomicfinance/bitcoin-wallet-provider"));
|
|
31
|
-
const provider_1 = __importDefault(require("@atomicfinance/provider"));
|
|
32
|
-
const types_1 = require("@atomicfinance/types");
|
|
33
|
-
const assert_1 = __importDefault(require("assert"));
|
|
34
|
-
const bip32_1 = require("bip32");
|
|
35
|
-
const bip39_1 = require("bip39");
|
|
36
|
-
const bitcoin = __importStar(require("bitcoinjs-lib"));
|
|
37
|
-
const bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
|
38
|
-
const bitcoinjs_message_1 = require("bitcoinjs-message");
|
|
39
|
-
const secp256k1_1 = __importDefault(require("secp256k1"));
|
|
40
|
-
const FEE_PER_BYTE_FALLBACK = 5;
|
|
41
|
-
class BitcoinJsWalletProvider extends (0, bitcoin_wallet_provider_1.default)(provider_1.default) {
|
|
42
|
-
constructor(options) {
|
|
43
|
-
const { network, mnemonic, baseDerivationPath, addressType = types_1.bitcoin.AddressType.BECH32, addressIndex = 0, changeAddressIndex = 0, } = options;
|
|
44
|
-
super({
|
|
45
|
-
network,
|
|
46
|
-
baseDerivationPath,
|
|
47
|
-
addressType,
|
|
48
|
-
addressIndex,
|
|
49
|
-
changeAddressIndex,
|
|
50
|
-
});
|
|
51
|
-
if (!mnemonic)
|
|
52
|
-
throw new Error('Mnemonic should not be empty');
|
|
53
|
-
this._mnemonic = mnemonic;
|
|
54
|
-
}
|
|
55
|
-
async seedNode() {
|
|
56
|
-
if (this._seedNode)
|
|
57
|
-
return this._seedNode;
|
|
58
|
-
const seed = await (0, bip39_1.mnemonicToSeed)(this._mnemonic);
|
|
59
|
-
this._seedNode = (0, bip32_1.fromSeed)(seed, this._network);
|
|
60
|
-
return this._seedNode;
|
|
61
|
-
}
|
|
62
|
-
async baseDerivationNode() {
|
|
63
|
-
if (this._baseDerivationNode)
|
|
64
|
-
return this._baseDerivationNode;
|
|
65
|
-
const baseNode = await this.seedNode();
|
|
66
|
-
this._baseDerivationNode = baseNode.derivePath(this._baseDerivationPath);
|
|
67
|
-
return this._baseDerivationNode;
|
|
68
|
-
}
|
|
69
|
-
async keyPair(derivationPath) {
|
|
70
|
-
const wif = await this._toWIF(derivationPath);
|
|
71
|
-
return bitcoinjs_lib_1.ECPair.fromWIF(wif, this._network);
|
|
72
|
-
}
|
|
73
|
-
async _toWIF(derivationPath) {
|
|
74
|
-
const node = await this.seedNode();
|
|
75
|
-
return node.derivePath(derivationPath).toWIF();
|
|
76
|
-
}
|
|
77
|
-
async exportPrivateKey() {
|
|
78
|
-
return this._toWIF(this._baseDerivationPath);
|
|
79
|
-
}
|
|
80
|
-
async signMessage(message, from) {
|
|
81
|
-
const address = await this.getWalletAddress(from);
|
|
82
|
-
const keyPair = await this.keyPair(address.derivationPath);
|
|
83
|
-
const signature = await (0, bitcoinjs_message_1.signAsync)(message, keyPair.privateKey, keyPair.compressed);
|
|
84
|
-
return signature.toString('hex');
|
|
85
|
-
}
|
|
86
|
-
_createMultisigPayment(m, pubkeys) {
|
|
87
|
-
if (m > pubkeys.length) {
|
|
88
|
-
throw new Error(`not enough keys supplied (got ${pubkeys.length} keys, but need at least ${m} to redeem)`);
|
|
89
|
-
}
|
|
90
|
-
// Create m-of-n multisig
|
|
91
|
-
const p2ms = bitcoin.payments.p2ms({
|
|
92
|
-
m: m,
|
|
93
|
-
pubkeys: pubkeys.map((key) => Buffer.from(key, 'hex')),
|
|
94
|
-
network: this._network,
|
|
95
|
-
});
|
|
96
|
-
// Create p2wsh for multisig
|
|
97
|
-
const p2wsh = bitcoin.payments.p2wsh({
|
|
98
|
-
redeem: p2ms,
|
|
99
|
-
network: this._network,
|
|
100
|
-
});
|
|
101
|
-
return p2wsh;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Creates a native-segwit multi-signature address (P2MS in P2WSH) with n signatures of m required keys
|
|
105
|
-
* https://developer.bitcoin.org/reference/rpc/createmultisig.html
|
|
106
|
-
* @param m the number of required signatures
|
|
107
|
-
* @param pubkeys n possible pubkeys in total
|
|
108
|
-
* @returns a json object containing the `address` and `redeemScript`
|
|
109
|
-
*/
|
|
110
|
-
createMultisig(m, pubkeys) {
|
|
111
|
-
const p2wsh = this._createMultisigPayment(m, pubkeys);
|
|
112
|
-
return {
|
|
113
|
-
address: p2wsh.address,
|
|
114
|
-
redeemScript: p2wsh.redeem?.output?.toString('hex'),
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Creates a PSBT of a native-segwit multi-signature address (P2MS in P2WSH) with n signatures of m required keys
|
|
119
|
-
* https://developer.bitcoin.org/reference/rpc/createmultisig.html
|
|
120
|
-
* https://developer.bitcoin.org/reference/rpc/createpsbt.html
|
|
121
|
-
* @param m the number of required signatures
|
|
122
|
-
* @param pubkeys n possible pubkeys in total
|
|
123
|
-
* @param inputs the Inputs to the PSBT
|
|
124
|
-
* @param ouputs the Outputs to the PSBT
|
|
125
|
-
* @returns a base64 encoded psbt string
|
|
126
|
-
*/
|
|
127
|
-
buildMultisigPSBT(m, pubkeys, inputs, outputs) {
|
|
128
|
-
(0, assert_1.default)(inputs.length > 0, 'no inputs found');
|
|
129
|
-
(0, assert_1.default)(outputs.length > 0, 'no outputs found');
|
|
130
|
-
const p2wsh = this._createMultisigPayment(m, pubkeys);
|
|
131
|
-
// Verify pubkeyhash for all inputs matches the p2wsh hash
|
|
132
|
-
(0, assert_1.default)(inputs.every((input) => p2wsh.output.toString('hex') === input.scriptPubKey), 'address pubkeyhash does not match input scriptPubKey');
|
|
133
|
-
// creator
|
|
134
|
-
const psbt = new bitcoin.Psbt({ network: this._network });
|
|
135
|
-
// updater
|
|
136
|
-
inputs.forEach((input) => {
|
|
137
|
-
psbt.addInput({
|
|
138
|
-
hash: input.txid,
|
|
139
|
-
index: input.vout,
|
|
140
|
-
witnessUtxo: { script: p2wsh.output, value: input.value },
|
|
141
|
-
witnessScript: p2wsh.redeem.output,
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
outputs.forEach((output) => {
|
|
145
|
-
psbt.addOutput({
|
|
146
|
-
address: output.to,
|
|
147
|
-
value: output.value,
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
return psbt.toBase64();
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Update a PSBT with input information from our wallet and then sign inputs that we can sign for
|
|
154
|
-
* https://developer.bitcoin.org/reference/rpc/walletprocesspsbt.html
|
|
155
|
-
* @param psbt a base64 encoded psbt string (P2WSH only)
|
|
156
|
-
* @returns a base64 encoded signed psbt string
|
|
157
|
-
*/
|
|
158
|
-
async walletProcessPSBT(psbtString) {
|
|
159
|
-
const psbt = bitcoin.Psbt.fromBase64(psbtString);
|
|
160
|
-
await Promise.all(psbt.data.inputs.map(async (input, i) => {
|
|
161
|
-
(0, assert_1.default)(psbt.getInputType(i).slice(0, 5) === 'p2wsh', 'only accepts P2WSH inputs');
|
|
162
|
-
const scriptStack = bitcoin.script.decompile(input.witnessScript);
|
|
163
|
-
const pubkeys = scriptStack.filter((data) => Buffer.isBuffer(data) && secp256k1_1.default.publicKeyVerify(data));
|
|
164
|
-
await Promise.all(pubkeys.map(async (key) => {
|
|
165
|
-
// create address using pubkey
|
|
166
|
-
const { address: addressString } = bitcoin.payments.p2wpkh({
|
|
167
|
-
pubkey: key,
|
|
168
|
-
network: this._network,
|
|
169
|
-
});
|
|
170
|
-
// Retrieve address object from wallet using address
|
|
171
|
-
const address = await this.findAddress([addressString]);
|
|
172
|
-
// exit if address doesn't exist in wallet
|
|
173
|
-
if (!address)
|
|
174
|
-
return;
|
|
175
|
-
// derive keypair
|
|
176
|
-
const keyPair = await this.keyPair(address.derivationPath);
|
|
177
|
-
// sign PSBT using keypair
|
|
178
|
-
psbt.signInput(i, keyPair);
|
|
179
|
-
}));
|
|
180
|
-
}));
|
|
181
|
-
psbt.validateSignaturesOfAllInputs(); // ensure all signatures are valid!
|
|
182
|
-
return psbt.toBase64();
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Finalize the inputs of a PSBT. If the transaction is fully signed, it will
|
|
186
|
-
* produce a network serialized transaction which can be broadcast with sendrawtransaction
|
|
187
|
-
* https://developer.bitcoin.org/reference/rpc/finalizepsbt.html
|
|
188
|
-
* @param psbt a base64 encoded psbt string
|
|
189
|
-
* @returns a json object containing `psbt` in base64, `hex` for transaction and `complete` for if
|
|
190
|
-
* the transaction has a complete set of signatures
|
|
191
|
-
*/
|
|
192
|
-
finalizePSBT(psbtString) {
|
|
193
|
-
const psbt = bitcoin.Psbt.fromBase64(psbtString);
|
|
194
|
-
try {
|
|
195
|
-
psbt.validateSignaturesOfAllInputs(); // ensure all signatures are valid!
|
|
196
|
-
psbt.finalizeAllInputs();
|
|
197
|
-
}
|
|
198
|
-
catch (error) {
|
|
199
|
-
return {
|
|
200
|
-
psbt: psbt.toBase64(),
|
|
201
|
-
complete: false,
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
return {
|
|
205
|
-
psbt: psbt.toBase64(),
|
|
206
|
-
hex: psbt.extractTransaction().toHex(),
|
|
207
|
-
complete: true,
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
async sendSweepTransactionWithSetOutputs(externalChangeAddress, feePerByte, _outputs, fixedInputs) {
|
|
211
|
-
const { hex, fee } = await this._buildSweepTransactionWithSetOutputs(externalChangeAddress, feePerByte, _outputs, fixedInputs);
|
|
212
|
-
await this.getMethod('sendRawTransaction')(hex);
|
|
213
|
-
return (0, bitcoin_utils_1.normalizeTransactionObject)((0, bitcoin_utils_1.decodeRawTransaction)(hex, this._network), fee);
|
|
214
|
-
}
|
|
215
|
-
async buildSweepTransactionWithSetOutputs(externalChangeAddress, feePerByte, _outputs, fixedInputs) {
|
|
216
|
-
return this._buildSweepTransactionWithSetOutputs(externalChangeAddress, feePerByte, _outputs, fixedInputs);
|
|
217
|
-
}
|
|
218
|
-
async _buildSweepTransactionWithSetOutputs(externalChangeAddress, feePerByte, _outputs = [], fixedInputs) {
|
|
219
|
-
const _feePerByte = feePerByte ||
|
|
220
|
-
(await this.getMethod('getFeePerByte')()) ||
|
|
221
|
-
FEE_PER_BYTE_FALLBACK;
|
|
222
|
-
const inputs = [];
|
|
223
|
-
const outputs = [];
|
|
224
|
-
try {
|
|
225
|
-
const inputsForAmount = await this.getInputsForAmount(_outputs, _feePerByte, fixedInputs, 100, true);
|
|
226
|
-
if (inputsForAmount.change) {
|
|
227
|
-
throw Error('There should not be any change for sweeping transaction');
|
|
228
|
-
}
|
|
229
|
-
inputs.push(...(inputsForAmount.inputs || []));
|
|
230
|
-
outputs.push(...(inputsForAmount.outputs || []));
|
|
231
|
-
}
|
|
232
|
-
catch (e) {
|
|
233
|
-
if (fixedInputs.length === 0) {
|
|
234
|
-
throw Error(`Inputs for amount doesn't exist and no fixedInputs provided`);
|
|
235
|
-
}
|
|
236
|
-
const inputsForAmount = await this._getInputForAmountWithoutUtxoCheck(_outputs, _feePerByte, fixedInputs);
|
|
237
|
-
inputs.push(...(inputsForAmount.inputs.map((utxo) => types_1.Input.fromUTXO(utxo)) || []));
|
|
238
|
-
outputs.push(...(inputsForAmount.outputs || []));
|
|
239
|
-
}
|
|
240
|
-
_outputs.forEach((output) => {
|
|
241
|
-
const spliceIndex = outputs.findIndex((sweepOutput) => output.value === sweepOutput.value);
|
|
242
|
-
outputs.splice(spliceIndex, 1);
|
|
243
|
-
});
|
|
244
|
-
_outputs.push({
|
|
245
|
-
to: externalChangeAddress,
|
|
246
|
-
value: outputs[0].value,
|
|
247
|
-
});
|
|
248
|
-
return this._buildTransactionWithoutUtxoCheck(_outputs, _feePerByte, inputs);
|
|
249
|
-
}
|
|
250
|
-
_getInputForAmountWithoutUtxoCheck(_outputs, _feePerByte, fixedInputs) {
|
|
251
|
-
const utxoBalance = fixedInputs.reduce((a, b) => a + (b['value'] || 0), 0);
|
|
252
|
-
const outputBalance = _outputs.reduce((a, b) => a + (b['value'] || 0), 0);
|
|
253
|
-
const amountToSend = utxoBalance -
|
|
254
|
-
_feePerByte * ((_outputs.length + 1) * 39 + fixedInputs.length * 153); // todo better calculation
|
|
255
|
-
const targets = _outputs.map((target, i) => ({
|
|
256
|
-
id: 'main',
|
|
257
|
-
value: target.value,
|
|
258
|
-
}));
|
|
259
|
-
if (amountToSend - outputBalance > 0) {
|
|
260
|
-
targets.push({ id: 'main', value: amountToSend - outputBalance });
|
|
261
|
-
}
|
|
262
|
-
return (0, bitcoin_utils_1.selectCoins)(fixedInputs, targets, Math.ceil(_feePerByte), fixedInputs);
|
|
263
|
-
}
|
|
264
|
-
async _buildTransactionWithoutUtxoCheck(outputs, feePerByte, fixedInputs) {
|
|
265
|
-
const network = this._network;
|
|
266
|
-
const { fee } = this._getInputForAmountWithoutUtxoCheck(outputs, feePerByte, fixedInputs);
|
|
267
|
-
const inputs = fixedInputs;
|
|
268
|
-
const txb = new bitcoin.TransactionBuilder(network);
|
|
269
|
-
for (const output of outputs) {
|
|
270
|
-
const to = output.to; // Allow for OP_RETURN
|
|
271
|
-
txb.addOutput(to, output.value);
|
|
272
|
-
}
|
|
273
|
-
const prevOutScriptType = 'p2wpkh';
|
|
274
|
-
for (let i = 0; i < inputs.length; i++) {
|
|
275
|
-
const wallet = await this.getWalletAddress(inputs[i].address);
|
|
276
|
-
const keyPair = await this.keyPair(wallet.derivationPath);
|
|
277
|
-
const paymentVariant = this.getPaymentVariantFromPublicKey(keyPair.publicKey);
|
|
278
|
-
txb.addInput(inputs[i].txid, inputs[i].vout, 0, paymentVariant.output);
|
|
279
|
-
}
|
|
280
|
-
for (let i = 0; i < inputs.length; i++) {
|
|
281
|
-
const wallet = await this.getWalletAddress(inputs[i].address);
|
|
282
|
-
const keyPair = await this.keyPair(wallet.derivationPath);
|
|
283
|
-
const paymentVariant = this.getPaymentVariantFromPublicKey(keyPair.publicKey);
|
|
284
|
-
const needsWitness = true;
|
|
285
|
-
const signParams = {
|
|
286
|
-
prevOutScriptType,
|
|
287
|
-
vin: i,
|
|
288
|
-
keyPair,
|
|
289
|
-
witnessValue: 0,
|
|
290
|
-
};
|
|
291
|
-
if (needsWitness) {
|
|
292
|
-
signParams.witnessValue = inputs[i].value;
|
|
293
|
-
}
|
|
294
|
-
txb.sign(signParams);
|
|
295
|
-
}
|
|
296
|
-
return { hex: txb.build().toHex(), fee };
|
|
297
|
-
}
|
|
298
|
-
async _buildTransaction(targets, feePerByte, fixedInputs) {
|
|
299
|
-
const network = this._network;
|
|
300
|
-
const unusedAddress = await this.getUnusedAddress(true);
|
|
301
|
-
const { inputs, change, fee } = await this.getInputsForAmount(targets, feePerByte, fixedInputs);
|
|
302
|
-
if (change) {
|
|
303
|
-
targets.push({
|
|
304
|
-
address: unusedAddress.address,
|
|
305
|
-
value: change.value,
|
|
306
|
-
});
|
|
307
|
-
}
|
|
308
|
-
const psbt = new bitcoinjs_lib_1.Psbt({ network });
|
|
309
|
-
const needsWitness = [
|
|
310
|
-
types_1.bitcoin.AddressType.BECH32,
|
|
311
|
-
types_1.bitcoin.AddressType.P2SH_SEGWIT,
|
|
312
|
-
].includes(this._addressType);
|
|
313
|
-
for (let i = 0; i < inputs.length; i++) {
|
|
314
|
-
const wallet = await this.getWalletAddress(inputs[i].address);
|
|
315
|
-
const keyPair = await this.keyPair(wallet.derivationPath);
|
|
316
|
-
const paymentVariant = this.getPaymentVariantFromPublicKey(keyPair.publicKey);
|
|
317
|
-
const psbtInput = {
|
|
318
|
-
hash: inputs[i].txid,
|
|
319
|
-
index: inputs[i].vout,
|
|
320
|
-
sequence: 0,
|
|
321
|
-
};
|
|
322
|
-
if (needsWitness) {
|
|
323
|
-
psbtInput.witnessUtxo = {
|
|
324
|
-
script: paymentVariant.output,
|
|
325
|
-
value: inputs[i].value,
|
|
326
|
-
};
|
|
327
|
-
}
|
|
328
|
-
else {
|
|
329
|
-
const inputTxRaw = await this.getMethod('getRawTransactionByHash')(inputs[i].txid);
|
|
330
|
-
psbtInput.nonWitnessUtxo = Buffer.from(inputTxRaw, 'hex');
|
|
331
|
-
}
|
|
332
|
-
if (this._addressType === types_1.bitcoin.AddressType.P2SH_SEGWIT) {
|
|
333
|
-
psbtInput.redeemScript = paymentVariant.redeem.output;
|
|
334
|
-
}
|
|
335
|
-
psbt.addInput(psbtInput);
|
|
336
|
-
}
|
|
337
|
-
for (const output of targets) {
|
|
338
|
-
if (output.script) {
|
|
339
|
-
psbt.addOutput({
|
|
340
|
-
value: output.value,
|
|
341
|
-
script: output.script,
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
else {
|
|
345
|
-
psbt.addOutput({
|
|
346
|
-
value: output.value,
|
|
347
|
-
address: output.address,
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
for (let i = 0; i < inputs.length; i++) {
|
|
352
|
-
const wallet = await this.getWalletAddress(inputs[i].address);
|
|
353
|
-
const keyPair = await this.keyPair(wallet.derivationPath);
|
|
354
|
-
psbt.signInput(i, keyPair);
|
|
355
|
-
psbt.validateSignaturesOfInput(i);
|
|
356
|
-
}
|
|
357
|
-
psbt.finalizeAllInputs();
|
|
358
|
-
return { hex: psbt.extractTransaction().toHex(), fee };
|
|
359
|
-
}
|
|
360
|
-
async _buildSweepTransaction(externalChangeAddress, feePerByte) {
|
|
361
|
-
let _feePerByte = feePerByte || null;
|
|
362
|
-
if (!_feePerByte)
|
|
363
|
-
_feePerByte = await this.getMethod('getFeePerByte')();
|
|
364
|
-
const { inputs, outputs, change } = await this.getInputsForAmount([], _feePerByte, [], 100, true);
|
|
365
|
-
if (change) {
|
|
366
|
-
throw new Error('There should not be any change for sweeping transaction');
|
|
367
|
-
}
|
|
368
|
-
const _outputs = [
|
|
369
|
-
{
|
|
370
|
-
address: externalChangeAddress,
|
|
371
|
-
value: outputs[0].value,
|
|
372
|
-
},
|
|
373
|
-
];
|
|
374
|
-
return this._buildTransaction(_outputs, feePerByte, inputs);
|
|
375
|
-
}
|
|
376
|
-
async signPSBT(data, inputs) {
|
|
377
|
-
const psbt = bitcoinjs_lib_1.Psbt.fromBase64(data, { network: this._network });
|
|
378
|
-
for (const input of inputs) {
|
|
379
|
-
const keyPair = await this.keyPair(input.derivationPath);
|
|
380
|
-
psbt.signInput(input.index, keyPair);
|
|
381
|
-
}
|
|
382
|
-
return psbt.toBase64();
|
|
383
|
-
}
|
|
384
|
-
async signBatchP2SHTransaction(inputs, addresses, tx, _lockTime, segwit) {
|
|
385
|
-
const keyPairs = [];
|
|
386
|
-
for (const address of addresses) {
|
|
387
|
-
const wallet = await this.getWalletAddress(address);
|
|
388
|
-
const keyPair = await this.keyPair(wallet.derivationPath);
|
|
389
|
-
keyPairs.push(keyPair);
|
|
390
|
-
}
|
|
391
|
-
const sigs = [];
|
|
392
|
-
for (let i = 0; i < inputs.length; i++) {
|
|
393
|
-
const index = inputs[i].txInputIndex
|
|
394
|
-
? inputs[i].txInputIndex
|
|
395
|
-
: inputs[i].index;
|
|
396
|
-
let sigHash;
|
|
397
|
-
if (segwit) {
|
|
398
|
-
sigHash = tx.hashForWitnessV0(index, inputs[i].outputScript, inputs[i].vout.vSat, bitcoinjs_lib_1.Transaction.SIGHASH_ALL);
|
|
399
|
-
}
|
|
400
|
-
else {
|
|
401
|
-
sigHash = tx.hashForSignature(index, inputs[i].outputScript, bitcoinjs_lib_1.Transaction.SIGHASH_ALL);
|
|
402
|
-
}
|
|
403
|
-
const sig = bitcoinjs_lib_1.script.signature.encode(keyPairs[i].sign(sigHash), bitcoinjs_lib_1.Transaction.SIGHASH_ALL);
|
|
404
|
-
sigs.push(sig);
|
|
405
|
-
}
|
|
406
|
-
return sigs;
|
|
407
|
-
}
|
|
408
|
-
getScriptType() {
|
|
409
|
-
if (this._addressType === types_1.bitcoin.AddressType.LEGACY)
|
|
410
|
-
return 'p2pkh';
|
|
411
|
-
else if (this._addressType === types_1.bitcoin.AddressType.P2SH_SEGWIT)
|
|
412
|
-
return 'p2sh-p2wpkh';
|
|
413
|
-
else if (this._addressType === types_1.bitcoin.AddressType.BECH32)
|
|
414
|
-
return 'p2wpkh';
|
|
415
|
-
}
|
|
416
|
-
async getConnectedNetwork() {
|
|
417
|
-
return this._network;
|
|
418
|
-
}
|
|
419
|
-
async isWalletAvailable() {
|
|
420
|
-
return true;
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
exports.default = BitcoinJsWalletProvider;
|
|
424
|
-
//# sourceMappingURL=BitcoinJsWalletProvider.js.map
|
package/lib/index.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.BitcoinJsWalletProvider = void 0;
|
|
7
|
-
const BitcoinJsWalletProvider_1 = __importDefault(require("./BitcoinJsWalletProvider"));
|
|
8
|
-
exports.BitcoinJsWalletProvider = BitcoinJsWalletProvider_1.default;
|
|
9
|
-
//# sourceMappingURL=index.js.map
|