@bitgo-beta/utxo-staking 1.1.1-beta.825 → 1.1.1-beta.827
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/dist/cjs/scripts/babylon-sync.d.ts +2 -0
- package/dist/cjs/scripts/babylon-sync.d.ts.map +1 -0
- package/dist/cjs/scripts/babylon-sync.js +126 -0
- package/dist/cjs/src/babylon/delegationMessage.d.ts.map +1 -0
- package/dist/cjs/src/babylon/delegationMessage.js +285 -0
- package/dist/cjs/src/babylon/descriptor.d.ts.map +1 -0
- package/dist/cjs/src/babylon/descriptor.js +97 -0
- package/dist/cjs/src/babylon/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/babylon/index.js +1 -1
- package/dist/cjs/src/babylon/network.d.ts.map +1 -0
- package/dist/{src → cjs/src}/babylon/network.js +1 -1
- package/dist/cjs/src/babylon/parseDescriptor.d.ts.map +1 -0
- package/dist/cjs/src/babylon/parseDescriptor.js +159 -0
- package/dist/cjs/src/babylon/stakingManager.d.ts.map +1 -0
- package/dist/cjs/src/babylon/stakingManager.js +120 -0
- package/dist/cjs/src/babylon/stakingParams.d.ts.map +1 -0
- package/dist/cjs/src/babylon/stakingParams.js +132 -0
- package/dist/cjs/src/babylon/undelegation/UndelegationResponse.d.ts.map +1 -0
- package/dist/{src → cjs/src}/babylon/undelegation/UndelegationResponse.js +1 -1
- package/dist/cjs/src/babylon/undelegation/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/babylon/undelegation/index.js +1 -1
- package/dist/cjs/src/babylon/undelegation/unbonding.d.ts.map +1 -0
- package/dist/cjs/src/babylon/undelegation/unbonding.js +111 -0
- package/dist/cjs/src/coreDao/descriptor.d.ts.map +1 -0
- package/dist/cjs/src/coreDao/descriptor.js +38 -0
- package/dist/cjs/src/coreDao/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/coreDao/index.js +1 -1
- package/dist/cjs/src/coreDao/opReturn.d.ts.map +1 -0
- package/dist/cjs/src/coreDao/opReturn.js +183 -0
- package/dist/cjs/src/coreDao/transaction.d.ts.map +1 -0
- package/dist/cjs/src/coreDao/transaction.js +34 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/index.js +1 -1
- package/dist/cjs/test/unit/babylon/bug71.d.ts +2 -0
- package/dist/cjs/test/unit/babylon/bug71.d.ts.map +1 -0
- package/dist/cjs/test/unit/babylon/bug71.js +108 -0
- package/dist/cjs/test/unit/babylon/key.utils.d.ts +6 -0
- package/dist/cjs/test/unit/babylon/key.utils.d.ts.map +1 -0
- package/dist/cjs/test/unit/babylon/key.utils.js +68 -0
- package/dist/cjs/test/unit/babylon/transactions.d.ts +2 -0
- package/dist/cjs/test/unit/babylon/transactions.d.ts.map +1 -0
- package/dist/cjs/test/unit/babylon/transactions.js +338 -0
- package/dist/cjs/test/unit/babylon/undelegation.d.ts +2 -0
- package/dist/cjs/test/unit/babylon/undelegation.d.ts.map +1 -0
- package/dist/cjs/test/unit/babylon/undelegation.js +156 -0
- package/dist/cjs/test/unit/babylon/vendor.utils.d.ts +13 -0
- package/dist/cjs/test/unit/babylon/vendor.utils.d.ts.map +1 -0
- package/dist/cjs/test/unit/babylon/vendor.utils.js +78 -0
- package/dist/cjs/test/unit/coreDao/descriptor.d.ts +2 -0
- package/dist/cjs/test/unit/coreDao/descriptor.d.ts.map +1 -0
- package/dist/cjs/test/unit/coreDao/descriptor.js +144 -0
- package/dist/cjs/test/unit/coreDao/opReturn.d.ts +2 -0
- package/dist/cjs/test/unit/coreDao/opReturn.d.ts.map +1 -0
- package/dist/cjs/test/unit/coreDao/opReturn.js +275 -0
- package/dist/cjs/test/unit/coreDao/utils.d.ts +5 -0
- package/dist/cjs/test/unit/coreDao/utils.d.ts.map +1 -0
- package/dist/cjs/test/unit/coreDao/utils.js +54 -0
- package/dist/cjs/test/unit/fixtures.utils.d.ts +9 -0
- package/dist/cjs/test/unit/fixtures.utils.d.ts.map +1 -0
- package/dist/cjs/test/unit/fixtures.utils.js +91 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/babylon/delegationMessage.d.ts +38 -0
- package/dist/esm/babylon/delegationMessage.js +239 -0
- package/dist/esm/babylon/descriptor.d.ts +48 -0
- package/dist/esm/babylon/descriptor.js +91 -0
- package/dist/esm/babylon/index.d.ts +6 -0
- package/dist/esm/babylon/index.js +11 -0
- package/dist/esm/babylon/network.d.ts +7 -0
- package/dist/esm/babylon/network.js +29 -0
- package/dist/esm/babylon/params.mainnet.json +152 -0
- package/dist/esm/babylon/params.testnet.json +212 -0
- package/dist/esm/babylon/parseDescriptor.d.ts +26 -0
- package/dist/esm/babylon/parseDescriptor.js +155 -0
- package/dist/esm/babylon/stakingManager.d.ts +6 -0
- package/dist/esm/babylon/stakingManager.js +83 -0
- package/dist/esm/babylon/stakingParams.d.ts +40 -0
- package/dist/esm/babylon/stakingParams.js +86 -0
- package/dist/esm/babylon/undelegation/UndelegationResponse.d.ts +24 -0
- package/dist/esm/babylon/undelegation/UndelegationResponse.js +18 -0
- package/dist/esm/babylon/undelegation/index.d.ts +3 -0
- package/dist/esm/babylon/undelegation/index.js +3 -0
- package/dist/esm/babylon/undelegation/unbonding.d.ts +16 -0
- package/dist/esm/babylon/undelegation/unbonding.js +70 -0
- package/dist/esm/coreDao/descriptor.d.ts +18 -0
- package/dist/esm/coreDao/descriptor.js +35 -0
- package/dist/esm/coreDao/index.d.ts +4 -0
- package/dist/esm/coreDao/index.js +4 -0
- package/dist/esm/coreDao/opReturn.d.ts +41 -0
- package/dist/esm/coreDao/opReturn.js +175 -0
- package/dist/esm/coreDao/transaction.d.ts +28 -0
- package/dist/esm/coreDao/transaction.js +30 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +3 -0
- package/package.json +26 -10
- package/dist/src/babylon/delegationMessage.js +0 -285
- package/dist/src/babylon/descriptor.js +0 -97
- package/dist/src/babylon/parseDescriptor.js +0 -159
- package/dist/src/babylon/stakingManager.js +0 -120
- package/dist/src/babylon/stakingParams.js +0 -132
- package/dist/src/babylon/undelegation/unbonding.js +0 -111
- package/dist/src/coreDao/descriptor.js +0 -38
- package/dist/src/coreDao/opReturn.js +0 -183
- package/dist/src/coreDao/transaction.js +0 -34
- /package/dist/{src → cjs/src}/babylon/delegationMessage.d.ts +0 -0
- /package/dist/{src → cjs/src}/babylon/descriptor.d.ts +0 -0
- /package/dist/{src → cjs/src}/babylon/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/babylon/network.d.ts +0 -0
- /package/dist/{src → cjs/src}/babylon/params.mainnet.json +0 -0
- /package/dist/{src → cjs/src}/babylon/params.testnet.json +0 -0
- /package/dist/{src → cjs/src}/babylon/parseDescriptor.d.ts +0 -0
- /package/dist/{src → cjs/src}/babylon/stakingManager.d.ts +0 -0
- /package/dist/{src → cjs/src}/babylon/stakingParams.d.ts +0 -0
- /package/dist/{src → cjs/src}/babylon/undelegation/UndelegationResponse.d.ts +0 -0
- /package/dist/{src → cjs/src}/babylon/undelegation/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/babylon/undelegation/unbonding.d.ts +0 -0
- /package/dist/{src → cjs/src}/coreDao/descriptor.d.ts +0 -0
- /package/dist/{src → cjs/src}/coreDao/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/coreDao/opReturn.d.ts +0 -0
- /package/dist/{src → cjs/src}/coreDao/transaction.d.ts +0 -0
- /package/dist/{src → cjs/src}/index.d.ts +0 -0
- /package/dist/{src → esm}/babylon/delegationMessage.d.ts.map +0 -0
- /package/dist/{src → esm}/babylon/descriptor.d.ts.map +0 -0
- /package/dist/{src → esm}/babylon/index.d.ts.map +0 -0
- /package/dist/{src → esm}/babylon/network.d.ts.map +0 -0
- /package/dist/{src → esm}/babylon/parseDescriptor.d.ts.map +0 -0
- /package/dist/{src → esm}/babylon/stakingManager.d.ts.map +0 -0
- /package/dist/{src → esm}/babylon/stakingParams.d.ts.map +0 -0
- /package/dist/{src → esm}/babylon/undelegation/UndelegationResponse.d.ts.map +0 -0
- /package/dist/{src → esm}/babylon/undelegation/index.d.ts.map +0 -0
- /package/dist/{src → esm}/babylon/undelegation/unbonding.d.ts.map +0 -0
- /package/dist/{src → esm}/coreDao/descriptor.d.ts.map +0 -0
- /package/dist/{src → esm}/coreDao/index.d.ts.map +0 -0
- /package/dist/{src → esm}/coreDao/opReturn.d.ts.map +0 -0
- /package/dist/{src → esm}/coreDao/transaction.d.ts.map +0 -0
- /package/dist/{src → esm}/index.d.ts.map +0 -0
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.mockBabylonProvider = void 0;
|
|
37
|
-
exports.createStakingManager = createStakingManager;
|
|
38
|
-
const bitcoinjslib = __importStar(require("bitcoinjs-lib"));
|
|
39
|
-
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
40
|
-
const vendor = __importStar(require("@bitgo-beta/babylonlabs-io-btc-staking-ts"));
|
|
41
|
-
const pop_1 = require("@babylonlabs-io/babylon-proto-ts/dist/generated/babylon/btcstaking/v1/pop");
|
|
42
|
-
const stakingParams_1 = require("./stakingParams");
|
|
43
|
-
/**
|
|
44
|
-
* Subclass of BabylonBtcStakingManager with the sole purpose of forcing
|
|
45
|
-
* a ECDSA signature.
|
|
46
|
-
*/
|
|
47
|
-
class BitGoStakingManager extends vendor.BabylonBtcStakingManager {
|
|
48
|
-
constructor(network, stakingParams, btcProvider, babylonProvider) {
|
|
49
|
-
super(network, stakingParams, btcProvider, babylonProvider);
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Creates a proof of possession for the staker based on ECDSA signature.
|
|
53
|
-
*
|
|
54
|
-
* This is a parameterized version of the superclass method which infers
|
|
55
|
-
* the signature type from the stakerBtcAddress.
|
|
56
|
-
*
|
|
57
|
-
* @param bech32Address - The staker's bech32 address on the babylon network.
|
|
58
|
-
* @param stakerBtcAddress - The staker's BTC address.
|
|
59
|
-
* @param sigType - The signature type (BIP322 or ECDSA).
|
|
60
|
-
* @returns The proof of possession.
|
|
61
|
-
*/
|
|
62
|
-
async createProofOfPossessionWithSigType(bech32Address, stakerBtcAddress, sigType) {
|
|
63
|
-
if (!bech32Address.startsWith('bbn1')) {
|
|
64
|
-
throw new Error('invalid bech32 babylon address, must start with bbn1');
|
|
65
|
-
}
|
|
66
|
-
const signedBabylonAddress = await this.btcProvider.signMessage(bech32Address, sigType === pop_1.BTCSigType.BIP322 ? 'bip322-simple' : 'ecdsa');
|
|
67
|
-
let btcSig;
|
|
68
|
-
if (sigType === pop_1.BTCSigType.BIP322) {
|
|
69
|
-
const bip322Sig = pop_1.BIP322Sig.fromPartial({
|
|
70
|
-
address: stakerBtcAddress,
|
|
71
|
-
sig: Buffer.from(signedBabylonAddress, 'base64'),
|
|
72
|
-
});
|
|
73
|
-
// Encode the BIP322 protobuf message to a Uint8Array
|
|
74
|
-
btcSig = pop_1.BIP322Sig.encode(bip322Sig).finish();
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
// Encode the ECDSA signature to a Uint8Array
|
|
78
|
-
btcSig = Buffer.from(signedBabylonAddress, 'base64');
|
|
79
|
-
}
|
|
80
|
-
return {
|
|
81
|
-
btcSigType: sigType,
|
|
82
|
-
btcSig,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Creates a proof of possession for the staker based on ECDSA signature.
|
|
87
|
-
* @param channel - The channel for which the proof of possession is created.
|
|
88
|
-
* @param bech32Address - The staker's bech32 address on the babylon network.
|
|
89
|
-
* @param stakerBtcAddress
|
|
90
|
-
* @returns The proof of possession.
|
|
91
|
-
*/
|
|
92
|
-
async createProofOfPossession(channel, bech32Address, stakerBtcAddress) {
|
|
93
|
-
// force the ECDSA signature type
|
|
94
|
-
return this.createProofOfPossessionWithSigType(bech32Address, stakerBtcAddress, pop_1.BTCSigType.ECDSA);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
exports.mockBabylonProvider = {
|
|
98
|
-
signTransaction() {
|
|
99
|
-
throw new Error('Function not implemented.');
|
|
100
|
-
},
|
|
101
|
-
};
|
|
102
|
-
function createStakingManager(network, btcProvider, stakingParams, babylonProvider = exports.mockBabylonProvider) {
|
|
103
|
-
if (utxolib.isValidNetwork(network)) {
|
|
104
|
-
switch (network) {
|
|
105
|
-
case utxolib.networks.bitcoin:
|
|
106
|
-
network = bitcoinjslib.networks.bitcoin;
|
|
107
|
-
break;
|
|
108
|
-
case utxolib.networks.testnet:
|
|
109
|
-
case utxolib.networks.bitcoinTestnet4:
|
|
110
|
-
throw new Error('Unsupported bitcoin testnet network - only signet is supported');
|
|
111
|
-
case utxolib.networks.bitcoinPublicSignet:
|
|
112
|
-
network = bitcoinjslib.networks.testnet;
|
|
113
|
-
break;
|
|
114
|
-
default:
|
|
115
|
-
throw new Error('Unsupported network');
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
return new BitGoStakingManager(network, stakingParams ?? (0, stakingParams_1.getStakingParams)(network), btcProvider, babylonProvider);
|
|
119
|
-
}
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFieWxvbi9zdGFraW5nTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyRkEsb0RBc0JDO0FBakhELDREQUE4QztBQUM5Qyw4REFBZ0Q7QUFDaEQsa0ZBQW9FO0FBQ3BFLG1HQUltRjtBQUVuRixtREFBbUQ7QUFFbkQ7OztHQUdHO0FBQ0gsTUFBTSxtQkFBb0IsU0FBUSxNQUFNLENBQUMsd0JBQXdCO0lBQy9ELFlBQ0UsT0FBNkIsRUFDN0IsYUFBOEMsRUFDOUMsV0FBK0IsRUFDL0IsZUFBdUM7UUFFdkMsS0FBSyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsS0FBSyxDQUFDLGtDQUFrQyxDQUN0QyxhQUFxQixFQUNyQixnQkFBd0IsRUFDeEIsT0FBbUI7UUFFbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUNELE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FDN0QsYUFBYSxFQUNiLE9BQU8sS0FBSyxnQkFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQzFELENBQUM7UUFFRixJQUFJLE1BQWtCLENBQUM7UUFDdkIsSUFBSSxPQUFPLEtBQUssZ0JBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFNBQVMsR0FBRyxlQUFTLENBQUMsV0FBVyxDQUFDO2dCQUN0QyxPQUFPLEVBQUUsZ0JBQWdCO2dCQUN6QixHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLENBQUM7YUFDakQsQ0FBQyxDQUFDO1lBQ0gscURBQXFEO1lBQ3JELE1BQU0sR0FBRyxlQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hELENBQUM7YUFBTSxDQUFDO1lBQ04sNkNBQTZDO1lBQzdDLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxPQUFPO1lBQ0wsVUFBVSxFQUFFLE9BQU87WUFDbkIsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ00sS0FBSyxDQUFDLHVCQUF1QixDQUNwQyxPQUFvRCxFQUNwRCxhQUFxQixFQUNyQixnQkFBd0I7UUFFeEIsaUNBQWlDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGtDQUFrQyxDQUFDLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BHLENBQUM7Q0FDRjtBQUVZLFFBQUEsbUJBQW1CLEdBQTJCO0lBQ3pELGVBQWU7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGLENBQUM7QUFFRixTQUFnQixvQkFBb0IsQ0FDbEMsT0FBK0MsRUFDL0MsV0FBK0IsRUFDL0IsYUFBK0MsRUFDL0MsZUFBZSxHQUFHLDJCQUFtQjtJQUVyQyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxRQUFRLE9BQU8sRUFBRSxDQUFDO1lBQ2hCLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPO2dCQUMzQixPQUFPLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7Z0JBQ3hDLE1BQU07WUFDUixLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQzlCLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlO2dCQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7WUFDcEYsS0FBSyxPQUFPLENBQUMsUUFBUSxDQUFDLG1CQUFtQjtnQkFDdkMsT0FBTyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUN4QyxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxhQUFhLElBQUksSUFBQSxnQ0FBZ0IsRUFBQyxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDcEgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGJpdGNvaW5qc2xpYiBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0ICogYXMgdmVuZG9yIGZyb20gJ0BiaXRnby1iZXRhL2JhYnlsb25sYWJzLWlvLWJ0Yy1zdGFraW5nLXRzJztcbmltcG9ydCB7XG4gIEJJUDMyMlNpZyxcbiAgQlRDU2lnVHlwZSxcbiAgUHJvb2ZPZlBvc3Nlc3Npb25CVEMsXG59IGZyb20gJ0BiYWJ5bG9ubGFicy1pby9iYWJ5bG9uLXByb3RvLXRzL2Rpc3QvZ2VuZXJhdGVkL2JhYnlsb24vYnRjc3Rha2luZy92MS9wb3AnO1xuXG5pbXBvcnQgeyBnZXRTdGFraW5nUGFyYW1zIH0gZnJvbSAnLi9zdGFraW5nUGFyYW1zJztcblxuLyoqXG4gKiBTdWJjbGFzcyBvZiBCYWJ5bG9uQnRjU3Rha2luZ01hbmFnZXIgd2l0aCB0aGUgc29sZSBwdXJwb3NlIG9mIGZvcmNpbmdcbiAqIGEgRUNEU0Egc2lnbmF0dXJlLlxuICovXG5jbGFzcyBCaXRHb1N0YWtpbmdNYW5hZ2VyIGV4dGVuZHMgdmVuZG9yLkJhYnlsb25CdGNTdGFraW5nTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG5ldHdvcms6IGJpdGNvaW5qc2xpYi5OZXR3b3JrLFxuICAgIHN0YWtpbmdQYXJhbXM6IHZlbmRvci5WZXJzaW9uZWRTdGFraW5nUGFyYW1zW10sXG4gICAgYnRjUHJvdmlkZXI6IHZlbmRvci5CdGNQcm92aWRlcixcbiAgICBiYWJ5bG9uUHJvdmlkZXI6IHZlbmRvci5CYWJ5bG9uUHJvdmlkZXJcbiAgKSB7XG4gICAgc3VwZXIobmV0d29yaywgc3Rha2luZ1BhcmFtcywgYnRjUHJvdmlkZXIsIGJhYnlsb25Qcm92aWRlcik7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHByb29mIG9mIHBvc3Nlc3Npb24gZm9yIHRoZSBzdGFrZXIgYmFzZWQgb24gRUNEU0Egc2lnbmF0dXJlLlxuICAgKlxuICAgKiBUaGlzIGlzIGEgcGFyYW1ldGVyaXplZCB2ZXJzaW9uIG9mIHRoZSBzdXBlcmNsYXNzIG1ldGhvZCB3aGljaCBpbmZlcnNcbiAgICogdGhlIHNpZ25hdHVyZSB0eXBlIGZyb20gdGhlIHN0YWtlckJ0Y0FkZHJlc3MuXG4gICAqXG4gICAqIEBwYXJhbSBiZWNoMzJBZGRyZXNzIC0gVGhlIHN0YWtlcidzIGJlY2gzMiBhZGRyZXNzIG9uIHRoZSBiYWJ5bG9uIG5ldHdvcmsuXG4gICAqIEBwYXJhbSBzdGFrZXJCdGNBZGRyZXNzIC0gVGhlIHN0YWtlcidzIEJUQyBhZGRyZXNzLlxuICAgKiBAcGFyYW0gc2lnVHlwZSAtIFRoZSBzaWduYXR1cmUgdHlwZSAoQklQMzIyIG9yIEVDRFNBKS5cbiAgICogQHJldHVybnMgVGhlIHByb29mIG9mIHBvc3Nlc3Npb24uXG4gICAqL1xuICBhc3luYyBjcmVhdGVQcm9vZk9mUG9zc2Vzc2lvbldpdGhTaWdUeXBlKFxuICAgIGJlY2gzMkFkZHJlc3M6IHN0cmluZyxcbiAgICBzdGFrZXJCdGNBZGRyZXNzOiBzdHJpbmcsXG4gICAgc2lnVHlwZTogQlRDU2lnVHlwZVxuICApOiBQcm9taXNlPFByb29mT2ZQb3NzZXNzaW9uQlRDPiB7XG4gICAgaWYgKCFiZWNoMzJBZGRyZXNzLnN0YXJ0c1dpdGgoJ2JibjEnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGJlY2gzMiBiYWJ5bG9uIGFkZHJlc3MsIG11c3Qgc3RhcnQgd2l0aCBiYm4xJyk7XG4gICAgfVxuICAgIGNvbnN0IHNpZ25lZEJhYnlsb25BZGRyZXNzID0gYXdhaXQgdGhpcy5idGNQcm92aWRlci5zaWduTWVzc2FnZShcbiAgICAgIGJlY2gzMkFkZHJlc3MsXG4gICAgICBzaWdUeXBlID09PSBCVENTaWdUeXBlLkJJUDMyMiA/ICdiaXAzMjItc2ltcGxlJyA6ICdlY2RzYSdcbiAgICApO1xuXG4gICAgbGV0IGJ0Y1NpZzogVWludDhBcnJheTtcbiAgICBpZiAoc2lnVHlwZSA9PT0gQlRDU2lnVHlwZS5CSVAzMjIpIHtcbiAgICAgIGNvbnN0IGJpcDMyMlNpZyA9IEJJUDMyMlNpZy5mcm9tUGFydGlhbCh7XG4gICAgICAgIGFkZHJlc3M6IHN0YWtlckJ0Y0FkZHJlc3MsXG4gICAgICAgIHNpZzogQnVmZmVyLmZyb20oc2lnbmVkQmFieWxvbkFkZHJlc3MsICdiYXNlNjQnKSxcbiAgICAgIH0pO1xuICAgICAgLy8gRW5jb2RlIHRoZSBCSVAzMjIgcHJvdG9idWYgbWVzc2FnZSB0byBhIFVpbnQ4QXJyYXlcbiAgICAgIGJ0Y1NpZyA9IEJJUDMyMlNpZy5lbmNvZGUoYmlwMzIyU2lnKS5maW5pc2goKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRW5jb2RlIHRoZSBFQ0RTQSBzaWduYXR1cmUgdG8gYSBVaW50OEFycmF5XG4gICAgICBidGNTaWcgPSBCdWZmZXIuZnJvbShzaWduZWRCYWJ5bG9uQWRkcmVzcywgJ2Jhc2U2NCcpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBidGNTaWdUeXBlOiBzaWdUeXBlLFxuICAgICAgYnRjU2lnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHByb29mIG9mIHBvc3Nlc3Npb24gZm9yIHRoZSBzdGFrZXIgYmFzZWQgb24gRUNEU0Egc2lnbmF0dXJlLlxuICAgKiBAcGFyYW0gY2hhbm5lbCAtIFRoZSBjaGFubmVsIGZvciB3aGljaCB0aGUgcHJvb2Ygb2YgcG9zc2Vzc2lvbiBpcyBjcmVhdGVkLlxuICAgKiBAcGFyYW0gYmVjaDMyQWRkcmVzcyAtIFRoZSBzdGFrZXIncyBiZWNoMzIgYWRkcmVzcyBvbiB0aGUgYmFieWxvbiBuZXR3b3JrLlxuICAgKiBAcGFyYW0gc3Rha2VyQnRjQWRkcmVzc1xuICAgKiBAcmV0dXJucyBUaGUgcHJvb2Ygb2YgcG9zc2Vzc2lvbi5cbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZVByb29mT2ZQb3NzZXNzaW9uKFxuICAgIGNoYW5uZWw6ICdkZWxlZ2F0aW9uOmNyZWF0ZScgfCAnZGVsZWdhdGlvbjpyZWdpc3RlcicsXG4gICAgYmVjaDMyQWRkcmVzczogc3RyaW5nLFxuICAgIHN0YWtlckJ0Y0FkZHJlc3M6IHN0cmluZ1xuICApOiBQcm9taXNlPFByb29mT2ZQb3NzZXNzaW9uQlRDPiB7XG4gICAgLy8gZm9yY2UgdGhlIEVDRFNBIHNpZ25hdHVyZSB0eXBlXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUHJvb2ZPZlBvc3Nlc3Npb25XaXRoU2lnVHlwZShiZWNoMzJBZGRyZXNzLCBzdGFrZXJCdGNBZGRyZXNzLCBCVENTaWdUeXBlLkVDRFNBKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbW9ja0JhYnlsb25Qcm92aWRlcjogdmVuZG9yLkJhYnlsb25Qcm92aWRlciA9IHtcbiAgc2lnblRyYW5zYWN0aW9uKCk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gbm90IGltcGxlbWVudGVkLicpO1xuICB9LFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0YWtpbmdNYW5hZ2VyKFxuICBuZXR3b3JrOiBiaXRjb2luanNsaWIuTmV0d29yayB8IHV0eG9saWIuTmV0d29yayxcbiAgYnRjUHJvdmlkZXI6IHZlbmRvci5CdGNQcm92aWRlcixcbiAgc3Rha2luZ1BhcmFtcz86IHZlbmRvci5WZXJzaW9uZWRTdGFraW5nUGFyYW1zW10sXG4gIGJhYnlsb25Qcm92aWRlciA9IG1vY2tCYWJ5bG9uUHJvdmlkZXJcbik6IHZlbmRvci5CYWJ5bG9uQnRjU3Rha2luZ01hbmFnZXIge1xuICBpZiAodXR4b2xpYi5pc1ZhbGlkTmV0d29yayhuZXR3b3JrKSkge1xuICAgIHN3aXRjaCAobmV0d29yaykge1xuICAgICAgY2FzZSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW46XG4gICAgICAgIG5ldHdvcmsgPSBiaXRjb2luanNsaWIubmV0d29ya3MuYml0Y29pbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHV0eG9saWIubmV0d29ya3MudGVzdG5ldDpcbiAgICAgIGNhc2UgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luVGVzdG5ldDQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYml0Y29pbiB0ZXN0bmV0IG5ldHdvcmsgLSBvbmx5IHNpZ25ldCBpcyBzdXBwb3J0ZWQnKTtcbiAgICAgIGNhc2UgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luUHVibGljU2lnbmV0OlxuICAgICAgICBuZXR3b3JrID0gYml0Y29pbmpzbGliLm5ldHdvcmtzLnRlc3RuZXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBuZXR3b3JrJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXcgQml0R29TdGFraW5nTWFuYWdlcihuZXR3b3JrLCBzdGFraW5nUGFyYW1zID8/IGdldFN0YWtpbmdQYXJhbXMobmV0d29yayksIGJ0Y1Byb3ZpZGVyLCBiYWJ5bG9uUHJvdmlkZXIpO1xufVxuIl19
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.testnetFinalityProvider0 = exports.testnetStakingParams = exports.mainnetStakingParams = exports.getBabylonParamByBtcHeight = exports.getBabylonParamByVersion = void 0;
|
|
40
|
-
exports.toVersionedParams = toVersionedParams;
|
|
41
|
-
exports.getStakingParams = getStakingParams;
|
|
42
|
-
exports.getDescriptorBuilderForParams = getDescriptorBuilderForParams;
|
|
43
|
-
exports.getDescriptorProviderForStakingParams = getDescriptorProviderForStakingParams;
|
|
44
|
-
exports.getTestnetDescriptorBuilder = getTestnetDescriptorBuilder;
|
|
45
|
-
const t = __importStar(require("io-ts"));
|
|
46
|
-
const tt = __importStar(require("io-ts-types"));
|
|
47
|
-
const Either_1 = require("fp-ts/Either");
|
|
48
|
-
const PathReporter_1 = require("io-ts/lib/PathReporter");
|
|
49
|
-
const babylonlabs_io_btc_staking_ts_1 = require("@bitgo-beta/babylonlabs-io-btc-staking-ts");
|
|
50
|
-
var babylonlabs_io_btc_staking_ts_2 = require("@bitgo-beta/babylonlabs-io-btc-staking-ts");
|
|
51
|
-
Object.defineProperty(exports, "getBabylonParamByVersion", { enumerable: true, get: function () { return babylonlabs_io_btc_staking_ts_2.getBabylonParamByVersion; } });
|
|
52
|
-
Object.defineProperty(exports, "getBabylonParamByBtcHeight", { enumerable: true, get: function () { return babylonlabs_io_btc_staking_ts_2.getBabylonParamByBtcHeight; } });
|
|
53
|
-
const descriptor_1 = require("./descriptor");
|
|
54
|
-
const params_mainnet_json_1 = __importDefault(require("./params.mainnet.json"));
|
|
55
|
-
const params_testnet_json_1 = __importDefault(require("./params.testnet.json"));
|
|
56
|
-
const network_1 = require("./network");
|
|
57
|
-
/** @see https://docs.babylonlabs.io/api/babylon-gRPC/params/ */
|
|
58
|
-
const BabylonParamsJSON = t.type({
|
|
59
|
-
covenant_pks: t.array(t.string),
|
|
60
|
-
covenant_quorum: t.number,
|
|
61
|
-
min_staking_value_sat: tt.NumberFromString,
|
|
62
|
-
max_staking_value_sat: tt.NumberFromString,
|
|
63
|
-
min_staking_time_blocks: t.number,
|
|
64
|
-
max_staking_time_blocks: t.number,
|
|
65
|
-
slashing_pk_script: t.string,
|
|
66
|
-
min_slashing_tx_fee_sat: tt.NumberFromString,
|
|
67
|
-
slashing_rate: t.string,
|
|
68
|
-
unbonding_time_blocks: t.number,
|
|
69
|
-
unbonding_fee_sat: tt.NumberFromString,
|
|
70
|
-
min_commission_rate: tt.NumberFromString,
|
|
71
|
-
delegation_creation_base_gas_fee: tt.NumberFromString,
|
|
72
|
-
allow_list_expiration_height: tt.NumberFromString,
|
|
73
|
-
btc_activation_height: t.number,
|
|
74
|
-
});
|
|
75
|
-
function toVersionedParams(ps) {
|
|
76
|
-
return ps.map((p, version) => ({
|
|
77
|
-
version,
|
|
78
|
-
btcActivationHeight: p.btc_activation_height,
|
|
79
|
-
covenantNoCoordPks: p.covenant_pks,
|
|
80
|
-
covenantQuorum: p.covenant_quorum,
|
|
81
|
-
unbondingTime: p.unbonding_time_blocks,
|
|
82
|
-
unbondingFeeSat: p.unbonding_fee_sat,
|
|
83
|
-
maxStakingAmountSat: p.max_staking_value_sat,
|
|
84
|
-
minStakingAmountSat: p.min_staking_value_sat,
|
|
85
|
-
maxStakingTimeBlocks: p.max_staking_time_blocks,
|
|
86
|
-
minStakingTimeBlocks: p.min_staking_time_blocks,
|
|
87
|
-
slashing: {
|
|
88
|
-
slashingPkScriptHex: Buffer.from(p.slashing_pk_script, 'base64').toString('hex'),
|
|
89
|
-
slashingRate: parseFloat(p.slashing_rate),
|
|
90
|
-
minSlashingTxFeeSat: p.min_slashing_tx_fee_sat,
|
|
91
|
-
},
|
|
92
|
-
}));
|
|
93
|
-
}
|
|
94
|
-
function toVersionedParamsFromJson(jsonParams) {
|
|
95
|
-
return toVersionedParams(jsonParams.map((p) => {
|
|
96
|
-
const result = t.type({ params: BabylonParamsJSON }).decode(p);
|
|
97
|
-
if ((0, Either_1.isLeft)(result)) {
|
|
98
|
-
const msg = PathReporter_1.PathReporter.report(result).join('\n');
|
|
99
|
-
throw new Error(`Invalid params: ${msg}`);
|
|
100
|
-
}
|
|
101
|
-
return result.right.params;
|
|
102
|
-
}));
|
|
103
|
-
}
|
|
104
|
-
exports.mainnetStakingParams = Object.freeze(toVersionedParamsFromJson(params_mainnet_json_1.default));
|
|
105
|
-
exports.testnetStakingParams = Object.freeze(toVersionedParamsFromJson(params_testnet_json_1.default));
|
|
106
|
-
function getStakingParams(network) {
|
|
107
|
-
switch ((0, network_1.toBabylonNetwork)(network)) {
|
|
108
|
-
case 'mainnet':
|
|
109
|
-
return [...exports.mainnetStakingParams];
|
|
110
|
-
case 'testnet':
|
|
111
|
-
return [...exports.testnetStakingParams];
|
|
112
|
-
default:
|
|
113
|
-
throw new Error('Unsupported network');
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
// Source: https://btcstaking.testnet.babylonlabs.io/ "Babylon Foundation 0"
|
|
117
|
-
exports.testnetFinalityProvider0 = Buffer.from('d23c2c25e1fcf8fd1c21b9a402c19e2e309e531e45e92fb1e9805b6056b0cc76', 'hex');
|
|
118
|
-
function getDescriptorBuilderForParams(userKey, finalityProviderKeys, stakingTimelock, params) {
|
|
119
|
-
if (!Buffer.isBuffer(userKey)) {
|
|
120
|
-
userKey = userKey.publicKey;
|
|
121
|
-
}
|
|
122
|
-
return new descriptor_1.BabylonDescriptorBuilder(userKey, finalityProviderKeys, params.covenantNoCoordPks.map((pk) => Buffer.from(pk, 'hex')), params.covenantQuorum, stakingTimelock, params.unbondingTime);
|
|
123
|
-
}
|
|
124
|
-
function getDescriptorProviderForStakingParams(stakerBtcInfo, stakingInput, stakingParams) {
|
|
125
|
-
const userKey = Buffer.from(stakerBtcInfo.publicKeyNoCoordHex, 'hex');
|
|
126
|
-
const finalityProviderKeys = stakingInput.finalityProviderPksNoCoordHex.map((pk) => Buffer.from(pk, 'hex'));
|
|
127
|
-
return getDescriptorBuilderForParams(userKey, finalityProviderKeys, stakingInput.stakingTimelock, stakingParams);
|
|
128
|
-
}
|
|
129
|
-
function getTestnetDescriptorBuilder(userKey, { finalityProviderKeys = [exports.testnetFinalityProvider0], params = (0, babylonlabs_io_btc_staking_ts_1.getBabylonParamByVersion)(5, getStakingParams('testnet')), stakingTimelock = params.minStakingTimeBlocks, } = {}) {
|
|
130
|
-
return getDescriptorBuilderForParams(userKey, finalityProviderKeys, stakingTimelock, params);
|
|
131
|
-
}
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ1BhcmFtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWJ5bG9uL3N0YWtpbmdQYXJhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0NBLDhDQWtCQztBQXVCRCw0Q0FTQztBQWFELHNFQWlCQztBQUVELHNGQVFDO0FBRUQsa0VBYUM7QUFqSkQseUNBQTJCO0FBQzNCLGdEQUFrQztBQUNsQyx5Q0FBc0M7QUFDdEMseURBQXNEO0FBRXRELDZGQU1tRDtBQUNuRCwyRkFBaUg7QUFBeEcseUlBQUEsd0JBQXdCLE9BQUE7QUFBRSwySUFBQSwwQkFBMEIsT0FBQTtBQUU3RCw2Q0FBd0Q7QUFDeEQsZ0ZBQXNEO0FBQ3RELGdGQUFzRDtBQUN0RCx1Q0FBaUU7QUFFakUsZ0VBQWdFO0FBQ2hFLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMvQixZQUFZLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQy9CLGVBQWUsRUFBRSxDQUFDLENBQUMsTUFBTTtJQUN6QixxQkFBcUIsRUFBRSxFQUFFLENBQUMsZ0JBQWdCO0lBQzFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQyxnQkFBZ0I7SUFDMUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDakMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDakMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDNUIsdUJBQXVCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQjtJQUM1QyxhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDdkIscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDL0IsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQjtJQUN0QyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsZ0JBQWdCO0lBQ3hDLGdDQUFnQyxF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QyxDQUFDO0FBQy9GLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCAqIGFzIHR0IGZyb20gJ2lvLXRzLXR5cGVzJztcbmltcG9ydCB7IGlzTGVmdCB9IGZyb20gJ2ZwLXRzL0VpdGhlcic7XG5pbXBvcnQgeyBQYXRoUmVwb3J0ZXIgfSBmcm9tICdpby10cy9saWIvUGF0aFJlcG9ydGVyJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHtcbiAgZ2V0QmFieWxvblBhcmFtQnlWZXJzaW9uLFxuICBTdGFrZXJJbmZvLFxuICBTdGFraW5nSW5wdXRzLFxuICBTdGFraW5nUGFyYW1zLFxuICBWZXJzaW9uZWRTdGFraW5nUGFyYW1zLFxufSBmcm9tICdAYml0Z28tYmV0YS9iYWJ5bG9ubGFicy1pby1idGMtc3Rha2luZy10cyc7XG5leHBvcnQgeyBnZXRCYWJ5bG9uUGFyYW1CeVZlcnNpb24sIGdldEJhYnlsb25QYXJhbUJ5QnRjSGVpZ2h0IH0gZnJvbSAnQGJpdGdvLWJldGEvYmFieWxvbmxhYnMtaW8tYnRjLXN0YWtpbmctdHMnO1xuXG5pbXBvcnQgeyBCYWJ5bG9uRGVzY3JpcHRvckJ1aWxkZXIgfSBmcm9tICcuL2Rlc2NyaXB0b3InO1xuaW1wb3J0IGpzb25NYWlubmV0UGFyYW1zIGZyb20gJy4vcGFyYW1zLm1haW5uZXQuanNvbic7XG5pbXBvcnQganNvblRlc3RuZXRQYXJhbXMgZnJvbSAnLi9wYXJhbXMudGVzdG5ldC5qc29uJztcbmltcG9ydCB7IEJhYnlsb25OZXR3b3JrTGlrZSwgdG9CYWJ5bG9uTmV0d29yayB9IGZyb20gJy4vbmV0d29yayc7XG5cbi8qKiBAc2VlIGh0dHBzOi8vZG9jcy5iYWJ5bG9ubGFicy5pby9hcGkvYmFieWxvbi1nUlBDL3BhcmFtcy8gKi9cbmNvbnN0IEJhYnlsb25QYXJhbXNKU09OID0gdC50eXBlKHtcbiAgY292ZW5hbnRfcGtzOiB0LmFycmF5KHQuc3RyaW5nKSxcbiAgY292ZW5hbnRfcXVvcnVtOiB0Lm51bWJlcixcbiAgbWluX3N0YWtpbmdfdmFsdWVfc2F0OiB0dC5OdW1iZXJGcm9tU3RyaW5nLFxuICBtYXhfc3Rha2luZ192YWx1ZV9zYXQ6IHR0Lk51bWJlckZyb21TdHJpbmcsXG4gIG1pbl9zdGFraW5nX3RpbWVfYmxvY2tzOiB0Lm51bWJlcixcbiAgbWF4X3N0YWtpbmdfdGltZV9ibG9ja3M6IHQubnVtYmVyLFxuICBzbGFzaGluZ19wa19zY3JpcHQ6IHQuc3RyaW5nLFxuICBtaW5fc2xhc2hpbmdfdHhfZmVlX3NhdDogdHQuTnVtYmVyRnJvbVN0cmluZyxcbiAgc2xhc2hpbmdfcmF0ZTogdC5zdHJpbmcsXG4gIHVuYm9uZGluZ190aW1lX2Jsb2NrczogdC5udW1iZXIsXG4gIHVuYm9uZGluZ19mZWVfc2F0OiB0dC5OdW1iZXJGcm9tU3RyaW5nLFxuICBtaW5fY29tbWlzc2lvbl9yYXRlOiB0dC5OdW1iZXJGcm9tU3RyaW5nLFxuICBkZWxlZ2F0aW9uX2NyZWF0aW9uX2Jhc2VfZ2FzX2ZlZTogdHQuTnVtYmVyRnJvbVN0cmluZyxcbiAgYWxsb3dfbGlzdF9leHBpcmF0aW9uX2hlaWdodDogdHQuTnVtYmVyRnJvbVN0cmluZyxcbiAgYnRjX2FjdGl2YXRpb25faGVpZ2h0OiB0Lm51bWJlcixcbn0pO1xuXG50eXBlIEJhYnlsb25QYXJhbXNKU09OID0gdC5UeXBlT2Y8dHlwZW9mIEJhYnlsb25QYXJhbXNKU09OPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRvVmVyc2lvbmVkUGFyYW1zKHBzOiBCYWJ5bG9uUGFyYW1zSlNPTltdKTogVmVyc2lvbmVkU3Rha2luZ1BhcmFtc1tdIHtcbiAgcmV0dXJuIHBzLm1hcCgocCwgdmVyc2lvbikgPT4gKHtcbiAgICB2ZXJzaW9uLFxuICAgIGJ0Y0FjdGl2YXRpb25IZWlnaHQ6IHAuYnRjX2FjdGl2YXRpb25faGVpZ2h0LFxuICAgIGNvdmVuYW50Tm9Db29yZFBrczogcC5jb3ZlbmFudF9wa3MsXG4gICAgY292ZW5hbnRRdW9ydW06IHAuY292ZW5hbnRfcXVvcnVtLFxuICAgIHVuYm9uZGluZ1RpbWU6IHAudW5ib25kaW5nX3RpbWVfYmxvY2tzLFxuICAgIHVuYm9uZGluZ0ZlZVNhdDogcC51bmJvbmRpbmdfZmVlX3NhdCxcbiAgICBtYXhTdGFraW5nQW1vdW50U2F0OiBwLm1heF9zdGFraW5nX3ZhbHVlX3NhdCxcbiAgICBtaW5TdGFraW5nQW1vdW50U2F0OiBwLm1pbl9zdGFraW5nX3ZhbHVlX3NhdCxcbiAgICBtYXhTdGFraW5nVGltZUJsb2NrczogcC5tYXhfc3Rha2luZ190aW1lX2Jsb2NrcyxcbiAgICBtaW5TdGFraW5nVGltZUJsb2NrczogcC5taW5fc3Rha2luZ190aW1lX2Jsb2NrcyxcbiAgICBzbGFzaGluZzoge1xuICAgICAgc2xhc2hpbmdQa1NjcmlwdEhleDogQnVmZmVyLmZyb20ocC5zbGFzaGluZ19wa19zY3JpcHQsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICBzbGFzaGluZ1JhdGU6IHBhcnNlRmxvYXQocC5zbGFzaGluZ19yYXRlKSxcbiAgICAgIG1pblNsYXNoaW5nVHhGZWVTYXQ6IHAubWluX3NsYXNoaW5nX3R4X2ZlZV9zYXQsXG4gICAgfSxcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiB0b1ZlcnNpb25lZFBhcmFtc0Zyb21Kc29uKGpzb25QYXJhbXM6IHVua25vd25bXSk6IFZlcnNpb25lZFN0YWtpbmdQYXJhbXNbXSB7XG4gIHJldHVybiB0b1ZlcnNpb25lZFBhcmFtcyhcbiAgICBqc29uUGFyYW1zLm1hcCgocCk6IEJhYnlsb25QYXJhbXNKU09OID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHQudHlwZSh7IHBhcmFtczogQmFieWxvblBhcmFtc0pTT04gfSkuZGVjb2RlKHApO1xuICAgICAgaWYgKGlzTGVmdChyZXN1bHQpKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IFBhdGhSZXBvcnRlci5yZXBvcnQocmVzdWx0KS5qb2luKCdcXG4nKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtczogJHttc2d9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0LnJpZ2h0LnBhcmFtcztcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgY29uc3QgbWFpbm5ldFN0YWtpbmdQYXJhbXM6IHJlYWRvbmx5IFZlcnNpb25lZFN0YWtpbmdQYXJhbXNbXSA9IE9iamVjdC5mcmVlemUoXG4gIHRvVmVyc2lvbmVkUGFyYW1zRnJvbUpzb24oanNvbk1haW5uZXRQYXJhbXMpXG4pO1xuXG5leHBvcnQgY29uc3QgdGVzdG5ldFN0YWtpbmdQYXJhbXM6IHJlYWRvbmx5IFZlcnNpb25lZFN0YWtpbmdQYXJhbXNbXSA9IE9iamVjdC5mcmVlemUoXG4gIHRvVmVyc2lvbmVkUGFyYW1zRnJvbUpzb24oanNvblRlc3RuZXRQYXJhbXMpXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3Rha2luZ1BhcmFtcyhuZXR3b3JrOiBCYWJ5bG9uTmV0d29ya0xpa2UpOiBWZXJzaW9uZWRTdGFraW5nUGFyYW1zW10ge1xuICBzd2l0Y2ggKHRvQmFieWxvbk5ldHdvcmsobmV0d29yaykpIHtcbiAgICBjYXNlICdtYWlubmV0JzpcbiAgICAgIHJldHVybiBbLi4ubWFpbm5ldFN0YWtpbmdQYXJhbXNdO1xuICAgIGNhc2UgJ3Rlc3RuZXQnOlxuICAgICAgcmV0dXJuIFsuLi50ZXN0bmV0U3Rha2luZ1BhcmFtc107XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgbmV0d29yaycpO1xuICB9XG59XG5cbi8vIFNvdXJjZTogaHR0cHM6Ly9idGNzdGFraW5nLnRlc3RuZXQuYmFieWxvbmxhYnMuaW8vIFwiQmFieWxvbiBGb3VuZGF0aW9uIDBcIlxuZXhwb3J0IGNvbnN0IHRlc3RuZXRGaW5hbGl0eVByb3ZpZGVyMCA9IEJ1ZmZlci5mcm9tKFxuICAnZDIzYzJjMjVlMWZjZjhmZDFjMjFiOWE0MDJjMTllMmUzMDllNTMxZTQ1ZTkyZmIxZTk4MDViNjA1NmIwY2M3NicsXG4gICdoZXgnXG4pO1xuXG50eXBlIERlc2NyaXB0b3JTdGFraW5nUGFyYW1zID0gUGljazxcbiAgU3Rha2luZ1BhcmFtcyxcbiAgJ2NvdmVuYW50Tm9Db29yZFBrcycgfCAnY292ZW5hbnRRdW9ydW0nIHwgJ21pblN0YWtpbmdUaW1lQmxvY2tzJyB8ICd1bmJvbmRpbmdUaW1lJ1xuPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlc2NyaXB0b3JCdWlsZGVyRm9yUGFyYW1zKFxuICB1c2VyS2V5OiB1dHhvbGliLkJJUDMySW50ZXJmYWNlIHwgdXR4b2xpYi5FQ1BhaXJJbnRlcmZhY2UgfCBCdWZmZXIsXG4gIGZpbmFsaXR5UHJvdmlkZXJLZXlzOiBCdWZmZXJbXSxcbiAgc3Rha2luZ1RpbWVsb2NrOiBudW1iZXIsXG4gIHBhcmFtczogRGVzY3JpcHRvclN0YWtpbmdQYXJhbXNcbik6IEJhYnlsb25EZXNjcmlwdG9yQnVpbGRlciB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHVzZXJLZXkpKSB7XG4gICAgdXNlcktleSA9IHVzZXJLZXkucHVibGljS2V5O1xuICB9XG4gIHJldHVybiBuZXcgQmFieWxvbkRlc2NyaXB0b3JCdWlsZGVyKFxuICAgIHVzZXJLZXksXG4gICAgZmluYWxpdHlQcm92aWRlcktleXMsXG4gICAgcGFyYW1zLmNvdmVuYW50Tm9Db29yZFBrcy5tYXAoKHBrKSA9PiBCdWZmZXIuZnJvbShwaywgJ2hleCcpKSxcbiAgICBwYXJhbXMuY292ZW5hbnRRdW9ydW0sXG4gICAgc3Rha2luZ1RpbWVsb2NrLFxuICAgIHBhcmFtcy51bmJvbmRpbmdUaW1lXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXNjcmlwdG9yUHJvdmlkZXJGb3JTdGFraW5nUGFyYW1zKFxuICBzdGFrZXJCdGNJbmZvOiBQaWNrPFN0YWtlckluZm8sICdwdWJsaWNLZXlOb0Nvb3JkSGV4Jz4sXG4gIHN0YWtpbmdJbnB1dDogU3Rha2luZ0lucHV0cyxcbiAgc3Rha2luZ1BhcmFtczogRGVzY3JpcHRvclN0YWtpbmdQYXJhbXNcbik6IEJhYnlsb25EZXNjcmlwdG9yQnVpbGRlciB7XG4gIGNvbnN0IHVzZXJLZXkgPSBCdWZmZXIuZnJvbShzdGFrZXJCdGNJbmZvLnB1YmxpY0tleU5vQ29vcmRIZXgsICdoZXgnKTtcbiAgY29uc3QgZmluYWxpdHlQcm92aWRlcktleXMgPSBzdGFraW5nSW5wdXQuZmluYWxpdHlQcm92aWRlclBrc05vQ29vcmRIZXgubWFwKChwaykgPT4gQnVmZmVyLmZyb20ocGssICdoZXgnKSk7XG4gIHJldHVybiBnZXREZXNjcmlwdG9yQnVpbGRlckZvclBhcmFtcyh1c2VyS2V5LCBmaW5hbGl0eVByb3ZpZGVyS2V5cywgc3Rha2luZ0lucHV0LnN0YWtpbmdUaW1lbG9jaywgc3Rha2luZ1BhcmFtcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXN0bmV0RGVzY3JpcHRvckJ1aWxkZXIoXG4gIHVzZXJLZXk6IHV0eG9saWIuQklQMzJJbnRlcmZhY2UgfCB1dHhvbGliLkVDUGFpckludGVyZmFjZSB8IEJ1ZmZlcixcbiAge1xuICAgIGZpbmFsaXR5UHJvdmlkZXJLZXlzID0gW3Rlc3RuZXRGaW5hbGl0eVByb3ZpZGVyMF0sXG4gICAgcGFyYW1zID0gZ2V0QmFieWxvblBhcmFtQnlWZXJzaW9uKDUsIGdldFN0YWtpbmdQYXJhbXMoJ3Rlc3RuZXQnKSksXG4gICAgc3Rha2luZ1RpbWVsb2NrID0gcGFyYW1zLm1pblN0YWtpbmdUaW1lQmxvY2tzLFxuICB9OiB7XG4gICAgZmluYWxpdHlQcm92aWRlcktleXM/OiBCdWZmZXJbXTtcbiAgICBwYXJhbXM/OiBTdGFraW5nUGFyYW1zO1xuICAgIHN0YWtpbmdUaW1lbG9jaz86IG51bWJlcjtcbiAgfSA9IHt9XG4pOiBCYWJ5bG9uRGVzY3JpcHRvckJ1aWxkZXIge1xuICByZXR1cm4gZ2V0RGVzY3JpcHRvckJ1aWxkZXJGb3JQYXJhbXModXNlcktleSwgZmluYWxpdHlQcm92aWRlcktleXMsIHN0YWtpbmdUaW1lbG9jaywgcGFyYW1zKTtcbn1cbiJdfQ==
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.assertValidSignatures = assertValidSignatures;
|
|
40
|
-
exports.toUnbondingPsbt = toUnbondingPsbt;
|
|
41
|
-
exports.toUnbondingPsbtWithSignatures = toUnbondingPsbtWithSignatures;
|
|
42
|
-
const assert_1 = __importDefault(require("assert"));
|
|
43
|
-
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
44
|
-
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
45
|
-
const descriptor_1 = require("@bitgo-beta/utxo-core/descriptor");
|
|
46
|
-
const parseDescriptor_1 = require("../parseDescriptor");
|
|
47
|
-
/**
|
|
48
|
-
* Adds covenant signatures to a PSBT input.
|
|
49
|
-
*/
|
|
50
|
-
function addCovenantSignatures(psbt, inputIndex, signatures) {
|
|
51
|
-
const input = psbt.data.inputs[inputIndex];
|
|
52
|
-
(0, assert_1.default)(input.tapLeafScript, 'Input must have tapLeafScript');
|
|
53
|
-
(0, assert_1.default)(input.tapLeafScript.length === 1, 'Input must have exactly one tapLeafScript');
|
|
54
|
-
const [{ controlBlock, script }] = input.tapLeafScript;
|
|
55
|
-
const leafHash = utxolib.taproot.getTapleafHash(utxolib.ecc, controlBlock, script);
|
|
56
|
-
psbt.updateInput(inputIndex, { tapScriptSig: signatures.map((s) => ({ ...s, leafHash })) });
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Asserts that the provided signatures are valid for the given PSBT input.
|
|
60
|
-
*/
|
|
61
|
-
function assertValidSignatures(psbt, inputIndex, signatures) {
|
|
62
|
-
signatures.forEach((s) => {
|
|
63
|
-
(0, assert_1.default)(psbt.validateTaprootSignaturesOfInput(inputIndex, s.pubkey), `Signature validation failed for ${s.pubkey.toString('hex')}`);
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
function getUnbondingScript(stakingDescriptor) {
|
|
67
|
-
const parsedDescriptor = (0, parseDescriptor_1.parseStakingDescriptor)(stakingDescriptor);
|
|
68
|
-
(0, assert_1.default)(parsedDescriptor, 'Invalid staking descriptor');
|
|
69
|
-
return wasm_utxo_1.Miniscript.fromString(wasm_utxo_1.ast.formatNode(parsedDescriptor.unbondingMiniscriptNode), 'tap');
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* @return unsigned PSBT for an unbonding transaction
|
|
73
|
-
*/
|
|
74
|
-
function toUnbondingPsbt(tx, witnessUtxo, stakingDescriptor, network) {
|
|
75
|
-
const unbondingScript = getUnbondingScript(stakingDescriptor);
|
|
76
|
-
const psbt = new utxolib.Psbt({ network });
|
|
77
|
-
psbt.setVersion(tx.version);
|
|
78
|
-
psbt.setLocktime(tx.locktime);
|
|
79
|
-
psbt.addOutputs(tx.outs.map((output) => ({
|
|
80
|
-
script: output.script,
|
|
81
|
-
value: BigInt(output.value),
|
|
82
|
-
})));
|
|
83
|
-
(0, assert_1.default)(tx.ins.length === 1);
|
|
84
|
-
const input = tx.ins[0];
|
|
85
|
-
psbt.addInput({
|
|
86
|
-
hash: input.hash,
|
|
87
|
-
index: input.index,
|
|
88
|
-
sequence: input.sequence,
|
|
89
|
-
witnessUtxo,
|
|
90
|
-
});
|
|
91
|
-
const wrappedPsbt = (0, descriptor_1.toWrappedPsbt)(psbt);
|
|
92
|
-
wrappedPsbt.updateInputWithDescriptor(0, stakingDescriptor);
|
|
93
|
-
const unwrapped = (0, descriptor_1.toUtxoPsbt)(wrappedPsbt, network);
|
|
94
|
-
(0, assert_1.default)(unwrapped.data.inputs.length === 1, 'Unbonding transaction must have exactly one input');
|
|
95
|
-
const unwrappedInputData = unwrapped.data.inputs[0];
|
|
96
|
-
(0, assert_1.default)(unwrappedInputData.tapLeafScript);
|
|
97
|
-
const unwrappedUnbond = (0, descriptor_1.findTapLeafScript)(unwrappedInputData.tapLeafScript, unbondingScript);
|
|
98
|
-
unwrappedInputData.tapLeafScript = [unwrappedUnbond];
|
|
99
|
-
return unwrapped;
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* @return PSBT for an unbonding transaction with signatures
|
|
103
|
-
*/
|
|
104
|
-
function toUnbondingPsbtWithSignatures(tx, witnessUtxo, stakingDescriptor, signatures, network) {
|
|
105
|
-
const psbt = toUnbondingPsbt(tx, witnessUtxo, stakingDescriptor, network);
|
|
106
|
-
(0, assert_1.default)(psbt.data.inputs.length === 1, 'Unbonding transaction must have exactly one input');
|
|
107
|
-
addCovenantSignatures(psbt, 0, signatures);
|
|
108
|
-
assertValidSignatures(psbt, 0, signatures);
|
|
109
|
-
return psbt;
|
|
110
|
-
}
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5ib25kaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JhYnlsb24vdW5kZWxlZ2F0aW9uL3VuYm9uZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQSxzREFXQztBQVdELDBDQWlDQztBQUtELHNFQVlDO0FBaEdELG9EQUE0QjtBQUU1Qiw4REFBZ0Q7QUFFaEQsZ0RBQStEO0FBQy9ELGlFQUFnRztBQUVoRyx3REFBNEQ7QUFFNUQ7O0dBRUc7QUFDSCxTQUFTLHFCQUFxQixDQUFDLElBQTRCLEVBQUUsVUFBa0IsRUFBRSxVQUF3QjtJQUN2RyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQyxJQUFBLGdCQUFNLEVBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO0lBQzdELElBQUEsZ0JBQU0sRUFBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsMkNBQTJDLENBQUMsQ0FBQztJQUN0RixNQUFNLENBQUMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25GLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlGLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHFC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Q0gsU0FBZ0IsNkJBQTZCLENBQzNDLEVBQXlDLEVBQ3pDLFdBQXdCLEVBQ3hCLGlCQUE2QixFQUM3QixVQUF3QixFQUN4QixPQUF3QjtJQUV4QixNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxRSxJQUFBLGdCQUFNLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxtREFBbUQsQ0FBQyxDQUFDO0lBQzNGLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDM0MscUJBQXFCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMzQyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgUGFydGlhbFNpZywgV2l0bmVzc1V0eG8gfSBmcm9tICdiaXAxNzQvc3JjL2xpYi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERlc2NyaXB0b3IsIE1pbmlzY3JpcHQsIGFzdCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IHsgZmluZFRhcExlYWZTY3JpcHQsIHRvVXR4b1BzYnQsIHRvV3JhcHBlZFBzYnQgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWNvcmUvZGVzY3JpcHRvcic7XG5cbmltcG9ydCB7IHBhcnNlU3Rha2luZ0Rlc2NyaXB0b3IgfSBmcm9tICcuLi9wYXJzZURlc2NyaXB0b3InO1xuXG4vKipcbiAqIEFkZHMgY292ZW5hbnQgc2lnbmF0dXJlcyB0byBhIFBTQlQgaW5wdXQuXG4gKi9cbmZ1bmN0aW9uIGFkZENvdmVuYW50U2lnbmF0dXJlcyhwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LCBpbnB1dEluZGV4OiBudW1iZXIsIHNpZ25hdHVyZXM6IFBhcnRpYWxTaWdbXSk6IHZvaWQge1xuICBjb25zdCBpbnB1dCA9IHBzYnQuZGF0YS5pbnB1dHNbaW5wdXRJbmRleF07XG4gIGFzc2VydChpbnB1dC50YXBMZWFmU2NyaXB0LCAnSW5wdXQgbXVzdCBoYXZlIHRhcExlYWZTY3JpcHQnKTtcbiAgYXNzZXJ0KGlucHV0LnRhcExlYWZTY3JpcHQubGVuZ3RoID09PSAxLCAnSW5wdXQgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHRhcExlYWZTY3JpcHQnKTtcbiAgY29uc3QgW3sgY29udHJvbEJsb2NrLCBzY3JpcHQgfV0gPSBpbnB1dC50YXBMZWFmU2NyaXB0O1xuICBjb25zdCBsZWFmSGFzaCA9IHV0eG9saWIudGFwcm9vdC5nZXRUYXBsZWFmSGFzaCh1dHhvbGliLmVjYywgY29udHJvbEJsb2NrLCBzY3JpcHQpO1xuICBwc2J0LnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHsgdGFwU2NyaXB0U2lnOiBzaWduYXR1cmVzLm1hcCgocykgPT4gKHsgLi4ucywgbGVhZkhhc2ggfSkpIH0pO1xufVxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgcHJvdmlkZWQgc2lnbmF0dXJlcyBhcmUgdmFsaWQgZm9yIHRoZSBnaXZlbiBQU0JUIGlucHV0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VmFsaWRTaWduYXR1cmVzKFxuICBwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIHNpZ25hdHVyZXM6IFBhcnRpYWxTaWdbXVxuKTogdm9pZCB7XG4gIHNpZ25hdHVyZXMuZm9yRWFjaCgocykgPT4ge1xuICAgIGFzc2VydChcbiAgICAgIHBzYnQudmFsaWRhdGVUYXByb290U2lnbmF0dXJlc09mSW5wdXQoaW5wdXRJbmRleCwgcy5wdWJrZXkpLFxuICAgICAgYFNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgJHtzLnB1YmtleS50b1N0cmluZygnaGV4Jyl9YFxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRVbmJvbmRpbmdTY3JpcHQoc3Rha2luZ0Rlc2NyaXB0b3I6IERlc2NyaXB0b3IpOiBNaW5pc2NyaXB0IHtcbiAgY29uc3QgcGFyc2VkRGVzY3JpcHRvciA9IHBhcnNlU3Rha2luZ0Rlc2NyaXB0b3Ioc3Rha2luZ0Rlc2NyaXB0b3IpO1xuICBhc3NlcnQocGFyc2VkRGVzY3JpcHRvciwgJ0ludmFsaWQgc3Rha2luZyBkZXNjcmlwdG9yJyk7XG4gIHJldHVybiBNaW5pc2NyaXB0LmZyb21TdHJpbmcoYXN0LmZvcm1hdE5vZGUocGFyc2VkRGVzY3JpcHRvci51bmJvbmRpbmdNaW5pc2NyaXB0Tm9kZSksICd0YXAnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHVuc2lnbmVkIFBTQlQgZm9yIGFuIHVuYm9uZGluZyB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9VbmJvbmRpbmdQc2J0KFxuICB0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50PixcbiAgd2l0bmVzc1V0eG86IFdpdG5lc3NVdHhvLFxuICBzdGFraW5nRGVzY3JpcHRvcjogRGVzY3JpcHRvcixcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHtcbiAgY29uc3QgdW5ib25kaW5nU2NyaXB0ID0gZ2V0VW5ib25kaW5nU2NyaXB0KHN0YWtpbmdEZXNjcmlwdG9yKTtcbiAgY29uc3QgcHNidCA9IG5ldyB1dHhvbGliLlBzYnQoeyBuZXR3b3JrIH0pO1xuICBwc2J0LnNldFZlcnNpb24odHgudmVyc2lvbik7XG4gIHBzYnQuc2V0TG9ja3RpbWUodHgubG9ja3RpbWUpO1xuICBwc2J0LmFkZE91dHB1dHMoXG4gICAgdHgub3V0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgIHNjcmlwdDogb3V0cHV0LnNjcmlwdCxcbiAgICAgIHZhbHVlOiBCaWdJbnQob3V0cHV0LnZhbHVlKSxcbiAgICB9KSlcbiAgKTtcbiAgYXNzZXJ0KHR4Lmlucy5sZW5ndGggPT09IDEpO1xuICBjb25zdCBpbnB1dCA9IHR4Lmluc1swXTtcbiAgcHNidC5hZGRJbnB1dCh7XG4gICAgaGFzaDogaW5wdXQuaGFzaCxcbiAgICBpbmRleDogaW5wdXQuaW5kZXgsXG4gICAgc2VxdWVuY2U6IGlucHV0LnNlcXVlbmNlLFxuICAgIHdpdG5lc3NVdHhvLFxuICB9KTtcbiAgY29uc3Qgd3JhcHBlZFBzYnQgPSB0b1dyYXBwZWRQc2J0KHBzYnQpO1xuICB3cmFwcGVkUHNidC51cGRhdGVJbnB1dFdpdGhEZXNjcmlwdG9yKDAsIHN0YWtpbmdEZXNjcmlwdG9yKTtcbiAgY29uc3QgdW53cmFwcGVkID0gdG9VdHhvUHNidCh3cmFwcGVkUHNidCwgbmV0d29yayk7XG4gIGFzc2VydCh1bndyYXBwZWQuZGF0YS5pbnB1dHMubGVuZ3RoID09PSAxLCAnVW5ib25kaW5nIHRyYW5zYWN0aW9uIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBpbnB1dCcpO1xuICBjb25zdCB1bndyYXBwZWRJbnB1dERhdGEgPSB1bndyYXBwZWQuZGF0YS5pbnB1dHNbMF07XG4gIGFzc2VydCh1bndyYXBwZWRJbnB1dERhdGEudGFwTGVhZlNjcmlwdCk7XG4gIGNvbnN0IHVud3JhcHBlZFVuYm9uZCA9IGZpbmRUYXBMZWFmU2NyaXB0KHVud3JhcHBlZElucHV0RGF0YS50YXBMZWFmU2NyaXB0LCB1bmJvbmRpbmdTY3JpcHQpO1xuICB1bndyYXBwZWRJbnB1dERhdGEudGFwTGVhZlNjcmlwdCA9IFt1bndyYXBwZWRVbmJvbmRdO1xuICByZXR1cm4gdW53cmFwcGVkO1xufVxuXG4vKipcbiAqIEByZXR1cm4gUFNCVCBmb3IgYW4gdW5ib25kaW5nIHRyYW5zYWN0aW9uIHdpdGggc2lnbmF0dXJlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9VbmJvbmRpbmdQc2J0V2l0aFNpZ25hdHVyZXMoXG4gIHR4OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+LFxuICB3aXRuZXNzVXR4bzogV2l0bmVzc1V0eG8sXG4gIHN0YWtpbmdEZXNjcmlwdG9yOiBEZXNjcmlwdG9yLFxuICBzaWduYXR1cmVzOiBQYXJ0aWFsU2lnW10sXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB7XG4gIGNvbnN0IHBzYnQgPSB0b1VuYm9uZGluZ1BzYnQodHgsIHdpdG5lc3NVdHhvLCBzdGFraW5nRGVzY3JpcHRvciwgbmV0d29yayk7XG4gIGFzc2VydChwc2J0LmRhdGEuaW5wdXRzLmxlbmd0aCA9PT0gMSwgJ1VuYm9uZGluZyB0cmFuc2FjdGlvbiBtdXN0IGhhdmUgZXhhY3RseSBvbmUgaW5wdXQnKTtcbiAgYWRkQ292ZW5hbnRTaWduYXR1cmVzKHBzYnQsIDAsIHNpZ25hdHVyZXMpO1xuICBhc3NlcnRWYWxpZFNpZ25hdHVyZXMocHNidCwgMCwgc2lnbmF0dXJlcyk7XG4gIHJldHVybiBwc2J0O1xufVxuIl19
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createMultiSigDescriptor = createMultiSigDescriptor;
|
|
4
|
-
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
5
|
-
function asDescriptorKey(key, neutered) {
|
|
6
|
-
if (Buffer.isBuffer(key)) {
|
|
7
|
-
return key.toString('hex');
|
|
8
|
-
}
|
|
9
|
-
return (neutered ? key.neutered() : key).toBase58() + '/*';
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Create a multi-sig descriptor to produce a coredao staking address
|
|
13
|
-
* @param scriptType segwit or legacy
|
|
14
|
-
* @param locktime locktime for CLTV
|
|
15
|
-
* @param m Total number of keys required to unlock
|
|
16
|
-
* @param orderedKeys If Bip32Interfaces, these are xprvs or xpubs and are derivable.
|
|
17
|
-
* If they are buffers, then they are pub/prv keys and are not derivable.
|
|
18
|
-
* @param neutered If true, neuter the keys. Default to true
|
|
19
|
-
*/
|
|
20
|
-
function createMultiSigDescriptor(scriptType, locktime, m, orderedKeys, neutered = true) {
|
|
21
|
-
if (m > orderedKeys.length || m < 1) {
|
|
22
|
-
throw new Error(`m (${m}) must be less than or equal to the number of keys (${orderedKeys.length}) and greater than 0`);
|
|
23
|
-
}
|
|
24
|
-
if (locktime <= 0) {
|
|
25
|
-
throw new Error(`locktime (${locktime}) must be greater than 0`);
|
|
26
|
-
}
|
|
27
|
-
const keys = orderedKeys.map((key) => asDescriptorKey(key, neutered));
|
|
28
|
-
const inner = { and_v: [{ 'r:after': locktime }, { multi: [m, ...keys] }] };
|
|
29
|
-
switch (scriptType) {
|
|
30
|
-
case 'sh':
|
|
31
|
-
return wasm_utxo_1.ast.formatNode({ sh: inner });
|
|
32
|
-
case 'sh-wsh':
|
|
33
|
-
return wasm_utxo_1.ast.formatNode({ sh: { wsh: inner } });
|
|
34
|
-
case 'wsh':
|
|
35
|
-
return wasm_utxo_1.ast.formatNode({ wsh: inner });
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlRGFvL2Rlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEwQkEsNERBeUJDO0FBbERELGdEQUF1QztBQVN2QyxTQUFTLGVBQWUsQ0FBQyxHQUE0QixFQUFFLFFBQWlCO0lBQ3RFLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDN0QsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQ3RDLFVBQXNCLEVBQ3RCLFFBQWdCLEVBQ2hCLENBQVMsRUFDVCxXQUF3QyxFQUN4QyxRQUFRLEdBQUcsSUFBSTtJQUVmLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQ2IsTUFBTSxDQUFDLHVEQUF1RCxXQUFXLENBQUMsTUFBTSxzQkFBc0IsQ0FDdkcsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsUUFBUSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDdEUsTUFBTSxLQUFLLEdBQXVCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNoRyxRQUFRLFVBQVUsRUFBRSxDQUFDO1FBQ25CLEtBQUssSUFBSTtZQUNQLE9BQU8sZUFBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssUUFBUTtZQUNYLE9BQU8sZUFBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEQsS0FBSyxLQUFLO1lBQ1IsT0FBTyxlQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCSVAzMkludGVyZmFjZSB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IGFzdCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG4vKipcbiAqIFNjcmlwdCB0eXBlIGZvciBhIGRlc2NyaXB0b3IuXG4gKlxuICogU2VlIGh0dHBzOi8vZG9jcy5jb3JlZGFvLm9yZy9kb2NzL0xlYXJuL3Byb2R1Y3RzL2J0Yy1zdGFraW5nL2Rlc2lnbiNwMnNocDJ3c2gtb3V0cHV0XG4gKi9cbmV4cG9ydCB0eXBlIFNjcmlwdFR5cGUgPSAnc2gnIHwgJ3NoLXdzaCcgfCAnd3NoJztcblxuZnVuY3Rpb24gYXNEZXNjcmlwdG9yS2V5KGtleTogQklQMzJJbnRlcmZhY2UgfCBCdWZmZXIsIG5ldXRlcmVkOiBib29sZWFuKTogc3RyaW5nIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihrZXkpKSB7XG4gICAgcmV0dXJuIGtleS50b1N0cmluZygnaGV4Jyk7XG4gIH1cbiAgcmV0dXJuIChuZXV0ZXJlZCA/IGtleS5uZXV0ZXJlZCgpIDoga2V5KS50b0Jhc2U1OCgpICsgJy8qJztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtdWx0aS1zaWcgZGVzY3JpcHRvciB0byBwcm9kdWNlIGEgY29yZWRhbyBzdGFraW5nIGFkZHJlc3NcbiAqIEBwYXJhbSBzY3JpcHRUeXBlIHNlZ3dpdCBvciBsZWdhY3lcbiAqIEBwYXJhbSBsb2NrdGltZSBsb2NrdGltZSBmb3IgQ0xUVlxuICogQHBhcmFtIG0gVG90YWwgbnVtYmVyIG9mIGtleXMgcmVxdWlyZWQgdG8gdW5sb2NrXG4gKiBAcGFyYW0gb3JkZXJlZEtleXMgSWYgQmlwMzJJbnRlcmZhY2VzLCB0aGVzZSBhcmUgeHBydnMgb3IgeHB1YnMgYW5kIGFyZSBkZXJpdmFibGUuXG4gKiAgICAgICAgICAgICAgICAgICAgSWYgdGhleSBhcmUgYnVmZmVycywgdGhlbiB0aGV5IGFyZSBwdWIvcHJ2IGtleXMgYW5kIGFyZSBub3QgZGVyaXZhYmxlLlxuICogQHBhcmFtIG5ldXRlcmVkIElmIHRydWUsIG5ldXRlciB0aGUga2V5cy4gRGVmYXVsdCB0byB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNdWx0aVNpZ0Rlc2NyaXB0b3IoXG4gIHNjcmlwdFR5cGU6IFNjcmlwdFR5cGUsXG4gIGxvY2t0aW1lOiBudW1iZXIsXG4gIG06IG51bWJlcixcbiAgb3JkZXJlZEtleXM6IChCSVAzMkludGVyZmFjZSB8IEJ1ZmZlcilbXSxcbiAgbmV1dGVyZWQgPSB0cnVlXG4pOiBzdHJpbmcge1xuICBpZiAobSA+IG9yZGVyZWRLZXlzLmxlbmd0aCB8fCBtIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBtICgke219KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGtleXMgKCR7b3JkZXJlZEtleXMubGVuZ3RofSkgYW5kIGdyZWF0ZXIgdGhhbiAwYFxuICAgICk7XG4gIH1cbiAgaWYgKGxvY2t0aW1lIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGxvY2t0aW1lICgke2xvY2t0aW1lfSkgbXVzdCBiZSBncmVhdGVyIHRoYW4gMGApO1xuICB9XG4gIGNvbnN0IGtleXMgPSBvcmRlcmVkS2V5cy5tYXAoKGtleSkgPT4gYXNEZXNjcmlwdG9yS2V5KGtleSwgbmV1dGVyZWQpKTtcbiAgY29uc3QgaW5uZXI6IGFzdC5NaW5pc2NyaXB0Tm9kZSA9IHsgYW5kX3Y6IFt7ICdyOmFmdGVyJzogbG9ja3RpbWUgfSwgeyBtdWx0aTogW20sIC4uLmtleXNdIH1dIH07XG4gIHN3aXRjaCAoc2NyaXB0VHlwZSkge1xuICAgIGNhc2UgJ3NoJzpcbiAgICAgIHJldHVybiBhc3QuZm9ybWF0Tm9kZSh7IHNoOiBpbm5lciB9KTtcbiAgICBjYXNlICdzaC13c2gnOlxuICAgICAgcmV0dXJuIGFzdC5mb3JtYXROb2RlKHsgc2g6IHsgd3NoOiBpbm5lciB9IH0pO1xuICAgIGNhc2UgJ3dzaCc6XG4gICAgICByZXR1cm4gYXN0LmZvcm1hdE5vZGUoeyB3c2g6IGlubmVyIH0pO1xuICB9XG59XG4iXX0=
|