utxo-lib 1.1.5 → 8.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of utxo-lib might be problematic. Click here for more details.
- package/index.js +47 -0
- package/package.json +6 -80
- package/LICENSE +0 -21
- package/README.md +0 -59
- package/dist/src/address.d.ts +0 -11
- package/dist/src/address.d.ts.map +0 -1
- package/dist/src/address.js +0 -37
- package/dist/src/addressFormat.d.ts +0 -53
- package/dist/src/addressFormat.d.ts.map +0 -1
- package/dist/src/addressFormat.js +0 -110
- package/dist/src/bitgo/Musig2.d.ts +0 -51
- package/dist/src/bitgo/Musig2.d.ts.map +0 -1
- package/dist/src/bitgo/Musig2.js +0 -175
- package/dist/src/bitgo/Unspent.d.ts +0 -95
- package/dist/src/bitgo/Unspent.d.ts.map +0 -1
- package/dist/src/bitgo/Unspent.js +0 -138
- package/dist/src/bitgo/UtxoPsbt.d.ts +0 -132
- package/dist/src/bitgo/UtxoPsbt.d.ts.map +0 -1
- package/dist/src/bitgo/UtxoPsbt.js +0 -469
- package/dist/src/bitgo/UtxoTransaction.d.ts +0 -22
- package/dist/src/bitgo/UtxoTransaction.d.ts.map +0 -1
- package/dist/src/bitgo/UtxoTransaction.js +0 -97
- package/dist/src/bitgo/UtxoTransactionBuilder.d.ts +0 -26
- package/dist/src/bitgo/UtxoTransactionBuilder.d.ts.map +0 -1
- package/dist/src/bitgo/UtxoTransactionBuilder.js +0 -67
- package/dist/src/bitgo/bbc/DashPsbt.d.ts +0 -12
- package/dist/src/bitgo/bbc/DashPsbt.d.ts.map +0 -1
- package/dist/src/bitgo/bbc/DashPsbt.js +0 -27
- package/dist/src/bitgo/bbc/DashTransaction.d.ts +0 -39
- package/dist/src/bitgo/bbc/DashTransaction.d.ts.map +0 -1
- package/dist/src/bitgo/bbc/DashTransaction.js +0 -109
- package/dist/src/bitgo/bbc/DashTransactionBuilder.d.ts +0 -14
- package/dist/src/bitgo/bbc/DashTransactionBuilder.d.ts.map +0 -1
- package/dist/src/bitgo/bbc/DashTransactionBuilder.js +0 -28
- package/dist/src/bitgo/bbc/index.d.ts +0 -4
- package/dist/src/bitgo/bbc/index.d.ts.map +0 -1
- package/dist/src/bitgo/bbc/index.js +0 -16
- package/dist/src/bitgo/bitcoincash/address.d.ts +0 -35
- package/dist/src/bitgo/bitcoincash/address.d.ts.map +0 -1
- package/dist/src/bitgo/bitcoincash/address.js +0 -151
- package/dist/src/bitgo/bitcoincash/index.d.ts +0 -2
- package/dist/src/bitgo/bitcoincash/index.d.ts.map +0 -1
- package/dist/src/bitgo/bitcoincash/index.js +0 -14
- package/dist/src/bitgo/dash/DashPsbt.d.ts +0 -12
- package/dist/src/bitgo/dash/DashPsbt.d.ts.map +0 -1
- package/dist/src/bitgo/dash/DashPsbt.js +0 -27
- package/dist/src/bitgo/dash/DashTransaction.d.ts +0 -39
- package/dist/src/bitgo/dash/DashTransaction.d.ts.map +0 -1
- package/dist/src/bitgo/dash/DashTransaction.js +0 -109
- package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts +0 -14
- package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts.map +0 -1
- package/dist/src/bitgo/dash/DashTransactionBuilder.js +0 -28
- package/dist/src/bitgo/dash/index.d.ts +0 -4
- package/dist/src/bitgo/dash/index.d.ts.map +0 -1
- package/dist/src/bitgo/dash/index.js +0 -16
- package/dist/src/bitgo/index.d.ts +0 -17
- package/dist/src/bitgo/index.d.ts.map +0 -1
- package/dist/src/bitgo/index.js +0 -30
- package/dist/src/bitgo/keyutil.d.ts +0 -17
- package/dist/src/bitgo/keyutil.d.ts.map +0 -1
- package/dist/src/bitgo/keyutil.js +0 -37
- package/dist/src/bitgo/nonStandardHalfSigned.d.ts +0 -7
- package/dist/src/bitgo/nonStandardHalfSigned.d.ts.map +0 -1
- package/dist/src/bitgo/nonStandardHalfSigned.js +0 -56
- package/dist/src/bitgo/outputScripts.d.ts +0 -84
- package/dist/src/bitgo/outputScripts.d.ts.map +0 -1
- package/dist/src/bitgo/outputScripts.js +0 -297
- package/dist/src/bitgo/parseInput.d.ts +0 -92
- package/dist/src/bitgo/parseInput.d.ts.map +0 -1
- package/dist/src/bitgo/parseInput.js +0 -344
- package/dist/src/bitgo/psbt/fromHalfSigned.d.ts +0 -24
- package/dist/src/bitgo/psbt/fromHalfSigned.d.ts.map +0 -1
- package/dist/src/bitgo/psbt/fromHalfSigned.js +0 -91
- package/dist/src/bitgo/psbt/scriptTypes.d.ts +0 -6
- package/dist/src/bitgo/psbt/scriptTypes.d.ts.map +0 -1
- package/dist/src/bitgo/psbt/scriptTypes.js +0 -23
- package/dist/src/bitgo/signature.d.ts +0 -84
- package/dist/src/bitgo/signature.d.ts.map +0 -1
- package/dist/src/bitgo/signature.js +0 -222
- package/dist/src/bitgo/tnumber.d.ts +0 -9
- package/dist/src/bitgo/tnumber.d.ts.map +0 -1
- package/dist/src/bitgo/tnumber.js +0 -31
- package/dist/src/bitgo/transaction.d.ts +0 -29
- package/dist/src/bitgo/transaction.d.ts.map +0 -1
- package/dist/src/bitgo/transaction.js +0 -231
- package/dist/src/bitgo/types.d.ts +0 -5
- package/dist/src/bitgo/types.d.ts.map +0 -1
- package/dist/src/bitgo/types.js +0 -12
- package/dist/src/bitgo/wallet/Psbt.d.ts +0 -47
- package/dist/src/bitgo/wallet/Psbt.d.ts.map +0 -1
- package/dist/src/bitgo/wallet/Psbt.js +0 -232
- package/dist/src/bitgo/wallet/Unspent.d.ts +0 -47
- package/dist/src/bitgo/wallet/Unspent.d.ts.map +0 -1
- package/dist/src/bitgo/wallet/Unspent.js +0 -154
- package/dist/src/bitgo/wallet/WalletKeys.d.ts +0 -72
- package/dist/src/bitgo/wallet/WalletKeys.d.ts.map +0 -1
- package/dist/src/bitgo/wallet/WalletKeys.js +0 -104
- package/dist/src/bitgo/wallet/WalletOutput.d.ts +0 -18
- package/dist/src/bitgo/wallet/WalletOutput.d.ts.map +0 -1
- package/dist/src/bitgo/wallet/WalletOutput.js +0 -69
- package/dist/src/bitgo/wallet/WalletScripts.d.ts +0 -7
- package/dist/src/bitgo/wallet/WalletScripts.d.ts.map +0 -1
- package/dist/src/bitgo/wallet/WalletScripts.js +0 -15
- package/dist/src/bitgo/wallet/WalletUnspentSigner.d.ts +0 -19
- package/dist/src/bitgo/wallet/WalletUnspentSigner.d.ts.map +0 -1
- package/dist/src/bitgo/wallet/WalletUnspentSigner.js +0 -47
- package/dist/src/bitgo/wallet/chains.d.ts +0 -57
- package/dist/src/bitgo/wallet/chains.d.ts.map +0 -1
- package/dist/src/bitgo/wallet/chains.js +0 -106
- package/dist/src/bitgo/wallet/index.d.ts +0 -8
- package/dist/src/bitgo/wallet/index.d.ts.map +0 -1
- package/dist/src/bitgo/wallet/index.js +0 -20
- package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts +0 -26
- package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts.map +0 -1
- package/dist/src/bitgo/zcash/ZcashBufferutils.js +0 -157
- package/dist/src/bitgo/zcash/ZcashPsbt.d.ts +0 -36
- package/dist/src/bitgo/zcash/ZcashPsbt.d.ts.map +0 -1
- package/dist/src/bitgo/zcash/ZcashPsbt.js +0 -146
- package/dist/src/bitgo/zcash/ZcashTransaction.d.ts +0 -61
- package/dist/src/bitgo/zcash/ZcashTransaction.d.ts.map +0 -1
- package/dist/src/bitgo/zcash/ZcashTransaction.js +0 -341
- package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts +0 -21
- package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts.map +0 -1
- package/dist/src/bitgo/zcash/ZcashTransactionBuilder.js +0 -105
- package/dist/src/bitgo/zcash/address.d.ts +0 -8
- package/dist/src/bitgo/zcash/address.d.ts.map +0 -1
- package/dist/src/bitgo/zcash/address.js +0 -57
- package/dist/src/bitgo/zcash/hashZip0244.d.ts +0 -27
- package/dist/src/bitgo/zcash/hashZip0244.d.ts.map +0 -1
- package/dist/src/bitgo/zcash/hashZip0244.js +0 -184
- package/dist/src/bitgo/zcash/index.d.ts +0 -4
- package/dist/src/bitgo/zcash/index.d.ts.map +0 -1
- package/dist/src/bitgo/zcash/index.js +0 -16
- package/dist/src/classify.d.ts +0 -19
- package/dist/src/classify.d.ts.map +0 -1
- package/dist/src/classify.js +0 -89
- package/dist/src/index.d.ts +0 -13
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -36
- package/dist/src/networks.d.ts +0 -115
- package/dist/src/networks.d.ts.map +0 -1
- package/dist/src/networks.js +0 -458
- package/dist/src/noble_ecc.d.ts +0 -28
- package/dist/src/noble_ecc.d.ts.map +0 -1
- package/dist/src/noble_ecc.js +0 -168
- package/dist/src/payments/index.d.ts +0 -4
- package/dist/src/payments/index.d.ts.map +0 -1
- package/dist/src/payments/index.js +0 -8
- package/dist/src/payments/p2tr.d.ts +0 -3
- package/dist/src/payments/p2tr.d.ts.map +0 -1
- package/dist/src/payments/p2tr.js +0 -348
- package/dist/src/payments/p2tr_ns.d.ts +0 -3
- package/dist/src/payments/p2tr_ns.d.ts.map +0 -1
- package/dist/src/payments/p2tr_ns.js +0 -134
- package/dist/src/taproot.d.ts +0 -141
- package/dist/src/taproot.d.ts.map +0 -1
- package/dist/src/taproot.js +0 -384
- package/dist/src/templates/multisig/index.d.ts +0 -4
- package/dist/src/templates/multisig/index.d.ts.map +0 -1
- package/dist/src/templates/multisig/index.js +0 -8
- package/dist/src/templates/multisig/input.d.ts +0 -7
- package/dist/src/templates/multisig/input.d.ts.map +0 -1
- package/dist/src/templates/multisig/input.js +0 -25
- package/dist/src/templates/multisig/output.d.ts +0 -7
- package/dist/src/templates/multisig/output.d.ts.map +0 -1
- package/dist/src/templates/multisig/output.js +0 -38
- package/dist/src/templates/nulldata.d.ts +0 -10
- package/dist/src/templates/nulldata.d.ts.map +0 -1
- package/dist/src/templates/nulldata.js +0 -17
- package/dist/src/templates/pubkey/index.d.ts +0 -4
- package/dist/src/templates/pubkey/index.d.ts.map +0 -1
- package/dist/src/templates/pubkey/index.js +0 -8
- package/dist/src/templates/pubkey/input.d.ts +0 -7
- package/dist/src/templates/pubkey/input.d.ts.map +0 -1
- package/dist/src/templates/pubkey/input.js +0 -14
- package/dist/src/templates/pubkey/output.d.ts +0 -7
- package/dist/src/templates/pubkey/output.d.ts.map +0 -1
- package/dist/src/templates/pubkey/output.js +0 -15
- package/dist/src/templates/pubkeyhash/index.d.ts +0 -4
- package/dist/src/templates/pubkeyhash/index.d.ts.map +0 -1
- package/dist/src/templates/pubkeyhash/index.js +0 -8
- package/dist/src/templates/pubkeyhash/input.d.ts +0 -7
- package/dist/src/templates/pubkeyhash/input.d.ts.map +0 -1
- package/dist/src/templates/pubkeyhash/input.js +0 -16
- package/dist/src/templates/pubkeyhash/output.d.ts +0 -6
- package/dist/src/templates/pubkeyhash/output.d.ts.map +0 -1
- package/dist/src/templates/pubkeyhash/output.js +0 -20
- package/dist/src/templates/scripthash/index.d.ts +0 -4
- package/dist/src/templates/scripthash/index.d.ts.map +0 -1
- package/dist/src/templates/scripthash/index.js +0 -8
- package/dist/src/templates/scripthash/input.d.ts +0 -6
- package/dist/src/templates/scripthash/input.d.ts.map +0 -1
- package/dist/src/templates/scripthash/input.js +0 -43
- package/dist/src/templates/scripthash/output.d.ts +0 -6
- package/dist/src/templates/scripthash/output.d.ts.map +0 -1
- package/dist/src/templates/scripthash/output.js +0 -15
- package/dist/src/templates/taproot/index.d.ts +0 -4
- package/dist/src/templates/taproot/index.d.ts.map +0 -1
- package/dist/src/templates/taproot/index.js +0 -8
- package/dist/src/templates/taproot/input.d.ts +0 -6
- package/dist/src/templates/taproot/input.d.ts.map +0 -1
- package/dist/src/templates/taproot/input.js +0 -23
- package/dist/src/templates/taproot/output.d.ts +0 -6
- package/dist/src/templates/taproot/output.d.ts.map +0 -1
- package/dist/src/templates/taproot/output.js +0 -15
- package/dist/src/templates/taprootnofn/index.d.ts +0 -4
- package/dist/src/templates/taprootnofn/index.d.ts.map +0 -1
- package/dist/src/templates/taprootnofn/index.js +0 -8
- package/dist/src/templates/taprootnofn/input.d.ts +0 -7
- package/dist/src/templates/taprootnofn/input.d.ts.map +0 -1
- package/dist/src/templates/taprootnofn/input.js +0 -24
- package/dist/src/templates/taprootnofn/output.d.ts +0 -7
- package/dist/src/templates/taprootnofn/output.d.ts.map +0 -1
- package/dist/src/templates/taprootnofn/output.js +0 -28
- package/dist/src/templates/witnesscommitment/index.d.ts +0 -3
- package/dist/src/templates/witnesscommitment/index.d.ts.map +0 -1
- package/dist/src/templates/witnesscommitment/index.js +0 -6
- package/dist/src/templates/witnesscommitment/output.d.ts +0 -8
- package/dist/src/templates/witnesscommitment/output.d.ts.map +0 -1
- package/dist/src/templates/witnesscommitment/output.js +0 -31
- package/dist/src/templates/witnesspubkeyhash/index.d.ts +0 -4
- package/dist/src/templates/witnesspubkeyhash/index.d.ts.map +0 -1
- package/dist/src/templates/witnesspubkeyhash/index.js +0 -8
- package/dist/src/templates/witnesspubkeyhash/input.d.ts +0 -7
- package/dist/src/templates/witnesspubkeyhash/input.d.ts.map +0 -1
- package/dist/src/templates/witnesspubkeyhash/input.js +0 -19
- package/dist/src/templates/witnesspubkeyhash/output.d.ts +0 -6
- package/dist/src/templates/witnesspubkeyhash/output.d.ts.map +0 -1
- package/dist/src/templates/witnesspubkeyhash/output.js +0 -15
- package/dist/src/templates/witnessscripthash/index.d.ts +0 -4
- package/dist/src/templates/witnessscripthash/index.d.ts.map +0 -1
- package/dist/src/templates/witnessscripthash/index.js +0 -8
- package/dist/src/templates/witnessscripthash/input.d.ts +0 -6
- package/dist/src/templates/witnessscripthash/input.d.ts.map +0 -1
- package/dist/src/templates/witnessscripthash/input.js +0 -35
- package/dist/src/templates/witnessscripthash/output.d.ts +0 -6
- package/dist/src/templates/witnessscripthash/output.d.ts.map +0 -1
- package/dist/src/templates/witnessscripthash/output.js +0 -15
- package/dist/src/testutil/index.d.ts +0 -3
- package/dist/src/testutil/index.d.ts.map +0 -1
- package/dist/src/testutil/index.js +0 -15
- package/dist/src/testutil/keys.d.ts +0 -10
- package/dist/src/testutil/keys.d.ts.map +0 -1
- package/dist/src/testutil/keys.js +0 -40
- package/dist/src/testutil/mock.d.ts +0 -21
- package/dist/src/testutil/mock.d.ts.map +0 -1
- package/dist/src/testutil/mock.js +0 -86
- package/dist/src/transaction_builder.d.ts +0 -47
- package/dist/src/transaction_builder.d.ts.map +0 -1
- package/dist/src/transaction_builder.js +0 -1084
@@ -1,231 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.createTransactionBuilderFromTransaction = exports.createTransactionBuilderForNetwork = exports.createPsbtForNetwork = exports.setPsbtDefaults = exports.setTransactionBuilderDefaults = exports.getDefaultTransactionVersion = exports.createTransactionFromHex = exports.createPsbtFromTransaction = exports.createPsbtFromHex = exports.createPsbtFromBuffer = exports.createTransactionFromBuffer = void 0;
|
4
|
-
const networks_1 = require("../networks");
|
5
|
-
const UtxoPsbt_1 = require("./UtxoPsbt");
|
6
|
-
const UtxoTransaction_1 = require("./UtxoTransaction");
|
7
|
-
const UtxoTransactionBuilder_1 = require("./UtxoTransactionBuilder");
|
8
|
-
const DashPsbt_1 = require("./dash/DashPsbt");
|
9
|
-
const DashTransaction_1 = require("./dash/DashTransaction");
|
10
|
-
const DashTransactionBuilder_1 = require("./dash/DashTransactionBuilder");
|
11
|
-
const ZcashPsbt_1 = require("./zcash/ZcashPsbt");
|
12
|
-
const ZcashTransactionBuilder_1 = require("./zcash/ZcashTransactionBuilder");
|
13
|
-
const ZcashTransaction_1 = require("./zcash/ZcashTransaction");
|
14
|
-
function createTransactionFromBuffer(buf, network, { version, amountType } = {}, deprecatedAmountType) {
|
15
|
-
if (amountType) {
|
16
|
-
if (deprecatedAmountType && amountType !== deprecatedAmountType) {
|
17
|
-
throw new Error(`invalid arguments`);
|
18
|
-
}
|
19
|
-
}
|
20
|
-
else {
|
21
|
-
if (deprecatedAmountType) {
|
22
|
-
amountType = deprecatedAmountType;
|
23
|
-
}
|
24
|
-
else {
|
25
|
-
amountType = 'number';
|
26
|
-
}
|
27
|
-
}
|
28
|
-
switch (networks_1.getMainnet(network)) {
|
29
|
-
case networks_1.networks.bitcoin:
|
30
|
-
case networks_1.networks.bitcoincash:
|
31
|
-
case networks_1.networks.bitcoinsv:
|
32
|
-
case networks_1.networks.bitcoingold:
|
33
|
-
case networks_1.networks.dogecoin:
|
34
|
-
case networks_1.networks.ecash:
|
35
|
-
case networks_1.networks.litecoin:
|
36
|
-
return UtxoTransaction_1.UtxoTransaction.fromBuffer(buf, false, amountType, network);
|
37
|
-
case networks_1.networks.dash:
|
38
|
-
return DashTransaction_1.DashTransaction.fromBuffer(buf, false, amountType, network);
|
39
|
-
case networks_1.networks.zcash:
|
40
|
-
return ZcashTransaction_1.ZcashTransaction.fromBufferWithVersion(buf, network, version, amountType);
|
41
|
-
}
|
42
|
-
/* istanbul ignore next */
|
43
|
-
throw new Error(`invalid network`);
|
44
|
-
}
|
45
|
-
exports.createTransactionFromBuffer = createTransactionFromBuffer;
|
46
|
-
function createPsbtFromBuffer(buf, network, bip32PathsAbsolute = false) {
|
47
|
-
switch (networks_1.getMainnet(network)) {
|
48
|
-
case networks_1.networks.bitcoin:
|
49
|
-
case networks_1.networks.bitcoincash:
|
50
|
-
case networks_1.networks.bitcoinsv:
|
51
|
-
case networks_1.networks.bitcoingold:
|
52
|
-
case networks_1.networks.dogecoin:
|
53
|
-
case networks_1.networks.ecash:
|
54
|
-
case networks_1.networks.litecoin:
|
55
|
-
return UtxoPsbt_1.UtxoPsbt.fromBuffer(buf, { network, bip32PathsAbsolute });
|
56
|
-
case networks_1.networks.dash:
|
57
|
-
return DashPsbt_1.DashPsbt.fromBuffer(buf, { network, bip32PathsAbsolute });
|
58
|
-
case networks_1.networks.zcash:
|
59
|
-
return ZcashPsbt_1.ZcashPsbt.fromBuffer(buf, { network, bip32PathsAbsolute });
|
60
|
-
}
|
61
|
-
/* istanbul ignore next */
|
62
|
-
throw new Error(`invalid network`);
|
63
|
-
}
|
64
|
-
exports.createPsbtFromBuffer = createPsbtFromBuffer;
|
65
|
-
function createPsbtFromHex(hex, network, bip32PathsAbsolute = false) {
|
66
|
-
return createPsbtFromBuffer(Buffer.from(hex, 'hex'), network, bip32PathsAbsolute);
|
67
|
-
}
|
68
|
-
exports.createPsbtFromHex = createPsbtFromHex;
|
69
|
-
function createPsbtFromTransaction(tx, prevOuts) {
|
70
|
-
switch (networks_1.getMainnet(tx.network)) {
|
71
|
-
case networks_1.networks.bitcoin:
|
72
|
-
case networks_1.networks.bitcoincash:
|
73
|
-
case networks_1.networks.bitcoinsv:
|
74
|
-
case networks_1.networks.bitcoingold:
|
75
|
-
case networks_1.networks.dogecoin:
|
76
|
-
case networks_1.networks.ecash:
|
77
|
-
case networks_1.networks.litecoin:
|
78
|
-
return UtxoPsbt_1.UtxoPsbt.fromTransaction(tx, prevOuts);
|
79
|
-
case networks_1.networks.dash:
|
80
|
-
return DashPsbt_1.DashPsbt.fromTransaction(tx, prevOuts);
|
81
|
-
case networks_1.networks.zcash:
|
82
|
-
return ZcashPsbt_1.ZcashPsbt.fromTransaction(tx, prevOuts);
|
83
|
-
}
|
84
|
-
/* istanbul ignore next */
|
85
|
-
throw new Error(`invalid network`);
|
86
|
-
}
|
87
|
-
exports.createPsbtFromTransaction = createPsbtFromTransaction;
|
88
|
-
/* istanbul ignore next */
|
89
|
-
function createTransactionFromHex(hex, network, amountType = 'number') {
|
90
|
-
return createTransactionFromBuffer(Buffer.from(hex, 'hex'), network, { amountType });
|
91
|
-
}
|
92
|
-
exports.createTransactionFromHex = createTransactionFromHex;
|
93
|
-
function getDefaultTransactionVersion(network) {
|
94
|
-
switch (networks_1.getMainnet(network)) {
|
95
|
-
case networks_1.networks.bitcoincash:
|
96
|
-
case networks_1.networks.bitcoinsv:
|
97
|
-
case networks_1.networks.bitcoingold:
|
98
|
-
case networks_1.networks.ecash:
|
99
|
-
return 2;
|
100
|
-
case networks_1.networks.zcash:
|
101
|
-
return ZcashTransaction_1.ZcashTransaction.VERSION4_BRANCH_NU5;
|
102
|
-
default:
|
103
|
-
return 1;
|
104
|
-
}
|
105
|
-
}
|
106
|
-
exports.getDefaultTransactionVersion = getDefaultTransactionVersion;
|
107
|
-
function setTransactionBuilderDefaults(txb, network, { version = getDefaultTransactionVersion(network) } = {}) {
|
108
|
-
switch (networks_1.getMainnet(network)) {
|
109
|
-
case networks_1.networks.bitcoincash:
|
110
|
-
case networks_1.networks.bitcoinsv:
|
111
|
-
case networks_1.networks.bitcoingold:
|
112
|
-
case networks_1.networks.ecash:
|
113
|
-
if (version !== 2) {
|
114
|
-
throw new Error(`invalid version`);
|
115
|
-
}
|
116
|
-
txb.setVersion(version);
|
117
|
-
break;
|
118
|
-
case networks_1.networks.zcash:
|
119
|
-
txb.setDefaultsForVersion(network, version);
|
120
|
-
break;
|
121
|
-
default:
|
122
|
-
if (version !== 1) {
|
123
|
-
throw new Error(`invalid version`);
|
124
|
-
}
|
125
|
-
}
|
126
|
-
}
|
127
|
-
exports.setTransactionBuilderDefaults = setTransactionBuilderDefaults;
|
128
|
-
function setPsbtDefaults(psbt, network, { version = getDefaultTransactionVersion(network) } = {}) {
|
129
|
-
switch (networks_1.getMainnet(network)) {
|
130
|
-
case networks_1.networks.bitcoincash:
|
131
|
-
case networks_1.networks.bitcoinsv:
|
132
|
-
case networks_1.networks.bitcoingold:
|
133
|
-
case networks_1.networks.ecash:
|
134
|
-
if (version !== 2) {
|
135
|
-
throw new Error(`invalid version`);
|
136
|
-
}
|
137
|
-
break;
|
138
|
-
case networks_1.networks.zcash:
|
139
|
-
if (![
|
140
|
-
ZcashTransaction_1.ZcashTransaction.VERSION4_BRANCH_CANOPY,
|
141
|
-
ZcashTransaction_1.ZcashTransaction.VERSION4_BRANCH_NU5,
|
142
|
-
ZcashTransaction_1.ZcashTransaction.VERSION5_BRANCH_NU5,
|
143
|
-
].includes(version)) {
|
144
|
-
throw new Error(`invalid version`);
|
145
|
-
}
|
146
|
-
psbt.setDefaultsForVersion(network, version);
|
147
|
-
break;
|
148
|
-
default:
|
149
|
-
if (version !== 1) {
|
150
|
-
throw new Error(`invalid version`);
|
151
|
-
}
|
152
|
-
// FIXME: set version here, because there's a bug in the upstream PSBT
|
153
|
-
// that defaults transactions to v2.
|
154
|
-
psbt.setVersion(version);
|
155
|
-
}
|
156
|
-
}
|
157
|
-
exports.setPsbtDefaults = setPsbtDefaults;
|
158
|
-
function createPsbtForNetwork(psbtOpts, { version } = {}) {
|
159
|
-
let psbt;
|
160
|
-
switch (networks_1.getMainnet(psbtOpts.network)) {
|
161
|
-
case networks_1.networks.bitcoin:
|
162
|
-
case networks_1.networks.bitcoincash:
|
163
|
-
case networks_1.networks.bitcoinsv:
|
164
|
-
case networks_1.networks.bitcoingold:
|
165
|
-
case networks_1.networks.dogecoin:
|
166
|
-
case networks_1.networks.ecash:
|
167
|
-
case networks_1.networks.litecoin: {
|
168
|
-
psbt = UtxoPsbt_1.UtxoPsbt.createPsbt(psbtOpts);
|
169
|
-
break;
|
170
|
-
}
|
171
|
-
case networks_1.networks.dash: {
|
172
|
-
psbt = DashPsbt_1.DashPsbt.createPsbt(psbtOpts);
|
173
|
-
break;
|
174
|
-
}
|
175
|
-
case networks_1.networks.zcash: {
|
176
|
-
psbt = ZcashPsbt_1.ZcashPsbt.createPsbt(psbtOpts);
|
177
|
-
break;
|
178
|
-
}
|
179
|
-
default:
|
180
|
-
throw new Error(`unsupported network`);
|
181
|
-
}
|
182
|
-
setPsbtDefaults(psbt, psbtOpts.network, { version });
|
183
|
-
return psbt;
|
184
|
-
}
|
185
|
-
exports.createPsbtForNetwork = createPsbtForNetwork;
|
186
|
-
function createTransactionBuilderForNetwork(network, { version } = {}) {
|
187
|
-
let txb;
|
188
|
-
switch (networks_1.getMainnet(network)) {
|
189
|
-
case networks_1.networks.bitcoin:
|
190
|
-
case networks_1.networks.bitcoincash:
|
191
|
-
case networks_1.networks.bitcoinsv:
|
192
|
-
case networks_1.networks.bitcoingold:
|
193
|
-
case networks_1.networks.dogecoin:
|
194
|
-
case networks_1.networks.ecash:
|
195
|
-
case networks_1.networks.litecoin: {
|
196
|
-
txb = new UtxoTransactionBuilder_1.UtxoTransactionBuilder(network);
|
197
|
-
break;
|
198
|
-
}
|
199
|
-
case networks_1.networks.dash:
|
200
|
-
txb = new DashTransactionBuilder_1.DashTransactionBuilder(network);
|
201
|
-
break;
|
202
|
-
case networks_1.networks.zcash: {
|
203
|
-
txb = new ZcashTransactionBuilder_1.ZcashTransactionBuilder(network);
|
204
|
-
break;
|
205
|
-
}
|
206
|
-
default:
|
207
|
-
throw new Error(`unsupported network`);
|
208
|
-
}
|
209
|
-
setTransactionBuilderDefaults(txb, network, { version });
|
210
|
-
return txb;
|
211
|
-
}
|
212
|
-
exports.createTransactionBuilderForNetwork = createTransactionBuilderForNetwork;
|
213
|
-
function createTransactionBuilderFromTransaction(tx, prevOutputs) {
|
214
|
-
switch (networks_1.getMainnet(tx.network)) {
|
215
|
-
case networks_1.networks.bitcoin:
|
216
|
-
case networks_1.networks.bitcoincash:
|
217
|
-
case networks_1.networks.bitcoinsv:
|
218
|
-
case networks_1.networks.bitcoingold:
|
219
|
-
case networks_1.networks.dogecoin:
|
220
|
-
case networks_1.networks.ecash:
|
221
|
-
case networks_1.networks.litecoin:
|
222
|
-
return UtxoTransactionBuilder_1.UtxoTransactionBuilder.fromTransaction(tx, undefined, prevOutputs);
|
223
|
-
case networks_1.networks.dash:
|
224
|
-
return DashTransactionBuilder_1.DashTransactionBuilder.fromTransaction(tx, undefined, prevOutputs);
|
225
|
-
case networks_1.networks.zcash:
|
226
|
-
return ZcashTransactionBuilder_1.ZcashTransactionBuilder.fromTransaction(tx, undefined, prevOutputs);
|
227
|
-
}
|
228
|
-
throw new Error(`invalid network`);
|
229
|
-
}
|
230
|
-
exports.createTransactionBuilderFromTransaction = createTransactionBuilderFromTransaction;
|
231
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYml0Z28vdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsMENBQTREO0FBRTVELHlDQUFnRDtBQUNoRCx1REFBb0Q7QUFDcEQscUVBQWtFO0FBQ2xFLDhDQUEyQztBQUMzQyw0REFBeUQ7QUFDekQsMEVBQXVFO0FBQ3ZFLGlEQUE4QztBQUM5Qyw2RUFBMEU7QUFDMUUsK0RBQTBFO0FBRTFFLFNBQWdCLDJCQUEyQixDQUN6QyxHQUFXLEVBQ1gsT0FBZ0IsRUFDaEIsRUFBRSxPQUFPLEVBQUUsVUFBVSxLQUE2RCxFQUFFLEVBQ3BGLG9CQUEwQztJQUUxQyxJQUFJLFVBQVUsRUFBRTtRQUNkLElBQUksb0JBQW9CLElBQUksVUFBVSxLQUFLLG9CQUFvQixFQUFFO1lBQy9ELE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN0QztLQUNGO1NBQU07UUFDTCxJQUFJLG9CQUFvQixFQUFFO1lBQ3hCLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQztTQUNuQzthQUFNO1lBQ0wsVUFBVSxHQUFHLFFBQVEsQ0FBQztTQUN2QjtLQUNGO0lBQ0QsUUFBUSxxQkFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzNCLEtBQUssbUJBQVEsQ0FBQyxPQUFPLENBQUM7UUFDdEIsS0FBSyxtQkFBUSxDQUFDLFdBQVcsQ0FBQztRQUMxQixLQUFLLG1CQUFRLENBQUMsU0FBUyxDQUFDO1FBQ3hCLEtBQUssbUJBQVEsQ0FBQyxXQUFXLENBQUM7UUFDMUIsS0FBSyxtQkFBUSxDQUFDLFFBQVEsQ0FBQztRQUN2QixLQUFLLG1CQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3BCLEtBQUssbUJBQVEsQ0FBQyxRQUFRO1lBQ3BCLE9BQU8saUNBQWUsQ0FBQyxVQUFVLENBQVUsR0FBRyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7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USxDQUFDLFNBQVMsQ0FBQztRQUN4QixLQUFLLG1CQUFRLENBQUMsV0FBVyxDQUFDO1FBQzFCLEtBQUssbUJBQVEsQ0FBQyxRQUFRLENBQUM7UUFDdkIsS0FBSyxtQkFBUSxDQUFDLEtBQUssQ0FBQztRQUNwQixLQUFLLG1CQUFRLENBQUMsUUFBUTtZQUNwQixPQUFPLCtDQUFzQixDQUFDLGVBQWUsQ0FBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3JGLEtBQUssbUJBQVEsQ0FBQyxJQUFJO1lBQ2hCLE9BQU8sK0NBQXNCLENBQUMsZUFBZSxDQUMzQyxFQUE4QixFQUM5QixTQUFTLEVBQ1QsV0FBa0MsQ0FDbkMsQ0FBQztRQUNKLEtBQUssbUJBQVEsQ0FBQyxLQUFLO1lBQ2pCLE9BQU8saURBQXVCLENBQUMsZUFBZSxDQUM1QyxFQUErQixFQUMvQixTQUFTLEVBQ1QsV0FBa0MsQ0FDbkMsQ0FBQztLQUNMO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUE1QkQsMEZBNEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHhPdXRwdXQgfSBmcm9tICdiaXRjb2luanMtbGliJztcblxuaW1wb3J0IHsgbmV0d29ya3MsIE5ldHdvcmssIGdldE1haW5uZXQgfSBmcm9tICcuLi9uZXR3b3Jrcyc7XG5cbmltcG9ydCB7IFV0eG9Qc2J0LCBQc2J0T3B0cyB9IGZyb20gJy4vVXR4b1BzYnQnO1xuaW1wb3J0IHsgVXR4b1RyYW5zYWN0aW9uIH0gZnJvbSAnLi9VdHhvVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVXR4b1RyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vVXR4b1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBEYXNoUHNidCB9IGZyb20gJy4vZGFzaC9EYXNoUHNidCc7XG5pbXBvcnQgeyBEYXNoVHJhbnNhY3Rpb24gfSBmcm9tICcuL2Rhc2gvRGFzaFRyYW5zYWN0aW9uJztcbmltcG9ydCB7IERhc2hUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2Rhc2gvRGFzaFRyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBaY2FzaFBzYnQgfSBmcm9tICcuL3pjYXNoL1pjYXNoUHNidCc7XG5pbXBvcnQgeyBaY2FzaFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vemNhc2gvWmNhc2hUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgWmNhc2hOZXR3b3JrLCBaY2FzaFRyYW5zYWN0aW9uIH0gZnJvbSAnLi96Y2FzaC9aY2FzaFRyYW5zYWN0aW9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlcjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgYnVmOiBCdWZmZXIsXG4gIG5ldHdvcms6IE5ldHdvcmssXG4gIHsgdmVyc2lvbiwgYW1vdW50VHlwZSB9OiB7IHZlcnNpb24/OiBudW1iZXI7IGFtb3VudFR5cGU/OiAnbnVtYmVyJyB8ICdiaWdpbnQnIH0gPSB7fSxcbiAgZGVwcmVjYXRlZEFtb3VudFR5cGU/OiAnbnVtYmVyJyB8ICdiaWdpbnQnXG4pOiBVdHhvVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICBpZiAoYW1vdW50VHlwZSkge1xuICAgIGlmIChkZXByZWNhdGVkQW1vdW50VHlwZSAmJiBhbW91bnRUeXBlICE9PSBkZXByZWNhdGVkQW1vdW50VHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFyZ3VtZW50c2ApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZGVwcmVjYXRlZEFtb3VudFR5cGUpIHtcbiAgICAgIGFtb3VudFR5cGUgPSBkZXByZWNhdGVkQW1vdW50VHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYW1vdW50VHlwZSA9ICdudW1iZXInO1xuICAgIH1cbiAgfVxuICBzd2l0Y2ggKGdldE1haW5uZXQobmV0d29yaykpIHtcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW46XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luY2FzaDpcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5zdjpcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5nb2xkOlxuICAgIGNhc2UgbmV0d29ya3MuZG9nZWNvaW46XG4gICAgY2FzZSBuZXR3b3Jrcy5lY2FzaDpcbiAgICBjYXNlIG5ldHdvcmtzLmxpdGVjb2luOlxuICAgICAgcmV0dXJuIFV0eG9UcmFuc2FjdGlvbi5mcm9tQnVmZmVyPFROdW1iZXI+KGJ1ZiwgZmFsc2UsIGFtb3VudFR5cGUsIG5ldHdvcmspO1xuICAgIGNhc2UgbmV0d29ya3MuZGFzaDpcbiAgICAgIHJldHVybiBEYXNoVHJhbnNhY3Rpb24uZnJvbUJ1ZmZlcjxUTnVtYmVyPihidWYsIGZhbHNlLCBhbW91bnRUeXBlLCBuZXR3b3JrKTtcbiAgICBjYXNlIG5ldHdvcmtzLnpjYXNoOlxuICAgICAgcmV0dXJuIFpjYXNoVHJhbnNhY3Rpb24uZnJvbUJ1ZmZlcldpdGhWZXJzaW9uPFROdW1iZXI+KGJ1ZiwgbmV0d29yayBhcyBaY2FzaE5ldHdvcmssIHZlcnNpb24sIGFtb3VudFR5cGUpO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG5ldHdvcmtgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBzYnRGcm9tQnVmZmVyKGJ1ZjogQnVmZmVyLCBuZXR3b3JrOiBOZXR3b3JrLCBiaXAzMlBhdGhzQWJzb2x1dGUgPSBmYWxzZSk6IFV0eG9Qc2J0IHtcbiAgc3dpdGNoIChnZXRNYWlubmV0KG5ldHdvcmspKSB7XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luOlxuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbmNhc2g6XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luc3Y6XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luZ29sZDpcbiAgICBjYXNlIG5ldHdvcmtzLmRvZ2Vjb2luOlxuICAgIGNhc2UgbmV0d29ya3MuZWNhc2g6XG4gICAgY2FzZSBuZXR3b3Jrcy5saXRlY29pbjpcbiAgICAgIHJldHVybiBVdHhvUHNidC5mcm9tQnVmZmVyKGJ1ZiwgeyBuZXR3b3JrLCBiaXAzMlBhdGhzQWJzb2x1dGUgfSk7XG4gICAgY2FzZSBuZXR3b3Jrcy5kYXNoOlxuICAgICAgcmV0dXJuIERhc2hQc2J0LmZyb21CdWZmZXIoYnVmLCB7IG5ldHdvcmssIGJpcDMyUGF0aHNBYnNvbHV0ZSB9KTtcbiAgICBjYXNlIG5ldHdvcmtzLnpjYXNoOlxuICAgICAgcmV0dXJuIFpjYXNoUHNidC5mcm9tQnVmZmVyKGJ1ZiwgeyBuZXR3b3JrLCBiaXAzMlBhdGhzQWJzb2x1dGUgfSk7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgbmV0d29ya2ApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHNidEZyb21IZXgoaGV4OiBzdHJpbmcsIG5ldHdvcms6IE5ldHdvcmssIGJpcDMyUGF0aHNBYnNvbHV0ZSA9IGZhbHNlKTogVXR4b1BzYnQge1xuICByZXR1cm4gY3JlYXRlUHNidEZyb21CdWZmZXIoQnVmZmVyLmZyb20oaGV4LCAnaGV4JyksIG5ldHdvcmssIGJpcDMyUGF0aHNBYnNvbHV0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQc2J0RnJvbVRyYW5zYWN0aW9uKHR4OiBVdHhvVHJhbnNhY3Rpb248YmlnaW50PiwgcHJldk91dHM6IFR4T3V0cHV0PGJpZ2ludD5bXSk6IFV0eG9Qc2J0IHtcbiAgc3dpdGNoIChnZXRNYWlubmV0KHR4Lm5ldHdvcmspKSB7XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luOlxuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbmNhc2g6XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luc3Y6XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luZ29sZDpcbiAgICBjYXNlIG5ldHdvcmtzLmRvZ2Vjb2luOlxuICAgIGNhc2UgbmV0d29ya3MuZWNhc2g6XG4gICAgY2FzZSBuZXR3b3Jrcy5saXRlY29pbjpcbiAgICAgIHJldHVybiBVdHhvUHNidC5mcm9tVHJhbnNhY3Rpb24odHgsIHByZXZPdXRzKTtcbiAgICBjYXNlIG5ldHdvcmtzLmRhc2g6XG4gICAgICByZXR1cm4gRGFzaFBzYnQuZnJvbVRyYW5zYWN0aW9uKHR4LCBwcmV2T3V0cyk7XG4gICAgY2FzZSBuZXR3b3Jrcy56Y2FzaDpcbiAgICAgIHJldHVybiBaY2FzaFBzYnQuZnJvbVRyYW5zYWN0aW9uKHR4LCBwcmV2T3V0cyk7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgbmV0d29ya2ApO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgaGV4OiBzdHJpbmcsXG4gIG5ldHdvcms6IE5ldHdvcmssXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJ1xuKTogVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgcmV0dXJuIGNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlcjxUTnVtYmVyPihCdWZmZXIuZnJvbShoZXgsICdoZXgnKSwgbmV0d29yaywgeyBhbW91bnRUeXBlIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFRyYW5zYWN0aW9uVmVyc2lvbihuZXR3b3JrOiBOZXR3b3JrKTogbnVtYmVyIHtcbiAgc3dpdGNoIChnZXRNYWlubmV0KG5ldHdvcmspKSB7XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luY2FzaDpcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5zdjpcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5nb2xkOlxuICAgIGNhc2UgbmV0d29ya3MuZWNhc2g6XG4gICAgICByZXR1cm4gMjtcbiAgICBjYXNlIG5ldHdvcmtzLnpjYXNoOlxuICAgICAgcmV0dXJuIFpjYXNoVHJhbnNhY3Rpb24uVkVSU0lPTjRfQlJBTkNIX05VNTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRyYW5zYWN0aW9uQnVpbGRlckRlZmF1bHRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eGI6IFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4sXG4gIG5ldHdvcms6IE5ldHdvcmssXG4gIHsgdmVyc2lvbiA9IGdldERlZmF1bHRUcmFuc2FjdGlvblZlcnNpb24obmV0d29yaykgfTogeyB2ZXJzaW9uPzogbnVtYmVyIH0gPSB7fVxuKTogdm9pZCB7XG4gIHN3aXRjaCAoZ2V0TWFpbm5ldChuZXR3b3JrKSkge1xuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbmNhc2g6XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luc3Y6XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luZ29sZDpcbiAgICBjYXNlIG5ldHdvcmtzLmVjYXNoOlxuICAgICAgaWYgKHZlcnNpb24gIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHZlcnNpb25gKTtcbiAgICAgIH1cbiAgICAgIHR4Yi5zZXRWZXJzaW9uKHZlcnNpb24pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBuZXR3b3Jrcy56Y2FzaDpcbiAgICAgICh0eGIgYXMgWmNhc2hUcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4pLnNldERlZmF1bHRzRm9yVmVyc2lvbihuZXR3b3JrLCB2ZXJzaW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodmVyc2lvbiAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgdmVyc2lvbmApO1xuICAgICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQc2J0RGVmYXVsdHMoXG4gIHBzYnQ6IFV0eG9Qc2J0LFxuICBuZXR3b3JrOiBOZXR3b3JrLFxuICB7IHZlcnNpb24gPSBnZXREZWZhdWx0VHJhbnNhY3Rpb25WZXJzaW9uKG5ldHdvcmspIH06IHsgdmVyc2lvbj86IG51bWJlciB9ID0ge31cbik6IHZvaWQge1xuICBzd2l0Y2ggKGdldE1haW5uZXQobmV0d29yaykpIHtcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5jYXNoOlxuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbnN2OlxuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbmdvbGQ6XG4gICAgY2FzZSBuZXR3b3Jrcy5lY2FzaDpcbiAgICAgIGlmICh2ZXJzaW9uICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCB2ZXJzaW9uYCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIG5ldHdvcmtzLnpjYXNoOlxuICAgICAgaWYgKFxuICAgICAgICAhW1xuICAgICAgICAgIFpjYXNoVHJhbnNhY3Rpb24uVkVSU0lPTjRfQlJBTkNIX0NBTk9QWSxcbiAgICAgICAgICBaY2FzaFRyYW5zYWN0aW9uLlZFUlNJT040X0JSQU5DSF9OVTUsXG4gICAgICAgICAgWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONV9CUkFOQ0hfTlU1LFxuICAgICAgICBdLmluY2x1ZGVzKHZlcnNpb24pXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHZlcnNpb25gKTtcbiAgICAgIH1cbiAgICAgIChwc2J0IGFzIFpjYXNoUHNidCkuc2V0RGVmYXVsdHNGb3JWZXJzaW9uKG5ldHdvcmssIHZlcnNpb24pO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh2ZXJzaW9uICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCB2ZXJzaW9uYCk7XG4gICAgICB9XG4gICAgICAvLyBGSVhNRTogc2V0IHZlcnNpb24gaGVyZSwgYmVjYXVzZSB0aGVyZSdzIGEgYnVnIGluIHRoZSB1cHN0cmVhbSBQU0JUXG4gICAgICAvLyB0aGF0IGRlZmF1bHRzIHRyYW5zYWN0aW9ucyB0byB2Mi5cbiAgICAgIHBzYnQuc2V0VmVyc2lvbih2ZXJzaW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHNidEZvck5ldHdvcmsocHNidE9wdHM6IFBzYnRPcHRzLCB7IHZlcnNpb24gfTogeyB2ZXJzaW9uPzogbnVtYmVyIH0gPSB7fSk6IFV0eG9Qc2J0IHtcbiAgbGV0IHBzYnQ7XG5cbiAgc3dpdGNoIChnZXRNYWlubmV0KHBzYnRPcHRzLm5ldHdvcmspKSB7XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luOlxuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbmNhc2g6XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luc3Y6XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luZ29sZDpcbiAgICBjYXNlIG5ldHdvcmtzLmRvZ2Vjb2luOlxuICAgIGNhc2UgbmV0d29ya3MuZWNhc2g6XG4gICAgY2FzZSBuZXR3b3Jrcy5saXRlY29pbjoge1xuICAgICAgcHNidCA9IFV0eG9Qc2J0LmNyZWF0ZVBzYnQocHNidE9wdHMpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgbmV0d29ya3MuZGFzaDoge1xuICAgICAgcHNidCA9IERhc2hQc2J0LmNyZWF0ZVBzYnQocHNidE9wdHMpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgbmV0d29ya3MuemNhc2g6IHtcbiAgICAgIHBzYnQgPSBaY2FzaFBzYnQuY3JlYXRlUHNidChwc2J0T3B0cyk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbmV0d29ya2ApO1xuICB9XG5cbiAgc2V0UHNidERlZmF1bHRzKHBzYnQsIHBzYnRPcHRzLm5ldHdvcmssIHsgdmVyc2lvbiB9KTtcblxuICByZXR1cm4gcHNidDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRyYW5zYWN0aW9uQnVpbGRlckZvck5ldHdvcms8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IE5ldHdvcmssXG4gIHsgdmVyc2lvbiB9OiB7IHZlcnNpb24/OiBudW1iZXIgfSA9IHt9XG4pOiBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXI+IHtcbiAgbGV0IHR4YjtcbiAgc3dpdGNoIChnZXRNYWlubmV0KG5ldHdvcmspKSB7XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luOlxuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbmNhc2g6XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luc3Y6XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luZ29sZDpcbiAgICBjYXNlIG5ldHdvcmtzLmRvZ2Vjb2luOlxuICAgIGNhc2UgbmV0d29ya3MuZWNhc2g6XG4gICAgY2FzZSBuZXR3b3Jrcy5saXRlY29pbjoge1xuICAgICAgdHhiID0gbmV3IFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4obmV0d29yayk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBuZXR3b3Jrcy5kYXNoOlxuICAgICAgdHhiID0gbmV3IERhc2hUcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4obmV0d29yayk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIG5ldHdvcmtzLnpjYXNoOiB7XG4gICAgICB0eGIgPSBuZXcgWmNhc2hUcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4obmV0d29yayBhcyBaY2FzaE5ldHdvcmspO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIG5ldHdvcmtgKTtcbiAgfVxuXG4gIHNldFRyYW5zYWN0aW9uQnVpbGRlckRlZmF1bHRzPFROdW1iZXI+KHR4YiwgbmV0d29yaywgeyB2ZXJzaW9uIH0pO1xuXG4gIHJldHVybiB0eGI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJGcm9tVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4OiBVdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIHByZXZPdXRwdXRzPzogVHhPdXRwdXQ8VE51bWJlcj5bXVxuKTogVXR4b1RyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPiB7XG4gIHN3aXRjaCAoZ2V0TWFpbm5ldCh0eC5uZXR3b3JrKSkge1xuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbjpcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5jYXNoOlxuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbnN2OlxuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbmdvbGQ6XG4gICAgY2FzZSBuZXR3b3Jrcy5kb2dlY29pbjpcbiAgICBjYXNlIG5ldHdvcmtzLmVjYXNoOlxuICAgIGNhc2UgbmV0d29ya3MubGl0ZWNvaW46XG4gICAgICByZXR1cm4gVXR4b1RyYW5zYWN0aW9uQnVpbGRlci5mcm9tVHJhbnNhY3Rpb248VE51bWJlcj4odHgsIHVuZGVmaW5lZCwgcHJldk91dHB1dHMpO1xuICAgIGNhc2UgbmV0d29ya3MuZGFzaDpcbiAgICAgIHJldHVybiBEYXNoVHJhbnNhY3Rpb25CdWlsZGVyLmZyb21UcmFuc2FjdGlvbjxUTnVtYmVyPihcbiAgICAgICAgdHggYXMgRGFzaFRyYW5zYWN0aW9uPFROdW1iZXI+LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHByZXZPdXRwdXRzIGFzIFR4T3V0cHV0PFROdW1iZXI+W11cbiAgICAgICk7XG4gICAgY2FzZSBuZXR3b3Jrcy56Y2FzaDpcbiAgICAgIHJldHVybiBaY2FzaFRyYW5zYWN0aW9uQnVpbGRlci5mcm9tVHJhbnNhY3Rpb248VE51bWJlcj4oXG4gICAgICAgIHR4IGFzIFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgcHJldk91dHB1dHMgYXMgVHhPdXRwdXQ8VE51bWJlcj5bXVxuICAgICAgKTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBuZXR3b3JrYCk7XG59XG4iXX0=
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/bitgo/types.ts"],"names":[],"mappings":"AAAA,oBAAY,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE9B,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAEpD;AAED,oBAAY,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAElC,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAEtD"}
|
package/dist/src/bitgo/types.js
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.isTriple = exports.isTuple = void 0;
|
4
|
-
function isTuple(arr) {
|
5
|
-
return arr.length === 2;
|
6
|
-
}
|
7
|
-
exports.isTuple = isTuple;
|
8
|
-
function isTriple(arr) {
|
9
|
-
return arr.length === 3;
|
10
|
-
}
|
11
|
-
exports.isTriple = isTriple;
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYml0Z28vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsU0FBZ0IsT0FBTyxDQUFJLEdBQVE7SUFDakMsT0FBTyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRkQsMEJBRUM7QUFJRCxTQUFnQixRQUFRLENBQUksR0FBUTtJQUNsQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFGRCw0QkFFQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFR1cGxlPFQ+ID0gW1QsIFRdO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNUdXBsZTxUPihhcnI6IFRbXSk6IGFyciBpcyBUdXBsZTxUPiB7XG4gIHJldHVybiBhcnIubGVuZ3RoID09PSAyO1xufVxuXG5leHBvcnQgdHlwZSBUcmlwbGU8VD4gPSBbVCwgVCwgVF07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RyaXBsZTxUPihhcnI6IFRbXSk6IGFyciBpcyBUcmlwbGU8VD4ge1xuICByZXR1cm4gYXJyLmxlbmd0aCA9PT0gMztcbn1cbiJdfQ==
|
@@ -1,47 +0,0 @@
|
|
1
|
-
/// <reference types="node" />
|
2
|
-
import { UtxoPsbt } from '../UtxoPsbt';
|
3
|
-
import { UtxoTransaction } from '../UtxoTransaction';
|
4
|
-
import { RootWalletKeys } from './WalletKeys';
|
5
|
-
import { BIP32Interface } from 'bip32';
|
6
|
-
import { WalletUnspent } from './Unspent';
|
7
|
-
import { ParsedPubScript2Of3, ParsedPubScriptTaprootScriptPath } from '../parseInput';
|
8
|
-
declare type Signatures = [Buffer] | [Buffer, Buffer] | undefined;
|
9
|
-
export interface ParsedPsbt2Of3 extends ParsedPubScript2Of3 {
|
10
|
-
signatures: Signatures;
|
11
|
-
}
|
12
|
-
export interface ParsedPsbtP2TR extends ParsedPubScriptTaprootScriptPath {
|
13
|
-
signatures: Signatures;
|
14
|
-
controlBlock: Buffer;
|
15
|
-
leafVersion: number;
|
16
|
-
/** Indicates the level inside the taptree. */
|
17
|
-
scriptPathLevel: number;
|
18
|
-
}
|
19
|
-
/**
|
20
|
-
* @return PSBT filled with metatdata as per input params tx, unspents and rootWalletKeys.
|
21
|
-
* Unsigned PSBT for taproot input with witnessUtxo
|
22
|
-
* Unsigned PSBT for other input with witnessUtxo/nonWitnessUtxo, redeemScript/witnessScript, bip32Derivation
|
23
|
-
* Signed PSBT for taproot input with witnessUtxo, tapLeafScript, tapBip32Derivation, tapScriptSig
|
24
|
-
* Signed PSBT for other input with witnessUtxo/nonWitnessUtxo, redeemScript/witnessScript, bip32Derivation, partialSig
|
25
|
-
*/
|
26
|
-
export declare function toWalletPsbt(tx: UtxoTransaction<bigint>, unspents: WalletUnspent<bigint>[], rootWalletKeys: RootWalletKeys): UtxoPsbt;
|
27
|
-
/**
|
28
|
-
* @param psbt
|
29
|
-
* @param inputIndex
|
30
|
-
* @param signer
|
31
|
-
* @param unspent
|
32
|
-
* @return signed PSBT with signer's key for unspent
|
33
|
-
*/
|
34
|
-
export declare function signWalletPsbt(psbt: UtxoPsbt, inputIndex: number, signer: BIP32Interface, unspent: WalletUnspent<bigint>): void;
|
35
|
-
/**
|
36
|
-
* @return psbt metadata are parsed as per below conditions.
|
37
|
-
* redeemScript/witnessScript/tapLeafScript matches BitGo.
|
38
|
-
* signature and public key count matches BitGo.
|
39
|
-
* P2SH => scriptType, redeemScript, public keys, signatures.
|
40
|
-
* PW2SH => scriptType, witnessScript, public keys, signatures.
|
41
|
-
* P2SH-PW2SH => scriptType, redeemScript, witnessScript, public keys, signatures.
|
42
|
-
* P2TR => scriptType, pubScript (witnessScript), controlBlock, scriptPathLevel, leafVersion, public keys, signatures.
|
43
|
-
* Any unsigned PSBT and without required metadata is returned with undefined.
|
44
|
-
*/
|
45
|
-
export declare function parsePsbtInput(psbt: UtxoPsbt, inputIndex: number): ParsedPsbt2Of3 | ParsedPsbtP2TR | undefined;
|
46
|
-
export {};
|
47
|
-
//# sourceMappingURL=Psbt.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"Psbt.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/wallet/Psbt.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAQrD,OAAO,EAAqB,cAAc,EAAE,MAAM,cAAc,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAmB,aAAa,EAAE,MAAM,WAAW,CAAC;AAG3D,OAAO,EAIL,mBAAmB,EACnB,gCAAgC,EAEjC,MAAM,eAAe,CAAC;AAEvB,aAAK,UAAU,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;AAE1D,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,cAAe,SAAQ,gCAAgC;IACtE,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,eAAe,EAAE,MAAM,CAAC;CACzB;AAkFD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,eAAe,CAAC,MAAM,CAAC,EAC3B,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,EACjC,cAAc,EAAE,cAAc,GAC7B,QAAQ,CASV;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,GAC7B,IAAI,CAMN;AA6GD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,cAAc,GAAG,SAAS,CAa9G"}
|
@@ -1,232 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.parsePsbtInput = exports.signWalletPsbt = exports.toWalletPsbt = void 0;
|
4
|
-
const outputScripts_1 = require("../outputScripts");
|
5
|
-
const Unspent_1 = require("../Unspent");
|
6
|
-
const transaction_1 = require("../transaction");
|
7
|
-
const Unspent_2 = require("./Unspent");
|
8
|
-
const utils_1 = require("bip174/src/lib/utils");
|
9
|
-
const parseInput_1 = require("../parseInput");
|
10
|
-
function getTaprootSigners(script, walletKeys) {
|
11
|
-
const parsedPublicKeys = parseInput_1.parsePubScript(script, 'p2tr').publicKeys;
|
12
|
-
const walletSigners = parsedPublicKeys.map((publicKey) => {
|
13
|
-
const index = walletKeys.publicKeys.findIndex((walletPublicKey) => outputScripts_1.toXOnlyPublicKey(walletPublicKey).equals(publicKey));
|
14
|
-
if (index >= 0) {
|
15
|
-
return { walletKey: walletKeys.triple[index], rootKey: walletKeys.parent.triple[index] };
|
16
|
-
}
|
17
|
-
throw new Error('Taproot public key is not a wallet public key');
|
18
|
-
});
|
19
|
-
return [walletSigners[0], walletSigners[1]];
|
20
|
-
}
|
21
|
-
function updatePsbtInput(psbt, inputIndex, unspent, rootWalletKeys) {
|
22
|
-
const signatureCount = psbt.getSignatureCount(inputIndex);
|
23
|
-
const scriptType = outputScripts_1.scriptTypeForChain(unspent.chain);
|
24
|
-
if (signatureCount === 0 && scriptType === 'p2tr') {
|
25
|
-
return;
|
26
|
-
}
|
27
|
-
const walletKeys = rootWalletKeys.deriveForChainAndIndex(unspent.chain, unspent.index);
|
28
|
-
if (scriptType === 'p2tr') {
|
29
|
-
const input = psbt.data.inputs[inputIndex];
|
30
|
-
if (!Array.isArray(input.tapLeafScript) || input.tapLeafScript.length === 0) {
|
31
|
-
throw new Error('Invalid PSBT state. Missing required fields.');
|
32
|
-
}
|
33
|
-
if (input.tapLeafScript.length > 1) {
|
34
|
-
throw new Error('Bitgo only supports a single tap leaf script per input');
|
35
|
-
}
|
36
|
-
const [signer, cosigner] = getTaprootSigners(input.tapLeafScript[0].script, walletKeys);
|
37
|
-
const leafHash = outputScripts_1.getLeafHash({
|
38
|
-
publicKeys: walletKeys.publicKeys,
|
39
|
-
signer: signer.walletKey.publicKey,
|
40
|
-
cosigner: cosigner.walletKey.publicKey,
|
41
|
-
});
|
42
|
-
psbt.updateInput(inputIndex, {
|
43
|
-
tapBip32Derivation: [signer, cosigner].map((walletSigner) => ({
|
44
|
-
leafHashes: [leafHash],
|
45
|
-
pubkey: outputScripts_1.toXOnlyPublicKey(walletSigner.walletKey.publicKey),
|
46
|
-
path: rootWalletKeys.getDerivationPath(walletSigner.rootKey, unspent.chain, unspent.index),
|
47
|
-
masterFingerprint: walletSigner.rootKey.fingerprint,
|
48
|
-
})),
|
49
|
-
});
|
50
|
-
}
|
51
|
-
else {
|
52
|
-
if (signatureCount === 0) {
|
53
|
-
const { witnessScript, redeemScript } = outputScripts_1.createOutputScript2of3(walletKeys.publicKeys, scriptType);
|
54
|
-
if (witnessScript && psbt.data.inputs[inputIndex].witnessScript === undefined) {
|
55
|
-
psbt.updateInput(inputIndex, { witnessScript });
|
56
|
-
}
|
57
|
-
if (redeemScript && psbt.data.inputs[inputIndex].redeemScript === undefined) {
|
58
|
-
psbt.updateInput(inputIndex, { redeemScript });
|
59
|
-
}
|
60
|
-
}
|
61
|
-
psbt.updateInput(inputIndex, {
|
62
|
-
bip32Derivation: [0, 1, 2].map((idx) => ({
|
63
|
-
pubkey: walletKeys.triple[idx].publicKey,
|
64
|
-
path: walletKeys.paths[idx],
|
65
|
-
masterFingerprint: rootWalletKeys.triple[idx].fingerprint,
|
66
|
-
})),
|
67
|
-
});
|
68
|
-
}
|
69
|
-
}
|
70
|
-
/**
|
71
|
-
* @return PSBT filled with metatdata as per input params tx, unspents and rootWalletKeys.
|
72
|
-
* Unsigned PSBT for taproot input with witnessUtxo
|
73
|
-
* Unsigned PSBT for other input with witnessUtxo/nonWitnessUtxo, redeemScript/witnessScript, bip32Derivation
|
74
|
-
* Signed PSBT for taproot input with witnessUtxo, tapLeafScript, tapBip32Derivation, tapScriptSig
|
75
|
-
* Signed PSBT for other input with witnessUtxo/nonWitnessUtxo, redeemScript/witnessScript, bip32Derivation, partialSig
|
76
|
-
*/
|
77
|
-
function toWalletPsbt(tx, unspents, rootWalletKeys) {
|
78
|
-
const prevOutputs = unspents.map((u) => Unspent_1.toPrevOutputWithPrevTx(u, tx.network));
|
79
|
-
const psbt = transaction_1.createPsbtFromTransaction(tx, prevOutputs);
|
80
|
-
unspents.forEach((u, i) => {
|
81
|
-
if (Unspent_2.isWalletUnspent(u) && u.index !== undefined) {
|
82
|
-
updatePsbtInput(psbt, i, u, rootWalletKeys);
|
83
|
-
}
|
84
|
-
});
|
85
|
-
return psbt;
|
86
|
-
}
|
87
|
-
exports.toWalletPsbt = toWalletPsbt;
|
88
|
-
/**
|
89
|
-
* @param psbt
|
90
|
-
* @param inputIndex
|
91
|
-
* @param signer
|
92
|
-
* @param unspent
|
93
|
-
* @return signed PSBT with signer's key for unspent
|
94
|
-
*/
|
95
|
-
function signWalletPsbt(psbt, inputIndex, signer, unspent) {
|
96
|
-
if (outputScripts_1.scriptTypeForChain(unspent.chain) === 'p2tr') {
|
97
|
-
psbt.signTaprootInputHD(inputIndex, signer);
|
98
|
-
}
|
99
|
-
else {
|
100
|
-
psbt.signInputHD(inputIndex, signer);
|
101
|
-
}
|
102
|
-
}
|
103
|
-
exports.signWalletPsbt = signWalletPsbt;
|
104
|
-
function classifyScriptType(input) {
|
105
|
-
let scriptType;
|
106
|
-
if (Buffer.isBuffer(input.redeemScript) && Buffer.isBuffer(input.witnessScript)) {
|
107
|
-
scriptType = 'p2shP2wsh';
|
108
|
-
}
|
109
|
-
else if (Buffer.isBuffer(input.redeemScript)) {
|
110
|
-
scriptType = 'p2sh';
|
111
|
-
}
|
112
|
-
else if (Buffer.isBuffer(input.witnessScript)) {
|
113
|
-
scriptType = 'p2wsh';
|
114
|
-
}
|
115
|
-
if (Array.isArray(input.tapLeafScript) && input.tapLeafScript.length > 0) {
|
116
|
-
if (scriptType) {
|
117
|
-
throw new Error(`Found both ${scriptType} and p2tr PSBT metadata.`);
|
118
|
-
}
|
119
|
-
if (input.tapLeafScript.length > 1) {
|
120
|
-
throw new Error('Bitgo only supports a single tap leaf script per input.');
|
121
|
-
}
|
122
|
-
scriptType = 'p2tr';
|
123
|
-
}
|
124
|
-
return scriptType;
|
125
|
-
}
|
126
|
-
function parseSignatures(input, scriptType) {
|
127
|
-
const validate = (sig) => {
|
128
|
-
if (Buffer.isBuffer(sig)) {
|
129
|
-
return sig;
|
130
|
-
}
|
131
|
-
throw new Error('Invalid signature type');
|
132
|
-
};
|
133
|
-
if (scriptType === 'p2tr') {
|
134
|
-
if (input.partialSig && input.partialSig.length > 0) {
|
135
|
-
throw new Error('Invalid PSBT signature state');
|
136
|
-
}
|
137
|
-
if (!input.tapScriptSig || input.tapScriptSig.length === 0) {
|
138
|
-
return undefined;
|
139
|
-
}
|
140
|
-
if (input.tapScriptSig.length > 2) {
|
141
|
-
throw new Error('unexpected signature count');
|
142
|
-
}
|
143
|
-
return input.tapScriptSig.length === 1
|
144
|
-
? [validate(input.tapScriptSig[0].signature)]
|
145
|
-
: [validate(input.tapScriptSig[0].signature), validate(input.tapScriptSig[1].signature)];
|
146
|
-
}
|
147
|
-
if (input.tapScriptSig && input.tapScriptSig.length > 0) {
|
148
|
-
throw new Error('Invalid PSBT signature state');
|
149
|
-
}
|
150
|
-
if (!input.partialSig || input.partialSig.length === 0) {
|
151
|
-
return undefined;
|
152
|
-
}
|
153
|
-
if (input.partialSig.length > 2) {
|
154
|
-
throw new Error('unexpected signature count');
|
155
|
-
}
|
156
|
-
return input.partialSig.length === 1
|
157
|
-
? [validate(input.partialSig[0].signature)]
|
158
|
-
: [validate(input.partialSig[0].signature), validate(input.partialSig[1].signature)];
|
159
|
-
}
|
160
|
-
function parseScript(input, scriptType) {
|
161
|
-
let pubScript;
|
162
|
-
if (scriptType === 'p2sh') {
|
163
|
-
pubScript = input.redeemScript;
|
164
|
-
}
|
165
|
-
else if (scriptType === 'p2wsh' || scriptType === 'p2shP2wsh') {
|
166
|
-
pubScript = input.witnessScript;
|
167
|
-
}
|
168
|
-
else {
|
169
|
-
pubScript = input.tapLeafScript ? input.tapLeafScript[0].script : undefined;
|
170
|
-
}
|
171
|
-
if (!pubScript) {
|
172
|
-
throw new Error(`Invalid PSBT state for ${scriptType}. Missing required fields.`);
|
173
|
-
}
|
174
|
-
return parseInput_1.parsePubScript(pubScript, scriptType);
|
175
|
-
}
|
176
|
-
function parseInputMetadata(input, scriptType) {
|
177
|
-
const parsedPubScript = parseScript(input, scriptType);
|
178
|
-
const signatures = parseSignatures(input, scriptType);
|
179
|
-
if (parsedPubScript.scriptType === 'p2tr') {
|
180
|
-
if (!input.tapLeafScript) {
|
181
|
-
throw new Error('Invalid PSBT state for p2tr. Missing required fields.');
|
182
|
-
}
|
183
|
-
const controlBlock = input.tapLeafScript[0].controlBlock;
|
184
|
-
if (!parseInput_1.isValidControlBock(controlBlock)) {
|
185
|
-
throw new Error('Invalid PSBT p2tr script path controlBlock.');
|
186
|
-
}
|
187
|
-
const scriptPathLevel = parseInput_1.calculateScriptPathLevel(controlBlock);
|
188
|
-
const leafVersion = parseInput_1.getScriptPathLevel(controlBlock);
|
189
|
-
return {
|
190
|
-
...parsedPubScript,
|
191
|
-
signatures,
|
192
|
-
controlBlock,
|
193
|
-
scriptPathLevel,
|
194
|
-
leafVersion,
|
195
|
-
};
|
196
|
-
}
|
197
|
-
else {
|
198
|
-
if (parsedPubScript.scriptType === 'p2shP2wsh') {
|
199
|
-
parsedPubScript.redeemScript = input.redeemScript;
|
200
|
-
}
|
201
|
-
return {
|
202
|
-
...parsedPubScript,
|
203
|
-
signatures,
|
204
|
-
};
|
205
|
-
}
|
206
|
-
}
|
207
|
-
/**
|
208
|
-
* @return psbt metadata are parsed as per below conditions.
|
209
|
-
* redeemScript/witnessScript/tapLeafScript matches BitGo.
|
210
|
-
* signature and public key count matches BitGo.
|
211
|
-
* P2SH => scriptType, redeemScript, public keys, signatures.
|
212
|
-
* PW2SH => scriptType, witnessScript, public keys, signatures.
|
213
|
-
* P2SH-PW2SH => scriptType, redeemScript, witnessScript, public keys, signatures.
|
214
|
-
* P2TR => scriptType, pubScript (witnessScript), controlBlock, scriptPathLevel, leafVersion, public keys, signatures.
|
215
|
-
* Any unsigned PSBT and without required metadata is returned with undefined.
|
216
|
-
*/
|
217
|
-
function parsePsbtInput(psbt, inputIndex) {
|
218
|
-
const input = utils_1.checkForInput(psbt.data.inputs, inputIndex);
|
219
|
-
if (psbt.isInputFinalized(inputIndex)) {
|
220
|
-
throw new Error('Finalized PSBT parsing is not supported');
|
221
|
-
}
|
222
|
-
const scriptType = classifyScriptType(input);
|
223
|
-
if (!scriptType) {
|
224
|
-
if (psbt.getSignatureCount(inputIndex) > 0) {
|
225
|
-
throw new Error('Invalid PSBT state. Signatures found without scripts.');
|
226
|
-
}
|
227
|
-
return undefined;
|
228
|
-
}
|
229
|
-
return parseInputMetadata(input, scriptType);
|
230
|
-
}
|
231
|
-
exports.parsePsbtInput = parsePsbtInput;
|
232
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXQvUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxvREFNMEI7QUFFMUIsd0NBQW9EO0FBQ3BELGdEQUEyRDtBQUUzRCx1Q0FBMkQ7QUFDM0QsZ0RBQXFEO0FBRXJELDhDQU91QjtBQXFCdkIsU0FBUyxpQkFBaUIsQ0FBQyxNQUFjLEVBQUUsVUFBNkI7SUFDdEUsTUFBTSxnQkFBZ0IsR0FBRywyQkFBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDbkUsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDdkQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUNoRSxnQ0FBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQ3BELENBQUM7UUFDRixJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7U0FDMUY7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7SUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FDdEIsSUFBYyxFQUNkLFVBQWtCLEVBQ2xCLE9BQThCLEVBQzlCLGNBQThCO0lBRTlCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxp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RSxVQUFVLENBQUMsQ0FBQztJQUMxRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7S0FDNUQ7SUFDRCxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ2YsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztTQUMxRTtRQUNELE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQWJELHdDQWFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXR4b1BzYnQgfSBmcm9tICcuLi9VdHhvUHNidCc7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb24gfSBmcm9tICcuLi9VdHhvVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHtcbiAgY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyxcbiAgZ2V0TGVhZkhhc2gsXG4gIFNjcmlwdFR5cGUyT2YzLFxuICBzY3JpcHRUeXBlRm9yQ2hhaW4sXG4gIHRvWE9ubHlQdWJsaWNLZXksXG59IGZyb20gJy4uL291dHB1dFNjcmlwdHMnO1xuaW1wb3J0IHsgRGVyaXZlZFdhbGxldEtleXMsIFJvb3RXYWxsZXRLZXlzIH0gZnJvbSAnLi9XYWxsZXRLZXlzJztcbmltcG9ydCB7IHRvUHJldk91dHB1dFdpdGhQcmV2VHggfSBmcm9tICcuLi9VbnNwZW50JztcbmltcG9ydCB7IGNyZWF0ZVBzYnRGcm9tVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBCSVAzMkludGVyZmFjZSB9IGZyb20gJ2JpcDMyJztcbmltcG9ydCB7IGlzV2FsbGV0VW5zcGVudCwgV2FsbGV0VW5zcGVudCB9IGZyb20gJy4vVW5zcGVudCc7XG5pbXBvcnQgeyBjaGVja0ZvcklucHV0IH0gZnJvbSAnYmlwMTc0L3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgUHNidElucHV0IH0gZnJvbSAnYmlwMTc0L3NyYy9saWIvaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICBnZXRTY3JpcHRQYXRoTGV2ZWwsXG4gIGNhbGN1bGF0ZVNjcmlwdFBhdGhMZXZlbCxcbiAgaXNWYWxpZENvbnRyb2xCb2NrLFxuICBQYXJzZWRQdWJTY3JpcHQyT2YzLFxuICBQYXJzZWRQdWJTY3JpcHRUYXByb290U2NyaXB0UGF0aCxcbiAgcGFyc2VQdWJTY3JpcHQsXG59IGZyb20gJy4uL3BhcnNlSW5wdXQnO1xuXG50eXBlIFNpZ25hdHVyZXMgPSBbQnVmZmVyXSB8IFtCdWZmZXIsIEJ1ZmZlcl0gfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUHNidDJPZjMgZXh0ZW5kcyBQYXJzZWRQdWJTY3JpcHQyT2YzIHtcbiAgc2lnbmF0dXJlczogU2lnbmF0dXJlcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQc2J0UDJUUiBleHRlbmRzIFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoIHtcbiAgc2lnbmF0dXJlczogU2lnbmF0dXJlcztcbiAgY29udHJvbEJsb2NrOiBCdWZmZXI7XG4gIGxlYWZWZXJzaW9uOiBudW1iZXI7XG4gIC8qKiBJbmRpY2F0ZXMgdGhlIGxldmVsIGluc2lkZSB0aGUgdGFwdHJlZS4gKi9cbiAgc2NyaXB0UGF0aExldmVsOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBXYWxsZXRTaWduZXIge1xuICB3YWxsZXRLZXk6IEJJUDMySW50ZXJmYWNlO1xuICByb290S2V5OiBCSVAzMkludGVyZmFjZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFwcm9vdFNpZ25lcnMoc2NyaXB0OiBCdWZmZXIsIHdhbGxldEtleXM6IERlcml2ZWRXYWxsZXRLZXlzKTogW1dhbGxldFNpZ25lciwgV2FsbGV0U2lnbmVyXSB7XG4gIGNvbnN0IHBhcnNlZFB1YmxpY0tleXMgPSBwYXJzZVB1YlNjcmlwdChzY3JpcHQsICdwMnRyJykucHVibGljS2V5cztcbiAgY29uc3Qgd2FsbGV0U2lnbmVycyA9IHBhcnNlZFB1YmxpY0tleXMubWFwKChwdWJsaWNLZXkpID0+IHtcbiAgICBjb25zdCBpbmRleCA9IHdhbGxldEtleXMucHVibGljS2V5cy5maW5kSW5kZXgoKHdhbGxldFB1YmxpY0tleSkgPT5cbiAgICAgIHRvWE9ubHlQdWJsaWNLZXkod2FsbGV0UHVibGljS2V5KS5lcXVhbHMocHVibGljS2V5KVxuICAgICk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHJldHVybiB7IHdhbGxldEtleTogd2FsbGV0S2V5cy50cmlwbGVbaW5kZXhdLCByb290S2V5OiB3YWxsZXRLZXlzLnBhcmVudC50cmlwbGVbaW5kZXhdIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignVGFwcm9vdCBwdWJsaWMga2V5IGlzIG5vdCBhIHdhbGxldCBwdWJsaWMga2V5Jyk7XG4gIH0pO1xuICByZXR1cm4gW3dhbGxldFNpZ25lcnNbMF0sIHdhbGxldFNpZ25lcnNbMV1dO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVQc2J0SW5wdXQoXG4gIHBzYnQ6IFV0eG9Qc2J0LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIHVuc3BlbnQ6IFdhbGxldFVuc3BlbnQ8YmlnaW50PixcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzXG4pOiB2b2lkIHtcbiAgY29uc3Qgc2lnbmF0dXJlQ291bnQgPSBwc2J0LmdldFNpZ25hdHVyZUNvdW50KGlucHV0SW5kZXgpO1xuICBjb25zdCBzY3JpcHRUeXBlID0gc2NyaXB0VHlwZUZvckNoYWluKHVuc3BlbnQuY2hhaW4pO1xuICBpZiAoc2lnbmF0dXJlQ291bnQgPT09IDAgJiYgc2NyaXB0VHlwZSA9PT0gJ3AydHInKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHdhbGxldEtleXMgPSByb290V2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpO1xuXG4gIGlmIChzY3JpcHRUeXBlID09PSAncDJ0cicpIHtcbiAgICBjb25zdCBpbnB1dCA9IHBzYnQuZGF0YS5pbnB1dHNbaW5wdXRJbmRleF07XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQudGFwTGVhZlNjcmlwdCkgfHwgaW5wdXQudGFwTGVhZlNjcmlwdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBQU0JUIHN0YXRlLiBNaXNzaW5nIHJlcXVpcmVkIGZpZWxkcy4nKTtcbiAgICB9XG5cbiAgICBpZiAoaW5wdXQudGFwTGVhZlNjcmlwdC5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JpdGdvIG9ubHkgc3VwcG9ydHMgYSBzaW5nbGUgdGFwIGxlYWYgc2NyaXB0IHBlciBpbnB1dCcpO1xuICAgIH1cblxuICAgIGNvbnN0IFtzaWduZXIsIGNvc2lnbmVyXSA9IGdldFRhcHJvb3RTaWduZXJzKGlucHV0LnRhcExlYWZTY3JpcHRbMF0uc2NyaXB0LCB3YWxsZXRLZXlzKTtcblxuICAgIGNvbnN0IGxlYWZIYXNoID0gZ2V0TGVhZkhhc2goe1xuICAgICAgcHVibGljS2V5czogd2FsbGV0S2V5cy5wdWJsaWNLZXlzLFxuICAgICAgc2lnbmVyOiBzaWduZXIud2FsbGV0S2V5LnB1YmxpY0tleSxcbiAgICAgIGNvc2lnbmVyOiBjb3NpZ25lci53YWxsZXRLZXkucHVibGljS2V5LFxuICAgIH0pO1xuXG4gICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7XG4gICAgICB0YXBCaXAzMkRlcml2YXRpb246IFtzaWduZXIsIGNvc2lnbmVyXS5tYXAoKHdhbGxldFNpZ25lcikgPT4gKHtcbiAgICAgICAgbGVhZkhhc2hlczogW2xlYWZIYXNoXSxcbiAgICAgICAgcHVia2V5OiB0b1hPbmx5UHVibGljS2V5KHdhbGxldFNpZ25lci53YWxsZXRLZXkucHVibGljS2V5KSxcbiAgICAgICAgcGF0aDogcm9vdFdhbGxldEtleXMuZ2V0RGVyaXZhdGlvblBhdGgod2FsbGV0U2lnbmVyLnJvb3RLZXksIHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpLFxuICAgICAgICBtYXN0ZXJGaW5nZXJwcmludDogd2FsbGV0U2lnbmVyLnJvb3RLZXkuZmluZ2VycHJpbnQsXG4gICAgICB9KSksXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHNpZ25hdHVyZUNvdW50ID09PSAwKSB7XG4gICAgICBjb25zdCB7IHdpdG5lc3NTY3JpcHQsIHJlZGVlbVNjcmlwdCB9ID0gY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyh3YWxsZXRLZXlzLnB1YmxpY0tleXMsIHNjcmlwdFR5cGUpO1xuICAgICAgaWYgKHdpdG5lc3NTY3JpcHQgJiYgcHNidC5kYXRhLmlucHV0c1tpbnB1dEluZGV4XS53aXRuZXNzU2NyaXB0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7IHdpdG5lc3NTY3JpcHQgfSk7XG4gICAgICB9XG4gICAgICBpZiAocmVkZWVtU2NyaXB0ICYmIHBzYnQuZGF0YS5pbnB1dHNbaW5wdXRJbmRleF0ucmVkZWVtU2NyaXB0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7IHJlZGVlbVNjcmlwdCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwc2J0LnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHtcbiAgICAgIGJpcDMyRGVyaXZhdGlvbjogWzAsIDEsIDJdLm1hcCgoaWR4KSA9PiAoe1xuICAgICAgICBwdWJrZXk6IHdhbGxldEtleXMudHJpcGxlW2lkeF0ucHVibGljS2V5LFxuICAgICAgICBwYXRoOiB3YWxsZXRLZXlzLnBhdGhzW2lkeF0sXG4gICAgICAgIG1hc3RlckZpbmdlcnByaW50OiByb290V2FsbGV0S2V5cy50cmlwbGVbaWR4XS5maW5nZXJwcmludCxcbiAgICAgIH0pKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEByZXR1cm4gUFNCVCBmaWxsZWQgd2l0aCBtZXRhdGRhdGEgYXMgcGVyIGlucHV0IHBhcmFtcyB0eCwgdW5zcGVudHMgYW5kIHJvb3RXYWxsZXRLZXlzLlxuICogVW5zaWduZWQgUFNCVCBmb3IgdGFwcm9vdCBpbnB1dCB3aXRoIHdpdG5lc3NVdHhvXG4gKiBVbnNpZ25lZCBQU0JUIGZvciBvdGhlciBpbnB1dCB3aXRoIHdpdG5lc3NVdHhvL25vbldpdG5lc3NVdHhvLCByZWRlZW1TY3JpcHQvd2l0bmVzc1NjcmlwdCwgYmlwMzJEZXJpdmF0aW9uXG4gKiBTaWduZWQgUFNCVCBmb3IgdGFwcm9vdCBpbnB1dCB3aXRoIHdpdG5lc3NVdHhvLCB0YXBMZWFmU2NyaXB0LCB0YXBCaXAzMkRlcml2YXRpb24sIHRhcFNjcmlwdFNpZ1xuICogU2lnbmVkIFBTQlQgZm9yIG90aGVyIGlucHV0IHdpdGggd2l0bmVzc1V0eG8vbm9uV2l0bmVzc1V0eG8sIHJlZGVlbVNjcmlwdC93aXRuZXNzU2NyaXB0LCBiaXAzMkRlcml2YXRpb24sIHBhcnRpYWxTaWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvV2FsbGV0UHNidChcbiAgdHg6IFV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+LFxuICB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W10sXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5c1xuKTogVXR4b1BzYnQge1xuICBjb25zdCBwcmV2T3V0cHV0cyA9IHVuc3BlbnRzLm1hcCgodSkgPT4gdG9QcmV2T3V0cHV0V2l0aFByZXZUeCh1LCB0eC5uZXR3b3JrKSk7XG4gIGNvbnN0IHBzYnQgPSBjcmVhdGVQc2J0RnJvbVRyYW5zYWN0aW9uKHR4LCBwcmV2T3V0cHV0cyk7XG4gIHVuc3BlbnRzLmZvckVhY2goKHUsIGkpID0+IHtcbiAgICBpZiAoaXNXYWxsZXRVbnNwZW50KHUpICYmIHUuaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdXBkYXRlUHNidElucHV0KHBzYnQsIGksIHUsIHJvb3RXYWxsZXRLZXlzKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcHNidDtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcHNidFxuICogQHBhcmFtIGlucHV0SW5kZXhcbiAqIEBwYXJhbSBzaWduZXJcbiAqIEBwYXJhbSB1bnNwZW50XG4gKiBAcmV0dXJuIHNpZ25lZCBQU0JUIHdpdGggc2lnbmVyJ3Mga2V5IGZvciB1bnNwZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduV2FsbGV0UHNidChcbiAgcHNidDogVXR4b1BzYnQsXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgc2lnbmVyOiBCSVAzMkludGVyZmFjZSxcbiAgdW5zcGVudDogV2FsbGV0VW5zcGVudDxiaWdpbnQ+XG4pOiB2b2lkIHtcbiAgaWYgKHNjcmlwdFR5cGVGb3JDaGFpbih1bnNwZW50LmNoYWluKSA9PT0gJ3AydHInKSB7XG4gICAgcHNidC5zaWduVGFwcm9vdElucHV0SEQoaW5wdXRJbmRleCwgc2lnbmVyKTtcbiAgfSBlbHNlIHtcbiAgICBwc2J0LnNpZ25JbnB1dEhEKGlucHV0SW5kZXgsIHNpZ25lcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xhc3NpZnlTY3JpcHRUeXBlKGlucHV0OiBQc2J0SW5wdXQpOiBTY3JpcHRUeXBlMk9mMyB8IHVuZGVmaW5lZCB7XG4gIGxldCBzY3JpcHRUeXBlOiBTY3JpcHRUeXBlMk9mMyB8IHVuZGVmaW5lZDtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihpbnB1dC5yZWRlZW1TY3JpcHQpICYmIEJ1ZmZlci5pc0J1ZmZlcihpbnB1dC53aXRuZXNzU2NyaXB0KSkge1xuICAgIHNjcmlwdFR5cGUgPSAncDJzaFAyd3NoJztcbiAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoaW5wdXQucmVkZWVtU2NyaXB0KSkge1xuICAgIHNjcmlwdFR5cGUgPSAncDJzaCc7XG4gIH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGlucHV0LndpdG5lc3NTY3JpcHQpKSB7XG4gICAgc2NyaXB0VHlwZSA9ICdwMndzaCc7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQudGFwTGVhZlNjcmlwdCkgJiYgaW5wdXQudGFwTGVhZlNjcmlwdC5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHNjcmlwdFR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRm91bmQgYm90aCAke3NjcmlwdFR5cGV9IGFuZCBwMnRyIFBTQlQgbWV0YWRhdGEuYCk7XG4gICAgfVxuICAgIGlmIChpbnB1dC50YXBMZWFmU2NyaXB0Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQml0Z28gb25seSBzdXBwb3J0cyBhIHNpbmdsZSB0YXAgbGVhZiBzY3JpcHQgcGVyIGlucHV0LicpO1xuICAgIH1cbiAgICBzY3JpcHRUeXBlID0gJ3AydHInO1xuICB9XG4gIHJldHVybiBzY3JpcHRUeXBlO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNpZ25hdHVyZXMoaW5wdXQ6IFBzYnRJbnB1dCwgc2NyaXB0VHlwZTogU2NyaXB0VHlwZTJPZjMpOiBTaWduYXR1cmVzIHtcbiAgY29uc3QgdmFsaWRhdGUgPSAoc2lnOiBCdWZmZXIpOiBCdWZmZXIgPT4ge1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoc2lnKSkge1xuICAgICAgcmV0dXJuIHNpZztcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNpZ25hdHVyZSB0eXBlJyk7XG4gIH07XG5cbiAgaWYgKHNjcmlwdFR5cGUgPT09ICdwMnRyJykge1xuICAgIGlmIChpbnB1dC5wYXJ0aWFsU2lnICYmIGlucHV0LnBhcnRpYWxTaWcubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFBTQlQgc2lnbmF0dXJlIHN0YXRlJyk7XG4gICAgfVxuICAgIGlmICghaW5wdXQudGFwU2NyaXB0U2lnIHx8IGlucHV0LnRhcFNjcmlwdFNpZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChpbnB1dC50YXBTY3JpcHRTaWcubGVuZ3RoID4gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHNpZ25hdHVyZSBjb3VudCcpO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXQudGFwU2NyaXB0U2lnLmxlbmd0aCA9PT0gMVxuICAgICAgPyBbdmFsaWRhdGUoaW5wdXQudGFwU2NyaXB0U2lnWzBdLnNpZ25hdHVyZSldXG4gICAgICA6IFt2YWxpZGF0ZShpbnB1dC50YXBTY3JpcHRTaWdbMF0uc2lnbmF0dXJlKSwgdmFsaWRhdGUoaW5wdXQudGFwU2NyaXB0U2lnWzFdLnNpZ25hdHVyZSldO1xuICB9XG4gIGlmIChpbnB1dC50YXBTY3JpcHRTaWcgJiYgaW5wdXQudGFwU2NyaXB0U2lnLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgUFNCVCBzaWduYXR1cmUgc3RhdGUnKTtcbiAgfVxuICBpZiAoIWlucHV0LnBhcnRpYWxTaWcgfHwgaW5wdXQucGFydGlhbFNpZy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChpbnB1dC5wYXJ0aWFsU2lnLmxlbmd0aCA+IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgc2lnbmF0dXJlIGNvdW50Jyk7XG4gIH1cbiAgcmV0dXJuIGlucHV0LnBhcnRpYWxTaWcubGVuZ3RoID09PSAxXG4gICAgPyBbdmFsaWRhdGUoaW5wdXQucGFydGlhbFNpZ1swXS5zaWduYXR1cmUpXVxuICAgIDogW3ZhbGlkYXRlKGlucHV0LnBhcnRpYWxTaWdbMF0uc2lnbmF0dXJlKSwgdmFsaWRhdGUoaW5wdXQucGFydGlhbFNpZ1sxXS5zaWduYXR1cmUpXTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTY3JpcHQoXG4gIGlucHV0OiBQc2J0SW5wdXQsXG4gIHNjcmlwdFR5cGU6IFNjcmlwdFR5cGUyT2YzXG4pOiBQYXJzZWRQdWJTY3JpcHQyT2YzIHwgUGFyc2VkUHViU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGgge1xuICBsZXQgcHViU2NyaXB0OiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIGlmIChzY3JpcHRUeXBlID09PSAncDJzaCcpIHtcbiAgICBwdWJTY3JpcHQgPSBpbnB1dC5yZWRlZW1TY3JpcHQ7XG4gIH0gZWxzZSBpZiAoc2NyaXB0VHlwZSA9PT0gJ3Ayd3NoJyB8fCBzY3JpcHRUeXBlID09PSAncDJzaFAyd3NoJykge1xuICAgIHB1YlNjcmlwdCA9IGlucHV0LndpdG5lc3NTY3JpcHQ7XG4gIH0gZWxzZSB7XG4gICAgcHViU2NyaXB0ID0gaW5wdXQudGFwTGVhZlNjcmlwdCA/IGlucHV0LnRhcExlYWZTY3JpcHRbMF0uc2NyaXB0IDogdW5kZWZpbmVkO1xuICB9XG4gIGlmICghcHViU2NyaXB0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFBTQlQgc3RhdGUgZm9yICR7c2NyaXB0VHlwZX0uIE1pc3NpbmcgcmVxdWlyZWQgZmllbGRzLmApO1xuICB9XG4gIHJldHVybiBwYXJzZVB1YlNjcmlwdChwdWJTY3JpcHQsIHNjcmlwdFR5cGUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUlucHV0TWV0YWRhdGEoaW5wdXQ6IFBzYnRJbnB1dCwgc2NyaXB0VHlwZTogU2NyaXB0VHlwZTJPZjMpOiBQYXJzZWRQc2J0Mk9mMyB8IFBhcnNlZFBzYnRQMlRSIHtcbiAgY29uc3QgcGFyc2VkUHViU2NyaXB0ID0gcGFyc2VTY3JpcHQoaW5wdXQsIHNjcmlwdFR5cGUpO1xuICBjb25zdCBzaWduYXR1cmVzID0gcGFyc2VTaWduYXR1cmVzKGlucHV0LCBzY3JpcHRUeXBlKTtcblxuICBpZiAocGFyc2VkUHViU2NyaXB0LnNjcmlwdFR5cGUgPT09ICdwMnRyJykge1xuICAgIGlmICghaW5wdXQudGFwTGVhZlNjcmlwdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFBTQlQgc3RhdGUgZm9yIHAydHIuIE1pc3NpbmcgcmVxdWlyZWQgZmllbGRzLicpO1xuICAgIH1cbiAgICBjb25zdCBjb250cm9sQmxvY2sgPSBpbnB1dC50YXBMZWFmU2NyaXB0WzBdLmNvbnRyb2xCbG9jaztcbiAgICBpZiAoIWlzVmFsaWRDb250cm9sQm9jayhjb250cm9sQmxvY2spKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgUFNCVCBwMnRyIHNjcmlwdCBwYXRoIGNvbnRyb2xCbG9jay4nKTtcbiAgICB9XG4gICAgY29uc3Qgc2NyaXB0UGF0aExldmVsID0gY2FsY3VsYXRlU2NyaXB0UGF0aExldmVsKGNvbnRyb2xCbG9jayk7XG4gICAgY29uc3QgbGVhZlZlcnNpb24gPSBnZXRTY3JpcHRQYXRoTGV2ZWwoY29udHJvbEJsb2NrKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucGFyc2VkUHViU2NyaXB0LFxuICAgICAgc2lnbmF0dXJlcyxcbiAgICAgIGNvbnRyb2xCbG9jayxcbiAgICAgIHNjcmlwdFBhdGhMZXZlbCxcbiAgICAgIGxlYWZWZXJzaW9uLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKHBhcnNlZFB1YlNjcmlwdC5zY3JpcHRUeXBlID09PSAncDJzaFAyd3NoJykge1xuICAgICAgcGFyc2VkUHViU2NyaXB0LnJlZGVlbVNjcmlwdCA9IGlucHV0LnJlZGVlbVNjcmlwdDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBhcnNlZFB1YlNjcmlwdCxcbiAgICAgIHNpZ25hdHVyZXMsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEByZXR1cm4gcHNidCBtZXRhZGF0YSBhcmUgcGFyc2VkIGFzIHBlciBiZWxvdyBjb25kaXRpb25zLlxuICogcmVkZWVtU2NyaXB0L3dpdG5lc3NTY3JpcHQvdGFwTGVhZlNjcmlwdCBtYXRjaGVzIEJpdEdvLlxuICogc2lnbmF0dXJlIGFuZCBwdWJsaWMga2V5IGNvdW50IG1hdGNoZXMgQml0R28uXG4gKiBQMlNIID0+IHNjcmlwdFR5cGUsIHJlZGVlbVNjcmlwdCwgcHVibGljIGtleXMsIHNpZ25hdHVyZXMuXG4gKiBQVzJTSCA9PiBzY3JpcHRUeXBlLCB3aXRuZXNzU2NyaXB0LCBwdWJsaWMga2V5cywgc2lnbmF0dXJlcy5cbiAqIFAyU0gtUFcyU0ggPT4gc2NyaXB0VHlwZSwgcmVkZWVtU2NyaXB0LCB3aXRuZXNzU2NyaXB0LCBwdWJsaWMga2V5cywgc2lnbmF0dXJlcy5cbiAqIFAyVFIgPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICh3aXRuZXNzU2NyaXB0KSwgY29udHJvbEJsb2NrLCBzY3JpcHRQYXRoTGV2ZWwsIGxlYWZWZXJzaW9uLCBwdWJsaWMga2V5cywgc2lnbmF0dXJlcy5cbiAqIEFueSB1bnNpZ25lZCBQU0JUIGFuZCB3aXRob3V0IHJlcXVpcmVkIG1ldGFkYXRhIGlzIHJldHVybmVkIHdpdGggdW5kZWZpbmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQc2J0SW5wdXQocHNidDogVXR4b1BzYnQsIGlucHV0SW5kZXg6IG51bWJlcik6IFBhcnNlZFBzYnQyT2YzIHwgUGFyc2VkUHNidFAyVFIgfCB1bmRlZmluZWQge1xuICBjb25zdCBpbnB1dCA9IGNoZWNrRm9ySW5wdXQocHNidC5kYXRhLmlucHV0cywgaW5wdXRJbmRleCk7XG4gIGlmIChwc2J0LmlzSW5wdXRGaW5hbGl6ZWQoaW5wdXRJbmRleCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbmFsaXplZCBQU0JUIHBhcnNpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xuICB9XG4gIGNvbnN0IHNjcmlwdFR5cGUgPSBjbGFzc2lmeVNjcmlwdFR5cGUoaW5wdXQpO1xuICBpZiAoIXNjcmlwdFR5cGUpIHtcbiAgICBpZiAocHNidC5nZXRTaWduYXR1cmVDb3VudChpbnB1dEluZGV4KSA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBQU0JUIHN0YXRlLiBTaWduYXR1cmVzIGZvdW5kIHdpdGhvdXQgc2NyaXB0cy4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcGFyc2VJbnB1dE1ldGFkYXRhKGlucHV0LCBzY3JpcHRUeXBlKTtcbn1cbiJdfQ==
|