@bitgo/sdk-coin-islm 2.4.2 → 2.4.4
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/test/resources/islm.d.ts +216 -0
- package/dist/test/resources/islm.d.ts.map +1 -0
- package/dist/test/resources/islm.js +219 -0
- package/dist/test/unit/islm.d.ts +2 -0
- package/dist/test/unit/islm.d.ts.map +1 -0
- package/dist/test/unit/islm.js +309 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +92 -0
- package/dist/test/unit/transaction.d.ts +2 -0
- package/dist/test/unit/transaction.d.ts.map +1 -0
- package/dist/test/unit/transaction.js +219 -0
- package/dist/test/unit/transactionBuilder/StakingActivateBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/StakingActivateBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/StakingActivateBuilder.js +154 -0
- package/dist/test/unit/transactionBuilder/StakingDeactivateBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/StakingDeactivateBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/StakingDeactivateBuilder.js +153 -0
- package/dist/test/unit/transactionBuilder/StakingWithdrawRewardsBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/StakingWithdrawRewardsBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/StakingWithdrawRewardsBuilder.js +154 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.js +112 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +189 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +76 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +11 -8
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -668
- package/resources/README.md +0 -15
- package/resources/proto/ethermint/crypto/v1/ethsecp256k1/ethSecp256k1.proto +0 -23
- package/resources/proto/gogoproto/gogo.proto +0 -145
- package/resources/types/ethSecp256k1.ts +0 -183
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const sdk_api_1 = require("@bitgo/sdk-api");
|
|
7
|
+
const sdk_test_1 = require("@bitgo/sdk-test");
|
|
8
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
9
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
10
|
+
const src_1 = require("../../src");
|
|
11
|
+
const utils_1 = __importDefault(require("../../src/lib/utils"));
|
|
12
|
+
const islm_1 = require("../resources/islm");
|
|
13
|
+
const should = require("should");
|
|
14
|
+
describe('Islm', function () {
|
|
15
|
+
let bitgo;
|
|
16
|
+
let basecoin;
|
|
17
|
+
before(function () {
|
|
18
|
+
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' });
|
|
19
|
+
bitgo.safeRegister('islm', src_1.Islm.createInstance);
|
|
20
|
+
bitgo.safeRegister('tislm', src_1.Tislm.createInstance);
|
|
21
|
+
bitgo.initializeTestVars();
|
|
22
|
+
basecoin = bitgo.coin('tislm');
|
|
23
|
+
});
|
|
24
|
+
it('should return the right info', function () {
|
|
25
|
+
const islm = bitgo.coin('islm');
|
|
26
|
+
const tislm = bitgo.coin('tislm');
|
|
27
|
+
islm.getChain().should.equal('islm');
|
|
28
|
+
islm.getFamily().should.equal('islm');
|
|
29
|
+
islm.getFullName().should.equal('Islamic Coin');
|
|
30
|
+
islm.getBaseFactor().should.equal(1e18);
|
|
31
|
+
tislm.getChain().should.equal('tislm');
|
|
32
|
+
tislm.getFamily().should.equal('islm');
|
|
33
|
+
tislm.getFullName().should.equal('Testnet Islamic Coin');
|
|
34
|
+
tislm.getBaseFactor().should.equal(1e18);
|
|
35
|
+
});
|
|
36
|
+
describe('Address Validation', () => {
|
|
37
|
+
it('should get address details without memoId', function () {
|
|
38
|
+
const addressDetails = basecoin.getAddressDetails(islm_1.address.noMemoIdAddress);
|
|
39
|
+
addressDetails.address.should.equal(islm_1.address.noMemoIdAddress);
|
|
40
|
+
should.not.exist(addressDetails.memoId);
|
|
41
|
+
});
|
|
42
|
+
it('should get address details with memoId', function () {
|
|
43
|
+
const addressDetails = basecoin.getAddressDetails(islm_1.address.validMemoIdAddress);
|
|
44
|
+
addressDetails.address.should.equal(islm_1.address.validMemoIdAddress.split('?')[0]);
|
|
45
|
+
addressDetails.memoId.should.equal('2');
|
|
46
|
+
});
|
|
47
|
+
it('should throw on multiple memo id address', () => {
|
|
48
|
+
(() => {
|
|
49
|
+
basecoin.getAddressDetails(islm_1.address.multipleMemoIdAddress);
|
|
50
|
+
}).should.throw();
|
|
51
|
+
});
|
|
52
|
+
it('should validate wallet receive address', async function () {
|
|
53
|
+
const receiveAddress = {
|
|
54
|
+
address: 'haqq1g3g6nfmqf3f9lmdhf5g84pu7ustw8jt7tvrfzc?memoId=7',
|
|
55
|
+
coinSpecific: {
|
|
56
|
+
rootAddress: 'haqq1g3g6nfmqf3f9lmdhf5g84pu7ustw8jt7tvrfzc',
|
|
57
|
+
memoID: '7',
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
const isValid = await basecoin.isWalletAddress(receiveAddress);
|
|
61
|
+
isValid.should.equal(true);
|
|
62
|
+
});
|
|
63
|
+
it('should validate account addresses correctly', () => {
|
|
64
|
+
should.equal(utils_1.default.isValidAddress(islm_1.address.address1), true);
|
|
65
|
+
should.equal(utils_1.default.isValidAddress(islm_1.address.address2), true);
|
|
66
|
+
should.equal(utils_1.default.isValidAddress(islm_1.address.address3), false);
|
|
67
|
+
should.equal(utils_1.default.isValidAddress(islm_1.address.address4), true);
|
|
68
|
+
should.equal(utils_1.default.isValidAddress('dfjk35y'), false);
|
|
69
|
+
should.equal(utils_1.default.isValidAddress(undefined), false);
|
|
70
|
+
should.equal(utils_1.default.isValidAddress(''), false);
|
|
71
|
+
should.equal(utils_1.default.isValidAddress(islm_1.address.validMemoIdAddress), true);
|
|
72
|
+
should.equal(utils_1.default.isValidAddress(islm_1.address.multipleMemoIdAddress), false);
|
|
73
|
+
});
|
|
74
|
+
it('should validate validator addresses correctly', () => {
|
|
75
|
+
should.equal(utils_1.default.isValidValidatorAddress(islm_1.address.validatorAddress1), true);
|
|
76
|
+
should.equal(utils_1.default.isValidValidatorAddress(islm_1.address.validatorAddress2), true);
|
|
77
|
+
should.equal(utils_1.default.isValidValidatorAddress(islm_1.address.validatorAddress3), false);
|
|
78
|
+
should.equal(utils_1.default.isValidValidatorAddress(islm_1.address.validatorAddress4), false);
|
|
79
|
+
should.equal(utils_1.default.isValidValidatorAddress('dfjk35y'), false);
|
|
80
|
+
should.equal(utils_1.default.isValidValidatorAddress(undefined), false);
|
|
81
|
+
should.equal(utils_1.default.isValidValidatorAddress(''), false);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
describe('Verify transaction: ', () => {
|
|
85
|
+
it('should succeed to verify transaction', async function () {
|
|
86
|
+
const txPrebuild = {
|
|
87
|
+
txHex: islm_1.TEST_SEND_TX.signedTxBase64,
|
|
88
|
+
txInfo: {},
|
|
89
|
+
};
|
|
90
|
+
const txParams = {
|
|
91
|
+
recipients: [
|
|
92
|
+
{
|
|
93
|
+
address: islm_1.TEST_SEND_TX.recipient,
|
|
94
|
+
amount: islm_1.TEST_SEND_TX.sendAmount,
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
};
|
|
98
|
+
const verification = {};
|
|
99
|
+
const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild, verification });
|
|
100
|
+
isTransactionVerified.should.equal(true);
|
|
101
|
+
});
|
|
102
|
+
it('should succeed to verify delegate transaction', async function () {
|
|
103
|
+
const txPrebuild = {
|
|
104
|
+
txHex: islm_1.TEST_DELEGATE_TX.signedTxBase64,
|
|
105
|
+
txInfo: {},
|
|
106
|
+
};
|
|
107
|
+
const txParams = {
|
|
108
|
+
recipients: [
|
|
109
|
+
{
|
|
110
|
+
address: islm_1.TEST_DELEGATE_TX.validator,
|
|
111
|
+
amount: islm_1.TEST_DELEGATE_TX.sendAmount,
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
};
|
|
115
|
+
const verification = {};
|
|
116
|
+
const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild, verification });
|
|
117
|
+
isTransactionVerified.should.equal(true);
|
|
118
|
+
});
|
|
119
|
+
it('should succeed to verify undelegate transaction', async function () {
|
|
120
|
+
const txPrebuild = {
|
|
121
|
+
txHex: islm_1.TEST_UNDELEGATE_TX.signedTxBase64,
|
|
122
|
+
txInfo: {},
|
|
123
|
+
};
|
|
124
|
+
const txParams = {
|
|
125
|
+
recipients: [
|
|
126
|
+
{
|
|
127
|
+
address: islm_1.TEST_UNDELEGATE_TX.validator,
|
|
128
|
+
amount: islm_1.TEST_UNDELEGATE_TX.sendAmount,
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
};
|
|
132
|
+
const verification = {};
|
|
133
|
+
const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild, verification });
|
|
134
|
+
isTransactionVerified.should.equal(true);
|
|
135
|
+
});
|
|
136
|
+
it('should succeed to verify withdraw rewards transaction', async function () {
|
|
137
|
+
const txPrebuild = {
|
|
138
|
+
txHex: islm_1.TEST_WITHDRAW_REWARDS_TX.signedTxBase64,
|
|
139
|
+
txInfo: {},
|
|
140
|
+
};
|
|
141
|
+
const txParams = {
|
|
142
|
+
recipients: [
|
|
143
|
+
{
|
|
144
|
+
address: islm_1.TEST_WITHDRAW_REWARDS_TX.validator,
|
|
145
|
+
amount: 'UNAVAILABLE',
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
};
|
|
149
|
+
const verification = {};
|
|
150
|
+
const isTransactionVerified = await basecoin.verifyTransaction({ txParams, txPrebuild, verification });
|
|
151
|
+
isTransactionVerified.should.equal(true);
|
|
152
|
+
});
|
|
153
|
+
it('should fail to verify transaction with invalid param', async function () {
|
|
154
|
+
const txPrebuild = {};
|
|
155
|
+
const txParams = { recipients: undefined };
|
|
156
|
+
await basecoin
|
|
157
|
+
.verifyTransaction({
|
|
158
|
+
txParams,
|
|
159
|
+
txPrebuild,
|
|
160
|
+
})
|
|
161
|
+
.should.rejectedWith('missing required tx prebuild property txHex');
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
describe('Explain Transaction: ', () => {
|
|
165
|
+
it('should explain a transfer transaction', async function () {
|
|
166
|
+
const explainedTransaction = await basecoin.explainTransaction({
|
|
167
|
+
txHex: islm_1.TEST_SEND_TX.signedTxBase64,
|
|
168
|
+
});
|
|
169
|
+
explainedTransaction.should.deepEqual({
|
|
170
|
+
displayOrder: ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'],
|
|
171
|
+
id: islm_1.TEST_SEND_TX.hash,
|
|
172
|
+
outputs: [
|
|
173
|
+
{
|
|
174
|
+
address: islm_1.TEST_SEND_TX.recipient,
|
|
175
|
+
amount: islm_1.TEST_SEND_TX.sendAmount,
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
outputAmount: islm_1.TEST_SEND_TX.sendAmount,
|
|
179
|
+
changeOutputs: [],
|
|
180
|
+
changeAmount: '0',
|
|
181
|
+
fee: { fee: islm_1.TEST_SEND_TX.gasBudget.amount[0].amount },
|
|
182
|
+
type: 0,
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
it('should explain a delegate transaction', async function () {
|
|
186
|
+
const explainedTransaction = await basecoin.explainTransaction({
|
|
187
|
+
txHex: islm_1.TEST_DELEGATE_TX.signedTxBase64,
|
|
188
|
+
});
|
|
189
|
+
explainedTransaction.should.deepEqual({
|
|
190
|
+
displayOrder: ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'],
|
|
191
|
+
id: islm_1.TEST_DELEGATE_TX.hash,
|
|
192
|
+
outputs: [
|
|
193
|
+
{
|
|
194
|
+
address: islm_1.TEST_DELEGATE_TX.validator,
|
|
195
|
+
amount: islm_1.TEST_DELEGATE_TX.sendAmount,
|
|
196
|
+
},
|
|
197
|
+
],
|
|
198
|
+
outputAmount: islm_1.TEST_DELEGATE_TX.sendAmount,
|
|
199
|
+
changeOutputs: [],
|
|
200
|
+
changeAmount: '0',
|
|
201
|
+
fee: { fee: islm_1.TEST_DELEGATE_TX.gasBudget.amount[0].amount },
|
|
202
|
+
type: 13,
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
it('should explain a undelegate transaction', async function () {
|
|
206
|
+
const explainedTransaction = await basecoin.explainTransaction({
|
|
207
|
+
txHex: islm_1.TEST_UNDELEGATE_TX.signedTxBase64,
|
|
208
|
+
});
|
|
209
|
+
explainedTransaction.should.deepEqual({
|
|
210
|
+
displayOrder: ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'],
|
|
211
|
+
id: islm_1.TEST_UNDELEGATE_TX.hash,
|
|
212
|
+
outputs: [
|
|
213
|
+
{
|
|
214
|
+
address: islm_1.TEST_UNDELEGATE_TX.validator,
|
|
215
|
+
amount: islm_1.TEST_UNDELEGATE_TX.sendAmount,
|
|
216
|
+
},
|
|
217
|
+
],
|
|
218
|
+
outputAmount: islm_1.TEST_UNDELEGATE_TX.sendAmount,
|
|
219
|
+
changeOutputs: [],
|
|
220
|
+
changeAmount: '0',
|
|
221
|
+
fee: { fee: islm_1.TEST_UNDELEGATE_TX.gasBudget.amount[0].amount },
|
|
222
|
+
type: 17,
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
it('should explain a withdraw transaction', async function () {
|
|
226
|
+
const explainedTransaction = await basecoin.explainTransaction({
|
|
227
|
+
txHex: islm_1.TEST_WITHDRAW_REWARDS_TX.signedTxBase64,
|
|
228
|
+
});
|
|
229
|
+
explainedTransaction.should.deepEqual({
|
|
230
|
+
displayOrder: ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'],
|
|
231
|
+
id: islm_1.TEST_WITHDRAW_REWARDS_TX.hash,
|
|
232
|
+
outputs: [
|
|
233
|
+
{
|
|
234
|
+
address: islm_1.TEST_WITHDRAW_REWARDS_TX.validator,
|
|
235
|
+
amount: 'UNAVAILABLE',
|
|
236
|
+
},
|
|
237
|
+
],
|
|
238
|
+
outputAmount: undefined,
|
|
239
|
+
changeOutputs: [],
|
|
240
|
+
changeAmount: '0',
|
|
241
|
+
fee: { fee: islm_1.TEST_WITHDRAW_REWARDS_TX.gasBudget.amount[0].amount },
|
|
242
|
+
type: 15,
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
it('should explain a transfer transaction with memo', async function () {
|
|
246
|
+
const explainedTransaction = await basecoin.explainTransaction({
|
|
247
|
+
txHex: islm_1.TEST_TX_WITH_MEMO.signedTxBase64,
|
|
248
|
+
});
|
|
249
|
+
explainedTransaction.should.deepEqual({
|
|
250
|
+
displayOrder: ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'],
|
|
251
|
+
id: islm_1.TEST_TX_WITH_MEMO.hash,
|
|
252
|
+
outputs: [
|
|
253
|
+
{
|
|
254
|
+
address: islm_1.TEST_TX_WITH_MEMO.recipient,
|
|
255
|
+
amount: islm_1.TEST_TX_WITH_MEMO.sendAmount,
|
|
256
|
+
memo: islm_1.TEST_TX_WITH_MEMO.memo,
|
|
257
|
+
},
|
|
258
|
+
],
|
|
259
|
+
outputAmount: islm_1.TEST_TX_WITH_MEMO.sendAmount,
|
|
260
|
+
changeOutputs: [],
|
|
261
|
+
changeAmount: '0',
|
|
262
|
+
fee: { fee: islm_1.TEST_TX_WITH_MEMO.gasBudget.amount[0].amount },
|
|
263
|
+
type: 0,
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
it('should fail to explain transaction with missing params', async function () {
|
|
267
|
+
try {
|
|
268
|
+
await basecoin.explainTransaction({});
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
should.equal(error.message, 'missing required txHex parameter');
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
it('should fail to explain transaction with invalid params', async function () {
|
|
275
|
+
try {
|
|
276
|
+
await basecoin.explainTransaction({ txHex: 'randomString' });
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
should.equal(error.message.startsWith('Invalid transaction:'), true);
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
describe('Parse Transactions: ', () => {
|
|
284
|
+
it('should parse a transfer transaction', async function () {
|
|
285
|
+
const transferInputsResponse = {
|
|
286
|
+
address: islm_1.TEST_SEND_TX.recipient,
|
|
287
|
+
amount: new bignumber_js_1.default(islm_1.TEST_SEND_TX.sendAmount).plus(islm_1.TEST_SEND_TX.gasBudget.amount[0].amount).toFixed(),
|
|
288
|
+
};
|
|
289
|
+
const transferOutputsResponse = {
|
|
290
|
+
address: islm_1.TEST_SEND_TX.recipient,
|
|
291
|
+
amount: islm_1.TEST_SEND_TX.sendAmount,
|
|
292
|
+
};
|
|
293
|
+
const parsedTransaction = await basecoin.parseTransaction({ txHex: islm_1.TEST_SEND_TX.signedTxBase64 });
|
|
294
|
+
parsedTransaction.should.deepEqual({
|
|
295
|
+
inputs: [transferInputsResponse],
|
|
296
|
+
outputs: [transferOutputsResponse],
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
it('should fail to parse a transfer transaction when explainTransaction response is undefined', async function () {
|
|
300
|
+
const stub = sinon_1.default.stub(src_1.Islm.prototype, 'explainTransaction');
|
|
301
|
+
stub.resolves(undefined);
|
|
302
|
+
await basecoin
|
|
303
|
+
.parseTransaction({ txHex: islm_1.TEST_SEND_TX.signedTxBase64 })
|
|
304
|
+
.should.be.rejectedWith('Invalid transaction');
|
|
305
|
+
stub.restore();
|
|
306
|
+
});
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNsbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9pc2xtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNENBQTBDO0FBQzFDLDhDQUEwRDtBQUMxRCxnRUFBcUM7QUFDckMsa0RBQTBCO0FBQzFCLG1DQUF3QztBQUN4QyxnRUFBd0M7QUFDeEMsNENBTzJCO0FBQzNCLGlDQUFrQztBQUVsQyxRQUFRLENBQUMsTUFBTSxFQUFFO0lBQ2YsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksUUFBUSxDQUFDO0lBQ2IsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0RCxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsV0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsV0FB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QUFDLFNBQVM7Z0JBQy9CLE1BQU0sRUFBRSxtQkFBWSxDQUFDLFVBQVU7YUFDaEMsQ0FBQztZQUVGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxLQUFLLEVBQUUsbUJBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBRWxHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQ2pDLE1BQU0sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2dCQUNoQyxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQzthQUNuQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyRkFBMkYsRUFBRSxLQUFLO1lBQ25HLE1BQU0sSUFBSSxHQUFHLGVBQUssQ0FBQyxJQUFJLENBQUMsVUFBSSxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekIsTUFBTSxRQUFRO2lCQUNYLGdCQUFnQixDQUFDLEVBQUUsS0FBSyxFQUFFLG1CQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7aUJBQ3hELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IElzbG0sIFRpc2xtIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7XG4gIFRFU1RfREVMRUdBVEVfVFgsXG4gIFRFU1RfU0VORF9UWCxcbiAgVEVTVF9UWF9XSVRIX01FTU8sXG4gIFRFU1RfVU5ERUxFR0FURV9UWCxcbiAgVEVTVF9XSVRIRFJBV19SRVdBUkRTX1RYLFxuICBhZGRyZXNzLFxufSBmcm9tICcuLi9yZXNvdXJjZXMvaXNsbSc7XG5pbXBvcnQgc2hvdWxkID0gcmVxdWlyZSgnc2hvdWxkJyk7XG5cbmRlc2NyaWJlKCdJc2xtJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luO1xuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ21vY2snIH0pO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcignaXNsbScsIElzbG0uY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGlzbG0nLCBUaXNsbS5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0aXNsbScpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiB0aGUgcmlnaHQgaW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpc2xtID0gYml0Z28uY29pbignaXNsbScpO1xuICAgIGNvbnN0IHRpc2xtID0gYml0Z28uY29pbigndGlzbG0nKTtcblxuICAgIGlzbG0uZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ2lzbG0nKTtcbiAgICBpc2xtLmdldEZhbWlseSgpLnNob3VsZC5lcXVhbCgnaXNsbScpO1xuICAgIGlzbG0uZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ0lzbGFtaWMgQ29pbicpO1xuICAgIGlzbG0uZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTE4KTtcblxuICAgIHRpc2xtLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0aXNsbScpO1xuICAgIHRpc2xtLmdldEZhbWlseSgpLnNob3VsZC5lcXVhbCgnaXNsbScpO1xuICAgIHRpc2xtLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdUZXN0bmV0IElzbGFtaWMgQ29pbicpO1xuICAgIHRpc2xtLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWUxOCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIFZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZXQgYWRkcmVzcyBkZXRhaWxzIHdpdGhvdXQgbWVtb0lkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzc0RldGFpbHMgPSBiYXNlY29pbi5nZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzLm5vTWVtb0lkQWRkcmVzcyk7XG4gICAgICBhZGRyZXNzRGV0YWlscy5hZGRyZXNzLnNob3VsZC5lcXVhbChhZGRyZXNzLm5vTWVtb0lkQWRkcmVzcyk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KGFkZHJlc3NEZXRhaWxzLm1lbW9JZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCBhZGRyZXNzIGRldGFpbHMgd2l0aCBtZW1vSWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGRyZXNzRGV0YWlscyA9IGJhc2Vjb2luLmdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MudmFsaWRNZW1vSWRBZGRyZXNzKTtcbiAgICAgIGFkZHJlc3NEZXRhaWxzLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGFkZHJlc3MudmFsaWRNZW1vSWRBZGRyZXNzLnNwbGl0KCc/JylbMF0pO1xuICAgICAgYWRkcmVzc0RldGFpbHMubWVtb0lkLnNob3VsZC5lcXVhbCgnMicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBtdWx0aXBsZSBtZW1vIGlkIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICAoKCkgPT4ge1xuICAgICAgICBiYXNlY29pbi5nZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzLm11bHRpcGxlTWVtb0lkQWRkcmVzcyk7XG4gICAgICB9KS5zaG91bGQudGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgd2FsbGV0IHJlY2VpdmUgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVBZGRyZXNzID0ge1xuICAgICAgICBhZGRyZXNzOiAnaGFxcTFnM2c2bmZtcWYzZjlsbWRoZjVnODRwdTd1c3R3OGp0N3R2cmZ6Yz9tZW1vSWQ9NycsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICAgIHJvb3RBZGRyZXNzOiAnaGFxcTFnM2c2bmZtcWYzZjlsbWRoZjVnODRwdTd1c3R3OGp0N3R2cmZ6YycsXG4gICAgICAgICAgbWVtb0lEOiAnNycsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhyZWNlaXZlQWRkcmVzcyk7XG4gICAgICBpc1ZhbGlkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYWNjb3VudCBhZGRyZXNzZXMgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczEpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MyKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzMyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3M0KSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoJ2RmamszNXknKSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIHN0cmluZyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcygnJyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLnZhbGlkTWVtb0lkQWRkcmVzcyksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MubXVsdGlwbGVNZW1vSWRBZGRyZXNzKSwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB2YWxpZGF0b3IgYWRkcmVzc2VzIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVmFsaWRhdG9yQWRkcmVzcyhhZGRyZXNzLnZhbGlkYXRvckFkZHJlc3MxKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFZhbGlkYXRvckFkZHJlc3MoYWRkcmVzcy52YWxpZGF0b3JBZGRyZXNzMiksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRWYWxpZGF0b3JBZGRyZXNzKGFkZHJlc3MudmFsaWRhdG9yQWRkcmVzczMpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFZhbGlkYXRvckFkZHJlc3MoYWRkcmVzcy52YWxpZGF0b3JBZGRyZXNzNCksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVmFsaWRhdG9yQWRkcmVzcygnZGZqazM1eScpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFZhbGlkYXRvckFkZHJlc3ModW5kZWZpbmVkIGFzIHVua25vd24gYXMgc3RyaW5nKSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRWYWxpZGF0b3JBZGRyZXNzKCcnKSwgZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5IHRyYW5zYWN0aW9uOiAnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBURVNUX1NFTkRfVFguc2lnbmVkVHhCYXNlNjQsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBURVNUX1NFTkRfVFgucmVjaXBpZW50LFxuICAgICAgICAgICAgYW1vdW50OiBURVNUX1NFTkRfVFguc2VuZEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgdmVyaWZpY2F0aW9uIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgZGVsZWdhdGUgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogVEVTVF9ERUxFR0FURV9UWC5zaWduZWRUeEJhc2U2NCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IFRFU1RfREVMRUdBVEVfVFgudmFsaWRhdG9yLFxuICAgICAgICAgICAgYW1vdW50OiBURVNUX0RFTEVHQVRFX1RYLnNlbmRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHZlcmlmaWNhdGlvbiB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHVuZGVsZWdhdGUgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogVEVTVF9VTkRFTEVHQVRFX1RYLnNpZ25lZFR4QmFzZTY0LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogVEVTVF9VTkRFTEVHQVRFX1RYLnZhbGlkYXRvcixcbiAgICAgICAgICAgIGFtb3VudDogVEVTVF9VTkRFTEVHQVRFX1RYLnNlbmRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHZlcmlmaWNhdGlvbiB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHdpdGhkcmF3IHJld2FyZHMgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogVEVTVF9XSVRIRFJBV19SRVdBUkRTX1RYLnNpZ25lZFR4QmFzZTY0LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogVEVTVF9XSVRIRFJBV19SRVdBUkRTX1RYLnZhbGlkYXRvcixcbiAgICAgICAgICAgIGFtb3VudDogJ1VOQVZBSUxBQkxFJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgdmVyaWZpY2F0aW9uIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCBpbnZhbGlkIHBhcmFtJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHt9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7IHJlY2lwaWVudHM6IHVuZGVmaW5lZCB9O1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnbWlzc2luZyByZXF1aXJlZCB0eCBwcmVidWlsZCBwcm9wZXJ0eSB0eEhleCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRXhwbGFpbiBUcmFuc2FjdGlvbjogJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEhleDogVEVTVF9TRU5EX1RYLnNpZ25lZFR4QmFzZTY0LFxuICAgICAgfSk7XG4gICAgICBleHBsYWluZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgZGlzcGxheU9yZGVyOiBbJ2lkJywgJ291dHB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZU91dHB1dHMnLCAnY2hhbmdlQW1vdW50JywgJ2ZlZScsICd0eXBlJ10sXG4gICAgICAgIGlkOiBURVNUX1NFTkRfVFguaGFzaCxcbiAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IFRFU1RfU0VORF9UWC5yZWNpcGllbnQsXG4gICAgICAgICAgICBhbW91bnQ6IFRFU1RfU0VORF9UWC5zZW5kQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogVEVTVF9TRU5EX1RYLnNlbmRBbW91bnQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogVEVTVF9TRU5EX1RYLmdhc0J1ZGdldC5hbW91bnRbMF0uYW1vdW50IH0sXG4gICAgICAgIHR5cGU6IDAsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIGRlbGVnYXRlIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEhleDogVEVTVF9ERUxFR0FURV9UWC5zaWduZWRUeEJhc2U2NCxcbiAgICAgIH0pO1xuICAgICAgZXhwbGFpbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAndHlwZSddLFxuICAgICAgICBpZDogVEVTVF9ERUxFR0FURV9UWC5oYXNoLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogVEVTVF9ERUxFR0FURV9UWC52YWxpZGF0b3IsXG4gICAgICAgICAgICBhbW91bnQ6IFRFU1RfREVMRUdBVEVfVFguc2VuZEFtb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBvdXRwdXRBbW91bnQ6IFRFU1RfREVMRUdBVEVfVFguc2VuZEFtb3VudCxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBmZWU6IHsgZmVlOiBURVNUX0RFTEVHQVRFX1RYLmdhc0J1ZGdldC5hbW91bnRbMF0uYW1vdW50IH0sXG4gICAgICAgIHR5cGU6IDEzLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSB1bmRlbGVnYXRlIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEhleDogVEVTVF9VTkRFTEVHQVRFX1RYLnNpZ25lZFR4QmFzZTY0LFxuICAgICAgfSk7XG4gICAgICBleHBsYWluZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgZGlzcGxheU9yZGVyOiBbJ2lkJywgJ291dHB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZU91dHB1dHMnLCAnY2hhbmdlQW1vdW50JywgJ2ZlZScsICd0eXBlJ10sXG4gICAgICAgIGlkOiBURVNUX1VOREVMRUdBVEVfVFguaGFzaCxcbiAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IFRFU1RfVU5ERUxFR0FURV9UWC52YWxpZGF0b3IsXG4gICAgICAgICAgICBhbW91bnQ6IFRFU1RfVU5ERUxFR0FURV9UWC5zZW5kQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogVEVTVF9VTkRFTEVHQVRFX1RYLnNlbmRBbW91bnQsXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogVEVTVF9VTkRFTEVHQVRFX1RYLmdhc0J1ZGdldC5hbW91bnRbMF0uYW1vdW50IH0sXG4gICAgICAgIHR5cGU6IDE3LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSB3aXRoZHJhdyB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IFRFU1RfV0lUSERSQVdfUkVXQVJEU19UWC5zaWduZWRUeEJhc2U2NCxcbiAgICAgIH0pO1xuICAgICAgZXhwbGFpbmVkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAndHlwZSddLFxuICAgICAgICBpZDogVEVTVF9XSVRIRFJBV19SRVdBUkRTX1RYLmhhc2gsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBURVNUX1dJVEhEUkFXX1JFV0FSRFNfVFgudmFsaWRhdG9yLFxuICAgICAgICAgICAgYW1vdW50OiAnVU5BVkFJTEFCTEUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogdW5kZWZpbmVkLFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIGZlZTogeyBmZWU6IFRFU1RfV0lUSERSQVdfUkVXQVJEU19UWC5nYXNCdWRnZXQuYW1vdW50WzBdLmFtb3VudCB9LFxuICAgICAgICB0eXBlOiAxNSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2l0aCBtZW1vJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEhleDogVEVTVF9UWF9XSVRIX01FTU8uc2lnbmVkVHhCYXNlNjQsXG4gICAgICB9KTtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3R5cGUnXSxcbiAgICAgICAgaWQ6IFRFU1RfVFhfV0lUSF9NRU1PLmhhc2gsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBURVNUX1RYX1dJVEhfTUVNTy5yZWNpcGllbnQsXG4gICAgICAgICAgICBhbW91bnQ6IFRFU1RfVFhfV0lUSF9NRU1PLnNlbmRBbW91bnQsXG4gICAgICAgICAgICBtZW1vOiBURVNUX1RYX1dJVEhfTUVNTy5tZW1vLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dEFtb3VudDogVEVTVF9UWF9XSVRIX01FTU8uc2VuZEFtb3VudCxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBmZWU6IHsgZmVlOiBURVNUX1RYX1dJVEhfTUVNTy5nYXNCdWRnZXQuYW1vdW50WzBdLmFtb3VudCB9LFxuICAgICAgICB0eXBlOiAwLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZXhwbGFpbiB0cmFuc2FjdGlvbiB3aXRoIG1pc3NpbmcgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHt9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChlcnJvci5tZXNzYWdlLCAnbWlzc2luZyByZXF1aXJlZCB0eEhleCBwYXJhbWV0ZXInKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBleHBsYWluIHRyYW5zYWN0aW9uIHdpdGggaW52YWxpZCBwYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oeyB0eEhleDogJ3JhbmRvbVN0cmluZycgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzaG91bGQuZXF1YWwoZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOicpLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BhcnNlIFRyYW5zYWN0aW9uczogJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcGFyc2UgYSB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRyYW5zZmVySW5wdXRzUmVzcG9uc2UgPSB7XG4gICAgICAgIGFkZHJlc3M6IFRFU1RfU0VORF9UWC5yZWNpcGllbnQsXG4gICAgICAgIGFtb3VudDogbmV3IEJpZ051bWJlcihURVNUX1NFTkRfVFguc2VuZEFtb3VudCkucGx1cyhURVNUX1NFTkRfVFguZ2FzQnVkZ2V0LmFtb3VudFswXS5hbW91bnQpLnRvRml4ZWQoKSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRyYW5zZmVyT3V0cHV0c1Jlc3BvbnNlID0ge1xuICAgICAgICBhZGRyZXNzOiBURVNUX1NFTkRfVFgucmVjaXBpZW50LFxuICAgICAgICBhbW91bnQ6IFRFU1RfU0VORF9UWC5zZW5kQW1vdW50LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGFyc2VkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi5wYXJzZVRyYW5zYWN0aW9uKHsgdHhIZXg6IFRFU1RfU0VORF9UWC5zaWduZWRUeEJhc2U2NCB9KTtcblxuICAgICAgcGFyc2VkVHJhbnNhY3Rpb24uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgIGlucHV0czogW3RyYW5zZmVySW5wdXRzUmVzcG9uc2VdLFxuICAgICAgICBvdXRwdXRzOiBbdHJhbnNmZXJPdXRwdXRzUmVzcG9uc2VdLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gcGFyc2UgYSB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aGVuIGV4cGxhaW5UcmFuc2FjdGlvbiByZXNwb25zZSBpcyB1bmRlZmluZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzdHViID0gc2lub24uc3R1YihJc2xtLnByb3RvdHlwZSwgJ2V4cGxhaW5UcmFuc2FjdGlvbicpO1xuICAgICAgc3R1Yi5yZXNvbHZlcyh1bmRlZmluZWQpO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnBhcnNlVHJhbnNhY3Rpb24oeyB0eEhleDogVEVTVF9TRU5EX1RYLnNpZ25lZFR4QmFzZTY0IH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgICBzdHViLnJlc3RvcmUoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../test/unit/keyPair.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const should_1 = __importDefault(require("should"));
|
|
8
|
+
const src_1 = require("../../src");
|
|
9
|
+
const islm_1 = require("../resources/islm");
|
|
10
|
+
describe('Islm Key Pair', () => {
|
|
11
|
+
describe('should create a valid KeyPair', () => {
|
|
12
|
+
it('from an empty value', () => {
|
|
13
|
+
const keyPairObj = new src_1.KeyPair();
|
|
14
|
+
const keys = keyPairObj.getKeys();
|
|
15
|
+
should_1.default.exists(keys.prv);
|
|
16
|
+
should_1.default.exists(keys.pub);
|
|
17
|
+
should_1.default.equal(keys.prv?.length, 64);
|
|
18
|
+
should_1.default.equal(keys.pub.length, 66);
|
|
19
|
+
const extendedKeys = keyPairObj.getExtendedKeys();
|
|
20
|
+
should_1.default.exists(extendedKeys.xprv);
|
|
21
|
+
should_1.default.exists(extendedKeys.xpub);
|
|
22
|
+
});
|
|
23
|
+
it('from a private key', () => {
|
|
24
|
+
const privateKey = islm_1.TEST_ACCOUNT.privateKey;
|
|
25
|
+
const keyPairObj = new src_1.KeyPair({ prv: privateKey });
|
|
26
|
+
const keys = keyPairObj.getKeys();
|
|
27
|
+
should_1.default.exists(keys.prv);
|
|
28
|
+
should_1.default.exists(keys.pub);
|
|
29
|
+
should_1.default.equal(keys.prv, islm_1.TEST_ACCOUNT.privateKey);
|
|
30
|
+
should_1.default.equal(keys.pub, islm_1.TEST_ACCOUNT.compressedPublicKey);
|
|
31
|
+
should_1.default.equal(keyPairObj.getAddress(), islm_1.TEST_ACCOUNT.pubAddress);
|
|
32
|
+
assert_1.default.throws(() => keyPairObj.getExtendedKeys());
|
|
33
|
+
});
|
|
34
|
+
it('from a compressed public key', () => {
|
|
35
|
+
const publicKey = islm_1.TEST_ACCOUNT.compressedPublicKey;
|
|
36
|
+
const keyPairObj = new src_1.KeyPair({ pub: publicKey });
|
|
37
|
+
const keys = keyPairObj.getKeys();
|
|
38
|
+
should_1.default.not.exist(keys.prv);
|
|
39
|
+
should_1.default.exists(keys.pub);
|
|
40
|
+
should_1.default.equal(keys.pub, islm_1.TEST_ACCOUNT.compressedPublicKey);
|
|
41
|
+
assert_1.default.throws(() => keyPairObj.getExtendedKeys());
|
|
42
|
+
});
|
|
43
|
+
it('from an uncompressed public key', () => {
|
|
44
|
+
// Input is uncompressed, but we output the compressed key to keep
|
|
45
|
+
// parity with islm network expectations.
|
|
46
|
+
const publicKey = islm_1.TEST_ACCOUNT.uncompressedPublicKey;
|
|
47
|
+
const keyPairObj = new src_1.KeyPair({ pub: publicKey });
|
|
48
|
+
const keys = keyPairObj.getKeys();
|
|
49
|
+
should_1.default.not.exist(keys.prv);
|
|
50
|
+
should_1.default.exists(keys.pub);
|
|
51
|
+
should_1.default.notEqual(keys.pub, publicKey);
|
|
52
|
+
should_1.default.equal(keys.pub, islm_1.TEST_ACCOUNT.compressedPublicKey);
|
|
53
|
+
assert_1.default.throws(() => keyPairObj.getExtendedKeys());
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe('should fail to create a KeyPair', () => {
|
|
57
|
+
it('from an invalid privateKey', () => {
|
|
58
|
+
assert_1.default.throws(() => new src_1.KeyPair({ prv: '' }), (e) => e.message === 'Unsupported private key');
|
|
59
|
+
});
|
|
60
|
+
it('from an invalid publicKey', () => {
|
|
61
|
+
assert_1.default.throws(() => new src_1.KeyPair({ pub: '' }), (e) => e.message.startsWith('Unsupported public key'));
|
|
62
|
+
});
|
|
63
|
+
it('from an undefined seed', () => {
|
|
64
|
+
const undefinedBuffer = undefined;
|
|
65
|
+
assert_1.default.throws(() => new src_1.KeyPair({ seed: undefinedBuffer }), (e) => e.message.startsWith('Invalid key pair options'));
|
|
66
|
+
});
|
|
67
|
+
it('from an undefined private key', () => {
|
|
68
|
+
const undefinedStr = undefined;
|
|
69
|
+
assert_1.default.throws(() => new src_1.KeyPair({ prv: undefinedStr }), (e) => e.message.startsWith('Invalid key pair options'));
|
|
70
|
+
});
|
|
71
|
+
it('from an undefined public key', () => {
|
|
72
|
+
const undefinedStr = undefined;
|
|
73
|
+
assert_1.default.throws(() => new src_1.KeyPair({ pub: undefinedStr }), (e) => e.message.startsWith('Invalid key pair options'));
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
describe('should get unique address', () => {
|
|
77
|
+
it('from a private key', () => {
|
|
78
|
+
const keyPair = new src_1.KeyPair({ prv: islm_1.TEST_ACCOUNT.privateKey });
|
|
79
|
+
should_1.default.equal(keyPair.getAddress(), islm_1.TEST_ACCOUNT.pubAddress);
|
|
80
|
+
});
|
|
81
|
+
it('from a compressed public key', () => {
|
|
82
|
+
const keyPair = new src_1.KeyPair({ pub: islm_1.TEST_ACCOUNT.compressedPublicKey });
|
|
83
|
+
should_1.default.equal(keyPair.getAddress(), islm_1.TEST_ACCOUNT.pubAddress);
|
|
84
|
+
});
|
|
85
|
+
it('should be different for different public keys', () => {
|
|
86
|
+
const keyPairOne = new src_1.KeyPair({ pub: islm_1.TEST_ACCOUNT.compressedPublicKey });
|
|
87
|
+
const keyPairTwo = new src_1.KeyPair({ pub: islm_1.TEST_ACCOUNT.compressedPublicKeyTwo });
|
|
88
|
+
should_1.default.notEqual(keyPairOne.getAddress(), keyPairTwo.getAddress());
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9rZXlQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1QixtQ0FBb0M7QUFDcEMsNENBQWlEO0FBRWpELFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO0lBQzdCLFFBQVEsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7UUFDN0MsRUFBRSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtZQUM3QixNQUFNLFVBQVUsR0FBRyxJQUFJLGFBQU8sRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRWxDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNsRCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtZQUM1QixNQUFNLFVBQVUsR0FBRyxtQkFBWSxDQUFDLFVBQVUsQ0FBQztZQUMzQyxNQUFNLFVBQVUsR0FBRyxJQUFJLGFBQU8s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QUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgVEVTVF9BQ0NPVU5UIH0gZnJvbSAnLi4vcmVzb3VyY2VzL2lzbG0nO1xuXG5kZXNjcmliZSgnSXNsbSBLZXkgUGFpcicsICgpID0+IHtcbiAgZGVzY3JpYmUoJ3Nob3VsZCBjcmVhdGUgYSB2YWxpZCBLZXlQYWlyJywgKCkgPT4ge1xuICAgIGl0KCdmcm9tIGFuIGVtcHR5IHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpck9iaiA9IG5ldyBLZXlQYWlyKCk7XG4gICAgICBjb25zdCBrZXlzID0ga2V5UGFpck9iai5nZXRLZXlzKCk7XG4gICAgICBzaG91bGQuZXhpc3RzKGtleXMucHJ2KTtcbiAgICAgIHNob3VsZC5leGlzdHMoa2V5cy5wdWIpO1xuICAgICAgc2hvdWxkLmVxdWFsKGtleXMucHJ2Py5sZW5ndGgsIDY0KTtcbiAgICAgIHNob3VsZC5lcXVhbChrZXlzLnB1Yi5sZW5ndGgsIDY2KTtcblxuICAgICAgY29uc3QgZXh0ZW5kZWRLZXlzID0ga2V5UGFpck9iai5nZXRFeHRlbmRlZEtleXMoKTtcbiAgICAgIHNob3VsZC5leGlzdHMoZXh0ZW5kZWRLZXlzLnhwcnYpO1xuICAgICAgc2hvdWxkLmV4aXN0cyhleHRlbmRlZEtleXMueHB1Yik7XG4gICAgfSk7XG5cbiAgICBpdCgnZnJvbSBhIHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IFRFU1RfQUNDT1VOVC5wcml2YXRlS2V5O1xuICAgICAgY29uc3Qga2V5UGFpck9iaiA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBwcml2YXRlS2V5IH0pO1xuICAgICAgY29uc3Qga2V5cyA9IGtleVBhaXJPYmouZ2V0S2V5cygpO1xuICAgICAgc2hvdWxkLmV4aXN0cyhrZXlzLnBydik7XG4gICAgICBzaG91bGQuZXhpc3RzKGtleXMucHViKTtcbiAgICAgIHNob3VsZC5lcXVhbChrZXlzLnBydiwgVEVTVF9BQ0NPVU5ULnByaXZhdGVLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKGtleXMucHViLCBURVNUX0FDQ09VTlQuY29tcHJlc3NlZFB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5UGFpck9iai5nZXRBZGRyZXNzKCksIFRFU1RfQUNDT1VOVC5wdWJBZGRyZXNzKTtcblxuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBrZXlQYWlyT2JqLmdldEV4dGVuZGVkS2V5cygpKTtcbiAgICB9KTtcblxuICAgIGl0KCdmcm9tIGEgY29tcHJlc3NlZCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3QgcHVibGljS2V5ID0gVEVTVF9BQ0NPVU5ULmNvbXByZXNzZWRQdWJsaWNLZXk7XG4gICAgICBjb25zdCBrZXlQYWlyT2JqID0gbmV3IEtleVBhaXIoeyBwdWI6IHB1YmxpY0tleSB9KTtcbiAgICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyT2JqLmdldEtleXMoKTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3Qoa2V5cy5wcnYpO1xuICAgICAgc2hvdWxkLmV4aXN0cyhrZXlzLnB1Yik7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5cy5wdWIsIFRFU1RfQUNDT1VOVC5jb21wcmVzc2VkUHVibGljS2V5KTtcblxuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBrZXlQYWlyT2JqLmdldEV4dGVuZGVkS2V5cygpKTtcbiAgICB9KTtcblxuICAgIGl0KCdmcm9tIGFuIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgLy8gSW5wdXQgaXMgdW5jb21wcmVzc2VkLCBidXQgd2Ugb3V0cHV0IHRoZSBjb21wcmVzc2VkIGtleSB0byBrZWVwXG4gICAgICAvLyBwYXJpdHkgd2l0aCBpc2xtIG5ldHdvcmsgZXhwZWN0YXRpb25zLlxuICAgICAgY29uc3QgcHVibGljS2V5ID0gVEVTVF9BQ0NPVU5ULnVuY29tcHJlc3NlZFB1YmxpY0tleTtcbiAgICAgIGNvbnN0IGtleVBhaXJPYmogPSBuZXcgS2V5UGFpcih7IHB1YjogcHVibGljS2V5IH0pO1xuICAgICAgY29uc3Qga2V5cyA9IGtleVBhaXJPYmouZ2V0S2V5cygpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChrZXlzLnBydik7XG4gICAgICBzaG91bGQuZXhpc3RzKGtleXMucHViKTtcbiAgICAgIHNob3VsZC5ub3RFcXVhbChrZXlzLnB1YiwgcHVibGljS2V5KTtcbiAgICAgIHNob3VsZC5lcXVhbChrZXlzLnB1YiwgVEVTVF9BQ0NPVU5ULmNvbXByZXNzZWRQdWJsaWNLZXkpO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGtleVBhaXJPYmouZ2V0RXh0ZW5kZWRLZXlzKCkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGZhaWwgdG8gY3JlYXRlIGEgS2V5UGFpcicsICgpID0+IHtcbiAgICBpdCgnZnJvbSBhbiBpbnZhbGlkIHByaXZhdGVLZXknLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBuZXcgS2V5UGFpcih7IHBydjogJycgfSksXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ1Vuc3VwcG9ydGVkIHByaXZhdGUga2V5J1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdmcm9tIGFuIGludmFsaWQgcHVibGljS2V5JywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gbmV3IEtleVBhaXIoeyBwdWI6ICcnIH0pLFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnVW5zdXBwb3J0ZWQgcHVibGljIGtleScpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYW4gdW5kZWZpbmVkIHNlZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1bmRlZmluZWRCdWZmZXIgPSB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBCdWZmZXI7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBuZXcgS2V5UGFpcih7IHNlZWQ6IHVuZGVmaW5lZEJ1ZmZlciB9KSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYW4gdW5kZWZpbmVkIHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3QgdW5kZWZpbmVkU3RyOiBzdHJpbmcgPSB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBzdHJpbmc7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBuZXcgS2V5UGFpcih7IHBydjogdW5kZWZpbmVkU3RyIH0pLFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnSW52YWxpZCBrZXkgcGFpciBvcHRpb25zJylcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnZnJvbSBhbiB1bmRlZmluZWQgcHVibGljIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IHVuZGVmaW5lZFN0cjogc3RyaW5nID0gdW5kZWZpbmVkIGFzIHVua25vd24gYXMgc3RyaW5nO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gbmV3IEtleVBhaXIoeyBwdWI6IHVuZGVmaW5lZFN0ciB9KSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGdldCB1bmlxdWUgYWRkcmVzcycsICgpID0+IHtcbiAgICBpdCgnZnJvbSBhIHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBURVNUX0FDQ09VTlQucHJpdmF0ZUtleSB9KTtcbiAgICAgIHNob3VsZC5lcXVhbChrZXlQYWlyLmdldEFkZHJlc3MoKSwgVEVTVF9BQ0NPVU5ULnB1YkFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYSBjb21wcmVzc2VkIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IFRFU1RfQUNDT1VOVC5jb21wcmVzc2VkUHVibGljS2V5IH0pO1xuICAgICAgc2hvdWxkLmVxdWFsKGtleVBhaXIuZ2V0QWRkcmVzcygpLCBURVNUX0FDQ09VTlQucHViQWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IHB1YmxpYyBrZXlzJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpck9uZSA9IG5ldyBLZXlQYWlyKHsgcHViOiBURVNUX0FDQ09VTlQuY29tcHJlc3NlZFB1YmxpY0tleSB9KTtcbiAgICAgIGNvbnN0IGtleVBhaXJUd28gPSBuZXcgS2V5UGFpcih7IHB1YjogVEVTVF9BQ0NPVU5ULmNvbXByZXNzZWRQdWJsaWNLZXlUd28gfSk7XG4gICAgICBzaG91bGQubm90RXF1YWwoa2V5UGFpck9uZS5nZXRBZGRyZXNzKCksIGtleVBhaXJUd28uZ2V0QWRkcmVzcygpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../test/unit/transaction.ts"],"names":[],"mappings":""}
|