@bitgo-beta/utxo-staking 1.1.1-beta.826 → 1.1.1-beta.828
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
|
@@ -0,0 +1,156 @@
|
|
|
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
|
+
const assert_1 = __importDefault(require("assert"));
|
|
40
|
+
const fs_1 = require("fs");
|
|
41
|
+
const t = __importStar(require("io-ts"));
|
|
42
|
+
const PathReporter_1 = require("io-ts/lib/PathReporter");
|
|
43
|
+
const Either_1 = require("fp-ts/Either");
|
|
44
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
45
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
46
|
+
const babylon_1 = require("../../../src/babylon");
|
|
47
|
+
const undelegation_1 = require("../../../src/babylon/undelegation");
|
|
48
|
+
const parseDescriptor_1 = require("../../../src/babylon/parseDescriptor");
|
|
49
|
+
const fixtures_utils_1 = require("../fixtures.utils");
|
|
50
|
+
const BtcDelegation = t.type({
|
|
51
|
+
unbonding_time: t.number,
|
|
52
|
+
undelegation_response: undelegation_1.UndelegationResponse,
|
|
53
|
+
});
|
|
54
|
+
async function getFixture(txid) {
|
|
55
|
+
// As returned by https://babylon.nodes.guru/api#/Query/BTCDelegation
|
|
56
|
+
const BtcDelegationResponse = t.type({ btc_delegation: BtcDelegation }, 'BtcDelegationResponse');
|
|
57
|
+
const filename = __dirname + `/../../fixtures/babylon/rpc/btc_delegation/testnet.${txid}.json`;
|
|
58
|
+
const data = JSON.parse(await fs_1.promises.readFile(filename, 'utf8'));
|
|
59
|
+
const result = BtcDelegationResponse.decode(data);
|
|
60
|
+
if ((0, Either_1.isLeft)(result)) {
|
|
61
|
+
throw new Error(`Failed to decode fixture data for txid ${txid}: ${PathReporter_1.PathReporter.report(result).join(', ')}`);
|
|
62
|
+
}
|
|
63
|
+
return result.right.btc_delegation;
|
|
64
|
+
}
|
|
65
|
+
function toDescriptor(descriptor) {
|
|
66
|
+
return descriptor instanceof wasm_utxo_1.Descriptor
|
|
67
|
+
? descriptor
|
|
68
|
+
: wasm_utxo_1.Descriptor.fromStringDetectType(typeof descriptor === 'string' ? descriptor : wasm_utxo_1.ast.formatNode(descriptor));
|
|
69
|
+
}
|
|
70
|
+
function runTest(network, txid, descriptor) {
|
|
71
|
+
describe(`Unbonding transaction ${txid}`, function () {
|
|
72
|
+
let fixture;
|
|
73
|
+
let psbt;
|
|
74
|
+
let signatures;
|
|
75
|
+
before('should create a PSBT from the unbonding transaction', async function () {
|
|
76
|
+
fixture = await getFixture(txid);
|
|
77
|
+
const txBuffer = Buffer.from(fixture.undelegation_response.unbonding_tx_hex, 'hex');
|
|
78
|
+
const tx = utxolib.bitgo.createTransactionFromBuffer(txBuffer, network, {
|
|
79
|
+
amountType: 'bigint',
|
|
80
|
+
});
|
|
81
|
+
signatures = fixture.undelegation_response.covenant_unbonding_sig_list.map((sig) => (0, undelegation_1.toPartialSig)(sig));
|
|
82
|
+
psbt = (0, undelegation_1.toUnbondingPsbtWithSignatures)(tx, {
|
|
83
|
+
script: Buffer.from('5120b81e8691ab3c46bddf8ea43f776e4d64abf417a0fa5a4d09976c8aaadabbb6a0', 'hex'),
|
|
84
|
+
value: 100000n,
|
|
85
|
+
}, descriptor, signatures, utxolib.networks.testnet);
|
|
86
|
+
});
|
|
87
|
+
it('should have valid signatures', async function () {
|
|
88
|
+
(0, undelegation_1.assertValidSignatures)(psbt, 0, signatures);
|
|
89
|
+
});
|
|
90
|
+
it('should match the fixture', async function () {
|
|
91
|
+
await (0, fixtures_utils_1.assertTransactionEqualsFixture)('test/fixtures/babylon/unbonding.' + txid.substring(0, 4) + '.psbt.json', psbt);
|
|
92
|
+
});
|
|
93
|
+
it('can spend from unbonding output', async function () {
|
|
94
|
+
const parsed = (0, parseDescriptor_1.parseStakingDescriptor)(descriptor);
|
|
95
|
+
(0, assert_1.default)(parsed);
|
|
96
|
+
const descriptorBuilder = new babylon_1.BabylonDescriptorBuilder(parsed.stakerKey, parsed.finalityProviderKeys, parsed.covenantKeys, parsed.covenantThreshold, parsed.stakingTimeLock, fixture.unbonding_time);
|
|
97
|
+
assert_1.default.deepStrictEqual(descriptorBuilder.getUnbondingMiniscriptNode(), parsed.unbondingMiniscriptNode, 'Unbonding miniscript node does not match expected value');
|
|
98
|
+
(0, assert_1.default)(psbt.txOutputs.length === 1, 'Unbonding transaction should have exactly one output');
|
|
99
|
+
assert_1.default.deepStrictEqual(psbt.txOutputs[0].script, Buffer.from(descriptorBuilder.getUnbondingDescriptor().scriptPubkey()));
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
runTest(utxolib.networks.bitcoinPublicSignet, '5d277e1b29e5589074aea95ac8c8230fd911c2ec3c58774aafdef915619b772c', toDescriptor({
|
|
104
|
+
tr: [
|
|
105
|
+
'50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0',
|
|
106
|
+
[
|
|
107
|
+
{
|
|
108
|
+
and_v: [
|
|
109
|
+
{
|
|
110
|
+
and_v: [
|
|
111
|
+
{ 'v:pk': '1b443f34ddc1bbaef52a8c5162dfa5a84524636ec745292f949470369ee67391' },
|
|
112
|
+
{ 'v:pk': 'd23c2c25e1fcf8fd1c21b9a402c19e2e309e531e45e92fb1e9805b6056b0cc76' },
|
|
113
|
+
],
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
multi_a: [
|
|
117
|
+
6,
|
|
118
|
+
'0aee0509b16db71c999238a4827db945526859b13c95487ab46725357c9a9f25',
|
|
119
|
+
'113c3a32a9d320b72190a04a020a0db3976ef36972673258e9a38a364f3dc3b0',
|
|
120
|
+
'17921cf156ccb4e73d428f996ed11b245313e37e27c978ac4d2cc21eca4672e4',
|
|
121
|
+
'3bb93dfc8b61887d771f3630e9a63e97cbafcfcc78556a474df83a31a0ef899c',
|
|
122
|
+
'40afaf47c4ffa56de86410d8e47baa2bb6f04b604f4ea24323737ddc3fe092df',
|
|
123
|
+
'79a71ffd71c503ef2e2f91bccfc8fcda7946f4653cef0d9f3dde20795ef3b9f0',
|
|
124
|
+
'd21faf78c6751a0d38e6bd8028b907ff07e9a869a43fc837d6b3f8dff6119a36',
|
|
125
|
+
'f5199efae3f28bb82476163a7e458c7ad445d9bffb0682d10d3bdb2cb41f8e8e',
|
|
126
|
+
'fa9d882d45f4060bdb8042183828cd87544f1ea997380e586cab77d5fd698737',
|
|
127
|
+
],
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
[
|
|
132
|
+
{
|
|
133
|
+
and_v: [
|
|
134
|
+
{ 'v:pk': '1b443f34ddc1bbaef52a8c5162dfa5a84524636ec745292f949470369ee67391' },
|
|
135
|
+
{
|
|
136
|
+
multi_a: [
|
|
137
|
+
6,
|
|
138
|
+
'0aee0509b16db71c999238a4827db945526859b13c95487ab46725357c9a9f25',
|
|
139
|
+
'113c3a32a9d320b72190a04a020a0db3976ef36972673258e9a38a364f3dc3b0',
|
|
140
|
+
'17921cf156ccb4e73d428f996ed11b245313e37e27c978ac4d2cc21eca4672e4',
|
|
141
|
+
'3bb93dfc8b61887d771f3630e9a63e97cbafcfcc78556a474df83a31a0ef899c',
|
|
142
|
+
'40afaf47c4ffa56de86410d8e47baa2bb6f04b604f4ea24323737ddc3fe092df',
|
|
143
|
+
'79a71ffd71c503ef2e2f91bccfc8fcda7946f4653cef0d9f3dde20795ef3b9f0',
|
|
144
|
+
'd21faf78c6751a0d38e6bd8028b907ff07e9a869a43fc837d6b3f8dff6119a36',
|
|
145
|
+
'f5199efae3f28bb82476163a7e458c7ad445d9bffb0682d10d3bdb2cb41f8e8e',
|
|
146
|
+
'fa9d882d45f4060bdb8042183828cd87544f1ea997380e586cab77d5fd698737',
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
},
|
|
151
|
+
{ and_v: [{ 'v:pk': '1b443f34ddc1bbaef52a8c5162dfa5a84524636ec745292f949470369ee67391' }, { older: 10000 }] },
|
|
152
|
+
],
|
|
153
|
+
],
|
|
154
|
+
],
|
|
155
|
+
}));
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5kZWxlZ2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JhYnlsb24vdW5kZWxlZ2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDJCQUFvQztBQUVwQyx5Q0FBMkI7QUFDM0IseURBQXNEO0FBQ3RELHlDQUFzQztBQUN0Qyw4REFBZ0Q7QUFDaEQsZ0RBQW1EO0FBR25ELGtEQUFnRTtBQUNoRSxvRUFLMkM7QUFDM0MsMEVBQThFO0FBQzlFLHNEQUFtRTtBQUVuRSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNCLGNBQWMsRUFBRSxDQUFDLENBQUMsTUFBTTtJQUN4QixxQkFBcUIsRUFBRSxtQ0FBb0I7Q0FDNUMsQ0FBQyxDQUFDO0FBSUgsS0FBSyxVQUFVLFVBQVUsQ0FBQyxJQUFZO0lBQ3BDLHFFQUFxRTtJQUNyRSxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUNqRyxNQUFNLFFBQVEsR0FBRyxTQUFTLEdBQUcsc0RBQXNELElBQUksT0FBTyxDQUFDO0lBQy9GLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxhQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdELE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxJQUFJLElBQUEsZUFBTSxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsSUFBSSxLQUFLLDJCQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElB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LEVBQUUsTUFBTSxFQUFFLGtFQUFrRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTthQUM5RztTQUNGO0tBQ0Y7Q0FDRixDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnO1xuXG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCB7IFBhdGhSZXBvcnRlciB9IGZyb20gJ2lvLXRzL2xpYi9QYXRoUmVwb3J0ZXInO1xuaW1wb3J0IHsgaXNMZWZ0IH0gZnJvbSAnZnAtdHMvRWl0aGVyJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgYXN0LCBEZXNjcmlwdG9yIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBQYXJ0aWFsU2lnIH0gZnJvbSAnYmlwMTc0L3NyYy9saWIvaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IEJhYnlsb25EZXNjcmlwdG9yQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYy9iYWJ5bG9uJztcbmltcG9ydCB7XG4gIHRvUGFydGlhbFNpZyxcbiAgVW5kZWxlZ2F0aW9uUmVzcG9uc2UsXG4gIGFzc2VydFZhbGlkU2lnbmF0dXJlcyxcbiAgdG9VbmJvbmRpbmdQc2J0V2l0aFNpZ25hdHVyZXMsXG59IGZyb20gJy4uLy4uLy4uL3NyYy9iYWJ5bG9uL3VuZGVsZWdhdGlvbic7XG5pbXBvcnQgeyBwYXJzZVN0YWtpbmdEZXNjcmlwdG9yIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2JhYnlsb24vcGFyc2VEZXNjcmlwdG9yJztcbmltcG9ydCB7IGFzc2VydFRyYW5zYWN0aW9uRXF1YWxzRml4dHVyZSB9IGZyb20gJy4uL2ZpeHR1cmVzLnV0aWxzJztcblxuY29uc3QgQnRjRGVsZWdhdGlvbiA9IHQudHlwZSh7XG4gIHVuYm9uZGluZ190aW1lOiB0Lm51bWJlcixcbiAgdW5kZWxlZ2F0aW9uX3Jlc3BvbnNlOiBVbmRlbGVnYXRpb25SZXNwb25zZSxcbn0pO1xuXG50eXBlIEJ0Y0RlbGVnYXRpb24gPSB0LlR5cGVPZjx0eXBlb2YgQnRjRGVsZWdhdGlvbj47XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEZpeHR1cmUodHhpZDogc3RyaW5nKTogUHJvbWlzZTxCdGNEZWxlZ2F0aW9uPiB7XG4gIC8vIEFzIHJldHVybmVkIGJ5IGh0dHBzOi8vYmFieWxvbi5ub2Rlcy5ndXJ1L2FwaSMvUXVlcnkvQlRDRGVsZWdhdGlvblxuICBjb25zdCBCdGNEZWxlZ2F0aW9uUmVzcG9uc2UgPSB0LnR5cGUoeyBidGNfZGVsZWdhdGlvbjogQnRjRGVsZWdhdGlvbiB9LCAnQnRjRGVsZWdhdGlvblJlc3BvbnNlJyk7XG4gIGNvbnN0IGZpbGVuYW1lID0gX19kaXJuYW1lICsgYC8uLi8uLi9maXh0dXJlcy9iYWJ5bG9uL3JwYy9idGNfZGVsZWdhdGlvbi90ZXN0bmV0LiR7dHhpZH0uanNvbmA7XG4gIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVuYW1lLCAndXRmOCcpKTtcbiAgY29uc3QgcmVzdWx0ID0gQnRjRGVsZWdhdGlvblJlc3BvbnNlLmRlY29kZShkYXRhKTtcbiAgaWYgKGlzTGVmdChyZXN1bHQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZGVjb2RlIGZpeHR1cmUgZGF0YSBmb3IgdHhpZCAke3R4aWR9OiAke1BhdGhSZXBvcnRlci5yZXBvcnQocmVzdWx0KS5qb2luKCcsICcpfWApO1xuICB9XG4gIHJldHVybiByZXN1bHQucmlnaHQuYnRjX2RlbGVnYXRpb247XG59XG5cbnR5cGUgRGVzY3JpcHRvckxpa2UgPSBEZXNjcmlwdG9yIHwgYXN0LkRlc2NyaXB0b3JOb2RlIHwgc3RyaW5nO1xuXG5mdW5jdGlvbiB0b0Rlc2NyaXB0b3IoZGVzY3JpcHRvcjogRGVzY3JpcHRvckxpa2UpOiBEZXNjcmlwdG9yIHtcbiAgcmV0dXJuIGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBEZXNjcmlwdG9yXG4gICAgPyBkZXNjcmlwdG9yXG4gICAgOiBEZXNjcmlwdG9yLmZyb21TdHJpbmdEZXRlY3RUeXBlKHR5cGVvZiBkZXNjcmlwdG9yID09PSAnc3RyaW5nJyA/IGRlc2NyaXB0b3IgOiBhc3QuZm9ybWF0Tm9kZShkZXNjcmlwdG9yKSk7XG59XG5cbmZ1bmN0aW9uIHJ1blRlc3QobmV0d29yazogdXR4b2xpYi5OZXR3b3JrLCB0eGlkOiBzdHJpbmcsIGRlc2NyaXB0b3I6IERlc2NyaXB0b3IpOiB2b2lkIHtcbiAgZGVzY3JpYmUoYFVuYm9uZGluZyB0cmFuc2FjdGlvbiAke3R4aWR9YCwgZnVuY3Rpb24gKCkge1xuICAgIGxldCBmaXh0dXJlOiBCdGNEZWxlZ2F0aW9uO1xuICAgIGxldCBwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0O1xuICAgIGxldCBzaWduYXR1cmVzOiBQYXJ0aWFsU2lnW107XG5cbiAgICBiZWZvcmUoJ3Nob3VsZCBjcmVhdGUgYSBQU0JUIGZyb20gdGhlIHVuYm9uZGluZyB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZpeHR1cmUgPSBhd2FpdCBnZXRGaXh0dXJlKHR4aWQpO1xuICAgICAgY29uc3QgdHhCdWZmZXIgPSBCdWZmZXIuZnJvbShmaXh0dXJlLnVuZGVsZWdhdGlvbl9yZXNwb25zZS51bmJvbmRpbmdfdHhfaGV4LCAnaGV4Jyk7XG4gICAgICBjb25zdCB0eCA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyKHR4QnVmZmVyLCBuZXR3b3JrLCB7XG4gICAgICAgIGFtb3VudFR5cGU6ICdiaWdpbnQnLFxuICAgICAgfSk7XG4gICAgICBzaWduYXR1cmVzID0gZml4dHVyZS51bmRlbGVnYXRpb25fcmVzcG9uc2UuY292ZW5hbnRfdW5ib25kaW5nX3NpZ19saXN0Lm1hcCgoc2lnKSA9PiB0b1BhcnRpYWxTaWcoc2lnKSk7XG5cbiAgICAgIHBzYnQgPSB0b1VuYm9uZGluZ1BzYnRXaXRoU2lnbmF0dXJlcyhcbiAgICAgICAgdHgsXG4gICAgICAgIHtcbiAgICAgICAgICBzY3JpcHQ6IEJ1ZmZlci5mcm9tKCc1MTIwYjgxZTg2OTFhYjNjNDZiZGRmOGVhNDNmNzc2ZTRkNjRhYmY0MTdhMGZhNWE0ZDA5OTc2YzhhYWFkYWJiYjZhMCcsICdoZXgnKSxcbiAgICAgICAgICB2YWx1ZTogMTAwXzAwMG4sXG4gICAgICAgIH0sXG4gICAgICAgIGRlc2NyaXB0b3IsXG4gICAgICAgIHNpZ25hdHVyZXMsXG4gICAgICAgIHV0eG9saWIubmV0d29ya3MudGVzdG5ldFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSB2YWxpZCBzaWduYXR1cmVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0VmFsaWRTaWduYXR1cmVzKHBzYnQsIDAsIHNpZ25hdHVyZXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCB0aGUgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGFzc2VydFRyYW5zYWN0aW9uRXF1YWxzRml4dHVyZShcbiAgICAgICAgJ3Rlc3QvZml4dHVyZXMvYmFieWxvbi91bmJvbmRpbmcuJyArIHR4aWQuc3Vic3RyaW5nKDAsIDQpICsgJy5wc2J0Lmpzb24nLFxuICAgICAgICBwc2J0XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NhbiBzcGVuZCBmcm9tIHVuYm9uZGluZyBvdXRwdXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVN0YWtpbmdEZXNjcmlwdG9yKGRlc2NyaXB0b3IpO1xuICAgICAgYXNzZXJ0KHBhcnNlZCk7XG5cbiAgICAgIGNvbnN0IGRlc2NyaXB0b3JCdWlsZGVyID0gbmV3IEJhYnlsb25EZXNjcmlwdG9yQnVpbGRlcihcbiAgICAgICAgcGFyc2VkLnN0YWtlcktleSxcbiAgICAgICAgcGFyc2VkLmZpbmFsaXR5UHJvdmlkZXJLZXlzLFxuICAgICAgICBwYXJzZWQuY292ZW5hbnRLZXlzLFxuICAgICAgICBwYXJzZWQuY292ZW5hbnRUaHJlc2hvbGQsXG4gICAgICAgIHBhcnNlZC5zdGFraW5nVGltZUxvY2ssXG4gICAgICAgIGZpeHR1cmUudW5ib25kaW5nX3RpbWVcbiAgICAgICk7XG5cbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoXG4gICAgICAgIGRlc2NyaXB0b3JCdWlsZGVyLmdldFVuYm9uZGluZ01pbmlzY3JpcHROb2RlKCksXG4gICAgICAgIHBhcnNlZC51bmJvbmRpbmdNaW5pc2NyaXB0Tm9kZSxcbiAgICAgICAgJ1VuYm9uZGluZyBtaW5pc2NyaXB0IG5vZGUgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgdmFsdWUnXG4gICAgICApO1xuXG4gICAgICBhc3NlcnQocHNidC50eE91dHB1dHMubGVuZ3RoID09PSAxLCAnVW5ib25kaW5nIHRyYW5zYWN0aW9uIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIG91dHB1dCcpO1xuXG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgICAgICBwc2J0LnR4T3V0cHV0c1swXS5zY3JpcHQsXG4gICAgICAgIEJ1ZmZlci5mcm9tKGRlc2NyaXB0b3JCdWlsZGVyLmdldFVuYm9uZGluZ0Rlc2NyaXB0b3IoKS5zY3JpcHRQdWJrZXkoKSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5ydW5UZXN0KFxuICB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW5QdWJsaWNTaWduZXQsXG4gICc1ZDI3N2UxYjI5ZTU1ODkwNzRhZWE5NWFjOGM4MjMwZmQ5MTFjMmVjM2M1ODc3NGFhZmRlZjkxNTYxOWI3NzJjJyxcbiAgdG9EZXNjcmlwdG9yKHtcbiAgICB0cjogW1xuICAgICAgJzUwOTI5Yjc0YzFhMDQ5NTRiNzhiNGI2MDM1ZTk3YTVlMDc4YTVhMGYyOGVjOTZkNTQ3YmZlZTlhY2U4MDNhYzAnLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYW5kX3Y6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYW5kX3Y6IFtcbiAgICAgICAgICAgICAgICB7ICd2OnBrJzogJzFiNDQzZjM0ZGRjMWJiYWVmNTJhOGM1MTYyZGZhNWE4NDUyNDYzNmVjNzQ1MjkyZjk0OTQ3MDM2OWVlNjczOTEnIH0sXG4gICAgICAgICAgICAgICAgeyAndjpwayc6ICdkMjNjMmMyNWUxZmNmOGZkMWMyMWI5YTQwMmMxOWUyZTMwOWU1MzFlNDVlOTJmYjFlOTgwNWI2MDU2YjBjYzc2JyB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbXVsdGlfYTogW1xuICAgICAgICAgICAgICAgIDYsXG4gICAgICAgICAgICAgICAgJzBhZWUwNTA5YjE2ZGI3MWM5OTkyMzhhNDgyN2RiOTQ1NTI2ODU5YjEzYzk1NDg3YWI0NjcyNTM1N2M5YTlmMjUnLFxuICAgICAgICAgICAgICAgICcxMTNjM2EzMmE5ZDMyMGI3MjE5MGEwNGEwMjBhMGRiMzk3NmVmMzY5NzI2NzMyNThlOWEzOGEzNjRmM2RjM2IwJyxcbiAgICAgICAgICAgICAgICAnMTc5MjFjZjE1NmNjYjRlNzNkNDI4Zjk5NmVkMTFiMjQ1MzEzZTM3ZTI3Yzk3OGFjNGQyY2MyMWVjYTQ2NzJlNCcsXG4gICAgICAgICAgICAgICAgJzNiYjkzZGZjOGI2MTg4N2Q3NzFmMzYzMGU5YTYzZTk3Y2JhZmNmY2M3ODU1NmE0NzRkZjgzYTMxYTBlZjg5OWMnLFxuICAgICAgICAgICAgICAgICc0MGFmYWY0N2M0ZmZhNTZkZTg2NDEwZDhlNDdiYWEyYmI2ZjA0YjYwNGY0ZWEyNDMyMzczN2RkYzNmZTA5MmRmJyxcbiAgICAgICAgICAgICAgICAnNzlhNzFmZmQ3MWM1MDNlZjJlMmY5MWJjY2ZjOGZjZGE3OTQ2ZjQ2NTNjZWYwZDlmM2RkZTIwNzk1ZWYzYjlmMCcsXG4gICAgICAgICAgICAgICAgJ2QyMWZhZjc4YzY3NTFhMGQzOGU2YmQ4MDI4YjkwN2ZmMDdlOWE4NjlhNDNmYzgzN2Q2YjNmOGRmZjYxMTlhMzYnLFxuICAgICAgICAgICAgICAgICdmNTE5OWVmYWUzZjI4YmI4MjQ3NjE2M2E3ZTQ1OGM3YWQ0NDVkOWJmZmIwNjgyZDEwZDNiZGIyY2I0MWY4ZThlJyxcbiAgICAgICAgICAgICAgICAnZmE5ZDg4MmQ0NWY0MDYwYmRiODA0MjE4MzgyOGNkODc1NDRmMWVhOTk3MzgwZTU4NmNhYjc3ZDVmZDY5ODczNycsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbmRfdjogW1xuICAgICAgICAgICAgICB7ICd2OnBrJzogJzFiNDQzZjM0ZGRjMWJiYWVmNTJhOGM1MTYyZGZhNWE4NDUyNDYzNmVjNzQ1MjkyZjk0OTQ3MDM2OWVlNjczOTEnIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtdWx0aV9hOiBbXG4gICAgICAgICAgICAgICAgICA2LFxuICAgICAgICAgICAgICAgICAgJzBhZWUwNTA5YjE2ZGI3MWM5OTkyMzhhNDgyN2RiOTQ1NTI2ODU5YjEzYzk1NDg3YWI0NjcyNTM1N2M5YTlmMjUnLFxuICAgICAgICAgICAgICAgICAgJzExM2MzYTMyYTlkMzIwYjcyMTkwYTA0YTAyMGEwZGIzOTc2ZWYzNjk3MjY3MzI1OGU5YTM4YTM2NGYzZGMzYjAnLFxuICAgICAgICAgICAgICAgICAgJzE3OTIxY2YxNTZjY2I0ZTczZDQyOGY5OTZlZDExYjI0NTMxM2UzN2UyN2M5NzhhYzRkMmNjMjFlY2E0NjcyZTQnLFxuICAgICAgICAgICAgICAgICAgJzNiYjkzZGZjOGI2MTg4N2Q3NzFmMzYzMGU5YTYzZTk3Y2JhZmNmY2M3ODU1NmE0NzRkZjgzYTMxYTBlZjg5OWMnLFxuICAgICAgICAgICAgICAgICAgJzQwYWZhZjQ3YzRmZmE1NmRlODY0MTBkOGU0N2JhYTJiYjZmMDRiNjA0ZjRlYTI0MzIzNzM3ZGRjM2ZlMDkyZGYnLFxuICAgICAgICAgICAgICAgICAgJzc5YTcxZmZkNzFjNTAzZWYyZTJmOTFiY2NmYzhmY2RhNzk0NmY0NjUzY2VmMGQ5ZjNkZGUyMDc5NWVmM2I5ZjAnLFxuICAgICAgICAgICAgICAgICAgJ2QyMWZhZjc4YzY3NTFhMGQzOGU2YmQ4MDI4YjkwN2ZmMDdlOWE4NjlhNDNmYzgzN2Q2YjNmOGRmZjYxMTlhMzYnLFxuICAgICAgICAgICAgICAgICAgJ2Y1MTk5ZWZhZTNmMjhiYjgyNDc2MTYzYTdlNDU4YzdhZDQ0NWQ5YmZmYjA2ODJkMTBkM2JkYjJjYjQxZjhlOGUnLFxuICAgICAgICAgICAgICAgICAgJ2ZhOWQ4ODJkNDVmNDA2MGJkYjgwNDIxODM4MjhjZDg3NTQ0ZjFlYTk5NzM4MGU1ODZjYWI3N2Q1ZmQ2OTg3MzcnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBhbmRfdjogW3sgJ3Y6cGsnOiAnMWI0NDNmMzRkZGMxYmJhZWY1MmE4YzUxNjJkZmE1YTg0NTI0NjM2ZWM3NDUyOTJmOTQ5NDcwMzY5ZWU2NzM5MScgfSwgeyBvbGRlcjogMTAwMDAgfV0gfSxcbiAgICAgICAgXSxcbiAgICAgIF0sXG4gICAgXSxcbiAgfSlcbik7XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as bitcoinjslib from 'bitcoinjs-lib';
|
|
2
|
+
import { ECPairInterface } from '@bitgo-beta/utxo-lib';
|
|
3
|
+
import * as vendor from '@bitgo-beta/babylonlabs-io-btc-staking-ts';
|
|
4
|
+
import * as babylonProtobuf from '@babylonlabs-io/babylon-proto-ts';
|
|
5
|
+
import { BabylonDescriptorBuilder, ValueWithTypeUrl } from '../../../src/babylon';
|
|
6
|
+
type Result = {
|
|
7
|
+
unsignedDelegationMsg: ValueWithTypeUrl<babylonProtobuf.btcstakingtx.MsgCreateBTCDelegation>;
|
|
8
|
+
stakingTx: bitcoinjslib.Transaction;
|
|
9
|
+
};
|
|
10
|
+
export declare function getBitGoUtxoStakingMsgCreateBtcDelegation(network: bitcoinjslib.Network, stakerKey: ECPairInterface, finalityProvider: ECPairInterface, descriptorBuilder: BabylonDescriptorBuilder, stakingParams: vendor.VersionedStakingParams[], changeAddress: string, amount: number, utxo: vendor.UTXO, feeRateSatB: number, blockHeight: number): Promise<Result>;
|
|
11
|
+
export declare function getVendorMsgCreateBtcDelegation(network: bitcoinjslib.Network, stakerKey: ECPairInterface, finalityProvider: ECPairInterface, descriptorBuilder: BabylonDescriptorBuilder, stakingParams: vendor.VersionedStakingParams[], changeAddress: string, amount: number, utxo: vendor.UTXO, feeRateSatB: number, blockHeight: number): Promise<Result>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=vendor.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendor.utils.d.ts","sourceRoot":"","sources":["../../../../../test/unit/babylon/vendor.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,MAAM,MAAM,2CAA2C,CAAC;AACpE,OAAO,KAAK,eAAe,MAAM,kCAAkC,CAAC;AAIpE,OAAO,EACL,wBAAwB,EAGxB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAI9B,KAAK,MAAM,GAAG;IACZ,qBAAqB,EAAE,gBAAgB,CAAC,eAAe,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;IAC7F,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC;CACrC,CAAC;AAEF,wBAAsB,yCAAyC,CAC7D,OAAO,EAAE,YAAY,CAAC,OAAO,EAC7B,SAAS,EAAE,eAAe,EAC1B,gBAAgB,EAAE,eAAe,EACjC,iBAAiB,EAAE,wBAAwB,EAC3C,aAAa,EAAE,MAAM,CAAC,sBAAsB,EAAE,EAC9C,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,YAAY,CAAC,OAAO,EAC7B,SAAS,EAAE,eAAe,EAC1B,gBAAgB,EAAE,eAAe,EACjC,iBAAiB,EAAE,wBAAwB,EAC3C,aAAa,EAAE,MAAM,CAAC,sBAAsB,EAAE,EAC9C,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAuCjB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
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.getBitGoUtxoStakingMsgCreateBtcDelegation = getBitGoUtxoStakingMsgCreateBtcDelegation;
|
|
37
|
+
exports.getVendorMsgCreateBtcDelegation = getVendorMsgCreateBtcDelegation;
|
|
38
|
+
const vendor = __importStar(require("@bitgo-beta/babylonlabs-io-btc-staking-ts"));
|
|
39
|
+
const babylonProtobuf = __importStar(require("@babylonlabs-io/babylon-proto-ts"));
|
|
40
|
+
const address_1 = require("bitcoinjs-lib/src/address");
|
|
41
|
+
const babylonlabs_io_btc_staking_ts_1 = require("@bitgo-beta/babylonlabs-io-btc-staking-ts");
|
|
42
|
+
const babylon_1 = require("../../../src/babylon");
|
|
43
|
+
const key_utils_1 = require("./key.utils");
|
|
44
|
+
async function getBitGoUtxoStakingMsgCreateBtcDelegation(network, stakerKey, finalityProvider, descriptorBuilder, stakingParams, changeAddress, amount, utxo, feeRateSatB, blockHeight) {
|
|
45
|
+
return await (0, babylon_1.createUnsignedPreStakeRegistrationBabylonTransactionWithBtcProvider)((0, babylon_1.getBtcProviderForECKey)(descriptorBuilder, stakerKey), network, {
|
|
46
|
+
address: changeAddress,
|
|
47
|
+
publicKeyNoCoordHex: (0, key_utils_1.getXOnlyPubkey)(stakerKey).toString('hex'),
|
|
48
|
+
}, {
|
|
49
|
+
finalityProviderPksNoCoordHex: [(0, key_utils_1.getXOnlyPubkey)(finalityProvider).toString('hex')],
|
|
50
|
+
stakingAmountSat: amount,
|
|
51
|
+
stakingTimelock: (0, babylonlabs_io_btc_staking_ts_1.getBabylonParamByBtcHeight)(blockHeight, stakingParams).minStakingTimeBlocks,
|
|
52
|
+
}, 800000, [utxo], feeRateSatB, (0, address_1.toBech32)(Buffer.from('test'), 0, 'bbn'), 'delegation:create', stakingParams);
|
|
53
|
+
}
|
|
54
|
+
async function getVendorMsgCreateBtcDelegation(network, stakerKey, finalityProvider, descriptorBuilder, stakingParams, changeAddress, amount, utxo, feeRateSatB, blockHeight) {
|
|
55
|
+
const babylonProvider = {
|
|
56
|
+
async signTransaction(msg) {
|
|
57
|
+
// return unsigned payload
|
|
58
|
+
return babylonProtobuf.btcstakingtx.MsgCreateBTCDelegation.encode(msg.value).finish();
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
const manager = new vendor.BabylonBtcStakingManager(network, stakingParams, (0, babylon_1.getBtcProviderForECKey)(descriptorBuilder, stakerKey), babylonProvider);
|
|
62
|
+
const result = await manager.preStakeRegistrationBabylonTransaction({
|
|
63
|
+
address: changeAddress,
|
|
64
|
+
publicKeyNoCoordHex: (0, key_utils_1.getXOnlyPubkey)(stakerKey).toString('hex'),
|
|
65
|
+
}, {
|
|
66
|
+
finalityProviderPksNoCoordHex: [(0, key_utils_1.getXOnlyPubkey)(finalityProvider).toString('hex')],
|
|
67
|
+
stakingAmountSat: amount,
|
|
68
|
+
stakingTimelock: (0, babylonlabs_io_btc_staking_ts_1.getBabylonParamByBtcHeight)(blockHeight, stakingParams).minStakingTimeBlocks,
|
|
69
|
+
}, blockHeight, [utxo], feeRateSatB, (0, address_1.toBech32)(Buffer.from('test'), 0, 'bbn'));
|
|
70
|
+
return {
|
|
71
|
+
unsignedDelegationMsg: {
|
|
72
|
+
typeUrl: '/babylon.btcstaking.v1.MsgCreateBTCDelegation',
|
|
73
|
+
value: babylonProtobuf.btcstakingtx.MsgCreateBTCDelegation.decode(result.signedBabylonTx),
|
|
74
|
+
},
|
|
75
|
+
stakingTx: result.stakingTx,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZG9yLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JhYnlsb24vdmVuZG9yLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJBLDhGQStCQztBQUVELDBFQWtEQztBQXRHRCxrRkFBb0U7QUFDcEUsa0ZBQW9FO0FBQ3BFLHVEQUFxRDtBQUNyRCw2RkFBdUY7QUFFdkYsa0RBSzhCO0FBRTlCLDJDQUE2QztBQU90QyxLQUFLLFVBQVUseUNBQXlDLENBQzdELE9BQTZCLEVBQzdCLFNBQTBCLEVBQzFCLGdCQUFpQyxFQUNqQyxpQkFBMkMsRUFDM0MsYUFBOEMsRUFDOUMsYUFBcUIsRUFDckIsTUFBYyxFQUNkLElBQWlCLEVBQ2pCLFdBQW1CLEVBQ25CLFdBQW1CO0lBRW5CLE9BQU8sTUFBTSxJQUFBLDZFQUFtRSxFQUM5RSxJQUFBLGdDQUFzQixFQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxFQUNwRCxPQUFPLEVBQ1A7UUFDRSxPQUFPLEVBQUUsYUFBYTtRQUN0QixtQkFBbUIsRUFBRSxJQUFBLDBCQUFjLEVBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztLQUMvRCxFQUNEO1FBQ0UsNkJBQTZCLEVBQUUsQ0FBQyxJQUFBLDBCQUFjLEVBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakYsZ0JBQWdCLEVBQUUsTUFBTTtRQUN4QixlQUFlLEVBQUUsSUFBQSwwREFBMEIsRUFBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUMsb0JBQW9CO0tBQzdGLEVBQ0QsTUFBTyxFQUNQLENBQUMsSUFBSSxDQUFDLEVBQ04sV0FBVyxFQUNYLElBQUEsa0JBQVEsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsRUFDdkMsbUJBQW1CLEVBQ25CLGFBQWEsQ0FDZCxDQUFDO0FBQ0osQ0FBQztBQUVNLEtBQUssVUFBVSwrQkFBK0IsQ0FDbkQsT0FBNkIsRUFDN0IsU0FBMEIsRUFDMUIsZ0JBQWlDLEVBQ2pDLGlCQUEyQyxFQUMzQyxhQUE4QyxFQUM5QyxhQUFxQixFQUNyQixNQUFjLEVBQ2QsSUFBaUIsRUFDakIsV0FBbUIsRUFDbkIsV0FBbUI7SUFFbkIsTUFBTSxlQUFlLEdBQTJCO1FBQzlDLEtBQUssQ0FBQyxlQUFlLENBQUMsR0FBRztZQUN2QiwwQkFBMEI7WUFDMUIsT0FBTyxlQUFlLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FDL0QsR0FBRyxDQUFDLEtBQTRELENBQ2pFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDYixDQUFDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLHdCQUF3QixDQUNqRCxPQUFPLEVBQ1AsYUFBYSxFQUNiLElBQUEsZ0NBQXNCLEVBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLEVBQ3BELGVBQWUsQ0FDaEIsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLHNDQUFzQyxDQUNqRTtRQUNFLE9BQU8sRUFBRSxhQUFhO1FBQ3RCLG1CQUFtQixFQUFFLElBQUEsMEJBQWMsRUFBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0tBQy9ELEVBQ0Q7UUFDRSw2QkFBNkIsRUFBRSxDQUFDLElBQUEsMEJBQWMsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRixnQkFBZ0IsRUFBRSxNQUFNO1FBQ3hCLGVBQWUsRUFBRSxJQUFBLDBEQUEwQixFQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQyxvQkFBb0I7S0FDN0YsRUFDRCxXQUFXLEVBQ1gsQ0FBQyxJQUFJLENBQUMsRUFDTixXQUFXLEVBQ1gsSUFBQSxrQkFBUSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUN4QyxDQUFDO0lBRUYsT0FBTztRQUNMLHFCQUFxQixFQUFFO1lBQ3JCLE9BQU8sRUFBRSwrQ0FBK0M7WUFDeEQsS0FBSyxFQUFFLGVBQWUsQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7U0FDMUY7UUFDRCxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7S0FDNUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiaXRjb2luanNsaWIgZnJvbSAnYml0Y29pbmpzLWxpYic7XG5pbXBvcnQgeyBFQ1BhaXJJbnRlcmZhY2UgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgKiBhcyB2ZW5kb3IgZnJvbSAnQGJpdGdvLWJldGEvYmFieWxvbmxhYnMtaW8tYnRjLXN0YWtpbmctdHMnO1xuaW1wb3J0ICogYXMgYmFieWxvblByb3RvYnVmIGZyb20gJ0BiYWJ5bG9ubGFicy1pby9iYWJ5bG9uLXByb3RvLXRzJztcbmltcG9ydCB7IHRvQmVjaDMyIH0gZnJvbSAnYml0Y29pbmpzLWxpYi9zcmMvYWRkcmVzcyc7XG5pbXBvcnQgeyBnZXRCYWJ5bG9uUGFyYW1CeUJ0Y0hlaWdodCB9IGZyb20gJ0BiaXRnby1iZXRhL2JhYnlsb25sYWJzLWlvLWJ0Yy1zdGFraW5nLXRzJztcblxuaW1wb3J0IHtcbiAgQmFieWxvbkRlc2NyaXB0b3JCdWlsZGVyLFxuICBjcmVhdGVVbnNpZ25lZFByZVN0YWtlUmVnaXN0cmF0aW9uQmFieWxvblRyYW5zYWN0aW9uV2l0aEJ0Y1Byb3ZpZGVyLFxuICBnZXRCdGNQcm92aWRlckZvckVDS2V5LFxuICBWYWx1ZVdpdGhUeXBlVXJsLFxufSBmcm9tICcuLi8uLi8uLi9zcmMvYmFieWxvbic7XG5cbmltcG9ydCB7IGdldFhPbmx5UHVia2V5IH0gZnJvbSAnLi9rZXkudXRpbHMnO1xuXG50eXBlIFJlc3VsdCA9IHtcbiAgdW5zaWduZWREZWxlZ2F0aW9uTXNnOiBWYWx1ZVdpdGhUeXBlVXJsPGJhYnlsb25Qcm90b2J1Zi5idGNzdGFraW5ndHguTXNnQ3JlYXRlQlRDRGVsZWdhdGlvbj47XG4gIHN0YWtpbmdUeDogYml0Y29pbmpzbGliLlRyYW5zYWN0aW9uO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJpdEdvVXR4b1N0YWtpbmdNc2dDcmVhdGVCdGNEZWxlZ2F0aW9uKFxuICBuZXR3b3JrOiBiaXRjb2luanNsaWIuTmV0d29yayxcbiAgc3Rha2VyS2V5OiBFQ1BhaXJJbnRlcmZhY2UsXG4gIGZpbmFsaXR5UHJvdmlkZXI6IEVDUGFpckludGVyZmFjZSxcbiAgZGVzY3JpcHRvckJ1aWxkZXI6IEJhYnlsb25EZXNjcmlwdG9yQnVpbGRlcixcbiAgc3Rha2luZ1BhcmFtczogdmVuZG9yLlZlcnNpb25lZFN0YWtpbmdQYXJhbXNbXSxcbiAgY2hhbmdlQWRkcmVzczogc3RyaW5nLFxuICBhbW91bnQ6IG51bWJlcixcbiAgdXR4bzogdmVuZG9yLlVUWE8sXG4gIGZlZVJhdGVTYXRCOiBudW1iZXIsXG4gIGJsb2NrSGVpZ2h0OiBudW1iZXJcbik6IFByb21pc2U8UmVzdWx0PiB7XG4gIHJldHVybiBhd2FpdCBjcmVhdGVVbnNpZ25lZFByZVN0YWtlUmVnaXN0cmF0aW9uQmFieWxvblRyYW5zYWN0aW9uV2l0aEJ0Y1Byb3ZpZGVyKFxuICAgIGdldEJ0Y1Byb3ZpZGVyRm9yRUNLZXkoZGVzY3JpcHRvckJ1aWxkZXIsIHN0YWtlcktleSksXG4gICAgbmV0d29yayxcbiAgICB7XG4gICAgICBhZGRyZXNzOiBjaGFuZ2VBZGRyZXNzLFxuICAgICAgcHVibGljS2V5Tm9Db29yZEhleDogZ2V0WE9ubHlQdWJrZXkoc3Rha2VyS2V5KS50b1N0cmluZygnaGV4JyksXG4gICAgfSxcbiAgICB7XG4gICAgICBmaW5hbGl0eVByb3ZpZGVyUGtzTm9Db29yZEhleDogW2dldFhPbmx5UHVia2V5KGZpbmFsaXR5UHJvdmlkZXIpLnRvU3RyaW5nKCdoZXgnKV0sXG4gICAgICBzdGFraW5nQW1vdW50U2F0OiBhbW91bnQsXG4gICAgICBzdGFraW5nVGltZWxvY2s6IGdldEJhYnlsb25QYXJhbUJ5QnRjSGVpZ2h0KGJsb2NrSGVpZ2h0LCBzdGFraW5nUGFyYW1zKS5taW5TdGFraW5nVGltZUJsb2NrcyxcbiAgICB9LFxuICAgIDgwMF8wMDAsXG4gICAgW3V0eG9dLFxuICAgIGZlZVJhdGVTYXRCLFxuICAgIHRvQmVjaDMyKEJ1ZmZlci5mcm9tKCd0ZXN0JyksIDAsICdiYm4nKSxcbiAgICAnZGVsZWdhdGlvbjpjcmVhdGUnLFxuICAgIHN0YWtpbmdQYXJhbXNcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFZlbmRvck1zZ0NyZWF0ZUJ0Y0RlbGVnYXRpb24oXG4gIG5ldHdvcms6IGJpdGNvaW5qc2xpYi5OZXR3b3JrLFxuICBzdGFrZXJLZXk6IEVDUGFpckludGVyZmFjZSxcbiAgZmluYWxpdHlQcm92aWRlcjogRUNQYWlySW50ZXJmYWNlLFxuICBkZXNjcmlwdG9yQnVpbGRlcjogQmFieWxvbkRlc2NyaXB0b3JCdWlsZGVyLFxuICBzdGFraW5nUGFyYW1zOiB2ZW5kb3IuVmVyc2lvbmVkU3Rha2luZ1BhcmFtc1tdLFxuICBjaGFuZ2VBZGRyZXNzOiBzdHJpbmcsXG4gIGFtb3VudDogbnVtYmVyLFxuICB1dHhvOiB2ZW5kb3IuVVRYTyxcbiAgZmVlUmF0ZVNhdEI6IG51bWJlcixcbiAgYmxvY2tIZWlnaHQ6IG51bWJlclxuKTogUHJvbWlzZTxSZXN1bHQ+IHtcbiAgY29uc3QgYmFieWxvblByb3ZpZGVyOiB2ZW5kb3IuQmFieWxvblByb3ZpZGVyID0ge1xuICAgIGFzeW5jIHNpZ25UcmFuc2FjdGlvbihtc2cpIHtcbiAgICAgIC8vIHJldHVybiB1bnNpZ25lZCBwYXlsb2FkXG4gICAgICByZXR1cm4gYmFieWxvblByb3RvYnVmLmJ0Y3N0YWtpbmd0eC5Nc2dDcmVhdGVCVENEZWxlZ2F0aW9uLmVuY29kZShcbiAgICAgICAgbXNnLnZhbHVlIGFzIGJhYnlsb25Qcm90b2J1Zi5idGNzdGFraW5ndHguTXNnQ3JlYXRlQlRDRGVsZWdhdGlvblxuICAgICAgKS5maW5pc2goKTtcbiAgICB9LFxuICB9O1xuICBjb25zdCBtYW5hZ2VyID0gbmV3IHZlbmRvci5CYWJ5bG9uQnRjU3Rha2luZ01hbmFnZXIoXG4gICAgbmV0d29yayxcbiAgICBzdGFraW5nUGFyYW1zLFxuICAgIGdldEJ0Y1Byb3ZpZGVyRm9yRUNLZXkoZGVzY3JpcHRvckJ1aWxkZXIsIHN0YWtlcktleSksXG4gICAgYmFieWxvblByb3ZpZGVyXG4gICk7XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbWFuYWdlci5wcmVTdGFrZVJlZ2lzdHJhdGlvbkJhYnlsb25UcmFuc2FjdGlvbihcbiAgICB7XG4gICAgICBhZGRyZXNzOiBjaGFuZ2VBZGRyZXNzLFxuICAgICAgcHVibGljS2V5Tm9Db29yZEhleDogZ2V0WE9ubHlQdWJrZXkoc3Rha2VyS2V5KS50b1N0cmluZygnaGV4JyksXG4gICAgfSxcbiAgICB7XG4gICAgICBmaW5hbGl0eVByb3ZpZGVyUGtzTm9Db29yZEhleDogW2dldFhPbmx5UHVia2V5KGZpbmFsaXR5UHJvdmlkZXIpLnRvU3RyaW5nKCdoZXgnKV0sXG4gICAgICBzdGFraW5nQW1vdW50U2F0OiBhbW91bnQsXG4gICAgICBzdGFraW5nVGltZWxvY2s6IGdldEJhYnlsb25QYXJhbUJ5QnRjSGVpZ2h0KGJsb2NrSGVpZ2h0LCBzdGFraW5nUGFyYW1zKS5taW5TdGFraW5nVGltZUJsb2NrcyxcbiAgICB9LFxuICAgIGJsb2NrSGVpZ2h0LFxuICAgIFt1dHhvXSxcbiAgICBmZWVSYXRlU2F0QixcbiAgICB0b0JlY2gzMihCdWZmZXIuZnJvbSgndGVzdCcpLCAwLCAnYmJuJylcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHVuc2lnbmVkRGVsZWdhdGlvbk1zZzoge1xuICAgICAgdHlwZVVybDogJy9iYWJ5bG9uLmJ0Y3N0YWtpbmcudjEuTXNnQ3JlYXRlQlRDRGVsZWdhdGlvbicsXG4gICAgICB2YWx1ZTogYmFieWxvblByb3RvYnVmLmJ0Y3N0YWtpbmd0eC5Nc2dDcmVhdGVCVENEZWxlZ2F0aW9uLmRlY29kZShyZXN1bHQuc2lnbmVkQmFieWxvblR4KSxcbiAgICB9LFxuICAgIHN0YWtpbmdUeDogcmVzdWx0LnN0YWtpbmdUeCxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../../../../test/unit/coreDao/descriptor.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,144 @@
|
|
|
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
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
38
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
39
|
+
const testutil_1 = require("@bitgo-beta/utxo-core/testutil");
|
|
40
|
+
const coreDao_1 = require("../../../src/coreDao");
|
|
41
|
+
const utils_1 = require("./utils");
|
|
42
|
+
describe('descriptor', function () {
|
|
43
|
+
const baseFixturePath = 'test/fixtures/coreDao/descriptor/';
|
|
44
|
+
const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
|
|
45
|
+
const key1 = rootWalletKeys.triple[0];
|
|
46
|
+
const key2 = rootWalletKeys.triple[1];
|
|
47
|
+
const key3 = rootWalletKeys.triple[2];
|
|
48
|
+
const validLocktime = 2048;
|
|
49
|
+
it('should fail if m is longer than the number of keys or not at least 1', function () {
|
|
50
|
+
assert.throws(() => {
|
|
51
|
+
(0, coreDao_1.createMultiSigDescriptor)('sh', validLocktime, 3, [key1, key2], false);
|
|
52
|
+
});
|
|
53
|
+
assert.throws(() => {
|
|
54
|
+
(0, coreDao_1.createMultiSigDescriptor)('sh', validLocktime, 0, [key1, key2], false);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
it('should fail if locktime is invalid', function () {
|
|
58
|
+
assert.throws(() => {
|
|
59
|
+
(0, coreDao_1.createMultiSigDescriptor)('sh', 0, 2, [key1, key2], false);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
async function runTestForParams(scriptType, m, keys) {
|
|
63
|
+
const fixturePath = baseFixturePath + `${scriptType}-${m}of${keys.length}`;
|
|
64
|
+
describe(`should create a ${m} of ${keys.length} multi-sig ${scriptType} descriptor`, function () {
|
|
65
|
+
it('has expected descriptor string', async function () {
|
|
66
|
+
const descriptorString = (0, coreDao_1.createMultiSigDescriptor)(scriptType, validLocktime, m, keys, false);
|
|
67
|
+
assert.strictEqual(descriptorString, await (0, testutil_1.getFixture)(fixturePath + `-string.txt`, descriptorString), descriptorString);
|
|
68
|
+
});
|
|
69
|
+
it('has expected AST', async function () {
|
|
70
|
+
const descriptor = wasm_utxo_1.Descriptor.fromString((0, coreDao_1.createMultiSigDescriptor)(scriptType, validLocktime, m, keys, false), 'derivable');
|
|
71
|
+
assert.deepStrictEqual(descriptor.node(), await (0, testutil_1.getFixture)(fixturePath + '-ast.json', descriptor.node()));
|
|
72
|
+
});
|
|
73
|
+
it('has expected asm', async function () {
|
|
74
|
+
const descriptor = wasm_utxo_1.Descriptor.fromString((0, coreDao_1.createMultiSigDescriptor)(scriptType, validLocktime, m, keys, false), 'derivable');
|
|
75
|
+
const asmString = descriptor.atDerivationIndex(0).toAsmString();
|
|
76
|
+
assert.strictEqual(asmString, await (0, testutil_1.getFixture)(fixturePath + '-asm.txt', asmString), asmString);
|
|
77
|
+
});
|
|
78
|
+
it('can be signed', async function () {
|
|
79
|
+
// Derive the script from the descriptor
|
|
80
|
+
const descriptor = wasm_utxo_1.Descriptor.fromString((0, coreDao_1.createMultiSigDescriptor)(scriptType, validLocktime, m, keys, false), 'derivable');
|
|
81
|
+
const descriptorAt0 = descriptor.atDerivationIndex(0);
|
|
82
|
+
const script = Buffer.from(descriptorAt0.scriptPubkey());
|
|
83
|
+
// Make the prevTx
|
|
84
|
+
const prevPsbt = utxolib.testutil.constructPsbt([{ scriptType: 'p2wsh', value: BigInt(1.1e8) }], [{ script: script.toString('hex'), value: BigInt(1e8) }], utxolib.networks.bitcoin, rootWalletKeys, 'fullsigned');
|
|
85
|
+
const prevTx = prevPsbt.finalizeAllInputs().extractTransaction();
|
|
86
|
+
// Create the PSBT and sign
|
|
87
|
+
const psbt = Object.assign(new utxolib.Psbt({ network: utxolib.networks.bitcoin }), {
|
|
88
|
+
locktime: validLocktime,
|
|
89
|
+
});
|
|
90
|
+
psbt.addInput({
|
|
91
|
+
hash: prevTx.getId(),
|
|
92
|
+
index: 0,
|
|
93
|
+
sequence: 0xfffffffe,
|
|
94
|
+
});
|
|
95
|
+
if (scriptType === 'sh-wsh') {
|
|
96
|
+
psbt.updateInput(0, { witnessUtxo: { script, value: BigInt(1e8) } });
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
psbt.updateInput(0, { nonWitnessUtxo: prevTx.toBuffer() });
|
|
100
|
+
}
|
|
101
|
+
psbt.addOutput({ script, value: BigInt(0.9e8) });
|
|
102
|
+
(0, utils_1.updateInputWithDescriptor)(psbt, 0, descriptorAt0);
|
|
103
|
+
keys.forEach((signer, i) => {
|
|
104
|
+
if (i >= m) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
psbt.signAllInputsHD(signer);
|
|
108
|
+
});
|
|
109
|
+
// Get the fully signed transaction and check
|
|
110
|
+
const signedTx = (0, utils_1.finalizePsbt)(psbt).extractTransaction().toBuffer();
|
|
111
|
+
assert.strictEqual(signedTx.toString('hex'), await (0, testutil_1.getFixture)(fixturePath + '-tx.txt', signedTx.toString('hex')));
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
runTestForParams('sh', 2, [key1, key2]);
|
|
116
|
+
runTestForParams('sh-wsh', 2, [key1, key2]);
|
|
117
|
+
runTestForParams('sh', 3, [key1, key2, key3]);
|
|
118
|
+
runTestForParams('wsh', 3, [key1, key2, key3]);
|
|
119
|
+
it('should recreate the script used in testnet staking transaction', function () {
|
|
120
|
+
// Source: https://mempool.space/testnet/address/2MxTi2EhHKgdJFKRTBttVGGxir9ZzjmKCXw
|
|
121
|
+
// 2 of 2 multisig
|
|
122
|
+
const timelock = 'fce4cb66';
|
|
123
|
+
const pubkey1 = '03ecb6d4b7f5d56962e547fc52dd588359f5729c0ba856d6978b84723895a16691';
|
|
124
|
+
const pubkey2 = '024aaea25d82b1db2be030a05b641d6302e48ed652b1ca9cb08a67267fcbb56747';
|
|
125
|
+
const redeemScriptASM = [
|
|
126
|
+
'OP_PUSHBYTES_4',
|
|
127
|
+
timelock,
|
|
128
|
+
'OP_CLTV',
|
|
129
|
+
'OP_DROP',
|
|
130
|
+
'OP_PUSHNUM_2',
|
|
131
|
+
'OP_PUSHBYTES_33',
|
|
132
|
+
pubkey1,
|
|
133
|
+
'OP_PUSHBYTES_33',
|
|
134
|
+
pubkey2,
|
|
135
|
+
'OP_PUSHNUM_2',
|
|
136
|
+
'OP_CHECKMULTISIG',
|
|
137
|
+
].join(' ');
|
|
138
|
+
const decodedTimelock = (0, coreDao_1.decodeTimelock)(Buffer.from(timelock, 'hex'));
|
|
139
|
+
const descriptor = (0, coreDao_1.createMultiSigDescriptor)('sh', decodedTimelock, 2, [Buffer.from(pubkey1, 'hex'), Buffer.from(pubkey2, 'hex')], false);
|
|
140
|
+
const descriptorASM = wasm_utxo_1.Descriptor.fromString(descriptor, 'definite').toAsmString();
|
|
141
|
+
assert.deepStrictEqual(redeemScriptASM, descriptorASM);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9jb3JlRGFvL2Rlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFFakMsOERBQWdEO0FBQ2hELGdEQUE4QztBQUM5Qyw2REFBNEQ7QUFFNUQsa0RBQWdGO0FBRWhGLG1DQUFrRTtBQUVsRSxRQUFRLENBQUMsWUFBWSxFQUFFO0lBQ3JCLE1BQU0sZUFBZSxHQUFHLG1DQUFtQyxDQUFDO0lBQzVELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUMvRCxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFFM0IsRUFBRSxDQUFDLHNFQUFzRSxFQUFFO1FBQ3pFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2pCLElBQUEsa0NBQXdCLEVBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNqQixJQUFBLGtDQUF3QixFQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQyxDQUFD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O1FBQ2xCLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUM1QixNQUFNLE9BQU8sR0FBRyxvRUFBb0UsQ0FBQztRQUNyRixNQUFNLE9BQU8sR0FBRyxvRUFBb0UsQ0FBQztRQUNyRixNQUFNLGVBQWUsR0FBRztZQUN0QixnQkFBZ0I7WUFDaEIsUUFBUTtZQUNSLFNBQVM7WUFDVCxTQUFTO1lBQ1QsY0FBYztZQUNkLGlCQUFpQjtZQUNqQixPQUFPO1lBQ1AsaUJBQWlCO1lBQ2pCLE9BQU87WUFDUCxjQUFjO1lBQ2Qsa0JBQWtCO1NBQ25CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRVosTUFBTSxlQUFlLEdBQUcsSUFBQSx3QkFBYyxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckUsTUFBTSxVQUFVLEdBQUcsSUFBQSxrQ0FBd0IsRUFDekMsSUFBSSxFQUNKLGVBQWUsRUFDZixDQUFDLEVBQ0QsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUMxRCxLQUFLLENBQ04sQ0FBQztRQUNGLE1BQU0sYUFBYSxHQUFHLHNCQUFVLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsRixNQUFNLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IHsgZ2V0Rml4dHVyZSB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tY29yZS90ZXN0dXRpbCc7XG5cbmltcG9ydCB7IGNyZWF0ZU11bHRpU2lnRGVzY3JpcHRvciwgZGVjb2RlVGltZWxvY2sgfSBmcm9tICcuLi8uLi8uLi9zcmMvY29yZURhbyc7XG5cbmltcG9ydCB7IGZpbmFsaXplUHNidCwgdXBkYXRlSW5wdXRXaXRoRGVzY3JpcHRvciB9IGZyb20gJy4vdXRpbHMnO1xuXG5kZXNjcmliZSgnZGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYmFzZUZpeHR1cmVQYXRoID0gJ3Rlc3QvZml4dHVyZXMvY29yZURhby9kZXNjcmlwdG9yLyc7XG4gIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gdXR4b2xpYi50ZXN0dXRpbC5nZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuICBjb25zdCBrZXkxID0gcm9vdFdhbGxldEtleXMudHJpcGxlWzBdO1xuICBjb25zdCBrZXkyID0gcm9vdFdhbGxldEtleXMudHJpcGxlWzFdO1xuICBjb25zdCBrZXkzID0gcm9vdFdhbGxldEtleXMudHJpcGxlWzJdO1xuICBjb25zdCB2YWxpZExvY2t0aW1lID0gMjA0ODtcblxuICBpdCgnc2hvdWxkIGZhaWwgaWYgbSBpcyBsb25nZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGtleXMgb3Igbm90IGF0IGxlYXN0IDEnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICBjcmVhdGVNdWx0aVNpZ0Rlc2NyaXB0b3IoJ3NoJywgdmFsaWRMb2NrdGltZSwgMywgW2tleTEsIGtleTJdLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgIGNyZWF0ZU11bHRpU2lnRGVzY3JpcHRvcignc2gnLCB2YWxpZExvY2t0aW1lLCAwLCBba2V5MSwga2V5Ml0sIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIGlmIGxvY2t0aW1lIGlzIGludmFsaWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICBjcmVhdGVNdWx0aVNpZ0Rlc2NyaXB0b3IoJ3NoJywgMCwgMiwgW2tleTEsIGtleTJdLCBmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJ1blRlc3RGb3JQYXJhbXMoc2NyaXB0VHlwZTogJ3NoJyB8ICdzaC13c2gnIHwgJ3dzaCcsIG06IG51bWJlciwga2V5czogdXR4b2xpYi5CSVAzMkludGVyZmFjZVtdKSB7XG4gICAgY29uc3QgZml4dHVyZVBhdGggPSBiYXNlRml4dHVyZVBhdGggKyBgJHtzY3JpcHRUeXBlfS0ke219b2Yke2tleXMubGVuZ3RofWA7XG4gICAgZGVzY3JpYmUoYHNob3VsZCBjcmVhdGUgYSAke219IG9mICR7a2V5cy5sZW5ndGh9IG11bHRpLXNpZyAke3NjcmlwdFR5cGV9IGRlc2NyaXB0b3JgLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnaGFzIGV4cGVjdGVkIGRlc2NyaXB0b3Igc3RyaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yU3RyaW5nID0gY3JlYXRlTXVsdGlTaWdEZXNjcmlwdG9yKHNjcmlwdFR5cGUsIHZhbGlkTG9ja3RpbWUsIG0sIGtleXMsIGZhbHNlKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICAgIGRlc2NyaXB0b3JTdHJpbmcsXG4gICAgICAgICAgYXdhaXQgZ2V0Rml4dHVyZShmaXh0dXJlUGF0aCArIGAtc3RyaW5nLnR4dGAsIGRlc2NyaXB0b3JTdHJpbmcpLFxuICAgICAgICAgIGRlc2NyaXB0b3JTdHJpbmdcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnaGFzIGV4cGVjdGVkIEFTVCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IERlc2NyaXB0b3IuZnJvbVN0cmluZyhcbiAgICAgICAgICBjcmVhdGVNdWx0aVNpZ0Rlc2NyaXB0b3Ioc2NyaXB0VHlwZSwgdmFsaWRMb2NrdGltZSwgbSwga2V5cywgZmFsc2UpLFxuICAgICAgICAgICdkZXJpdmFibGUnXG4gICAgICAgICk7XG5cbiAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChkZXNjcmlwdG9yLm5vZGUoKSwgYXdhaXQgZ2V0Rml4dHVyZShmaXh0dXJlUGF0aCArICctYXN0Lmpzb24nLCBkZXNjcmlwdG9yLm5vZGUoKSkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdoYXMgZXhwZWN0ZWQgYXNtJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gRGVzY3JpcHRvci5mcm9tU3RyaW5nKFxuICAgICAgICAgIGNyZWF0ZU11bHRpU2lnRGVzY3JpcHRvcihzY3JpcHRUeXBlLCB2YWxpZExvY2t0aW1lLCBtLCBrZXlzLCBmYWxzZSksXG4gICAgICAgICAgJ2Rlcml2YWJsZSdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYXNtU3RyaW5nID0gZGVzY3JpcHRvci5hdERlcml2YXRpb25JbmRleCgwKS50b0FzbVN0cmluZygpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYXNtU3RyaW5nLCBhd2FpdCBnZXRGaXh0dXJlKGZpeHR1cmVQYXRoICsgJy1hc20udHh0JywgYXNtU3RyaW5nKSwgYXNtU3RyaW5nKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnY2FuIGJlIHNpZ25lZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gRGVyaXZlIHRoZSBzY3JpcHQgZnJvbSB0aGUgZGVzY3JpcHRvclxuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gRGVzY3JpcHRvci5mcm9tU3RyaW5nKFxuICAgICAgICAgIGNyZWF0ZU11bHRpU2lnRGVzY3JpcHRvcihzY3JpcHRUeXBlLCB2YWxpZExvY2t0aW1lLCBtLCBrZXlzLCBmYWxzZSksXG4gICAgICAgICAgJ2Rlcml2YWJsZSdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvckF0MCA9IGRlc2NyaXB0b3IuYXREZXJpdmF0aW9uSW5kZXgoMCk7XG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IEJ1ZmZlci5mcm9tKGRlc2NyaXB0b3JBdDAuc2NyaXB0UHVia2V5KCkpO1xuXG4gICAgICAgIC8vIE1ha2UgdGhlIHByZXZUeFxuICAgICAgICBjb25zdCBwcmV2UHNidCA9IHV0eG9saWIudGVzdHV0aWwuY29uc3RydWN0UHNidChcbiAgICAgICAgICBbeyBzY3JpcHRUeXBlOiAncDJ3c2gnLCB2YWx1ZTogQmlnSW50KDEuMWU4KSB9XSxcbiAgICAgICAgICBbeyBzY3JpcHQ6IHNjcmlwdC50b1N0cmluZygnaGV4JyksIHZhbHVlOiBCaWdJbnQoMWU4KSB9XSxcbiAgICAgICAgICB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4sXG4gICAgICAgICAgcm9vdFdhbGxldEtleXMsXG4gICAgICAgICAgJ2Z1bGxzaWduZWQnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHByZXZUeCA9IHByZXZQc2J0LmZpbmFsaXplQWxsSW5wdXRzKCkuZXh0cmFjdFRyYW5zYWN0aW9uKCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBQU0JUIGFuZCBzaWduXG4gICAgICAgIGNvbnN0IHBzYnQgPSBPYmplY3QuYXNzaWduKG5ldyB1dHhvbGliLlBzYnQoeyBuZXR3b3JrOiB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4gfSksIHtcbiAgICAgICAgICBsb2NrdGltZTogdmFsaWRMb2NrdGltZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHBzYnQuYWRkSW5wdXQoe1xuICAgICAgICAgIGhhc2g6IHByZXZUeC5nZXRJZCgpLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIHNlcXVlbmNlOiAweGZmZmZmZmZlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHNjcmlwdFR5cGUgPT09ICdzaC13c2gnKSB7XG4gICAgICAgICAgcHNidC51cGRhdGVJbnB1dCgwLCB7IHdpdG5lc3NVdHhvOiB7IHNjcmlwdCwgdmFsdWU6IEJpZ0ludCgxZTgpIH0gfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHNidC51cGRhdGVJbnB1dCgwLCB7IG5vbldpdG5lc3NVdHhvOiBwcmV2VHgudG9CdWZmZXIoKSB9KTtcbiAgICAgICAgfVxuICAgICAgICBwc2J0LmFkZE91dHB1dCh7IHNjcmlwdCwgdmFsdWU6IEJpZ0ludCgwLjllOCkgfSk7XG4gICAgICAgIHVwZGF0ZUlucHV0V2l0aERlc2NyaXB0b3IocHNidCwgMCwgZGVzY3JpcHRvckF0MCk7XG4gICAgICAgIGtleXMuZm9yRWFjaCgoc2lnbmVyLCBpKSA9PiB7XG4gICAgICAgICAgaWYgKGkgPj0gbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwc2J0LnNpZ25BbGxJbnB1dHNIRChzaWduZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBHZXQgdGhlIGZ1bGx5IHNpZ25lZCB0cmFuc2FjdGlvbiBhbmQgY2hlY2tcbiAgICAgICAgY29uc3Qgc2lnbmVkVHggPSBmaW5hbGl6ZVBzYnQocHNidCkuZXh0cmFjdFRyYW5zYWN0aW9uKCkudG9CdWZmZXIoKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICAgIHNpZ25lZFR4LnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBhd2FpdCBnZXRGaXh0dXJlKGZpeHR1cmVQYXRoICsgJy10eC50eHQnLCBzaWduZWRUeC50b1N0cmluZygnaGV4JykpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJ1blRlc3RGb3JQYXJhbXMoJ3NoJywgMiwgW2tleTEsIGtleTJdKTtcbiAgcnVuVGVzdEZvclBhcmFtcygnc2gtd3NoJywgMiwgW2tleTEsIGtleTJdKTtcbiAgcnVuVGVzdEZvclBhcmFtcygnc2gnLCAzLCBba2V5MSwga2V5Miwga2V5M10pO1xuICBydW5UZXN0Rm9yUGFyYW1zKCd3c2gnLCAzLCBba2V5MSwga2V5Miwga2V5M10pO1xuXG4gIGl0KCdzaG91bGQgcmVjcmVhdGUgdGhlIHNjcmlwdCB1c2VkIGluIHRlc3RuZXQgc3Rha2luZyB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTb3VyY2U6IGh0dHBzOi8vbWVtcG9vbC5zcGFjZS90ZXN0bmV0L2FkZHJlc3MvMk14VGkyRWhIS2dkSkZLUlRCdHRWR0d4aXI5WnpqbUtDWHdcbiAgICAvLyAyIG9mIDIgbXVsdGlzaWdcbiAgICBjb25zdCB0aW1lbG9jayA9ICdmY2U0Y2I2Nic7XG4gICAgY29uc3QgcHVia2V5MSA9ICcwM2VjYjZkNGI3ZjVkNTY5NjJlNTQ3ZmM1MmRkNTg4MzU5ZjU3MjljMGJhODU2ZDY5NzhiODQ3MjM4OTVhMTY2OTEnO1xuICAgIGNvbnN0IHB1YmtleTIgPSAnMDI0YWFlYTI1ZDgyYjFkYjJiZTAzMGEwNWI2NDFkNjMwMmU0OGVkNjUyYjFjYTljYjA4YTY3MjY3ZmNiYjU2NzQ3JztcbiAgICBjb25zdCByZWRlZW1TY3JpcHRBU00gPSBbXG4gICAgICAnT1BfUFVTSEJZVEVTXzQnLFxuICAgICAgdGltZWxvY2ssXG4gICAgICAnT1BfQ0xUVicsXG4gICAgICAnT1BfRFJPUCcsXG4gICAgICAnT1BfUFVTSE5VTV8yJyxcbiAgICAgICdPUF9QVVNIQllURVNfMzMnLFxuICAgICAgcHVia2V5MSxcbiAgICAgICdPUF9QVVNIQllURVNfMzMnLFxuICAgICAgcHVia2V5MixcbiAgICAgICdPUF9QVVNITlVNXzInLFxuICAgICAgJ09QX0NIRUNLTVVMVElTSUcnLFxuICAgIF0uam9pbignICcpO1xuXG4gICAgY29uc3QgZGVjb2RlZFRpbWVsb2NrID0gZGVjb2RlVGltZWxvY2soQnVmZmVyLmZyb20odGltZWxvY2ssICdoZXgnKSk7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGNyZWF0ZU11bHRpU2lnRGVzY3JpcHRvcihcbiAgICAgICdzaCcsXG4gICAgICBkZWNvZGVkVGltZWxvY2ssXG4gICAgICAyLFxuICAgICAgW0J1ZmZlci5mcm9tKHB1YmtleTEsICdoZXgnKSwgQnVmZmVyLmZyb20ocHVia2V5MiwgJ2hleCcpXSxcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgICBjb25zdCBkZXNjcmlwdG9yQVNNID0gRGVzY3JpcHRvci5mcm9tU3RyaW5nKGRlc2NyaXB0b3IsICdkZWZpbml0ZScpLnRvQXNtU3RyaW5nKCk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZWRlZW1TY3JpcHRBU00sIGRlc2NyaXB0b3JBU00pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opReturn.d.ts","sourceRoot":"","sources":["../../../../../test/unit/coreDao/opReturn.ts"],"names":[],"mappings":""}
|