@bitgo-beta/utxo-lib 8.0.3-beta.39 → 8.0.3-beta.391
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.
- package/README.md +19 -16
- package/dist/src/address.js +5 -5
- package/dist/src/addressFormat.js +9 -9
- package/dist/src/bitgo/Musig2.js +19 -19
- package/dist/src/bitgo/PsbtUtil.d.ts +8 -7
- package/dist/src/bitgo/PsbtUtil.d.ts.map +1 -1
- package/dist/src/bitgo/PsbtUtil.js +18 -3
- package/dist/src/bitgo/Unspent.js +3 -3
- package/dist/src/bitgo/UtxoPsbt.d.ts +19 -4
- package/dist/src/bitgo/UtxoPsbt.d.ts.map +1 -1
- package/dist/src/bitgo/UtxoPsbt.js +158 -104
- package/dist/src/bitgo/UtxoTransaction.d.ts.map +1 -1
- package/dist/src/bitgo/UtxoTransaction.js +9 -9
- package/dist/src/bitgo/bitcoincash/address.js +6 -6
- package/dist/src/bitgo/bitcoincash/index.js +6 -2
- package/dist/src/bitgo/dash/DashTransaction.js +3 -3
- package/dist/src/bitgo/dash/index.js +6 -2
- package/dist/src/bitgo/index.d.ts +9 -0
- package/dist/src/bitgo/index.d.ts.map +1 -1
- package/dist/src/bitgo/index.js +9 -3
- package/dist/src/bitgo/legacysafe/index.d.ts +15 -0
- package/dist/src/bitgo/legacysafe/index.d.ts.map +1 -0
- package/dist/src/bitgo/legacysafe/index.js +61 -0
- package/dist/src/bitgo/litecoin/LitecoinTransaction.js +2 -2
- package/dist/src/bitgo/litecoin/index.js +6 -2
- package/dist/src/bitgo/outputScripts.d.ts +1 -0
- package/dist/src/bitgo/outputScripts.d.ts.map +1 -1
- package/dist/src/bitgo/outputScripts.js +29 -14
- package/dist/src/bitgo/parseInput.d.ts +4 -0
- package/dist/src/bitgo/parseInput.d.ts.map +1 -1
- package/dist/src/bitgo/parseInput.js +23 -7
- package/dist/src/bitgo/psbt/fromHalfSigned.js +5 -5
- package/dist/src/bitgo/signature.d.ts.map +1 -1
- package/dist/src/bitgo/signature.js +17 -8
- package/dist/src/bitgo/transaction.d.ts +18 -3
- package/dist/src/bitgo/transaction.d.ts.map +1 -1
- package/dist/src/bitgo/transaction.js +18 -16
- package/dist/src/bitgo/transactionAmounts.d.ts +9 -0
- package/dist/src/bitgo/transactionAmounts.d.ts.map +1 -0
- package/dist/src/bitgo/transactionAmounts.js +33 -0
- package/dist/src/bitgo/types.d.ts +7 -0
- package/dist/src/bitgo/types.d.ts.map +1 -1
- package/dist/src/bitgo/types.js +11 -2
- package/dist/src/bitgo/wallet/Psbt.d.ts +37 -8
- package/dist/src/bitgo/wallet/Psbt.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/Psbt.js +129 -29
- package/dist/src/bitgo/wallet/Unspent.d.ts +23 -13
- package/dist/src/bitgo/wallet/Unspent.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/Unspent.js +59 -54
- package/dist/src/bitgo/wallet/WalletOutput.d.ts +17 -1
- package/dist/src/bitgo/wallet/WalletOutput.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/WalletOutput.js +68 -27
- package/dist/src/bitgo/wallet/WalletScripts.js +2 -2
- package/dist/src/bitgo/wallet/WalletUnspentSigner.js +4 -4
- package/dist/src/bitgo/wallet/index.d.ts +2 -0
- package/dist/src/bitgo/wallet/index.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/index.js +8 -2
- package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts +50 -0
- package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/psbt/PsbtOutputs.js +87 -0
- package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts +32 -0
- package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/psbt/RootNodes.js +125 -0
- package/dist/src/bitgo/zcash/ZcashPsbt.d.ts +0 -1
- package/dist/src/bitgo/zcash/ZcashPsbt.d.ts.map +1 -1
- package/dist/src/bitgo/zcash/ZcashPsbt.js +5 -14
- package/dist/src/bitgo/zcash/ZcashTransaction.js +15 -15
- package/dist/src/bitgo/zcash/ZcashTransactionBuilder.js +4 -4
- package/dist/src/bitgo/zcash/address.js +3 -3
- package/dist/src/bitgo/zcash/hashZip0244.js +3 -3
- package/dist/src/bitgo/zcash/index.js +6 -2
- package/dist/src/index.js +6 -2
- package/dist/src/noble_ecc.d.ts +7 -7
- package/dist/src/noble_ecc.d.ts.map +1 -1
- package/dist/src/noble_ecc.js +4 -4
- package/dist/src/testutil/index.js +6 -2
- package/dist/src/testutil/keys.d.ts +3 -0
- package/dist/src/testutil/keys.d.ts.map +1 -1
- package/dist/src/testutil/keys.js +18 -3
- package/dist/src/testutil/mock.d.ts.map +1 -1
- package/dist/src/testutil/mock.js +19 -17
- package/dist/src/testutil/psbt.d.ts +26 -5
- package/dist/src/testutil/psbt.d.ts.map +1 -1
- package/dist/src/testutil/psbt.js +40 -29
- package/dist/src/testutil/transaction.d.ts +14 -5
- package/dist/src/testutil/transaction.d.ts.map +1 -1
- package/dist/src/testutil/transaction.js +20 -20
- package/dist/src/transaction_builder.d.ts.map +1 -1
- package/dist/src/transaction_builder.js +1 -6
- package/package.json +7 -7
|
@@ -9,16 +9,16 @@ class WalletUnspentSigner {
|
|
|
9
9
|
if (Array.isArray(walletKeys)) {
|
|
10
10
|
walletKeys = new WalletKeys_1.RootWalletKeys(walletKeys);
|
|
11
11
|
}
|
|
12
|
-
this.signerIndex = walletKeys.triple.findIndex((k) => WalletKeys_1.eqPublicKey(k, signer));
|
|
12
|
+
this.signerIndex = walletKeys.triple.findIndex((k) => (0, WalletKeys_1.eqPublicKey)(k, signer));
|
|
13
13
|
if (this.signerIndex === undefined) {
|
|
14
14
|
throw new Error(`signer not part of walletKeys`);
|
|
15
15
|
}
|
|
16
|
-
this.cosignerIndex = walletKeys.triple.findIndex((k) => WalletKeys_1.eqPublicKey(k, cosigner));
|
|
16
|
+
this.cosignerIndex = walletKeys.triple.findIndex((k) => (0, WalletKeys_1.eqPublicKey)(k, cosigner));
|
|
17
17
|
if (this.cosignerIndex === undefined) {
|
|
18
18
|
throw new Error(`cosigner not part of walletKeys`);
|
|
19
19
|
}
|
|
20
20
|
this.walletKeys = walletKeys;
|
|
21
|
-
if (WalletKeys_1.eqPublicKey(signer, cosigner)) {
|
|
21
|
+
if ((0, WalletKeys_1.eqPublicKey)(signer, cosigner)) {
|
|
22
22
|
throw new Error(`signer must not equal cosigner`);
|
|
23
23
|
}
|
|
24
24
|
if (signer.isNeutered()) {
|
|
@@ -44,4 +44,4 @@ class WalletUnspentSigner {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
exports.WalletUnspentSigner = WalletUnspentSigner;
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2FsbGV0VW5zcGVudFNpZ25lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXQvV2FsbGV0VW5zcGVudFNpZ25lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSw2Q0FBMEY7QUFHMUYsTUFBYSxtQkFBbUI7SUFjOUIsWUFDRSxVQUErQyxFQUN4QyxNQUFzQixFQUN0QixRQUF3QjtRQUR4QixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUUvQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDN0IsVUFBVSxHQUFHLElBQUksMkJBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM3QztRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUEsd0JBQVcsRUFBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM5RSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztTQUNsRDtRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUEsd0JBQVcsRUFBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNsRixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztTQUNwRDtRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBZSxDQUFDO1FBRWxDLElBQUksSUFBQSx3QkFBVyxFQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRTtZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDbkQ7UUFDRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDO0lBcENELE1BQU0sQ0FBQyxJQUFJLENBQ1QsVUFBMEIsRUFDMUIsTUFBc0IsRUFDdEIsUUFBd0I7UUFFeEIsT0FBTyxJQUFJLG1CQUFtQixDQUFpQixVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFnQ0Q7Ozs7T0FJRztJQUNILHNCQUFzQixDQUFDLEtBQWEsRUFBRSxLQUFhO1FBQ2pELElBQUksSUFBSSxDQUFDLFVBQVUsWUFBWSw4QkFBaUIsRUFBRTtZQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7U0FDL0Q7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLFlBQVksMkJBQWMsRUFBRTtZQUM3QyxPQUFPLElBQUksbUJBQW1CLENBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUNwRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQ3BGLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FDekYsQ0FBQztTQUNIO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUE3REQsa0RBNkRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQklQMzJJbnRlcmZhY2UgfSBmcm9tICdiaXAzMic7XG5cbmltcG9ydCB7IERlcml2ZWRXYWxsZXRLZXlzLCBlcVB1YmxpY0tleSwgUm9vdFdhbGxldEtleXMsIFdhbGxldEtleXMgfSBmcm9tICcuL1dhbGxldEtleXMnO1xuaW1wb3J0IHsgVHJpcGxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgV2FsbGV0VW5zcGVudFNpZ25lcjxUIGV4dGVuZHMgV2FsbGV0S2V5cz4ge1xuICBwdWJsaWMgcmVhZG9ubHkgd2FsbGV0S2V5czogVDtcblxuICBzdGF0aWMgZnJvbShcbiAgICB3YWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgICBzaWduZXI6IEJJUDMySW50ZXJmYWNlLFxuICAgIGNvc2lnbmVyOiBCSVAzMkludGVyZmFjZVxuICApOiBXYWxsZXRVbnNwZW50U2lnbmVyPFJvb3RXYWxsZXRLZXlzPiB7XG4gICAgcmV0dXJuIG5ldyBXYWxsZXRVbnNwZW50U2lnbmVyPFJvb3RXYWxsZXRLZXlzPih3YWxsZXRLZXlzLCBzaWduZXIsIGNvc2lnbmVyKTtcbiAgfVxuXG4gIHJlYWRvbmx5IHNpZ25lckluZGV4O1xuICByZWFkb25seSBjb3NpZ25lckluZGV4O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHdhbGxldEtleXM6IFdhbGxldEtleXMgfCBUcmlwbGU8QklQMzJJbnRlcmZhY2U+LFxuICAgIHB1YmxpYyBzaWduZXI6IEJJUDMySW50ZXJmYWNlLFxuICAgIHB1YmxpYyBjb3NpZ25lcjogQklQMzJJbnRlcmZhY2VcbiAgKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkod2FsbGV0S2V5cykpIHtcbiAgICAgIHdhbGxldEtleXMgPSBuZXcgUm9vdFdhbGxldEtleXMod2FsbGV0S2V5cyk7XG4gICAgfVxuICAgIHRoaXMuc2lnbmVySW5kZXggPSB3YWxsZXRLZXlzLnRyaXBsZS5maW5kSW5kZXgoKGspID0+IGVxUHVibGljS2V5KGssIHNpZ25lcikpO1xuICAgIGlmICh0aGlzLnNpZ25lckluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgc2lnbmVyIG5vdCBwYXJ0IG9mIHdhbGxldEtleXNgKTtcbiAgICB9XG4gICAgdGhpcy5jb3NpZ25lckluZGV4ID0gd2FsbGV0S2V5cy50cmlwbGUuZmluZEluZGV4KChrKSA9PiBlcVB1YmxpY0tleShrLCBjb3NpZ25lcikpO1xuICAgIGlmICh0aGlzLmNvc2lnbmVySW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb3NpZ25lciBub3QgcGFydCBvZiB3YWxsZXRLZXlzYCk7XG4gICAgfVxuXG4gICAgdGhpcy53YWxsZXRLZXlzID0gd2FsbGV0S2V5cyBhcyBUO1xuXG4gICAgaWYgKGVxUHVibGljS2V5KHNpZ25lciwgY29zaWduZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHNpZ25lciBtdXN0IG5vdCBlcXVhbCBjb3NpZ25lcmApO1xuICAgIH1cbiAgICBpZiAoc2lnbmVyLmlzTmV1dGVyZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBzaWduZXIgbXVzdCBoYXZlIHByaXZhdGUga2V5YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBjaGFpblxuICAgKiBAcGFyYW0gaW5kZXhcbiAgICogQHJldHVybiBXYWxsZXRVbnNwZW50U2lnbmVyIHRoYXQgY29udGFpbnMga2V5cyBmb3IgZ2VuZXJhdGluZyBvdXRwdXQgc2NyaXB0cyBhbmQgc2lnbmF0dXJlcy5cbiAgICovXG4gIGRlcml2ZUZvckNoYWluQW5kSW5kZXgoY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlcik6IFdhbGxldFVuc3BlbnRTaWduZXI8RGVyaXZlZFdhbGxldEtleXM+IHtcbiAgICBpZiAodGhpcy53YWxsZXRLZXlzIGluc3RhbmNlb2YgRGVyaXZlZFdhbGxldEtleXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IGRlcml2ZSBhZ2FpbiBmcm9tIERlcml2ZWRXYWxsZXRLZXlzYCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud2FsbGV0S2V5cyBpbnN0YW5jZW9mIFJvb3RXYWxsZXRLZXlzKSB7XG4gICAgICByZXR1cm4gbmV3IFdhbGxldFVuc3BlbnRTaWduZXIoXG4gICAgICAgIHRoaXMud2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KGNoYWluLCBpbmRleCksXG4gICAgICAgIHRoaXMuc2lnbmVyLmRlcml2ZVBhdGgodGhpcy53YWxsZXRLZXlzLmdldERlcml2YXRpb25QYXRoKHRoaXMuc2lnbmVyLCBjaGFpbiwgaW5kZXgpKSxcbiAgICAgICAgdGhpcy5jb3NpZ25lci5kZXJpdmVQYXRoKHRoaXMud2FsbGV0S2V5cy5nZXREZXJpdmF0aW9uUGF0aCh0aGlzLmNvc2lnbmVyLCBjaGFpbiwgaW5kZXgpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc3RhdGVgKTtcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/wallet/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/wallet/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -17,4 +21,6 @@ __exportStar(require("./WalletOutput"), exports);
|
|
|
17
21
|
__exportStar(require("./WalletUnspentSigner"), exports);
|
|
18
22
|
__exportStar(require("./WalletScripts"), exports);
|
|
19
23
|
__exportStar(require("./WalletKeys"), exports);
|
|
20
|
-
|
|
24
|
+
__exportStar(require("./psbt/PsbtOutputs"), exports);
|
|
25
|
+
__exportStar(require("./psbt/RootNodes"), exports);
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBeUI7QUFDekIseUNBQXVCO0FBQ3ZCLDRDQUEwQjtBQUMxQixpREFBK0I7QUFDL0Isd0RBQXNDO0FBQ3RDLGtEQUFnQztBQUNoQywrQ0FBNkI7QUFDN0IscURBQW1DO0FBQ25DLG1EQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY2hhaW5zJztcbmV4cG9ydCAqIGZyb20gJy4vUHNidCc7XG5leHBvcnQgKiBmcm9tICcuL1Vuc3BlbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9XYWxsZXRPdXRwdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9XYWxsZXRVbnNwZW50U2lnbmVyJztcbmV4cG9ydCAqIGZyb20gJy4vV2FsbGV0U2NyaXB0cyc7XG5leHBvcnQgKiBmcm9tICcuL1dhbGxldEtleXMnO1xuZXhwb3J0ICogZnJvbSAnLi9wc2J0L1BzYnRPdXRwdXRzJztcbmV4cG9ydCAqIGZyb20gJy4vcHNidC9Sb290Tm9kZXMnO1xuIl19
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contains helper methods for determining if a transaction output belongs to a given BitGo wallet
|
|
3
|
+
*/
|
|
4
|
+
import { Triple } from '../../types';
|
|
5
|
+
import { UtxoPsbt } from '../../UtxoPsbt';
|
|
6
|
+
import { BIP32Interface } from 'bip32';
|
|
7
|
+
import { PsbtOutput } from 'bip174/src/lib/interfaces';
|
|
8
|
+
/**
|
|
9
|
+
* Derives the appropriate BIP32 key pair for a given output.
|
|
10
|
+
* It uses either tapBip32Derivation or bip32Derivation paths from the output.
|
|
11
|
+
* @param bip32 - The BIP32Interface object to derive from.
|
|
12
|
+
* @param output - The specific PSBT output to derive for.
|
|
13
|
+
* @returns The derived BIP32 key pair if master fingerprint matches, or undefined.
|
|
14
|
+
*/
|
|
15
|
+
export declare function deriveKeyPairForOutput(bip32: BIP32Interface, output: PsbtOutput): BIP32Interface | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Determines if a specified output in a PSBT is an output of the wallet represented by the given root nodes.
|
|
18
|
+
* @param psbt - The PSBT to check.
|
|
19
|
+
* @param outputIndex - The index of the output to check.
|
|
20
|
+
* @param rootWalletNodes - The root nodes representing the wallet.
|
|
21
|
+
* @returns A boolean indicating if the output belongs to the wallet.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isWalletOutput(psbt: UtxoPsbt, outputIndex: number, rootWalletNodes: Triple<BIP32Interface>): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Finds indices of all outputs in a PSBT that belong to the wallet represented by the given root nodes.
|
|
26
|
+
* @param psbt - The PSBT to search through.
|
|
27
|
+
* @param rootWalletNodes - The root nodes representing the wallet.
|
|
28
|
+
* @returns An array of indices corresponding to wallet outputs.
|
|
29
|
+
*/
|
|
30
|
+
export declare function findWalletOutputIndices(psbt: UtxoPsbt, rootWalletNodes: Triple<BIP32Interface>): number[];
|
|
31
|
+
/**
|
|
32
|
+
* Calculates the total amount of all wallet outputs in a PSBT for the wallet represented by the given root nodes.
|
|
33
|
+
* @param psbt - The PSBT to calculate for.
|
|
34
|
+
* @param rootWalletNodes - The root nodes representing the wallet.
|
|
35
|
+
* @returns The total amount of wallet outputs.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getTotalAmountOfWalletOutputs(psbt: UtxoPsbt, rootWalletNodes: Triple<BIP32Interface>): bigint;
|
|
38
|
+
/**
|
|
39
|
+
* Finds indices of all internal outputs in a PSBT, identified as outputs belonging to the wallet's root nodes within the PSBT.
|
|
40
|
+
* @param psbt - The PSBT containing the wallet's root nodes as indicated by global Xpubs.
|
|
41
|
+
* @returns An array of indices of internal outputs.
|
|
42
|
+
*/
|
|
43
|
+
export declare function findInternalOutputIndices(psbt: UtxoPsbt): number[];
|
|
44
|
+
/**
|
|
45
|
+
* Calculates the total amount of all internal outputs in a PSBT, identified as outputs belonging to the wallet's root nodes within the PSBT.
|
|
46
|
+
* @param psbt - The PSBT containing the wallet's root nodes as indicated by global Xpubs.
|
|
47
|
+
* @returns The total amount of internal outputs.
|
|
48
|
+
*/
|
|
49
|
+
export declare function getTotalAmountOfInternalOutputs(psbt: UtxoPsbt): bigint;
|
|
50
|
+
//# sourceMappingURL=PsbtOutputs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PsbtOutputs.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/wallet/psbt/PsbtOutputs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAiB,MAAM,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGvD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,GAAG,cAAc,GAAG,SAAS,CAM5G;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG,OAAO,CAapH;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,EAAE,CAEzG;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAI7G;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,CAGlE;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAGtE"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Contains helper methods for determining if a transaction output belongs to a given BitGo wallet
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getTotalAmountOfInternalOutputs = exports.findInternalOutputIndices = exports.getTotalAmountOfWalletOutputs = exports.findWalletOutputIndices = exports.isWalletOutput = exports.deriveKeyPairForOutput = void 0;
|
|
7
|
+
const types_1 = require("../../types");
|
|
8
|
+
const outputScripts_1 = require("../../outputScripts");
|
|
9
|
+
const UtxoPsbt_1 = require("../../UtxoPsbt");
|
|
10
|
+
const utils_1 = require("bip174/src/lib/utils");
|
|
11
|
+
const RootNodes_1 = require("./RootNodes");
|
|
12
|
+
/**
|
|
13
|
+
* Derives the appropriate BIP32 key pair for a given output.
|
|
14
|
+
* It uses either tapBip32Derivation or bip32Derivation paths from the output.
|
|
15
|
+
* @param bip32 - The BIP32Interface object to derive from.
|
|
16
|
+
* @param output - The specific PSBT output to derive for.
|
|
17
|
+
* @returns The derived BIP32 key pair if master fingerprint matches, or undefined.
|
|
18
|
+
*/
|
|
19
|
+
function deriveKeyPairForOutput(bip32, output) {
|
|
20
|
+
var _a, _b;
|
|
21
|
+
return ((_a = output.tapBip32Derivation) === null || _a === void 0 ? void 0 : _a.length)
|
|
22
|
+
? UtxoPsbt_1.UtxoPsbt.deriveKeyPair(bip32, output.tapBip32Derivation, { ignoreY: true })
|
|
23
|
+
: ((_b = output.bip32Derivation) === null || _b === void 0 ? void 0 : _b.length)
|
|
24
|
+
? UtxoPsbt_1.UtxoPsbt.deriveKeyPair(bip32, output.bip32Derivation, { ignoreY: false })
|
|
25
|
+
: undefined;
|
|
26
|
+
}
|
|
27
|
+
exports.deriveKeyPairForOutput = deriveKeyPairForOutput;
|
|
28
|
+
/**
|
|
29
|
+
* Determines if a specified output in a PSBT is an output of the wallet represented by the given root nodes.
|
|
30
|
+
* @param psbt - The PSBT to check.
|
|
31
|
+
* @param outputIndex - The index of the output to check.
|
|
32
|
+
* @param rootWalletNodes - The root nodes representing the wallet.
|
|
33
|
+
* @returns A boolean indicating if the output belongs to the wallet.
|
|
34
|
+
*/
|
|
35
|
+
function isWalletOutput(psbt, outputIndex, rootWalletNodes) {
|
|
36
|
+
const output = (0, utils_1.checkForOutput)(psbt.data.outputs, outputIndex);
|
|
37
|
+
const pubKeys = rootWalletNodes.map((rootNode) => { var _a; return (_a = deriveKeyPairForOutput(rootNode, output)) === null || _a === void 0 ? void 0 : _a.publicKey; });
|
|
38
|
+
if (!(0, types_1.isBufferArray)(pubKeys)) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
const outputScript = psbt.getOutputScript(outputIndex);
|
|
42
|
+
return outputScripts_1.scriptTypes2Of3.some((scriptType) => (0, outputScripts_1.createOutputScript2of3)(pubKeys, scriptType).scriptPubKey.equals(outputScript));
|
|
43
|
+
}
|
|
44
|
+
exports.isWalletOutput = isWalletOutput;
|
|
45
|
+
/**
|
|
46
|
+
* Finds indices of all outputs in a PSBT that belong to the wallet represented by the given root nodes.
|
|
47
|
+
* @param psbt - The PSBT to search through.
|
|
48
|
+
* @param rootWalletNodes - The root nodes representing the wallet.
|
|
49
|
+
* @returns An array of indices corresponding to wallet outputs.
|
|
50
|
+
*/
|
|
51
|
+
function findWalletOutputIndices(psbt, rootWalletNodes) {
|
|
52
|
+
return psbt.data.outputs.flatMap((_, i) => (isWalletOutput(psbt, i, rootWalletNodes) ? [i] : []));
|
|
53
|
+
}
|
|
54
|
+
exports.findWalletOutputIndices = findWalletOutputIndices;
|
|
55
|
+
/**
|
|
56
|
+
* Calculates the total amount of all wallet outputs in a PSBT for the wallet represented by the given root nodes.
|
|
57
|
+
* @param psbt - The PSBT to calculate for.
|
|
58
|
+
* @param rootWalletNodes - The root nodes representing the wallet.
|
|
59
|
+
* @returns The total amount of wallet outputs.
|
|
60
|
+
*/
|
|
61
|
+
function getTotalAmountOfWalletOutputs(psbt, rootWalletNodes) {
|
|
62
|
+
const indices = findWalletOutputIndices(psbt, rootWalletNodes);
|
|
63
|
+
const txOutputs = psbt.txOutputs;
|
|
64
|
+
return indices.reduce((sum, i) => sum + txOutputs[i].value, BigInt(0));
|
|
65
|
+
}
|
|
66
|
+
exports.getTotalAmountOfWalletOutputs = getTotalAmountOfWalletOutputs;
|
|
67
|
+
/**
|
|
68
|
+
* Finds indices of all internal outputs in a PSBT, identified as outputs belonging to the wallet's root nodes within the PSBT.
|
|
69
|
+
* @param psbt - The PSBT containing the wallet's root nodes as indicated by global Xpubs.
|
|
70
|
+
* @returns An array of indices of internal outputs.
|
|
71
|
+
*/
|
|
72
|
+
function findInternalOutputIndices(psbt) {
|
|
73
|
+
const rootNodes = (0, RootNodes_1.getSortedRootNodes)(psbt);
|
|
74
|
+
return findWalletOutputIndices(psbt, rootNodes);
|
|
75
|
+
}
|
|
76
|
+
exports.findInternalOutputIndices = findInternalOutputIndices;
|
|
77
|
+
/**
|
|
78
|
+
* Calculates the total amount of all internal outputs in a PSBT, identified as outputs belonging to the wallet's root nodes within the PSBT.
|
|
79
|
+
* @param psbt - The PSBT containing the wallet's root nodes as indicated by global Xpubs.
|
|
80
|
+
* @returns The total amount of internal outputs.
|
|
81
|
+
*/
|
|
82
|
+
function getTotalAmountOfInternalOutputs(psbt) {
|
|
83
|
+
const rootNodes = (0, RootNodes_1.getSortedRootNodes)(psbt);
|
|
84
|
+
return getTotalAmountOfWalletOutputs(psbt, rootNodes);
|
|
85
|
+
}
|
|
86
|
+
exports.getTotalAmountOfInternalOutputs = getTotalAmountOfInternalOutputs;
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHNidE91dHB1dHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0L3BzYnQvUHNidE91dHB1dHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSCx1Q0FBb0Q7QUFDcEQsdURBQThFO0FBQzlFLDZDQUEwQztBQUUxQyxnREFBc0Q7QUFFdEQsMkNBQWlEO0FBRWpEOzs7Ozs7R0FNRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLEtBQXFCLEVBQUUsTUFBa0I7O0lBQzlFLE9BQU8sQ0FBQSxNQUFBLE1BQU0sQ0FBQyxrQkFBa0IsMENBQUUsTUFBTTtRQUN0QyxDQUFDLENBQUMsbUJBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM3RSxDQUFDLENBQUMsQ0FBQSxNQUFBLE1BQU0sQ0FBQyxlQUFlLDBDQUFFLE1BQU07WUFDaEMsQ0FBQyxDQUFDLG1CQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQzNFLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDaEIsQ0FBQztBQU5ELHdEQU1DO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLElBQWMsRUFBRSxXQUFtQixFQUFFLGVBQXVDO0lBQ3pHLE1BQU0sTUFBTSxHQUFHLElBQUEsc0JBQWMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUU5RCxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsV0FBQyxPQUFBLE1BQUEsc0JBQXNCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQywwQ0FBRSxTQUFTLENBQUEsRUFBQSxDQUFDLENBQUM7SUFFdkcsSUFBSSxDQUFDLElBQUEscUJBQWEsRUFBQyxPQUFPLENBQUMsRUFBRTtRQUMzQixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2RCxPQUFPLCtCQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FDekMsSUFBQSxzQ0FBc0IsRUFBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FDOUUsQ0FBQztBQUNKLENBQUM7QUFiRCx3Q0FhQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsSUFBYyxFQUFFLGVBQXVDO0lBQzdGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRyxDQUFDO0FBRkQsMERBRUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLDZCQUE2QixDQUFDLElBQWMsRUFBRSxlQUF1QztJQUNuRyxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDL0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNqQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBSkQsc0VBSUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IseUJBQXlCLENBQUMsSUFBYztJQUN0RCxNQUFNLFNBQVMsR0FBRyxJQUFBLDhCQUFrQixFQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLE9BQU8sdUJBQXVCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFIRCw4REFHQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQiwrQkFBK0IsQ0FBQyxJQUFjO0lBQzVELE1BQU0sU0FBUyxHQUFHLElBQUEsOEJBQWtCLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsT0FBTyw2QkFBNkIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUhELDBFQUdDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250YWlucyBoZWxwZXIgbWV0aG9kcyBmb3IgZGV0ZXJtaW5pbmcgaWYgYSB0cmFuc2FjdGlvbiBvdXRwdXQgYmVsb25ncyB0byBhIGdpdmVuIEJpdEdvIHdhbGxldFxuICovXG5cbmltcG9ydCB7IGlzQnVmZmVyQXJyYXksIFRyaXBsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMsIHNjcmlwdFR5cGVzMk9mMyB9IGZyb20gJy4uLy4uL291dHB1dFNjcmlwdHMnO1xuaW1wb3J0IHsgVXR4b1BzYnQgfSBmcm9tICcuLi8uLi9VdHhvUHNidCc7XG5pbXBvcnQgeyBCSVAzMkludGVyZmFjZSB9IGZyb20gJ2JpcDMyJztcbmltcG9ydCB7IGNoZWNrRm9yT3V0cHV0IH0gZnJvbSAnYmlwMTc0L3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgUHNidE91dHB1dCB9IGZyb20gJ2JpcDE3NC9zcmMvbGliL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0U29ydGVkUm9vdE5vZGVzIH0gZnJvbSAnLi9Sb290Tm9kZXMnO1xuXG4vKipcbiAqIERlcml2ZXMgdGhlIGFwcHJvcHJpYXRlIEJJUDMyIGtleSBwYWlyIGZvciBhIGdpdmVuIG91dHB1dC5cbiAqIEl0IHVzZXMgZWl0aGVyIHRhcEJpcDMyRGVyaXZhdGlvbiBvciBiaXAzMkRlcml2YXRpb24gcGF0aHMgZnJvbSB0aGUgb3V0cHV0LlxuICogQHBhcmFtIGJpcDMyIC0gVGhlIEJJUDMySW50ZXJmYWNlIG9iamVjdCB0byBkZXJpdmUgZnJvbS5cbiAqIEBwYXJhbSBvdXRwdXQgLSBUaGUgc3BlY2lmaWMgUFNCVCBvdXRwdXQgdG8gZGVyaXZlIGZvci5cbiAqIEByZXR1cm5zIFRoZSBkZXJpdmVkIEJJUDMyIGtleSBwYWlyIGlmIG1hc3RlciBmaW5nZXJwcmludCBtYXRjaGVzLCBvciB1bmRlZmluZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVLZXlQYWlyRm9yT3V0cHV0KGJpcDMyOiBCSVAzMkludGVyZmFjZSwgb3V0cHV0OiBQc2J0T3V0cHV0KTogQklQMzJJbnRlcmZhY2UgfCB1bmRlZmluZWQge1xuICByZXR1cm4gb3V0cHV0LnRhcEJpcDMyRGVyaXZhdGlvbj8ubGVuZ3RoXG4gICAgPyBVdHhvUHNidC5kZXJpdmVLZXlQYWlyKGJpcDMyLCBvdXRwdXQudGFwQmlwMzJEZXJpdmF0aW9uLCB7IGlnbm9yZVk6IHRydWUgfSlcbiAgICA6IG91dHB1dC5iaXAzMkRlcml2YXRpb24/Lmxlbmd0aFxuICAgID8gVXR4b1BzYnQuZGVyaXZlS2V5UGFpcihiaXAzMiwgb3V0cHV0LmJpcDMyRGVyaXZhdGlvbiwgeyBpZ25vcmVZOiBmYWxzZSB9KVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSBzcGVjaWZpZWQgb3V0cHV0IGluIGEgUFNCVCBpcyBhbiBvdXRwdXQgb2YgdGhlIHdhbGxldCByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gcm9vdCBub2Rlcy5cbiAqIEBwYXJhbSBwc2J0IC0gVGhlIFBTQlQgdG8gY2hlY2suXG4gKiBAcGFyYW0gb3V0cHV0SW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIG91dHB1dCB0byBjaGVjay5cbiAqIEBwYXJhbSByb290V2FsbGV0Tm9kZXMgLSBUaGUgcm9vdCBub2RlcyByZXByZXNlbnRpbmcgdGhlIHdhbGxldC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBvdXRwdXQgYmVsb25ncyB0byB0aGUgd2FsbGV0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXYWxsZXRPdXRwdXQocHNidDogVXR4b1BzYnQsIG91dHB1dEluZGV4OiBudW1iZXIsIHJvb3RXYWxsZXROb2RlczogVHJpcGxlPEJJUDMySW50ZXJmYWNlPik6IGJvb2xlYW4ge1xuICBjb25zdCBvdXRwdXQgPSBjaGVja0Zvck91dHB1dChwc2J0LmRhdGEub3V0cHV0cywgb3V0cHV0SW5kZXgpO1xuXG4gIGNvbnN0IHB1YktleXMgPSByb290V2FsbGV0Tm9kZXMubWFwKChyb290Tm9kZSkgPT4gZGVyaXZlS2V5UGFpckZvck91dHB1dChyb290Tm9kZSwgb3V0cHV0KT8ucHVibGljS2V5KTtcblxuICBpZiAoIWlzQnVmZmVyQXJyYXkocHViS2V5cykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvdXRwdXRTY3JpcHQgPSBwc2J0LmdldE91dHB1dFNjcmlwdChvdXRwdXRJbmRleCk7XG4gIHJldHVybiBzY3JpcHRUeXBlczJPZjMuc29tZSgoc2NyaXB0VHlwZSkgPT5cbiAgICBjcmVhdGVPdXRwdXRTY3JpcHQyb2YzKHB1YktleXMsIHNjcmlwdFR5cGUpLnNjcmlwdFB1YktleS5lcXVhbHMob3V0cHV0U2NyaXB0KVxuICApO1xufVxuXG4vKipcbiAqIEZpbmRzIGluZGljZXMgb2YgYWxsIG91dHB1dHMgaW4gYSBQU0JUIHRoYXQgYmVsb25nIHRvIHRoZSB3YWxsZXQgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIHJvb3Qgbm9kZXMuXG4gKiBAcGFyYW0gcHNidCAtIFRoZSBQU0JUIHRvIHNlYXJjaCB0aHJvdWdoLlxuICogQHBhcmFtIHJvb3RXYWxsZXROb2RlcyAtIFRoZSByb290IG5vZGVzIHJlcHJlc2VudGluZyB0aGUgd2FsbGV0LlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgaW5kaWNlcyBjb3JyZXNwb25kaW5nIHRvIHdhbGxldCBvdXRwdXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFdhbGxldE91dHB1dEluZGljZXMocHNidDogVXR4b1BzYnQsIHJvb3RXYWxsZXROb2RlczogVHJpcGxlPEJJUDMySW50ZXJmYWNlPik6IG51bWJlcltdIHtcbiAgcmV0dXJuIHBzYnQuZGF0YS5vdXRwdXRzLmZsYXRNYXAoKF8sIGkpID0+IChpc1dhbGxldE91dHB1dChwc2J0LCBpLCByb290V2FsbGV0Tm9kZXMpID8gW2ldIDogW10pKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSB0b3RhbCBhbW91bnQgb2YgYWxsIHdhbGxldCBvdXRwdXRzIGluIGEgUFNCVCBmb3IgdGhlIHdhbGxldCByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gcm9vdCBub2Rlcy5cbiAqIEBwYXJhbSBwc2J0IC0gVGhlIFBTQlQgdG8gY2FsY3VsYXRlIGZvci5cbiAqIEBwYXJhbSByb290V2FsbGV0Tm9kZXMgLSBUaGUgcm9vdCBub2RlcyByZXByZXNlbnRpbmcgdGhlIHdhbGxldC5cbiAqIEByZXR1cm5zIFRoZSB0b3RhbCBhbW91bnQgb2Ygd2FsbGV0IG91dHB1dHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb3RhbEFtb3VudE9mV2FsbGV0T3V0cHV0cyhwc2J0OiBVdHhvUHNidCwgcm9vdFdhbGxldE5vZGVzOiBUcmlwbGU8QklQMzJJbnRlcmZhY2U+KTogYmlnaW50IHtcbiAgY29uc3QgaW5kaWNlcyA9IGZpbmRXYWxsZXRPdXRwdXRJbmRpY2VzKHBzYnQsIHJvb3RXYWxsZXROb2Rlcyk7XG4gIGNvbnN0IHR4T3V0cHV0cyA9IHBzYnQudHhPdXRwdXRzO1xuICByZXR1cm4gaW5kaWNlcy5yZWR1Y2UoKHN1bSwgaSkgPT4gc3VtICsgdHhPdXRwdXRzW2ldLnZhbHVlLCBCaWdJbnQoMCkpO1xufVxuXG4vKipcbiAqIEZpbmRzIGluZGljZXMgb2YgYWxsIGludGVybmFsIG91dHB1dHMgaW4gYSBQU0JULCBpZGVudGlmaWVkIGFzIG91dHB1dHMgYmVsb25naW5nIHRvIHRoZSB3YWxsZXQncyByb290IG5vZGVzIHdpdGhpbiB0aGUgUFNCVC5cbiAqIEBwYXJhbSBwc2J0IC0gVGhlIFBTQlQgY29udGFpbmluZyB0aGUgd2FsbGV0J3Mgcm9vdCBub2RlcyBhcyBpbmRpY2F0ZWQgYnkgZ2xvYmFsIFhwdWJzLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgaW5kaWNlcyBvZiBpbnRlcm5hbCBvdXRwdXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEludGVybmFsT3V0cHV0SW5kaWNlcyhwc2J0OiBVdHhvUHNidCk6IG51bWJlcltdIHtcbiAgY29uc3Qgcm9vdE5vZGVzID0gZ2V0U29ydGVkUm9vdE5vZGVzKHBzYnQpO1xuICByZXR1cm4gZmluZFdhbGxldE91dHB1dEluZGljZXMocHNidCwgcm9vdE5vZGVzKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSB0b3RhbCBhbW91bnQgb2YgYWxsIGludGVybmFsIG91dHB1dHMgaW4gYSBQU0JULCBpZGVudGlmaWVkIGFzIG91dHB1dHMgYmVsb25naW5nIHRvIHRoZSB3YWxsZXQncyByb290IG5vZGVzIHdpdGhpbiB0aGUgUFNCVC5cbiAqIEBwYXJhbSBwc2J0IC0gVGhlIFBTQlQgY29udGFpbmluZyB0aGUgd2FsbGV0J3Mgcm9vdCBub2RlcyBhcyBpbmRpY2F0ZWQgYnkgZ2xvYmFsIFhwdWJzLlxuICogQHJldHVybnMgVGhlIHRvdGFsIGFtb3VudCBvZiBpbnRlcm5hbCBvdXRwdXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG90YWxBbW91bnRPZkludGVybmFsT3V0cHV0cyhwc2J0OiBVdHhvUHNidCk6IGJpZ2ludCB7XG4gIGNvbnN0IHJvb3ROb2RlcyA9IGdldFNvcnRlZFJvb3ROb2Rlcyhwc2J0KTtcbiAgcmV0dXJuIGdldFRvdGFsQW1vdW50T2ZXYWxsZXRPdXRwdXRzKHBzYnQsIHJvb3ROb2Rlcyk7XG59XG4iXX0=
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contains helper methods for getting and sorting root nodes from a PSBT.
|
|
3
|
+
*/
|
|
4
|
+
import { UtxoPsbt } from '../../UtxoPsbt';
|
|
5
|
+
import { Triple } from '../../types';
|
|
6
|
+
import { BIP32Interface } from 'bip32';
|
|
7
|
+
/**
|
|
8
|
+
* Error thrown when no multi-sig input is found in a PSBT.
|
|
9
|
+
* */
|
|
10
|
+
export declare class ErrorNoMultiSigInputFound extends Error {
|
|
11
|
+
constructor(message: string);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Retrieves unsorted root BIP32Interface nodes from a PSBT if available.
|
|
15
|
+
* @param psbt - The PSBT from which to extract the global Xpubs.
|
|
16
|
+
* @returns An array of BIP32Interface objects or undefined if not available.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getUnsortedRootNodes(psbt: UtxoPsbt): Triple<BIP32Interface> | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Sorts given root nodes based on the script compatibility with the PSBT's multi-sig inputs.
|
|
21
|
+
* @param psbt - The PSBT containing multi-sig inputs.
|
|
22
|
+
* @param rootNodes - Array of root nodes to sort.
|
|
23
|
+
* @returns An array of BIP32Interface objects in the order that matches the multi-sig script.
|
|
24
|
+
*/
|
|
25
|
+
export declare function sortRootNodes(psbt: UtxoPsbt, rootNodes: Triple<BIP32Interface>): Triple<BIP32Interface>;
|
|
26
|
+
/**
|
|
27
|
+
* Retrieves sorted root nodes from a PSBT, ensuring they are ordered according to script compatibility.
|
|
28
|
+
* @param psbt - The PSBT to extract and sort root nodes from.
|
|
29
|
+
* @returns An array of sorted BIP32Interface root nodes.
|
|
30
|
+
*/
|
|
31
|
+
export declare function getSortedRootNodes(psbt: UtxoPsbt): Triple<BIP32Interface>;
|
|
32
|
+
//# sourceMappingURL=RootNodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RootNodes.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/wallet/psbt/RootNodes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAY,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAgB,cAAc,EAAE,MAAM,OAAO,CAAC;AASrD;;KAEK;AACL,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAG5B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,SAAS,CAMvF;AAkGD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAKvG;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,CAIzE"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Contains helper methods for getting and sorting root nodes from a PSBT.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getSortedRootNodes = exports.sortRootNodes = exports.getUnsortedRootNodes = exports.ErrorNoMultiSigInputFound = void 0;
|
|
7
|
+
const assert = require("assert");
|
|
8
|
+
const bs58check = require("bs58check");
|
|
9
|
+
const types_1 = require("../../types");
|
|
10
|
+
const bip32_1 = require("bip32");
|
|
11
|
+
const noble_ecc_1 = require("../../../noble_ecc");
|
|
12
|
+
const outputScripts_1 = require("../../outputScripts");
|
|
13
|
+
const transaction_1 = require("../../transaction");
|
|
14
|
+
const Psbt_1 = require("../Psbt");
|
|
15
|
+
/**
|
|
16
|
+
* Error thrown when no multi-sig input is found in a PSBT.
|
|
17
|
+
* */
|
|
18
|
+
class ErrorNoMultiSigInputFound extends Error {
|
|
19
|
+
constructor(message) {
|
|
20
|
+
super(message);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.ErrorNoMultiSigInputFound = ErrorNoMultiSigInputFound;
|
|
24
|
+
/**
|
|
25
|
+
* Retrieves unsorted root BIP32Interface nodes from a PSBT if available.
|
|
26
|
+
* @param psbt - The PSBT from which to extract the global Xpubs.
|
|
27
|
+
* @returns An array of BIP32Interface objects or undefined if not available.
|
|
28
|
+
*/
|
|
29
|
+
function getUnsortedRootNodes(psbt) {
|
|
30
|
+
var _a;
|
|
31
|
+
const bip32s = (_a = psbt.data.globalMap.globalXpub) === null || _a === void 0 ? void 0 : _a.map((xpub) => (0, bip32_1.BIP32Factory)(noble_ecc_1.ecc).fromBase58(bs58check.encode(xpub.extendedPubkey)));
|
|
32
|
+
assert(!bip32s || (0, types_1.isTriple)(bip32s), `Invalid globalXpubs in PSBT. Expected 3 or none. Got ${bip32s === null || bip32s === void 0 ? void 0 : bip32s.length}`);
|
|
33
|
+
return bip32s;
|
|
34
|
+
}
|
|
35
|
+
exports.getUnsortedRootNodes = getUnsortedRootNodes;
|
|
36
|
+
/**
|
|
37
|
+
* Determines if the given public keys' permutation matches a specified script.
|
|
38
|
+
* @param params - Object containing public keys, permutation, script public key, script type, and network.
|
|
39
|
+
* @returns A boolean indicating if the permutation matches the script.
|
|
40
|
+
*/
|
|
41
|
+
function matchesScript({ pubKeys, perm, scriptPubKey, parsedScriptType, network, }) {
|
|
42
|
+
const pubKeysPerm = [pubKeys[perm[0]], pubKeys[perm[1]], pubKeys[perm[2]]];
|
|
43
|
+
const scriptTypes = (0, Psbt_1.toScriptType2Of3s)(parsedScriptType);
|
|
44
|
+
return scriptTypes.some((scriptType) => (0, outputScripts_1.createOutputScript2of3)(pubKeysPerm, scriptType, network).scriptPubKey.equals(scriptPubKey));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Finds the correct order of public keys to match a given script.
|
|
48
|
+
* @param pubKeys - Array of public keys involved in the script.
|
|
49
|
+
* @param scriptPubKey - The script public key to match against.
|
|
50
|
+
* @param parsedScriptType - The parsed script type.
|
|
51
|
+
* @param network - Bitcoin network.
|
|
52
|
+
* @returns The order of public keys that match the script.
|
|
53
|
+
*/
|
|
54
|
+
function findSortOrderOfPubKeys(pubKeys, scriptPubKey, parsedScriptType, network) {
|
|
55
|
+
const permutations = [
|
|
56
|
+
[0, 1, 2],
|
|
57
|
+
[0, 2, 1],
|
|
58
|
+
[1, 0, 2],
|
|
59
|
+
[1, 2, 0],
|
|
60
|
+
[2, 0, 1],
|
|
61
|
+
[2, 1, 0],
|
|
62
|
+
];
|
|
63
|
+
const order = permutations.find((perm) => matchesScript({ pubKeys, perm, scriptPubKey, parsedScriptType, network }));
|
|
64
|
+
assert(order, 'Could not find sort order of multi sig public keys');
|
|
65
|
+
return order;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Extracts multi-sig input data, including script type, script public key, and derivation path, from the first relevant PSBT input.
|
|
69
|
+
* @param psbt - The PSBT to extract data from.
|
|
70
|
+
* @returns An object containing the parsed script type, script public key, and derivation path.
|
|
71
|
+
*/
|
|
72
|
+
function getFirstMultiSigInputData(psbt) {
|
|
73
|
+
function getScriptPubKey(input, prevOutIndex) {
|
|
74
|
+
var _a, _b;
|
|
75
|
+
const scriptPubKey = (_b = (_a = input.witnessUtxo) === null || _a === void 0 ? void 0 : _a.script) !== null && _b !== void 0 ? _b : (input.nonWitnessUtxo
|
|
76
|
+
? (0, transaction_1.createTransactionFromBuffer)(input.nonWitnessUtxo, psbt.network, { amountType: 'bigint' }).outs[prevOutIndex]
|
|
77
|
+
.script
|
|
78
|
+
: undefined);
|
|
79
|
+
assert(scriptPubKey, 'Input scriptPubKey can not be found');
|
|
80
|
+
return scriptPubKey;
|
|
81
|
+
}
|
|
82
|
+
function getDerivationPath(input) {
|
|
83
|
+
var _a;
|
|
84
|
+
const bip32Dv = (_a = input === null || input === void 0 ? void 0 : input.bip32Derivation) !== null && _a !== void 0 ? _a : input === null || input === void 0 ? void 0 : input.tapBip32Derivation;
|
|
85
|
+
assert(bip32Dv === null || bip32Dv === void 0 ? void 0 : bip32Dv.length, 'Input Bip32Derivation can not be found');
|
|
86
|
+
return bip32Dv[0].path;
|
|
87
|
+
}
|
|
88
|
+
const txInputs = psbt.txInputs;
|
|
89
|
+
for (let i = 0; i < psbt.data.inputs.length; i++) {
|
|
90
|
+
const input = psbt.data.inputs[i];
|
|
91
|
+
const parsedScriptType = (0, Psbt_1.getPsbtInputScriptType)(input);
|
|
92
|
+
if (parsedScriptType === 'p2shP2pk') {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const scriptPubKey = getScriptPubKey(input, txInputs[i].index);
|
|
96
|
+
const derivationPath = getDerivationPath(input);
|
|
97
|
+
return { parsedScriptType, scriptPubKey, derivationPath };
|
|
98
|
+
}
|
|
99
|
+
throw new ErrorNoMultiSigInputFound('No multi sig input found');
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Sorts given root nodes based on the script compatibility with the PSBT's multi-sig inputs.
|
|
103
|
+
* @param psbt - The PSBT containing multi-sig inputs.
|
|
104
|
+
* @param rootNodes - Array of root nodes to sort.
|
|
105
|
+
* @returns An array of BIP32Interface objects in the order that matches the multi-sig script.
|
|
106
|
+
*/
|
|
107
|
+
function sortRootNodes(psbt, rootNodes) {
|
|
108
|
+
const { parsedScriptType, scriptPubKey, derivationPath } = getFirstMultiSigInputData(psbt);
|
|
109
|
+
const pubKeys = rootNodes.map((rootNode) => rootNode.derivePath(derivationPath).publicKey);
|
|
110
|
+
const order = findSortOrderOfPubKeys(pubKeys, scriptPubKey, parsedScriptType, psbt.network);
|
|
111
|
+
return order.map((i) => rootNodes[i]);
|
|
112
|
+
}
|
|
113
|
+
exports.sortRootNodes = sortRootNodes;
|
|
114
|
+
/**
|
|
115
|
+
* Retrieves sorted root nodes from a PSBT, ensuring they are ordered according to script compatibility.
|
|
116
|
+
* @param psbt - The PSBT to extract and sort root nodes from.
|
|
117
|
+
* @returns An array of sorted BIP32Interface root nodes.
|
|
118
|
+
*/
|
|
119
|
+
function getSortedRootNodes(psbt) {
|
|
120
|
+
const unsortedRootNodes = getUnsortedRootNodes(psbt);
|
|
121
|
+
assert(unsortedRootNodes, 'Could not find root nodes in PSBT');
|
|
122
|
+
return sortRootNodes(psbt, unsortedRootNodes);
|
|
123
|
+
}
|
|
124
|
+
exports.getSortedRootNodes = getSortedRootNodes;
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm9vdE5vZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3dhbGxldC9wc2J0L1Jvb3ROb2Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQUVILGlDQUFpQztBQUNqQyx1Q0FBdUM7QUFHdkMsdUNBQStDO0FBQy9DLGlDQUFxRDtBQUNyRCxrREFBbUQ7QUFHbkQsdURBQTZEO0FBRTdELG1EQUFnRTtBQUNoRSxrQ0FBb0U7QUFFcEU7O0tBRUs7QUFDTCxNQUFhLHlCQUEwQixTQUFRLEtBQUs7SUFDbEQsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUFKRCw4REFJQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxJQUFjOztJQUNqRCxNQUFNLE1BQU0sR0FBRyxNQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsMENBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDMUQsSUFBQSxvQkFBWSxFQUFDLGVBQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUN2RSxDQUFDO0lBQ0YsTUFBTSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUEsZ0JBQVEsRUFBQyxNQUFNLENBQUMsRUFBRSx3REFBd0QsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUcsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQU5ELG9EQU1DO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsYUFBYSxDQUFDLEVBQ3JCLE9BQU8sRUFDUCxJQUFJLEVBQ0osWUFBWSxFQUNaLGdCQUFnQixFQUNoQixPQUFPLEdBT1I7SUFDQyxNQUFNLFdBQVcsR0FBbUIsQ0FBQyxPQUFPLENBQUMs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RUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO0lBQy9ELE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFKRCxnREFJQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udGFpbnMgaGVscGVyIG1ldGhvZHMgZm9yIGdldHRpbmcgYW5kIHNvcnRpbmcgcm9vdCBub2RlcyBmcm9tIGEgUFNCVC5cbiAqL1xuXG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIGJzNThjaGVjayBmcm9tICdiczU4Y2hlY2snO1xuXG5pbXBvcnQgeyBVdHhvUHNidCB9IGZyb20gJy4uLy4uL1V0eG9Qc2J0JztcbmltcG9ydCB7IGlzVHJpcGxlLCBUcmlwbGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBCSVAzMkZhY3RvcnksIEJJUDMySW50ZXJmYWNlIH0gZnJvbSAnYmlwMzInO1xuaW1wb3J0IHsgZWNjIGFzIGVjY0xpYiB9IGZyb20gJy4uLy4uLy4uL25vYmxlX2VjYyc7XG5pbXBvcnQgeyBQYXJzZWRTY3JpcHRUeXBlMk9mMyB9IGZyb20gJy4uLy4uL3BhcnNlSW5wdXQnO1xuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJy4uLy4uLy4uL25ldHdvcmtzJztcbmltcG9ydCB7IGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMgfSBmcm9tICcuLi8uLi9vdXRwdXRTY3JpcHRzJztcbmltcG9ydCB7IFBzYnRJbnB1dCB9IGZyb20gJ2JpcDE3NC9zcmMvbGliL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyIH0gZnJvbSAnLi4vLi4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgZ2V0UHNidElucHV0U2NyaXB0VHlwZSwgdG9TY3JpcHRUeXBlMk9mM3MgfSBmcm9tICcuLi9Qc2J0JztcblxuLyoqXG4gKiBFcnJvciB0aHJvd24gd2hlbiBubyBtdWx0aS1zaWcgaW5wdXQgaXMgZm91bmQgaW4gYSBQU0JULlxuICogKi9cbmV4cG9ydCBjbGFzcyBFcnJvck5vTXVsdGlTaWdJbnB1dEZvdW5kIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyB1bnNvcnRlZCByb290IEJJUDMySW50ZXJmYWNlIG5vZGVzIGZyb20gYSBQU0JUIGlmIGF2YWlsYWJsZS5cbiAqIEBwYXJhbSBwc2J0IC0gVGhlIFBTQlQgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBnbG9iYWwgWHB1YnMuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBCSVAzMkludGVyZmFjZSBvYmplY3RzIG9yIHVuZGVmaW5lZCBpZiBub3QgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5zb3J0ZWRSb290Tm9kZXMocHNidDogVXR4b1BzYnQpOiBUcmlwbGU8QklQMzJJbnRlcmZhY2U+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYmlwMzJzID0gcHNidC5kYXRhLmdsb2JhbE1hcC5nbG9iYWxYcHViPy5tYXAoKHhwdWIpID0+XG4gICAgQklQMzJGYWN0b3J5KGVjY0xpYikuZnJvbUJhc2U1OChiczU4Y2hlY2suZW5jb2RlKHhwdWIuZXh0ZW5kZWRQdWJrZXkpKVxuICApO1xuICBhc3NlcnQoIWJpcDMycyB8fCBpc1RyaXBsZShiaXAzMnMpLCBgSW52YWxpZCBnbG9iYWxYcHVicyBpbiBQU0JULiBFeHBlY3RlZCAzIG9yIG5vbmUuIEdvdCAke2JpcDMycz8ubGVuZ3RofWApO1xuICByZXR1cm4gYmlwMzJzO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHB1YmxpYyBrZXlzJyBwZXJtdXRhdGlvbiBtYXRjaGVzIGEgc3BlY2lmaWVkIHNjcmlwdC5cbiAqIEBwYXJhbSBwYXJhbXMgLSBPYmplY3QgY29udGFpbmluZyBwdWJsaWMga2V5cywgcGVybXV0YXRpb24sIHNjcmlwdCBwdWJsaWMga2V5LCBzY3JpcHQgdHlwZSwgYW5kIG5ldHdvcmsuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgcGVybXV0YXRpb24gbWF0Y2hlcyB0aGUgc2NyaXB0LlxuICovXG5mdW5jdGlvbiBtYXRjaGVzU2NyaXB0KHtcbiAgcHViS2V5cyxcbiAgcGVybSxcbiAgc2NyaXB0UHViS2V5LFxuICBwYXJzZWRTY3JpcHRUeXBlLFxuICBuZXR3b3JrLFxufToge1xuICBwdWJLZXlzOiBCdWZmZXJbXTtcbiAgcGVybTogVHJpcGxlPG51bWJlcj47XG4gIHNjcmlwdFB1YktleTogQnVmZmVyO1xuICBwYXJzZWRTY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlMk9mMztcbiAgbmV0d29yazogTmV0d29yaztcbn0pOiBib29sZWFuIHtcbiAgY29uc3QgcHViS2V5c1Blcm06IFRyaXBsZTxCdWZmZXI+ID0gW3B1YktleXNbcGVybVswXV0sIHB1YktleXNbcGVybVsxXV0sIHB1YktleXNbcGVybVsyXV1dO1xuICBjb25zdCBzY3JpcHRUeXBlcyA9IHRvU2NyaXB0VHlwZTJPZjNzKHBhcnNlZFNjcmlwdFR5cGUpO1xuICByZXR1cm4gc2NyaXB0VHlwZXMuc29tZSgoc2NyaXB0VHlwZSkgPT5cbiAgICBjcmVhdGVPdXRwdXRTY3JpcHQyb2YzKHB1YktleXNQZXJtLCBzY3JpcHRUeXBlLCBuZXR3b3JrKS5zY3JpcHRQdWJLZXkuZXF1YWxzKHNjcmlwdFB1YktleSlcbiAgKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgY29ycmVjdCBvcmRlciBvZiBwdWJsaWMga2V5cyB0byBtYXRjaCBhIGdpdmVuIHNjcmlwdC5cbiAqIEBwYXJhbSBwdWJLZXlzIC0gQXJyYXkgb2YgcHVibGljIGtleXMgaW52b2x2ZWQgaW4gdGhlIHNjcmlwdC5cbiAqIEBwYXJhbSBzY3JpcHRQdWJLZXkgLSBUaGUgc2NyaXB0IHB1YmxpYyBrZXkgdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSBwYXJzZWRTY3JpcHRUeXBlIC0gVGhlIHBhcnNlZCBzY3JpcHQgdHlwZS5cbiAqIEBwYXJhbSBuZXR3b3JrIC0gQml0Y29pbiBuZXR3b3JrLlxuICogQHJldHVybnMgVGhlIG9yZGVyIG9mIHB1YmxpYyBrZXlzIHRoYXQgbWF0Y2ggdGhlIHNjcmlwdC5cbiAqL1xuZnVuY3Rpb24gZmluZFNvcnRPcmRlck9mUHViS2V5cyhcbiAgcHViS2V5czogVHJpcGxlPEJ1ZmZlcj4sXG4gIHNjcmlwdFB1YktleTogQnVmZmVyLFxuICBwYXJzZWRTY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlMk9mMyxcbiAgbmV0d29yazogTmV0d29ya1xuKTogVHJpcGxlPG51bWJlcj4ge1xuICBjb25zdCBwZXJtdXRhdGlvbnM6IEFycmF5PFRyaXBsZTxudW1iZXI+PiA9IFtcbiAgICBbMCwgMSwgMl0sXG4gICAgWzAsIDIsIDFdLFxuICAgIFsxLCAwLCAyXSxcbiAgICBbMSwgMiwgMF0sXG4gICAgWzIsIDAsIDFdLFxuICAgIFsyLCAxLCAwXSxcbiAgXTtcblxuICBjb25zdCBvcmRlciA9IHBlcm11dGF0aW9ucy5maW5kKChwZXJtKSA9PiBtYXRjaGVzU2NyaXB0KHsgcHViS2V5cywgcGVybSwgc2NyaXB0UHViS2V5LCBwYXJzZWRTY3JpcHRUeXBlLCBuZXR3b3JrIH0pKTtcbiAgYXNzZXJ0KG9yZGVyLCAnQ291bGQgbm90IGZpbmQgc29ydCBvcmRlciBvZiBtdWx0aSBzaWcgcHVibGljIGtleXMnKTtcbiAgcmV0dXJuIG9yZGVyO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIG11bHRpLXNpZyBpbnB1dCBkYXRhLCBpbmNsdWRpbmcgc2NyaXB0IHR5cGUsIHNjcmlwdCBwdWJsaWMga2V5LCBhbmQgZGVyaXZhdGlvbiBwYXRoLCBmcm9tIHRoZSBmaXJzdCByZWxldmFudCBQU0JUIGlucHV0LlxuICogQHBhcmFtIHBzYnQgLSBUaGUgUFNCVCB0byBleHRyYWN0IGRhdGEgZnJvbS5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBwYXJzZWQgc2NyaXB0IHR5cGUsIHNjcmlwdCBwdWJsaWMga2V5LCBhbmQgZGVyaXZhdGlvbiBwYXRoLlxuICovXG5mdW5jdGlvbiBnZXRGaXJzdE11bHRpU2lnSW5wdXREYXRhKHBzYnQ6IFV0eG9Qc2J0KToge1xuICBwYXJzZWRTY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlMk9mMztcbiAgc2NyaXB0UHViS2V5OiBCdWZmZXI7XG4gIGRlcml2YXRpb25QYXRoOiBzdHJpbmc7XG59IHtcbiAgZnVuY3Rpb24gZ2V0U2NyaXB0UHViS2V5KGlucHV0OiBQc2J0SW5wdXQsIHByZXZPdXRJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3Qgc2NyaXB0UHViS2V5ID1cbiAgICAgIGlucHV0LndpdG5lc3NVdHhvPy5zY3JpcHQgPz9cbiAgICAgIChpbnB1dC5ub25XaXRuZXNzVXR4b1xuICAgICAgICA/IGNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlcihpbnB1dC5ub25XaXRuZXNzVXR4bywgcHNidC5uZXR3b3JrLCB7IGFtb3VudFR5cGU6ICdiaWdpbnQnIH0pLm91dHNbcHJldk91dEluZGV4XVxuICAgICAgICAgICAgLnNjcmlwdFxuICAgICAgICA6IHVuZGVmaW5lZCk7XG4gICAgYXNzZXJ0KHNjcmlwdFB1YktleSwgJ0lucHV0IHNjcmlwdFB1YktleSBjYW4gbm90IGJlIGZvdW5kJyk7XG4gICAgcmV0dXJuIHNjcmlwdFB1YktleTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERlcml2YXRpb25QYXRoKGlucHV0OiBQc2J0SW5wdXQpIHtcbiAgICBjb25zdCBiaXAzMkR2ID0gaW5wdXQ/LmJpcDMyRGVyaXZhdGlvbiA/PyBpbnB1dD8udGFwQmlwMzJEZXJpdmF0aW9uO1xuICAgIGFzc2VydChiaXAzMkR2Py5sZW5ndGgsICdJbnB1dCBCaXAzMkRlcml2YXRpb24gY2FuIG5vdCBiZSBmb3VuZCcpO1xuICAgIHJldHVybiBiaXAzMkR2WzBdLnBhdGg7XG4gIH1cblxuICBjb25zdCB0eElucHV0cyA9IHBzYnQudHhJbnB1dHM7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwc2J0LmRhdGEuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgaW5wdXQgPSBwc2J0LmRhdGEuaW5wdXRzW2ldO1xuICAgIGNvbnN0IHBhcnNlZFNjcmlwdFR5cGUgPSBnZXRQc2J0SW5wdXRTY3JpcHRUeXBlKGlucHV0KTtcbiAgICBpZiAocGFyc2VkU2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHNjcmlwdFB1YktleSA9IGdldFNjcmlwdFB1YktleShpbnB1dCwgdHhJbnB1dHNbaV0uaW5kZXgpO1xuICAgIGNvbnN0IGRlcml2YXRpb25QYXRoID0gZ2V0RGVyaXZhdGlvblBhdGgoaW5wdXQpO1xuICAgIHJldHVybiB7IHBhcnNlZFNjcmlwdFR5cGUsIHNjcmlwdFB1YktleSwgZGVyaXZhdGlvblBhdGggfTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvck5vTXVsdGlTaWdJbnB1dEZvdW5kKCdObyBtdWx0aSBzaWcgaW5wdXQgZm91bmQnKTtcbn1cblxuLyoqXG4gKiBTb3J0cyBnaXZlbiByb290IG5vZGVzIGJhc2VkIG9uIHRoZSBzY3JpcHQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBQU0JUJ3MgbXVsdGktc2lnIGlucHV0cy5cbiAqIEBwYXJhbSBwc2J0IC0gVGhlIFBTQlQgY29udGFpbmluZyBtdWx0aS1zaWcgaW5wdXRzLlxuICogQHBhcmFtIHJvb3ROb2RlcyAtIEFycmF5IG9mIHJvb3Qgbm9kZXMgdG8gc29ydC5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIEJJUDMySW50ZXJmYWNlIG9iamVjdHMgaW4gdGhlIG9yZGVyIHRoYXQgbWF0Y2hlcyB0aGUgbXVsdGktc2lnIHNjcmlwdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRSb290Tm9kZXMocHNidDogVXR4b1BzYnQsIHJvb3ROb2RlczogVHJpcGxlPEJJUDMySW50ZXJmYWNlPik6IFRyaXBsZTxCSVAzMkludGVyZmFjZT4ge1xuICBjb25zdCB7IHBhcnNlZFNjcmlwdFR5cGUsIHNjcmlwdFB1YktleSwgZGVyaXZhdGlvblBhdGggfSA9IGdldEZpcnN0TXVsdGlTaWdJbnB1dERhdGEocHNidCk7XG4gIGNvbnN0IHB1YktleXMgPSByb290Tm9kZXMubWFwKChyb290Tm9kZSkgPT4gcm9vdE5vZGUuZGVyaXZlUGF0aChkZXJpdmF0aW9uUGF0aCkucHVibGljS2V5KSBhcyBUcmlwbGU8QnVmZmVyPjtcbiAgY29uc3Qgb3JkZXIgPSBmaW5kU29ydE9yZGVyT2ZQdWJLZXlzKHB1YktleXMsIHNjcmlwdFB1YktleSwgcGFyc2VkU2NyaXB0VHlwZSwgcHNidC5uZXR3b3JrKTtcbiAgcmV0dXJuIG9yZGVyLm1hcCgoaSkgPT4gcm9vdE5vZGVzW2ldKSBhcyBUcmlwbGU8QklQMzJJbnRlcmZhY2U+O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBzb3J0ZWQgcm9vdCBub2RlcyBmcm9tIGEgUFNCVCwgZW5zdXJpbmcgdGhleSBhcmUgb3JkZXJlZCBhY2NvcmRpbmcgdG8gc2NyaXB0IGNvbXBhdGliaWxpdHkuXG4gKiBAcGFyYW0gcHNidCAtIFRoZSBQU0JUIHRvIGV4dHJhY3QgYW5kIHNvcnQgcm9vdCBub2RlcyBmcm9tLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc29ydGVkIEJJUDMySW50ZXJmYWNlIHJvb3Qgbm9kZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3J0ZWRSb290Tm9kZXMocHNidDogVXR4b1BzYnQpOiBUcmlwbGU8QklQMzJJbnRlcmZhY2U+IHtcbiAgY29uc3QgdW5zb3J0ZWRSb290Tm9kZXMgPSBnZXRVbnNvcnRlZFJvb3ROb2Rlcyhwc2J0KTtcbiAgYXNzZXJ0KHVuc29ydGVkUm9vdE5vZGVzLCAnQ291bGQgbm90IGZpbmQgcm9vdCBub2RlcyBpbiBQU0JUJyk7XG4gIHJldHVybiBzb3J0Um9vdE5vZGVzKHBzYnQsIHVuc29ydGVkUm9vdE5vZGVzKTtcbn1cbiJdfQ==
|
|
@@ -27,7 +27,6 @@ export declare class ZcashPsbt extends UtxoPsbt<ZcashTransaction<bigint>> {
|
|
|
27
27
|
setDefaultsForVersion(network: Network, version: number): void;
|
|
28
28
|
signInput(inputIndex: number, keyPair: Signer, sighashTypes?: number[]): this;
|
|
29
29
|
validateSignaturesOfInput(inputIndex: number, validator: ValidateSigFunction, pubkey?: Buffer): boolean;
|
|
30
|
-
private withUnsafeSignNonSegwitTrue;
|
|
31
30
|
private setPropertyCheckSignatures;
|
|
32
31
|
setConsensusBranchId(consensusBranchId: number): void;
|
|
33
32
|
setVersionGroupId(versionGroupId: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZcashPsbt.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/zcash/ZcashPsbt.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAGL,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAmB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAW7D,qBAAa,SAAU,SAAQ,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/D,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAIlG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS;IAO7D;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAqCrF;;;;;OAKG;IACH,QAAQ,IAAI,MAAM;IAelB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,IAAI;IAOpD,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAsB9D,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAI7E,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO;IAIvG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"ZcashPsbt.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/zcash/ZcashPsbt.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAGL,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAmB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAW7D,qBAAa,SAAU,SAAQ,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/D,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAIlG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS;IAO7D;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAqCrF;;;;;OAKG;IACH,QAAQ,IAAI,MAAM;IAelB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,IAAI;IAOpD,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAsB9D,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAI7E,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO;IAIvG,OAAO,CAAC,0BAA0B;IAQlC,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAKrD,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAK/C,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;CAI5C"}
|
|
@@ -102,26 +102,17 @@ class ZcashPsbt extends UtxoPsbt_1.UtxoPsbt {
|
|
|
102
102
|
default:
|
|
103
103
|
throw new Error(`invalid version ${version}`);
|
|
104
104
|
}
|
|
105
|
-
this.tx.versionGroupId = ZcashTransaction_1.getDefaultVersionGroupIdForVersion(version);
|
|
106
|
-
this.tx.consensusBranchId = ZcashTransaction_1.getDefaultConsensusBranchIdForVersion(network, version);
|
|
105
|
+
this.tx.versionGroupId = (0, ZcashTransaction_1.getDefaultVersionGroupIdForVersion)(version);
|
|
106
|
+
this.tx.consensusBranchId = (0, ZcashTransaction_1.getDefaultConsensusBranchIdForVersion)(network, version);
|
|
107
107
|
}
|
|
108
108
|
// For Zcash transactions, we do not have to have non-witness UTXO data for non-segwit
|
|
109
109
|
// transactions because zcash hashes the value directly. Thus, it is unnecessary to have
|
|
110
110
|
// the previous transaction hash on the unspent.
|
|
111
111
|
signInput(inputIndex, keyPair, sighashTypes) {
|
|
112
|
-
return
|
|
112
|
+
return (0, PsbtUtil_1.withUnsafeNonSegwit)(this, super.signInput.bind(this, inputIndex, keyPair, sighashTypes));
|
|
113
113
|
}
|
|
114
114
|
validateSignaturesOfInput(inputIndex, validator, pubkey) {
|
|
115
|
-
return
|
|
116
|
-
}
|
|
117
|
-
withUnsafeSignNonSegwitTrue(fn) {
|
|
118
|
-
this.__CACHE.__UNSAFE_SIGN_NONSEGWIT = true;
|
|
119
|
-
try {
|
|
120
|
-
return fn();
|
|
121
|
-
}
|
|
122
|
-
finally {
|
|
123
|
-
this.__CACHE.__UNSAFE_SIGN_NONSEGWIT = false;
|
|
124
|
-
}
|
|
115
|
+
return (0, PsbtUtil_1.withUnsafeNonSegwit)(this, super.validateSignaturesOfInput.bind(this, inputIndex, validator, pubkey));
|
|
125
116
|
}
|
|
126
117
|
setPropertyCheckSignatures(propName, value) {
|
|
127
118
|
if (this.tx[propName] === value) {
|
|
@@ -144,4 +135,4 @@ class ZcashPsbt extends UtxoPsbt_1.UtxoPsbt {
|
|
|
144
135
|
}
|
|
145
136
|
}
|
|
146
137
|
exports.ZcashPsbt = ZcashPsbt;
|
|
147
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWmNhc2hQc2J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3pjYXNoL1pjYXNoUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwQ0FBaUQ7QUFDakQseURBSTRCO0FBQzVCLDhCQUEwRDtBQUMxRCxtQ0FBMEM7QUFDMUMsaURBQWlEO0FBRWpELDBDQUFpRjtBQUNqRixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFdkMsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLHNDQUEyQixDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxFQUFFLENBQUMsZ0NBQXFCLENBQUMsdUJBQXVCLENBQUM7Q0FDekQsQ0FBQyxDQUFDO0FBRUgsTUFBYSxTQUFVLFNBQVEsbUJBQWtDO0lBQ3JELE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFjLEVBQUUsT0FBZ0I7UUFDckUsT0FBTyxtQ0FBZ0IsQ0FBQyxVQUFVLENBQVMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBYyxFQUFFLElBQWU7UUFDL0MsT0FBTyxJQUFJLFNBQVMsQ0FDbEIsSUFBSSxFQUNKLElBQUksSUFBSSxJQUFJLGFBQVEsQ0FBQyxJQUFJLG1CQUFlLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxtQ0FBZ0IsQ0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQzlGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBYyxFQUFFLElBQWM7O1FBQzlD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LEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNoRSxDQUFDO0NBQ0Y7QUFsSkQsOEJBa0pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHNidE9wdHMsIFV0eG9Qc2J0IH0gZnJvbSAnLi4vVXR4b1BzYnQnO1xuaW1wb3J0IHtcbiAgZ2V0RGVmYXVsdENvbnNlbnN1c0JyYW5jaElkRm9yVmVyc2lvbixcbiAgZ2V0RGVmYXVsdFZlcnNpb25Hcm91cElkRm9yVmVyc2lvbixcbiAgWmNhc2hUcmFuc2FjdGlvbixcbn0gZnJvbSAnLi9aY2FzaFRyYW5zYWN0aW9uJztcbmltcG9ydCB7IE5ldHdvcmssIFBzYnRUcmFuc2FjdGlvbiwgU2lnbmVyIH0gZnJvbSAnLi4vLi4vJztcbmltcG9ydCB7IFBzYnQgYXMgUHNidEJhc2UgfSBmcm9tICdiaXAxNzQnO1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnYml0Y29pbmpzLWxpYi9zcmMvdHlwZXMnO1xuaW1wb3J0IHsgVmFsaWRhdGVTaWdGdW5jdGlvbiB9IGZyb20gJ2JpdGNvaW5qcy1saWIvc3JjL3BzYnQnO1xuaW1wb3J0IHsgUHJvcHJpZXRhcnlLZXlTdWJ0eXBlLCBQU0JUX1BST1BSSUVUQVJZX0lERU5USUZJRVIgfSBmcm9tICcuLi9Qc2J0VXRpbCc7XG5jb25zdCB0eXBlZm9yY2UgPSByZXF1aXJlKCd0eXBlZm9yY2UnKTtcblxuY29uc3QgQ09OU0VOU1VTX0JSQU5DSF9JRF9LRVkgPSBCdWZmZXIuY29uY2F0KFtcbiAgQnVmZmVyLm9mKDB4ZmMpLFxuICBCdWZmZXIub2YoMHgwNSksXG4gIEJ1ZmZlci5mcm9tKFBTQlRfUFJPUFJJRVRBUllfSURFTlRJRklFUiksXG4gIEJ1ZmZlci5vZihQcm9wcmlldGFyeUtleVN1YnR5cGUuWkVDX0NPTlNFTlNVU19CUkFOQ0hfSUQpLFxuXSk7XG5cbmV4cG9ydCBjbGFzcyBaY2FzaFBzYnQgZXh0ZW5kcyBVdHhvUHNidDxaY2FzaFRyYW5zYWN0aW9uPGJpZ2ludD4+IHtcbiAgcHJvdGVjdGVkIHN0YXRpYyB0cmFuc2FjdGlvbkZyb21CdWZmZXIoYnVmZmVyOiBCdWZmZXIsIG5ldHdvcms6IE5ldHdvcmspOiBaY2FzaFRyYW5zYWN0aW9uPGJpZ2ludD4ge1xuICAgIHJldHVybiBaY2FzaFRyYW5zYWN0aW9uLmZyb21CdWZmZXI8YmlnaW50PihidWZmZXIsIGZhbHNlLCAnYmlnaW50JywgbmV0d29yayk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlUHNidChvcHRzOiBQc2J0T3B0cywgZGF0YT86IFBzYnRCYXNlKTogWmNhc2hQc2J0IHtcbiAgICByZXR1cm4gbmV3IFpjYXNoUHNidChcbiAgICAgIG9wdHMsXG4gICAgICBkYXRhIHx8IG5ldyBQc2J0QmFzZShuZXcgUHNidFRyYW5zYWN0aW9uKHsgdHg6IG5ldyBaY2FzaFRyYW5zYWN0aW9uPGJpZ2ludD4ob3B0cy5uZXR3b3JrKSB9KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIHZlcnNpb24gPCA1IG9mIFpjYXNoIHRyYW5zYWN0aW9ucywgdGhlIGNvbnNlbnN1cyBicmFuY2ggSUQgaXMgbm90IHNlcmlhbGl6ZWQgaW4gdGhlIHRyYW5zYWN0aW9uXG4gICAqIHdoZXJlYXMgaW4gdmVyc2lvbiA1IGl0IGlzLiBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgbGVzcyB0aGFuIGEgdmVyc2lvbiA1LCBzZXQgdGhlIGNvbnNlbnN1cyBicmFuY2ggaWRcbiAgICogaW4gdGhlIGdsb2JhbCBtYXAgaW4gdGhlIHBzYnQuIElmIGl0IGlzIGEgdmVyc2lvbiA1IHRyYW5zYWN0aW9uLCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgY29uc2Vuc3VzXG4gICAqIGJyYW5jaCBpZCBpcyBzZXQgaW4gdGhlIHBzYnQgKGJlY2F1c2UgaXQgc2hvdWxkIGJlIG9uIHRoZSB0cmFuc2FjdGlvbiBhbHJlYWR5KS5cbiAgICogQHBhcmFtIGJ1ZmZlciBQc2J0IGJ1ZmZlclxuICAgKiBAcGFyYW0gb3B0cyBvcHRpb25zXG4gICAqL1xuICBzdGF0aWMgZnJvbUJ1ZmZlcihidWZmZXI6IEJ1ZmZlciwgb3B0czogUHNidE9wdHMpOiBVdHhvUHNidDxaY2FzaFRyYW5zYWN0aW9uPGJpZ2ludD4+IHtcbiAgICBjb25zdCBwc2J0ID0gc3VwZXIuZnJvbUJ1ZmZlcihidWZmZXIsIG9wdHMpIGFzIFpjYXNoUHNidDtcblxuICAgIC8vIFJlYWQgYGNvbnNlbnN1c0JyYW5jaElkYCBmcm9tIHRoZSBnbG9iYWwtbWFwXG4gICAgbGV0IGNvbnNlbnN1c0JyYW5jaElkOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgcHNidC5kYXRhLmdsb2JhbE1hcC51bmtub3duS2V5VmFscz8uZm9yRWFjaCgoeyBrZXksIHZhbHVlIH0sIGkpID0+IHtcbiAgICAgIGlmIChrZXkuZXF1YWxzKENPTlNFTlNVU19CUkFOQ0hfSURfS0VZKSkge1xuICAgICAgICBjb25zZW5zdXNCcmFuY2hJZCA9IHZhbHVlLnJlYWRVaW50MzJMRSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHN3aXRjaCAocHNidC50eC52ZXJzaW9uKSB7XG4gICAgICBjYXNlIDQ6XG4gICAgICBjYXNlIFpjYXNoVHJhbnNhY3Rpb24uVkVSU0lPTjRfQlJBTkNIX0NBTk9QWTpcbiAgICAgIGNhc2UgWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONF9CUkFOQ0hfTlU1OlxuICAgICAgICBpZiAoIWNvbnNlbnN1c0JyYW5jaElkIHx8ICFwc2J0LmRhdGEuZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBjb25zZW5zdXMgYnJhbmNoIGlkIG9uIHBzYnQgZm9yIHZlcnNpb24gNCBaY2FzaCB0cmFuc2FjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHBzYnQudHguY29uc2Vuc3VzQnJhbmNoSWQgPSBjb25zZW5zdXNCcmFuY2hJZDtcbiAgICAgICAgcHNidC5kYXRhLmdsb2JhbE1hcC51bmtub3duS2V5VmFscyA9IHBzYnQuZGF0YS5nbG9iYWxNYXAudW5rbm93bktleVZhbHMuZmlsdGVyKFxuICAgICAgICAgICh7IGtleSB9KSA9PiBrZXkgIT09IENPTlNFTlNVU19CUkFOQ0hfSURfS0VZXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gRGVsZXRlIGNvbnNlbnN1c0JyYW5jaElkIGZyb20gZ2xvYmFsTWFwIHNvIHRoYXQgaWYgd2Ugd2VyZSB0byBzZXJpYWxpemUgdGhlIHBzYnQgYWdhaW5cbiAgICAgICAgLy8gd2Ugd291bGQgbm90IGFkZCBhIGR1cGxpY2F0ZSBrZXkgaW50byB0aGUgZ2xvYmFsIG1hcFxuICAgICAgICBwc2J0LmRhdGEuZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzLnBvcCgpO1xuICAgICAgICByZXR1cm4gcHNidDtcbiAgICAgIGNhc2UgNTpcbiAgICAgIGNhc2UgWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONV9CUkFOQ0hfTlU1OlxuICAgICAgICBpZiAoY29uc2Vuc3VzQnJhbmNoSWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGNvbnNlbnN1cyBicmFuY2ggaWQgaW4gcHNidCBnbG9iYWwtbWFwIGZvciB2ZXJzaW9uIDUgWmNhc2ggdHJhbnNhY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHNidDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gdmVyc2lvbiAke3BzYnQudHgudmVyc2lvbn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgaXQgaXMgYSB2ZXJzaW9uIDQgdHJhbnNhY3Rpb24sIGFkZCB0aGUgY29uc2Vuc3VzIGJyYW5jaCBpZCB0b1xuICAgKiB0aGUgZ2xvYmFsIG1hcC4gSWYgaXQgaXMgYSB2ZXJzaW9uIDUgdHJhbnNhY3Rpb24sIGp1c3QgcmV0dXJuIHRoZVxuICAgKiBidWZmZXIgYmVjYXVzZSB0aGUgY29uc2Vuc3VzIGJyYW5jaCBpZCBpcyBhbHJlYWR5IHNlcmlhbGl6ZWQgaW5cbiAgICogdGhlIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgdG9CdWZmZXIoKTogQnVmZmVyIHtcbiAgICBpZiAodGhpcy50eC52ZXJzaW9uID09PSA1IHx8IHRoaXMudHgudmVyc2lvbiA9PT0gWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONV9CUkFOQ0hfTlU1KSB7XG4gICAgICByZXR1cm4gc3VwZXIudG9CdWZmZXIoKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuYWxsb2MoNCk7XG4gICAgdmFsdWUud3JpdGVVaW50MzJMRSh0aGlzLnR4LmNvbnNlbnN1c0JyYW5jaElkKTtcbiAgICB0aGlzLmFkZFVua25vd25LZXlWYWxUb0dsb2JhbCh7IGtleTogQ09OU0VOU1VTX0JSQU5DSF9JRF9LRVksIHZhbHVlIH0pO1xuICAgIGlmICghdGhpcy5kYXRhLmdsb2JhbE1hcC51bmtub3duS2V5VmFscykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgYWRkaW5nIGNvbnNlbnN1cyBicmFuY2ggaWQgdG8gdW5rbm93bktleVZhbHMnKTtcbiAgICB9XG4gICAgY29uc3QgYnVmZiA9IHN1cGVyLnRvQnVmZmVyKCk7XG4gICAgdGhpcy5kYXRhLmdsb2JhbE1hcC51bmtub3duS2V5VmFscy5wb3AoKTtcbiAgICByZXR1cm4gYnVmZjtcbiAgfVxuXG4gIHNldFZlcnNpb24odmVyc2lvbjogbnVtYmVyLCBvdmVyd2ludGVyID0gdHJ1ZSk6IHRoaXMge1xuICAgIHR5cGVmb3JjZSh0eXBlcy5VSW50MzIsIHZlcnNpb24pO1xuICAgIHRoaXMudHgub3ZlcndpbnRlcmVkID0gb3ZlcndpbnRlciA/IDEgOiAwO1xuICAgIHRoaXMudHgudmVyc2lvbiA9IHZlcnNpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXREZWZhdWx0c0ZvclZlcnNpb24obmV0d29yazogTmV0d29yaywgdmVyc2lvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgc3dpdGNoICh2ZXJzaW9uKSB7XG4gICAgICBjYXNlIDQ6XG4gICAgICBjYXNlIFpjYXNoVHJhbnNhY3Rpb24uVkVSU0lPTjRfQlJBTkNIX0NBTk9QWTpcbiAgICAgIGNhc2UgWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONF9CUkFOQ0hfTlU1OlxuICAgICAgICB0aGlzLnNldFZlcnNpb24oNCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA1OlxuICAgICAgY2FzZSBaY2FzaFRyYW5zYWN0aW9uLlZFUlNJT041X0JSQU5DSF9OVTU6XG4gICAgICAgIHRoaXMuc2V0VmVyc2lvbig1KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgdmVyc2lvbiAke3ZlcnNpb259YCk7XG4gICAgfVxuXG4gICAgdGhpcy50eC52ZXJzaW9uR3JvdXBJZCA9IGdldERlZmF1bHRWZXJzaW9uR3JvdXBJZEZvclZlcnNpb24odmVyc2lvbik7XG4gICAgdGhpcy50eC5jb25zZW5zdXNCcmFuY2hJZCA9IGdldERlZmF1bHRDb25zZW5zdXNCcmFuY2hJZEZvclZlcnNpb24obmV0d29yaywgdmVyc2lvbik7XG4gIH1cblxuICAvLyBGb3IgWmNhc2ggdHJhbnNhY3Rpb25zLCB3ZSBkbyBub3QgaGF2ZSB0byBoYXZlIG5vbi13aXRuZXNzIFVUWE8gZGF0YSBmb3Igbm9uLXNlZ3dpdFxuICAvLyB0cmFuc2FjdGlvbnMgYmVjYXVzZSB6Y2FzaCBoYXNoZXMgdGhlIHZhbHVlIGRpcmVjdGx5LiBUaHVzLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBoYXZlXG4gIC8vIHRoZSBwcmV2aW91cyB0cmFuc2FjdGlvbiBoYXNoIG9uIHRoZSB1bnNwZW50LlxuICBzaWduSW5wdXQoaW5wdXRJbmRleDogbnVtYmVyLCBrZXlQYWlyOiBTaWduZXIsIHNpZ2hhc2hUeXBlcz86IG51bWJlcltdKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMud2l0aFVuc2FmZVNpZ25Ob25TZWd3aXRUcnVlKHN1cGVyLnNpZ25JbnB1dC5iaW5kKHRoaXMsIGlucHV0SW5kZXgsIGtleVBhaXIsIHNpZ2hhc2hUeXBlcykpO1xuICB9XG5cbiAgdmFsaWRhdGVTaWduYXR1cmVzT2ZJbnB1dChpbnB1dEluZGV4OiBudW1iZXIsIHZhbGlkYXRvcjogVmFsaWRhdGVTaWdGdW5jdGlvbiwgcHVia2V5PzogQnVmZmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMud2l0aFVuc2FmZVNpZ25Ob25TZWd3aXRUcnVlKHN1cGVyLnZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXQuYmluZCh0aGlzLCBpbnB1dEluZGV4LCB2YWxpZGF0b3IsIHB1YmtleSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB3aXRoVW5zYWZlU2lnbk5vblNlZ3dpdFRydWU8VD4oZm46ICgpID0+IFQpOiBUIHtcbiAgICAodGhpcyBhcyBhbnkpLl9fQ0FDSEUuX19VTlNBRkVfU0lHTl9OT05TRUdXSVQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgKHRoaXMgYXMgYW55KS5fX0NBQ0hFLl9fVU5TQUZFX1NJR05fTk9OU0VHV0lUID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRQcm9wZXJ0eUNoZWNrU2lnbmF0dXJlcyhwcm9wTmFtZToga2V5b2YgWmNhc2hUcmFuc2FjdGlvbjxiaWdpbnQ+LCB2YWx1ZTogdW5rbm93bikge1xuICAgIGlmICh0aGlzLnR4W3Byb3BOYW1lXSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jaGVja0ZvclNpZ25hdHVyZXMocHJvcE5hbWUpO1xuICAgIHRoaXMudHhbcHJvcE5hbWVdID0gdmFsdWUgYXMgYW55O1xuICB9XG5cbiAgc2V0Q29uc2Vuc3VzQnJhbmNoSWQoY29uc2Vuc3VzQnJhbmNoSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHR5cGVmb3JjZSh0eXBlcy5VSW50MzIsIGNvbnNlbnN1c0JyYW5jaElkKTtcbiAgICB0aGlzLnNldFByb3BlcnR5Q2hlY2tTaWduYXR1cmVzKCdjb25zZW5zdXNCcmFuY2hJZCcsIGNvbnNlbnN1c0JyYW5jaElkKTtcbiAgfVxuXG4gIHNldFZlcnNpb25Hcm91cElkKHZlcnNpb25Hcm91cElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0eXBlZm9yY2UodHlwZXMuVUludDMyLCB2ZXJzaW9uR3JvdXBJZCk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eUNoZWNrU2lnbmF0dXJlcygndmVyc2lvbkdyb3VwSWQnLCB2ZXJzaW9uR3JvdXBJZCk7XG4gIH1cblxuICBzZXRFeHBpcnlIZWlnaHQoZXhwaXJ5SGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0eXBlZm9yY2UodHlwZXMuVUludDMyLCBleHBpcnlIZWlnaHQpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlDaGVja1NpZ25hdHVyZXMoJ2V4cGlyeUhlaWdodCcsIGV4cGlyeUhlaWdodCk7XG4gIH1cbn1cbiJdfQ==
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWmNhc2hQc2J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3pjYXNoL1pjYXNoUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwQ0FBaUQ7QUFDakQseURBSTRCO0FBQzVCLDhCQUEwRDtBQUMxRCxtQ0FBMEM7QUFDMUMsaURBQWlEO0FBRWpELDBDQUFzRztBQUN0RyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFdkMsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLHNDQUEyQixDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxFQUFFLENBQUMsZ0NBQXFCLENBQUMsdUJBQXVCLENBQUM7Q0FDekQsQ0FBQyxDQUFDO0FBRUgsTUFBYSxTQUFVLFNBQVEsbUJBQWtDO0lBQ3JELE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFjLEVBQUUsT0FBZ0I7UUFDckUsT0FBTyxtQ0FBZ0IsQ0FBQyxVQUFVLENBQVMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBYyxFQUFFLElBQWU7UUFDL0MsT0FBTyxJQUFJLFNBQVMsQ0FDbEIsSUFBSSxFQUNKLElBQUksSUFBSSxJQUFJLGFBQVEsQ0FBQyxJQUFJLG1CQUFlLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxtQ0FBZ0IsQ0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQzlGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBYyxFQUFFLElBQWM7O1FBQzlD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b1BzYnQgfSBmcm9tICcuLi9VdHhvUHNidCc7XG5pbXBvcnQge1xuICBnZXREZWZhdWx0Q29uc2Vuc3VzQnJhbmNoSWRGb3JWZXJzaW9uLFxuICBnZXREZWZhdWx0VmVyc2lvbkdyb3VwSWRGb3JWZXJzaW9uLFxuICBaY2FzaFRyYW5zYWN0aW9uLFxufSBmcm9tICcuL1pjYXNoVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgTmV0d29yaywgUHNidFRyYW5zYWN0aW9uLCBTaWduZXIgfSBmcm9tICcuLi8uLi8nO1xuaW1wb3J0IHsgUHNidCBhcyBQc2J0QmFzZSB9IGZyb20gJ2JpcDE3NCc7XG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICdiaXRjb2luanMtbGliL3NyYy90eXBlcyc7XG5pbXBvcnQgeyBWYWxpZGF0ZVNpZ0Z1bmN0aW9uIH0gZnJvbSAnYml0Y29pbmpzLWxpYi9zcmMvcHNidCc7XG5pbXBvcnQgeyBQcm9wcmlldGFyeUtleVN1YnR5cGUsIFBTQlRfUFJPUFJJRVRBUllfSURFTlRJRklFUiwgd2l0aFVuc2FmZU5vblNlZ3dpdCB9IGZyb20gJy4uL1BzYnRVdGlsJztcbmNvbnN0IHR5cGVmb3JjZSA9IHJlcXVpcmUoJ3R5cGVmb3JjZScpO1xuXG5jb25zdCBDT05TRU5TVVNfQlJBTkNIX0lEX0tFWSA9IEJ1ZmZlci5jb25jYXQoW1xuICBCdWZmZXIub2YoMHhmYyksXG4gIEJ1ZmZlci5vZigweDA1KSxcbiAgQnVmZmVyLmZyb20oUFNCVF9QUk9QUklFVEFSWV9JREVOVElGSUVSKSxcbiAgQnVmZmVyLm9mKFByb3ByaWV0YXJ5S2V5U3VidHlwZS5aRUNfQ09OU0VOU1VTX0JSQU5DSF9JRCksXG5dKTtcblxuZXhwb3J0IGNsYXNzIFpjYXNoUHNidCBleHRlbmRzIFV0eG9Qc2J0PFpjYXNoVHJhbnNhY3Rpb248YmlnaW50Pj4ge1xuICBwcm90ZWN0ZWQgc3RhdGljIHRyYW5zYWN0aW9uRnJvbUJ1ZmZlcihidWZmZXI6IEJ1ZmZlciwgbmV0d29yazogTmV0d29yayk6IFpjYXNoVHJhbnNhY3Rpb248YmlnaW50PiB7XG4gICAgcmV0dXJuIFpjYXNoVHJhbnNhY3Rpb24uZnJvbUJ1ZmZlcjxiaWdpbnQ+KGJ1ZmZlciwgZmFsc2UsICdiaWdpbnQnLCBuZXR3b3JrKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVQc2J0KG9wdHM6IFBzYnRPcHRzLCBkYXRhPzogUHNidEJhc2UpOiBaY2FzaFBzYnQge1xuICAgIHJldHVybiBuZXcgWmNhc2hQc2J0KFxuICAgICAgb3B0cyxcbiAgICAgIGRhdGEgfHwgbmV3IFBzYnRCYXNlKG5ldyBQc2J0VHJhbnNhY3Rpb24oeyB0eDogbmV3IFpjYXNoVHJhbnNhY3Rpb248YmlnaW50PihvcHRzLm5ldHdvcmspIH0pKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW4gdmVyc2lvbiA8IDUgb2YgWmNhc2ggdHJhbnNhY3Rpb25zLCB0aGUgY29uc2Vuc3VzIGJyYW5jaCBJRCBpcyBub3Qgc2VyaWFsaXplZCBpbiB0aGUgdHJhbnNhY3Rpb25cbiAgICogd2hlcmVhcyBpbiB2ZXJzaW9uIDUgaXQgaXMuIElmIHRoZSB0cmFuc2FjdGlvbiBpcyBsZXNzIHRoYW4gYSB2ZXJzaW9uIDUsIHNldCB0aGUgY29uc2Vuc3VzIGJyYW5jaCBpZFxuICAgKiBpbiB0aGUgZ2xvYmFsIG1hcCBpbiB0aGUgcHNidC4gSWYgaXQgaXMgYSB2ZXJzaW9uIDUgdHJhbnNhY3Rpb24sIHRocm93IGFuIGVycm9yIGlmIHRoZSBjb25zZW5zdXNcbiAgICogYnJhbmNoIGlkIGlzIHNldCBpbiB0aGUgcHNidCAoYmVjYXVzZSBpdCBzaG91bGQgYmUgb24gdGhlIHRyYW5zYWN0aW9uIGFscmVhZHkpLlxuICAgKiBAcGFyYW0gYnVmZmVyIFBzYnQgYnVmZmVyXG4gICAqIEBwYXJhbSBvcHRzIG9wdGlvbnNcbiAgICovXG4gIHN0YXRpYyBmcm9tQnVmZmVyKGJ1ZmZlcjogQnVmZmVyLCBvcHRzOiBQc2J0T3B0cyk6IFV0eG9Qc2J0PFpjYXNoVHJhbnNhY3Rpb248YmlnaW50Pj4ge1xuICAgIGNvbnN0IHBzYnQgPSBzdXBlci5mcm9tQnVmZmVyKGJ1ZmZlciwgb3B0cykgYXMgWmNhc2hQc2J0O1xuXG4gICAgLy8gUmVhZCBgY29uc2Vuc3VzQnJhbmNoSWRgIGZyb20gdGhlIGdsb2JhbC1tYXBcbiAgICBsZXQgY29uc2Vuc3VzQnJhbmNoSWQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBwc2J0LmRhdGEuZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzPy5mb3JFYWNoKCh7IGtleSwgdmFsdWUgfSwgaSkgPT4ge1xuICAgICAgaWYgKGtleS5lcXVhbHMoQ09OU0VOU1VTX0JSQU5DSF9JRF9LRVkpKSB7XG4gICAgICAgIGNvbnNlbnN1c0JyYW5jaElkID0gdmFsdWUucmVhZFVpbnQzMkxFKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgc3dpdGNoIChwc2J0LnR4LnZlcnNpb24pIHtcbiAgICAgIGNhc2UgNDpcbiAgICAgIGNhc2UgWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONF9CUkFOQ0hfQ0FOT1BZOlxuICAgICAgY2FzZSBaY2FzaFRyYW5zYWN0aW9uLlZFUlNJT040X0JSQU5DSF9OVTU6XG4gICAgICAgIGlmICghY29uc2Vuc3VzQnJhbmNoSWQgfHwgIXBzYnQuZGF0YS5nbG9iYWxNYXAudW5rbm93bktleVZhbHMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGNvbnNlbnN1cyBicmFuY2ggaWQgb24gcHNidCBmb3IgdmVyc2lvbiA0IFpjYXNoIHRyYW5zYWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgcHNidC50eC5jb25zZW5zdXNCcmFuY2hJZCA9IGNvbnNlbnN1c0JyYW5jaElkO1xuICAgICAgICBwc2J0LmRhdGEuZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzID0gcHNidC5kYXRhLmdsb2JhbE1hcC51bmtub3duS2V5VmFscy5maWx0ZXIoXG4gICAgICAgICAgKHsga2V5IH0pID0+IGtleSAhPT0gQ09OU0VOU1VTX0JSQU5DSF9JRF9LRVlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBEZWxldGUgY29uc2Vuc3VzQnJhbmNoSWQgZnJvbSBnbG9iYWxNYXAgc28gdGhhdCBpZiB3ZSB3ZXJlIHRvIHNlcmlhbGl6ZSB0aGUgcHNidCBhZ2FpblxuICAgICAgICAvLyB3ZSB3b3VsZCBub3QgYWRkIGEgZHVwbGljYXRlIGtleSBpbnRvIHRoZSBnbG9iYWwgbWFwXG4gICAgICAgIHBzYnQuZGF0YS5nbG9iYWxNYXAudW5rbm93bktleVZhbHMucG9wKCk7XG4gICAgICAgIHJldHVybiBwc2J0O1xuICAgICAgY2FzZSA1OlxuICAgICAgY2FzZSBaY2FzaFRyYW5zYWN0aW9uLlZFUlNJT041X0JSQU5DSF9OVTU6XG4gICAgICAgIGlmIChjb25zZW5zdXNCcmFuY2hJZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgY29uc2Vuc3VzIGJyYW5jaCBpZCBpbiBwc2J0IGdsb2JhbC1tYXAgZm9yIHZlcnNpb24gNSBaY2FzaCB0cmFuc2FjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwc2J0O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB2ZXJzaW9uICR7cHNidC50eC52ZXJzaW9ufWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBpdCBpcyBhIHZlcnNpb24gNCB0cmFuc2FjdGlvbiwgYWRkIHRoZSBjb25zZW5zdXMgYnJhbmNoIGlkIHRvXG4gICAqIHRoZSBnbG9iYWwgbWFwLiBJZiBpdCBpcyBhIHZlcnNpb24gNSB0cmFuc2FjdGlvbiwganVzdCByZXR1cm4gdGhlXG4gICAqIGJ1ZmZlciBiZWNhdXNlIHRoZSBjb25zZW5zdXMgYnJhbmNoIGlkIGlzIGFscmVhZHkgc2VyaWFsaXplZCBpblxuICAgKiB0aGUgdHJhbnNhY3Rpb24uXG4gICAqL1xuICB0b0J1ZmZlcigpOiBCdWZmZXIge1xuICAgIGlmICh0aGlzLnR4LnZlcnNpb24gPT09IDUgfHwgdGhpcy50eC52ZXJzaW9uID09PSBaY2FzaFRyYW5zYWN0aW9uLlZFUlNJT041X0JSQU5DSF9OVTUpIHtcbiAgICAgIHJldHVybiBzdXBlci50b0J1ZmZlcigpO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICB2YWx1ZS53cml0ZVVpbnQzMkxFKHRoaXMudHguY29uc2Vuc3VzQnJhbmNoSWQpO1xuICAgIHRoaXMuYWRkVW5rbm93bktleVZhbFRvR2xvYmFsKHsga2V5OiBDT05TRU5TVVNfQlJBTkNIX0lEX0tFWSwgdmFsdWUgfSk7XG4gICAgaWYgKCF0aGlzLmRhdGEuZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCBhZGRpbmcgY29uc2Vuc3VzIGJyYW5jaCBpZCB0byB1bmtub3duS2V5VmFscycpO1xuICAgIH1cbiAgICBjb25zdCBidWZmID0gc3VwZXIudG9CdWZmZXIoKTtcbiAgICB0aGlzLmRhdGEuZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzLnBvcCgpO1xuICAgIHJldHVybiBidWZmO1xuICB9XG5cbiAgc2V0VmVyc2lvbih2ZXJzaW9uOiBudW1iZXIsIG92ZXJ3aW50ZXIgPSB0cnVlKTogdGhpcyB7XG4gICAgdHlwZWZvcmNlKHR5cGVzLlVJbnQzMiwgdmVyc2lvbik7XG4gICAgdGhpcy50eC5vdmVyd2ludGVyZWQgPSBvdmVyd2ludGVyID8gMSA6IDA7XG4gICAgdGhpcy50eC52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldERlZmF1bHRzRm9yVmVyc2lvbihuZXR3b3JrOiBOZXR3b3JrLCB2ZXJzaW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHZlcnNpb24pIHtcbiAgICAgIGNhc2UgNDpcbiAgICAgIGNhc2UgWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONF9CUkFOQ0hfQ0FOT1BZOlxuICAgICAgY2FzZSBaY2FzaFRyYW5zYWN0aW9uLlZFUlNJT040X0JSQU5DSF9OVTU6XG4gICAgICAgIHRoaXMuc2V0VmVyc2lvbig0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDU6XG4gICAgICBjYXNlIFpjYXNoVHJhbnNhY3Rpb24uVkVSU0lPTjVfQlJBTkNIX05VNTpcbiAgICAgICAgdGhpcy5zZXRWZXJzaW9uKDUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCB2ZXJzaW9uICR7dmVyc2lvbn1gKTtcbiAgICB9XG5cbiAgICB0aGlzLnR4LnZlcnNpb25Hcm91cElkID0gZ2V0RGVmYXVsdFZlcnNpb25Hcm91cElkRm9yVmVyc2lvbih2ZXJzaW9uKTtcbiAgICB0aGlzLnR4LmNvbnNlbnN1c0JyYW5jaElkID0gZ2V0RGVmYXVsdENvbnNlbnN1c0JyYW5jaElkRm9yVmVyc2lvbihuZXR3b3JrLCB2ZXJzaW9uKTtcbiAgfVxuXG4gIC8vIEZvciBaY2FzaCB0cmFuc2FjdGlvbnMsIHdlIGRvIG5vdCBoYXZlIHRvIGhhdmUgbm9uLXdpdG5lc3MgVVRYTyBkYXRhIGZvciBub24tc2Vnd2l0XG4gIC8vIHRyYW5zYWN0aW9ucyBiZWNhdXNlIHpjYXNoIGhhc2hlcyB0aGUgdmFsdWUgZGlyZWN0bHkuIFRodXMsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGhhdmVcbiAgLy8gdGhlIHByZXZpb3VzIHRyYW5zYWN0aW9uIGhhc2ggb24gdGhlIHVuc3BlbnQuXG4gIHNpZ25JbnB1dChpbnB1dEluZGV4OiBudW1iZXIsIGtleVBhaXI6IFNpZ25lciwgc2lnaGFzaFR5cGVzPzogbnVtYmVyW10pOiB0aGlzIHtcbiAgICByZXR1cm4gd2l0aFVuc2FmZU5vblNlZ3dpdCh0aGlzLCBzdXBlci5zaWduSW5wdXQuYmluZCh0aGlzLCBpbnB1dEluZGV4LCBrZXlQYWlyLCBzaWdoYXNoVHlwZXMpKTtcbiAgfVxuXG4gIHZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXQoaW5wdXRJbmRleDogbnVtYmVyLCB2YWxpZGF0b3I6IFZhbGlkYXRlU2lnRnVuY3Rpb24sIHB1YmtleT86IEJ1ZmZlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB3aXRoVW5zYWZlTm9uU2Vnd2l0KHRoaXMsIHN1cGVyLnZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXQuYmluZCh0aGlzLCBpbnB1dEluZGV4LCB2YWxpZGF0b3IsIHB1YmtleSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQcm9wZXJ0eUNoZWNrU2lnbmF0dXJlcyhwcm9wTmFtZToga2V5b2YgWmNhc2hUcmFuc2FjdGlvbjxiaWdpbnQ+LCB2YWx1ZTogdW5rbm93bikge1xuICAgIGlmICh0aGlzLnR4W3Byb3BOYW1lXSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jaGVja0ZvclNpZ25hdHVyZXMocHJvcE5hbWUpO1xuICAgIHRoaXMudHhbcHJvcE5hbWVdID0gdmFsdWUgYXMgYW55O1xuICB9XG5cbiAgc2V0Q29uc2Vuc3VzQnJhbmNoSWQoY29uc2Vuc3VzQnJhbmNoSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHR5cGVmb3JjZSh0eXBlcy5VSW50MzIsIGNvbnNlbnN1c0JyYW5jaElkKTtcbiAgICB0aGlzLnNldFByb3BlcnR5Q2hlY2tTaWduYXR1cmVzKCdjb25zZW5zdXNCcmFuY2hJZCcsIGNvbnNlbnN1c0JyYW5jaElkKTtcbiAgfVxuXG4gIHNldFZlcnNpb25Hcm91cElkKHZlcnNpb25Hcm91cElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0eXBlZm9yY2UodHlwZXMuVUludDMyLCB2ZXJzaW9uR3JvdXBJZCk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eUNoZWNrU2lnbmF0dXJlcygndmVyc2lvbkdyb3VwSWQnLCB2ZXJzaW9uR3JvdXBJZCk7XG4gIH1cblxuICBzZXRFeHBpcnlIZWlnaHQoZXhwaXJ5SGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0eXBlZm9yY2UodHlwZXMuVUludDMyLCBleHBpcnlIZWlnaHQpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlDaGVja1NpZ25hdHVyZXMoJ2V4cGlyeUhlaWdodCcsIGV4cGlyeUhlaWdodCk7XG4gIH1cbn1cbiJdfQ==
|