@bitgo-beta/sdk-coin-vet 1.0.1-beta.66 → 1.0.1-beta.660
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/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/lib/constants.d.ts +28 -0
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +30 -2
- package/dist/src/lib/iface.d.ts +28 -2
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +21 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +44 -2
- package/dist/src/lib/transaction/addressInitializationTransaction.d.ts +31 -0
- package/dist/src/lib/transaction/addressInitializationTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/addressInitializationTransaction.js +170 -0
- package/dist/src/lib/transaction/burnNftTransaction.d.ts +29 -0
- package/dist/src/lib/transaction/burnNftTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/burnNftTransaction.js +138 -0
- package/dist/src/lib/transaction/claimRewards.d.ts +31 -0
- package/dist/src/lib/transaction/claimRewards.d.ts.map +1 -0
- package/dist/src/lib/transaction/claimRewards.js +151 -0
- package/dist/src/lib/transaction/delegateClauseTransaction.d.ts +27 -0
- package/dist/src/lib/transaction/delegateClauseTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/delegateClauseTransaction.js +158 -0
- package/dist/src/lib/transaction/exitDelegation.d.ts +29 -0
- package/dist/src/lib/transaction/exitDelegation.d.ts.map +1 -0
- package/dist/src/lib/transaction/exitDelegation.js +143 -0
- package/dist/src/lib/transaction/flushTokenTransaction.d.ts +20 -0
- package/dist/src/lib/transaction/flushTokenTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/flushTokenTransaction.js +98 -0
- package/dist/src/lib/transaction/nftTransaction.d.ts +17 -0
- package/dist/src/lib/transaction/nftTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/nftTransaction.js +108 -0
- package/dist/src/lib/transaction/stakeClauseTransaction.d.ts +27 -0
- package/dist/src/lib/transaction/stakeClauseTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/stakeClauseTransaction.js +158 -0
- package/dist/src/lib/transaction/stakingTransaction.d.ts +31 -0
- package/dist/src/lib/transaction/stakingTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/stakingTransaction.js +169 -0
- package/dist/src/lib/transaction/tokenTransaction.d.ts +14 -0
- package/dist/src/lib/transaction/tokenTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/tokenTransaction.js +95 -0
- package/dist/src/lib/transaction/transaction.d.ts +18 -28
- package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction/transaction.js +99 -58
- package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts +32 -0
- package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/validatorRegistrationTransaction.js +170 -0
- package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts +78 -0
- package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/addressInitializationBuilder.js +158 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts +59 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.js +118 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts +59 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.js +117 -0
- package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts +72 -0
- package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/delegateTxnBuilder.js +133 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts +59 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.js +118 -0
- package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts +66 -0
- package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.js +129 -0
- package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts +23 -0
- package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/nftTransactionBuilder.js +93 -0
- package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts +73 -0
- package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.js +146 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts +73 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.js +147 -0
- package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts +21 -0
- package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.js +70 -0
- package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts +10 -9
- package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder/transactionBuilder.js +25 -19
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts +79 -0
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.js +150 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +55 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +124 -1
- package/dist/src/lib/types.d.ts +21 -0
- package/dist/src/lib/types.d.ts.map +1 -1
- package/dist/src/lib/types.js +1 -1
- package/dist/src/lib/utils.d.ts +102 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +277 -8
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/vet.d.ts +94 -3
- package/dist/src/vet.d.ts.map +1 -1
- package/dist/src/vet.js +505 -10
- package/dist/src/vetNFTCollection.d.ts +18 -0
- package/dist/src/vetNFTCollection.d.ts.map +1 -0
- package/dist/src/vetNFTCollection.js +52 -0
- package/dist/src/vetToken.d.ts +1 -1
- package/dist/src/vetToken.d.ts.map +1 -1
- package/dist/src/vetToken.js +2 -2
- package/dist/test/resources/vet.d.ts +88 -0
- package/dist/test/resources/vet.d.ts.map +1 -0
- package/dist/test/resources/vet.js +143 -0
- package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/addressInitializationBuilder.js +141 -0
- package/dist/test/transactionBuilder/burnNftBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/burnNftBuilder.js +150 -0
- package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/claimRewardsBuilder.js +183 -0
- package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/delegateClauseTxnBuilder.js +209 -0
- package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/exitDelegationBuilder.js +150 -0
- package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/flushTokenTransactionBuilder.js +132 -0
- package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/nftTransactionBuilder.js +242 -0
- package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.js +247 -0
- package/dist/test/transactionBuilder/stakingTransaction.d.ts +2 -0
- package/dist/test/transactionBuilder/stakingTransaction.d.ts.map +1 -0
- package/dist/test/transactionBuilder/stakingTransaction.js +250 -0
- package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/tokenTransactionBuilder.js +249 -0
- package/dist/test/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/transferBuilder.js +244 -0
- package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.js +231 -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 +181 -0
- package/dist/test/unit/stakingFlowE2E.d.ts +2 -0
- package/dist/test/unit/stakingFlowE2E.d.ts.map +1 -0
- package/dist/test/unit/stakingFlowE2E.js +292 -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 +106 -0
- package/dist/test/unit/vet.d.ts +2 -0
- package/dist/test/unit/vet.d.ts.map +1 -0
- package/dist/test/unit/vet.js +336 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +16 -10
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -40
|
@@ -0,0 +1,244 @@
|
|
|
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 should_1 = __importDefault(require("should"));
|
|
40
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
41
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
42
|
+
const src_1 = require("../../src");
|
|
43
|
+
const testData = __importStar(require("../resources/vet"));
|
|
44
|
+
describe('Vet Transfer Transaction', () => {
|
|
45
|
+
const factory = new src_1.TransactionBuilderFactory(statics_1.coins.get('tvet'));
|
|
46
|
+
describe('Vet Coin Transfer Transaction', () => {
|
|
47
|
+
describe('Succeed', () => {
|
|
48
|
+
it('should build a transfer tx', async function () {
|
|
49
|
+
const transaction = new src_1.Transaction(statics_1.coins.get('tvet'));
|
|
50
|
+
const txBuilder = factory.getTransferBuilder(transaction);
|
|
51
|
+
txBuilder.sender(testData.addresses.validAddresses[0]);
|
|
52
|
+
txBuilder.recipients(testData.recipients);
|
|
53
|
+
txBuilder.gas(21000);
|
|
54
|
+
txBuilder.nonce('64248');
|
|
55
|
+
txBuilder.blockRef('0x014ead140e77bbc1');
|
|
56
|
+
txBuilder.addFeePayerAddress(testData.feePayer.address);
|
|
57
|
+
txBuilder.expiration(64);
|
|
58
|
+
txBuilder.gasPriceCoef(128);
|
|
59
|
+
const tx = (await txBuilder.build());
|
|
60
|
+
should_1.default.equal(tx.sender, testData.addresses.validAddresses[0]);
|
|
61
|
+
should_1.default.equal(tx.recipients[0].address, testData.recipients[0].address);
|
|
62
|
+
should_1.default.equal(tx.recipients[0].amount, testData.recipients[0].amount);
|
|
63
|
+
should_1.default.equal(tx.gas, 21000);
|
|
64
|
+
should_1.default.equal(tx.getFee(), '315411764705882352');
|
|
65
|
+
should_1.default.equal(tx.nonce, '64248');
|
|
66
|
+
should_1.default.equal(tx.expiration, 64);
|
|
67
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
|
|
68
|
+
tx.inputs.length.should.equal(1);
|
|
69
|
+
tx.inputs[0].should.deepEqual({
|
|
70
|
+
address: testData.addresses.validAddresses[0],
|
|
71
|
+
value: testData.recipients[0].amount,
|
|
72
|
+
coin: 'tvet',
|
|
73
|
+
});
|
|
74
|
+
tx.outputs.length.should.equal(1);
|
|
75
|
+
tx.outputs[0].should.deepEqual({
|
|
76
|
+
address: testData.recipients[0].address,
|
|
77
|
+
value: testData.recipients[0].amount,
|
|
78
|
+
coin: 'tvet',
|
|
79
|
+
});
|
|
80
|
+
const rawTx = tx.toBroadcastFormat();
|
|
81
|
+
should_1.default.equal(txBuilder.isValidRawTransaction(rawTx), true);
|
|
82
|
+
rawTx.should.equal(testData.UNSIGNED_TRANSACTION_2);
|
|
83
|
+
});
|
|
84
|
+
it('should build and send a signed tx', async function () {
|
|
85
|
+
const txBuilder = factory.from(testData.SPONSORED_TRANSACTION);
|
|
86
|
+
txBuilder.getNonce().should.equal('186037');
|
|
87
|
+
const tx = (await txBuilder.build());
|
|
88
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
|
|
89
|
+
tx.inputs.length.should.equal(1);
|
|
90
|
+
tx.inputs[0].should.deepEqual({
|
|
91
|
+
address: testData.addresses.validAddresses[0],
|
|
92
|
+
value: testData.AMOUNT.toString(),
|
|
93
|
+
coin: 'tvet',
|
|
94
|
+
});
|
|
95
|
+
tx.outputs.length.should.equal(1);
|
|
96
|
+
tx.outputs[0].should.deepEqual({
|
|
97
|
+
address: testData.recipients[0].address,
|
|
98
|
+
value: testData.AMOUNT.toString(),
|
|
99
|
+
coin: 'tvet',
|
|
100
|
+
});
|
|
101
|
+
should_1.default.equal(tx.id, '0x6d842d5dc5d59d4e8f0a8ec2757b430d1f19c06766fbc5b3db5ebac8a067a439');
|
|
102
|
+
should_1.default.equal(tx.gas, 21000);
|
|
103
|
+
should_1.default.equal(tx.getFee(), '315411764705882352');
|
|
104
|
+
should_1.default.equal(tx.nonce, 186037);
|
|
105
|
+
should_1.default.equal(tx.expiration, 64);
|
|
106
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
|
|
107
|
+
const rawTx = tx.toBroadcastFormat();
|
|
108
|
+
should_1.default.equal(txBuilder.isValidRawTransaction(rawTx), true);
|
|
109
|
+
should_1.default.equal(rawTx, testData.SPONSORED_TRANSACTION);
|
|
110
|
+
});
|
|
111
|
+
it('should succeed to validate a valid signablePayload', async function () {
|
|
112
|
+
const transaction = new src_1.Transaction(statics_1.coins.get('tvet'));
|
|
113
|
+
const txBuilder = factory.getTransferBuilder(transaction);
|
|
114
|
+
txBuilder.sender(testData.addresses.validAddresses[0]);
|
|
115
|
+
txBuilder.recipients(testData.recipients);
|
|
116
|
+
txBuilder.gas(21000);
|
|
117
|
+
txBuilder.nonce('64248');
|
|
118
|
+
txBuilder.expiration(64);
|
|
119
|
+
txBuilder.blockRef('0x014ead140e77bbc1');
|
|
120
|
+
txBuilder.gasPriceCoef(128);
|
|
121
|
+
txBuilder.addFeePayerAddress(testData.feePayer.address);
|
|
122
|
+
const tx = (await txBuilder.build());
|
|
123
|
+
const signablePayload = tx.signablePayload;
|
|
124
|
+
should_1.default.equal(signablePayload.toString('hex'), 'f72788014ead140e77bbc140e0df94e59f1cea4e0fef511e3d0f4eec44adf19c4cbeec88016345785d8a00008081808252088082faf8c101');
|
|
125
|
+
});
|
|
126
|
+
it('should build a unsigned tx and validate its toJson', async function () {
|
|
127
|
+
const transaction = new src_1.Transaction(statics_1.coins.get('tvet'));
|
|
128
|
+
const txBuilder = factory.getTransferBuilder(transaction);
|
|
129
|
+
txBuilder.sender(testData.addresses.validAddresses[0]);
|
|
130
|
+
txBuilder.recipients(testData.recipients);
|
|
131
|
+
txBuilder.gas(21000);
|
|
132
|
+
txBuilder.nonce('64248');
|
|
133
|
+
txBuilder.expiration(400);
|
|
134
|
+
txBuilder.blockRef('0x014ead140e77bbc1');
|
|
135
|
+
txBuilder.gasPriceCoef(128);
|
|
136
|
+
txBuilder.addFeePayerAddress(testData.feePayer.address);
|
|
137
|
+
const tx = (await txBuilder.build());
|
|
138
|
+
const toJson = tx.toJson();
|
|
139
|
+
should_1.default.equal(toJson.sender, testData.addresses.validAddresses[0]);
|
|
140
|
+
should_1.default.deepEqual(toJson.recipients, [
|
|
141
|
+
{
|
|
142
|
+
address: testData.recipients[0].address,
|
|
143
|
+
amount: testData.recipients[0].amount,
|
|
144
|
+
},
|
|
145
|
+
]);
|
|
146
|
+
should_1.default.equal(toJson.nonce, '64248');
|
|
147
|
+
should_1.default.equal(toJson.gas, 21000);
|
|
148
|
+
should_1.default.equal(toJson.gasPriceCoef, 128);
|
|
149
|
+
should_1.default.equal(toJson.expiration, 400);
|
|
150
|
+
should_1.default.equal(toJson.feePayer, testData.feePayer.address);
|
|
151
|
+
});
|
|
152
|
+
it('should build a signed tx and validate its toJson', async function () {
|
|
153
|
+
const txBuilder = factory.from(testData.SPONSORED_TRANSACTION);
|
|
154
|
+
const tx = (await txBuilder.build());
|
|
155
|
+
const toJson = tx.toJson();
|
|
156
|
+
should_1.default.equal(toJson.id, '0x6d842d5dc5d59d4e8f0a8ec2757b430d1f19c06766fbc5b3db5ebac8a067a439');
|
|
157
|
+
should_1.default.equal(toJson.sender, testData.addresses.validAddresses[0]);
|
|
158
|
+
should_1.default.deepEqual(toJson.recipients, [
|
|
159
|
+
{
|
|
160
|
+
address: testData.addresses.validAddresses[1].toLowerCase(),
|
|
161
|
+
amount: testData.AMOUNT.toString(),
|
|
162
|
+
},
|
|
163
|
+
]);
|
|
164
|
+
should_1.default.equal(toJson.nonce, '186037');
|
|
165
|
+
should_1.default.equal(toJson.gas, 21000);
|
|
166
|
+
should_1.default.equal(toJson.gasPriceCoef, 128);
|
|
167
|
+
should_1.default.equal(toJson.expiration, 64);
|
|
168
|
+
});
|
|
169
|
+
it('should build a unsigned tx then add sender sig and build again', async function () {
|
|
170
|
+
const transaction = new src_1.Transaction(statics_1.coins.get('tvet'));
|
|
171
|
+
const txBuilder = factory.getTransferBuilder(transaction);
|
|
172
|
+
txBuilder.sender(testData.addresses.validAddresses[2]);
|
|
173
|
+
txBuilder.recipients(testData.recipients);
|
|
174
|
+
txBuilder.gas(21000);
|
|
175
|
+
txBuilder.nonce('64248');
|
|
176
|
+
txBuilder.blockRef('0x014ead140e77bbc1');
|
|
177
|
+
txBuilder.addFeePayerAddress(testData.feePayer.address);
|
|
178
|
+
txBuilder.expiration(64);
|
|
179
|
+
txBuilder.gasPriceCoef(128);
|
|
180
|
+
const tx = (await txBuilder.build());
|
|
181
|
+
const unsignedSerializedTx = tx.toBroadcastFormat();
|
|
182
|
+
const builder1 = factory.from(unsignedSerializedTx);
|
|
183
|
+
builder1.addSenderSignature(Buffer.from(testData.senderSig, 'hex'));
|
|
184
|
+
const senderSignedTx = await builder1.build();
|
|
185
|
+
const senderSignedSerializedTx = senderSignedTx.toBroadcastFormat();
|
|
186
|
+
should_1.default.equal(senderSignedSerializedTx, testData.senderSignedSerializedTxHex);
|
|
187
|
+
const builder2 = factory.from(testData.senderSignedSerializedTxHex);
|
|
188
|
+
builder2.addSenderSignature(Buffer.from(testData.senderSig, 'hex'));
|
|
189
|
+
builder2.addFeePayerSignature(Buffer.from(testData.feePayerSig, 'hex'));
|
|
190
|
+
const completelySignedTx = await builder2.build();
|
|
191
|
+
should_1.default.equal(completelySignedTx.toBroadcastFormat(), testData.completeSignedSerializedHex);
|
|
192
|
+
should_1.default.equal(completelySignedTx.id, '0xb988d614d3c24420cb2183239ab601b53e63ff4c81cea1e4888bc9d0aa6aad13');
|
|
193
|
+
});
|
|
194
|
+
it('should preserve full precision of large number values', async function () {
|
|
195
|
+
// A very large number that would normally be represented in scientific notation '2.332734928448876e+22
|
|
196
|
+
const largeAmount = '23327349284488761096413';
|
|
197
|
+
const transaction = new src_1.Transaction(statics_1.coins.get('tvet'));
|
|
198
|
+
const txBuilder = factory.getTransferBuilder(transaction);
|
|
199
|
+
// Use the large amount in recipients
|
|
200
|
+
const recipients = [
|
|
201
|
+
{
|
|
202
|
+
address: testData.addresses.validAddresses[1].toLowerCase(),
|
|
203
|
+
amount: largeAmount,
|
|
204
|
+
},
|
|
205
|
+
];
|
|
206
|
+
txBuilder.sender(testData.addresses.validAddresses[0]);
|
|
207
|
+
txBuilder.recipients(recipients);
|
|
208
|
+
txBuilder.gas(21000);
|
|
209
|
+
txBuilder.nonce('64248');
|
|
210
|
+
txBuilder.blockRef('0x014ead140e77bbc1');
|
|
211
|
+
txBuilder.addFeePayerAddress(testData.feePayer.address);
|
|
212
|
+
txBuilder.expiration(64);
|
|
213
|
+
txBuilder.gasPriceCoef(128);
|
|
214
|
+
const tx = (await txBuilder.build());
|
|
215
|
+
// Verify that the value is preserved exactly as provided
|
|
216
|
+
should_1.default.equal(tx.outputs[0].value, largeAmount);
|
|
217
|
+
// Create a serialized transaction and parse it back
|
|
218
|
+
const serializedTx = tx.toBroadcastFormat();
|
|
219
|
+
const deserializedTxBuilder = factory.from(serializedTx);
|
|
220
|
+
const deserializedTx = await deserializedTxBuilder.build();
|
|
221
|
+
// Verify the value is still preserved after serialization/deserialization
|
|
222
|
+
should_1.default.equal(deserializedTx.outputs[0].value, largeAmount);
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
describe('Fail', () => {
|
|
226
|
+
it('should fail for invalid sender', async function () {
|
|
227
|
+
const transaction = new src_1.Transaction(statics_1.coins.get('tvet'));
|
|
228
|
+
const builder = factory.getTransferBuilder(transaction);
|
|
229
|
+
(0, should_1.default)(() => builder.sender('randomString')).throwError('Invalid address randomString');
|
|
230
|
+
});
|
|
231
|
+
it('should fail for invalid recipient', async function () {
|
|
232
|
+
const builder = factory.getTransferBuilder();
|
|
233
|
+
(0, should_1.default)(() => builder.recipients([testData.invalidRecipients[0]])).throwError('Invalid address randomString');
|
|
234
|
+
(0, should_1.default)(() => builder.recipients([testData.invalidRecipients[1]])).throwError('Value cannot be less than zero');
|
|
235
|
+
(0, should_1.default)(() => builder.recipients([testData.invalidRecipients[2]])).throwError('Invalid amount format');
|
|
236
|
+
});
|
|
237
|
+
it('should fail for invalid gas amount', async function () {
|
|
238
|
+
const builder = factory.getTransferBuilder();
|
|
239
|
+
(0, should_1.default)(() => builder.gas(-1)).throwError('Value cannot be less than zero');
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC90cmFuc2FjdGlvbkJ1aWxkZXIvdHJhbnNmZXJCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG1EQUF1RDtBQUN2RCxpREFBNEM7QUFDNUMsbUNBQW1FO0FBQ25FLDJEQUE2QztBQUU3QyxRQUFRLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRWpFLFFBQVEsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7UUFDN0MsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDdkIsRUFBRSxDQUFDLDRCQUE0QixFQUFFLEtBQUs7Z0JBQ3BDLE1BQU0sV0FBVyxHQUFHLElBQUksaUJBQVcsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDMUQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDMUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckIsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDekIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUN6QyxTQUFTLENBQUMsa0JBQWtCLENBQUMsUUFBUSxD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Q0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3ZldCc7XG5cbmRlc2NyaWJlKCdWZXQgVHJhbnNmZXIgVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3R2ZXQnKSk7XG5cbiAgZGVzY3JpYmUoJ1ZldCBDb2luIFRyYW5zZmVyIFRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdTdWNjZWVkJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHRyYW5zZmVyIHR4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3R2ZXQnKSk7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKHRyYW5zYWN0aW9uKTtcbiAgICAgICAgdHhCdWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5hZGRyZXNzZXMudmFsaWRBZGRyZXNzZXNbMF0pO1xuICAgICAgICB0eEJ1aWxkZXIucmVjaXBpZW50cyh0ZXN0RGF0YS5yZWNpcGllbnRzKTtcbiAgICAgICAgdHhCdWlsZGVyLmdhcygyMTAwMCk7XG4gICAgICAgIHR4QnVpbGRlci5ub25jZSgnNjQyNDgnKTtcbiAgICAgICAgdHhCdWlsZGVyLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKTtcbiAgICAgICAgdHhCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyh0ZXN0RGF0YS5mZWVQYXllci5hZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLmV4cGlyYXRpb24oNjQpO1xuICAgICAgICB0eEJ1aWxkZXIuZ2FzUHJpY2VDb2VmKDEyOCk7XG4gICAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4LnNlbmRlciwgdGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzWzBdKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4LnJlY2lwaWVudHNbMF0uYWRkcmVzcywgdGVzdERhdGEucmVjaXBpZW50c1swXS5hZGRyZXNzKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4LnJlY2lwaWVudHNbMF0uYW1vdW50LCB0ZXN0RGF0YS5yZWNpcGllbnRzWzBdLmFtb3VudCk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC5nYXMsIDIxMDAwKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4LmdldEZlZSgpLCAnMzE1NDExNzY0NzA1ODgyMzUyJyk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC5ub25jZSwgJzY0MjQ4Jyk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC5leHBpcmF0aW9uLCA2NCk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5pbnB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzWzBdLFxuICAgICAgICAgIHZhbHVlOiB0ZXN0RGF0YS5yZWNpcGllbnRzWzBdLmFtb3VudCxcbiAgICAgICAgICBjb2luOiAndHZldCcsXG4gICAgICAgIH0pO1xuICAgICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4Lm91dHB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgYWRkcmVzczogdGVzdERhdGEucmVjaXBpZW50c1swXS5hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiB0ZXN0RGF0YS5yZWNpcGllbnRzWzBdLmFtb3VudCxcbiAgICAgICAgICBjb2luOiAndHZldCcsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0eEJ1aWxkZXIuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KSwgdHJ1ZSk7XG4gICAgICAgIHJhd1R4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5VTlNJR05FRF9UUkFOU0FDVElPTl8yKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuZCBzZW5kIGEgc2lnbmVkIHR4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuU1BPTlNPUkVEX1RSQU5TQUNUSU9OKTtcbiAgICAgICAgdHhCdWlsZGVyLmdldE5vbmNlKCkuc2hvdWxkLmVxdWFsKCcxODYwMzcnKTtcblxuICAgICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5pbnB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzWzBdLFxuICAgICAgICAgIHZhbHVlOiB0ZXN0RGF0YS5BTU9VTlQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjb2luOiAndHZldCcsXG4gICAgICAgIH0pO1xuICAgICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4Lm91dHB1dHNbMF0uc2hvdWxkLmRlZXBFcXVhbCh7XG4gICAgICAgICAgYWRkcmVzczogdGVzdERhdGEucmVjaXBpZW50c1swXS5hZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiB0ZXN0RGF0YS5BTU9VTlQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjb2luOiAndHZldCcsXG4gICAgICAgIH0pO1xuICAgICAgICBzaG91bGQuZXF1YWwodHguaWQsICcweDZkODQyZDVkYzVkNTlkNGU4ZjBhOGVjMjc1N2I0MzBkMWYxOWMwNjc2NmZiYzViM2RiNWViYWM4YTA2N2E0MzknKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4LmdhcywgMjEwMDApO1xuICAgICAgICBzaG91bGQuZXF1YWwodHguZ2V0RmVlKCksICczMTU0MTE3NjQ3MDU4ODIzNTInKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4Lm5vbmNlLCAxODYwMzcpO1xuICAgICAgICBzaG91bGQuZXF1YWwodHguZXhwaXJhdGlvbiwgNjQpO1xuICAgICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0eEJ1aWxkZXIuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KSwgdHJ1ZSk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuU1BPTlNPUkVEX1RSQU5TQUNUSU9OKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmFsaWRhdGUgYSB2YWxpZCBzaWduYWJsZVBheWxvYWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKGNvaW5zLmdldCgndHZldCcpKTtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIodHJhbnNhY3Rpb24pO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZGVyKHRlc3REYXRhLmFkZHJlc3Nlcy52YWxpZEFkZHJlc3Nlc1swXSk7XG4gICAgICAgIHR4QnVpbGRlci5yZWNpcGllbnRzKHRlc3REYXRhLnJlY2lwaWVudHMpO1xuICAgICAgICB0eEJ1aWxkZXIuZ2FzKDIxMDAwKTtcbiAgICAgICAgdHhCdWlsZGVyLm5vbmNlKCc2NDI0OCcpO1xuICAgICAgICB0eEJ1aWxkZXIuZXhwaXJhdGlvbig2NCk7XG4gICAgICAgIHR4QnVpbGRlci5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJyk7XG4gICAgICAgIHR4QnVpbGRlci5nYXNQcmljZUNvZWYoMTI4KTtcbiAgICAgICAgdHhCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyh0ZXN0RGF0YS5mZWVQYXllci5hZGRyZXNzKTtcbiAgICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgICBjb25zdCBzaWduYWJsZVBheWxvYWQgPSB0eC5zaWduYWJsZVBheWxvYWQ7XG4gICAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgICBzaWduYWJsZVBheWxvYWQudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgICdmNzI3ODgwMTRlYWQxNDBlNzdiYmMxNDBlMGRmOTRlNTlmMWNlYTRlMGZlZjUxMWUzZDBmNGVlYzQ0YWRmMTljNGNiZWVjODgwMTYzNDU3ODVkOGEwMDAwODA4MTgwODI1MjA4ODA4MmZhZjhjMTAxJ1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSB1bnNpZ25lZCB0eCBhbmQgdmFsaWRhdGUgaXRzIHRvSnNvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0dmV0JykpO1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcih0cmFuc2FjdGlvbik7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzWzBdKTtcbiAgICAgICAgdHhCdWlsZGVyLnJlY2lwaWVudHModGVzdERhdGEucmVjaXBpZW50cyk7XG4gICAgICAgIHR4QnVpbGRlci5nYXMoMjEwMDApO1xuICAgICAgICB0eEJ1aWxkZXIubm9uY2UoJzY0MjQ4Jyk7XG4gICAgICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKDQwMCk7XG4gICAgICAgIHR4QnVpbGRlci5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJyk7XG4gICAgICAgIHR4QnVpbGRlci5nYXNQcmljZUNvZWYoMTI4KTtcbiAgICAgICAgdHhCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyh0ZXN0RGF0YS5mZWVQYXllci5hZGRyZXNzKTtcbiAgICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgICBjb25zdCB0b0pzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHRvSnNvbi5zZW5kZXIsIHRlc3REYXRhLmFkZHJlc3Nlcy52YWxpZEFkZHJlc3Nlc1swXSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodG9Kc29uLnJlY2lwaWVudHMsIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5yZWNpcGllbnRzWzBdLmFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IHRlc3REYXRhLnJlY2lwaWVudHNbMF0uYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBzaG91bGQuZXF1YWwodG9Kc29uLm5vbmNlLCAnNjQyNDgnKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHRvSnNvbi5nYXMsIDIxMDAwKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHRvSnNvbi5nYXNQcmljZUNvZWYsIDEyOCk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0b0pzb24uZXhwaXJhdGlvbiwgNDAwKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHRvSnNvbi5mZWVQYXllciwgdGVzdERhdGEuZmVlUGF5ZXIuYWRkcmVzcyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpZ25lZCB0eCBhbmQgdmFsaWRhdGUgaXRzIHRvSnNvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLlNQT05TT1JFRF9UUkFOU0FDVElPTik7XG4gICAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgICAgY29uc3QgdG9Kc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0b0pzb24uaWQsICcweDZkODQyZDVkYzVkNTlkNGU4ZjBhOGVjMjc1N2I0MzBkMWYxOWMwNjc2NmZiYzViM2RiNWViYWM4YTA2N2E0MzknKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHRvSnNvbi5zZW5kZXIsIHRlc3REYXRhLmFkZHJlc3Nlcy52YWxpZEFkZHJlc3Nlc1swXSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodG9Kc29uLnJlY2lwaWVudHMsIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5hZGRyZXNzZXMudmFsaWRBZGRyZXNzZXNbMV0udG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIGFtb3VudDogdGVzdERhdGEuQU1PVU5ULnRvU3RyaW5nKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0b0pzb24ubm9uY2UsICcxODYwMzcnKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHRvSnNvbi5nYXMsIDIxMDAwKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHRvSnNvbi5nYXNQcmljZUNvZWYsIDEyOCk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0b0pzb24uZXhwaXJhdGlvbiwgNjQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSB1bnNpZ25lZCB0eCB0aGVuIGFkZCBzZW5kZXIgc2lnIGFuZCBidWlsZCBhZ2FpbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0dmV0JykpO1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcih0cmFuc2FjdGlvbik7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzWzJdKTtcbiAgICAgICAgdHhCdWlsZGVyLnJlY2lwaWVudHModGVzdERhdGEucmVjaXBpZW50cyk7XG4gICAgICAgIHR4QnVpbGRlci5nYXMoMjEwMDApO1xuICAgICAgICB0eEJ1aWxkZXIubm9uY2UoJzY0MjQ4Jyk7XG4gICAgICAgIHR4QnVpbGRlci5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJyk7XG4gICAgICAgIHR4QnVpbGRlci5hZGRGZWVQYXllckFkZHJlc3ModGVzdERhdGEuZmVlUGF5ZXIuYWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKDY0KTtcbiAgICAgICAgdHhCdWlsZGVyLmdhc1ByaWNlQ29lZigxMjgpO1xuICAgICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICAgIGNvbnN0IHVuc2lnbmVkU2VyaWFsaXplZFR4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICBjb25zdCBidWlsZGVyMSA9IGZhY3RvcnkuZnJvbSh1bnNpZ25lZFNlcmlhbGl6ZWRUeCk7XG4gICAgICAgIGJ1aWxkZXIxLmFkZFNlbmRlclNpZ25hdHVyZShCdWZmZXIuZnJvbSh0ZXN0RGF0YS5zZW5kZXJTaWcsICdoZXgnKSk7XG4gICAgICAgIGNvbnN0IHNlbmRlclNpZ25lZFR4ID0gYXdhaXQgYnVpbGRlcjEuYnVpbGQoKTtcbiAgICAgICAgY29uc3Qgc2VuZGVyU2lnbmVkU2VyaWFsaXplZFR4ID0gc2VuZGVyU2lnbmVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHNlbmRlclNpZ25lZFNlcmlhbGl6ZWRUeCwgdGVzdERhdGEuc2VuZGVyU2lnbmVkU2VyaWFsaXplZFR4SGV4KTtcblxuICAgICAgICBjb25zdCBidWlsZGVyMiA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5zZW5kZXJTaWduZWRTZXJpYWxpemVkVHhIZXgpO1xuICAgICAgICBidWlsZGVyMi5hZGRTZW5kZXJTaWduYXR1cmUoQnVmZmVyLmZyb20odGVzdERhdGEuc2VuZGVyU2lnLCAnaGV4JykpO1xuICAgICAgICBidWlsZGVyMi5hZGRGZWVQYXllclNpZ25hdHVyZShCdWZmZXIuZnJvbSh0ZXN0RGF0YS5mZWVQYXllclNpZywgJ2hleCcpKTtcbiAgICAgICAgY29uc3QgY29tcGxldGVseVNpZ25lZFR4ID0gYXdhaXQgYnVpbGRlcjIuYnVpbGQoKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGNvbXBsZXRlbHlTaWduZWRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5jb21wbGV0ZVNpZ25lZFNlcmlhbGl6ZWRIZXgpO1xuICAgICAgICBzaG91bGQuZXF1YWwoY29tcGxldGVseVNpZ25lZFR4LmlkLCAnMHhiOTg4ZDYxNGQzYzI0NDIwY2IyMTgzMjM5YWI2MDFiNTNlNjNmZjRjODFjZWExZTQ4ODhiYzlkMGFhNmFhZDEzJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwcmVzZXJ2ZSBmdWxsIHByZWNpc2lvbiBvZiBsYXJnZSBudW1iZXIgdmFsdWVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBBIHZlcnkgbGFyZ2UgbnVtYmVyIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgcmVwcmVzZW50ZWQgaW4gc2NpZW50aWZpYyBub3RhdGlvbiAnMi4zMzI3MzQ5Mjg0NDg4NzZlKzIyXG4gICAgICAgIGNvbnN0IGxhcmdlQW1vdW50ID0gJzIzMzI3MzQ5Mjg0NDg4NzYxMDk2NDEzJztcblxuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3R2ZXQnKSk7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKHRyYW5zYWN0aW9uKTtcblxuICAgICAgICAvLyBVc2UgdGhlIGxhcmdlIGFtb3VudCBpbiByZWNpcGllbnRzXG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzWzFdLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICBhbW91bnQ6IGxhcmdlQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgdHhCdWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5hZGRyZXNzZXMudmFsaWRBZGRyZXNzZXNbMF0pO1xuICAgICAgICB0eEJ1aWxkZXIucmVjaXBpZW50cyhyZWNpcGllbnRzKTtcbiAgICAgICAgdHhCdWlsZGVyLmdhcygyMTAwMCk7XG4gICAgICAgIHR4QnVpbGRlci5ub25jZSgnNjQyNDgnKTtcbiAgICAgICAgdHhCdWlsZGVyLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKTtcbiAgICAgICAgdHhCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyh0ZXN0RGF0YS5mZWVQYXllci5hZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLmV4cGlyYXRpb24oNjQpO1xuICAgICAgICB0eEJ1aWxkZXIuZ2FzUHJpY2VDb2VmKDEyOCk7XG5cbiAgICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB2YWx1ZSBpcyBwcmVzZXJ2ZWQgZXhhY3RseSBhcyBwcm92aWRlZFxuICAgICAgICBzaG91bGQuZXF1YWwodHgub3V0cHV0c1swXS52YWx1ZSwgbGFyZ2VBbW91bnQpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb24gYW5kIHBhcnNlIGl0IGJhY2tcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZFR4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgY29uc3QgZGVzZXJpYWxpemVkVHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHNlcmlhbGl6ZWRUeCk7XG4gICAgICAgIGNvbnN0IGRlc2VyaWFsaXplZFR4ID0gYXdhaXQgZGVzZXJpYWxpemVkVHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgICAgLy8gVmVyaWZ5IHRoZSB2YWx1ZSBpcyBzdGlsbCBwcmVzZXJ2ZWQgYWZ0ZXIgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb25cbiAgICAgICAgc2hvdWxkLmVxdWFsKGRlc2VyaWFsaXplZFR4Lm91dHB1dHNbMF0udmFsdWUsIGxhcmdlQW1vdW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0ZhaWwnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIGludmFsaWQgc2VuZGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3R2ZXQnKSk7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcih0cmFuc2FjdGlvbik7XG4gICAgICAgIHNob3VsZCgoKSA9PiBidWlsZGVyLnNlbmRlcigncmFuZG9tU3RyaW5nJykpLnRocm93RXJyb3IoJ0ludmFsaWQgYWRkcmVzcyByYW5kb21TdHJpbmcnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIGludmFsaWQgcmVjaXBpZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IGJ1aWxkZXIucmVjaXBpZW50cyhbdGVzdERhdGEuaW52YWxpZFJlY2lwaWVudHNbMF1dKSkudGhyb3dFcnJvcignSW52YWxpZCBhZGRyZXNzIHJhbmRvbVN0cmluZycpO1xuICAgICAgICBzaG91bGQoKCkgPT4gYnVpbGRlci5yZWNpcGllbnRzKFt0ZXN0RGF0YS5pbnZhbGlkUmVjaXBpZW50c1sxXV0pKS50aHJvd0Vycm9yKCdWYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IGJ1aWxkZXIucmVjaXBpZW50cyhbdGVzdERhdGEuaW52YWxpZFJlY2lwaWVudHNbMl1dKSkudGhyb3dFcnJvcignSW52YWxpZCBhbW91bnQgZm9ybWF0Jyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIGZvciBpbnZhbGlkIGdhcyBhbW91bnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgICBzaG91bGQoKCkgPT4gYnVpbGRlci5nYXMoLTEpKS50aHJvd0Vycm9yKCdWYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validatorRegistrationTxnBuilder.d.ts","sourceRoot":"","sources":["../../../test/transactionBuilder/validatorRegistrationTxnBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,231 @@
|
|
|
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 statics_1 = require("@bitgo-beta/statics");
|
|
40
|
+
const lib_1 = require("../../src/lib");
|
|
41
|
+
const should_1 = __importDefault(require("should"));
|
|
42
|
+
const constants_1 = require("../../src/lib/constants");
|
|
43
|
+
const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
|
|
44
|
+
const testData = __importStar(require("../resources/vet"));
|
|
45
|
+
const ethereumjs_util_1 = require("ethereumjs-util");
|
|
46
|
+
const utils_1 = __importDefault(require("../../src/lib/utils"));
|
|
47
|
+
describe('VET Validator Registration Transaction', function () {
|
|
48
|
+
const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tvet'));
|
|
49
|
+
const stakingPeriod = 60480;
|
|
50
|
+
const validatorAddress = '0x9a7aFCACc88c106f3bbD6B213CD0821D9224d945';
|
|
51
|
+
const amountToStake = '25000000000000000000000000'; // 25000000 VET
|
|
52
|
+
const amountLessThanMinStake = '24000000000000000000000000'; // 24000000 VET
|
|
53
|
+
const amountGreaterThanMaxStake = '650000000000000000000000000'; // 650000000 VET
|
|
54
|
+
// Helper function to create a basic transaction builder with common properties
|
|
55
|
+
const createBasicTxBuilder = () => {
|
|
56
|
+
const txBuilder = factory.getValidatorRegistrationBuilder();
|
|
57
|
+
txBuilder.sender('0x9378c12BD7502A11F770a5C1F223c959B2805dA9');
|
|
58
|
+
txBuilder.chainTag(0x27); // Testnet chain tag
|
|
59
|
+
txBuilder.blockRef('0x0000000000000000');
|
|
60
|
+
txBuilder.expiration(64);
|
|
61
|
+
txBuilder.gas(100000);
|
|
62
|
+
txBuilder.gasPriceCoef(0);
|
|
63
|
+
txBuilder.nonce('12345');
|
|
64
|
+
return txBuilder;
|
|
65
|
+
};
|
|
66
|
+
it('should build a validator registration transaction', async function () {
|
|
67
|
+
const txBuilder = factory.getValidatorRegistrationBuilder();
|
|
68
|
+
txBuilder.stakingContractAddress(constants_1.VALIDATOR_REGISTRATION_STAKER_CONTRACT_ADDRESS_TESTNET);
|
|
69
|
+
txBuilder.stakingPeriod(stakingPeriod);
|
|
70
|
+
txBuilder.amountToStake(amountToStake);
|
|
71
|
+
txBuilder.sender('0x9378c12BD7502A11F770a5C1F223c959B2805dA9');
|
|
72
|
+
txBuilder.chainTag(0x27); // Testnet chain tag
|
|
73
|
+
txBuilder.blockRef('0x0000000000000000');
|
|
74
|
+
txBuilder.expiration(64);
|
|
75
|
+
txBuilder.gas(100000);
|
|
76
|
+
txBuilder.gasPriceCoef(0);
|
|
77
|
+
txBuilder.nonce('12345');
|
|
78
|
+
txBuilder.validator(validatorAddress);
|
|
79
|
+
const tx = await txBuilder.build();
|
|
80
|
+
should_1.default.exist(tx);
|
|
81
|
+
tx.should.be.instanceof(lib_1.Transaction);
|
|
82
|
+
tx.should.be.instanceof(lib_1.ValidatorRegistrationTransaction);
|
|
83
|
+
const validatorRegistrationTransaction = tx;
|
|
84
|
+
validatorRegistrationTransaction.stakingContractAddress.should.equal(constants_1.VALIDATOR_REGISTRATION_STAKER_CONTRACT_ADDRESS_TESTNET);
|
|
85
|
+
validatorRegistrationTransaction.stakingPeriod.should.equal(stakingPeriod);
|
|
86
|
+
validatorRegistrationTransaction.validator.should.equal(validatorAddress);
|
|
87
|
+
validatorRegistrationTransaction.amountToStake.should.equal(amountToStake);
|
|
88
|
+
// Verify clauses
|
|
89
|
+
validatorRegistrationTransaction.clauses.length.should.equal(1);
|
|
90
|
+
should_1.default.exist(validatorRegistrationTransaction.clauses[0].to);
|
|
91
|
+
should_1.default.exist(validatorRegistrationTransaction.clauses[0].value);
|
|
92
|
+
validatorRegistrationTransaction.clauses[0].to?.should.equal(constants_1.VALIDATOR_REGISTRATION_STAKER_CONTRACT_ADDRESS_TESTNET);
|
|
93
|
+
validatorRegistrationTransaction.clauses[0].value?.should.equal(amountToStake);
|
|
94
|
+
// Verify transaction data is correctly encoded using ethereumABI
|
|
95
|
+
should_1.default.exist(validatorRegistrationTransaction.clauses[0].data);
|
|
96
|
+
const txData = validatorRegistrationTransaction.clauses[0].data;
|
|
97
|
+
txData.should.startWith(constants_1.ADD_VALIDATION_METHOD_ID);
|
|
98
|
+
// Verify the encoded data matches what we expect from ethereumABI
|
|
99
|
+
const methodName = 'addValidation';
|
|
100
|
+
const types = ['address', 'uint32'];
|
|
101
|
+
const params = [validatorAddress, new ethereumjs_util_1.BN(stakingPeriod)];
|
|
102
|
+
const method = ethereumjs_abi_1.default.methodID(methodName, types);
|
|
103
|
+
const args = ethereumjs_abi_1.default.rawEncode(types, params);
|
|
104
|
+
const expectedData = '0x' + Buffer.concat([method, args]).toString('hex');
|
|
105
|
+
txData.should.equal(expectedData);
|
|
106
|
+
// Verify recipients
|
|
107
|
+
validatorRegistrationTransaction.recipients.length.should.equal(1);
|
|
108
|
+
validatorRegistrationTransaction.recipients[0].address.should.equal(constants_1.VALIDATOR_REGISTRATION_STAKER_CONTRACT_ADDRESS_TESTNET);
|
|
109
|
+
});
|
|
110
|
+
describe('Failure scenarios', function () {
|
|
111
|
+
it('should throw error when stakingContractAddress is missing', async function () {
|
|
112
|
+
const txBuilder = createBasicTxBuilder();
|
|
113
|
+
txBuilder.stakingPeriod(stakingPeriod);
|
|
114
|
+
txBuilder.validator(validatorAddress);
|
|
115
|
+
txBuilder.amountToStake(amountToStake);
|
|
116
|
+
await txBuilder.build().should.be.rejectedWith('Staking contract address is required');
|
|
117
|
+
});
|
|
118
|
+
it('should throw error when stakingPeriod is missing', async function () {
|
|
119
|
+
const txBuilder = createBasicTxBuilder();
|
|
120
|
+
txBuilder.stakingContractAddress(constants_1.VALIDATOR_REGISTRATION_STAKER_CONTRACT_ADDRESS_TESTNET);
|
|
121
|
+
txBuilder.validator(validatorAddress);
|
|
122
|
+
txBuilder.amountToStake(amountToStake);
|
|
123
|
+
await txBuilder.build().should.be.rejectedWith('Staking period is required');
|
|
124
|
+
});
|
|
125
|
+
it('should throw error when validator address is missing', async function () {
|
|
126
|
+
const txBuilder = createBasicTxBuilder();
|
|
127
|
+
txBuilder.stakingContractAddress(constants_1.VALIDATOR_REGISTRATION_STAKER_CONTRACT_ADDRESS_TESTNET);
|
|
128
|
+
txBuilder.stakingPeriod(stakingPeriod);
|
|
129
|
+
txBuilder.amountToStake(amountToStake);
|
|
130
|
+
await txBuilder.build().should.be.rejectedWith('Validator address is required');
|
|
131
|
+
});
|
|
132
|
+
it('should throw error when amount is missing', async function () {
|
|
133
|
+
const txBuilder = createBasicTxBuilder();
|
|
134
|
+
txBuilder.stakingContractAddress(constants_1.VALIDATOR_REGISTRATION_STAKER_CONTRACT_ADDRESS_TESTNET);
|
|
135
|
+
txBuilder.stakingPeriod(stakingPeriod);
|
|
136
|
+
txBuilder.validator(validatorAddress);
|
|
137
|
+
await txBuilder.build().should.be.rejectedWith('Staking amount is required');
|
|
138
|
+
});
|
|
139
|
+
it('should throw error when amount is less than minimum stake', async function () {
|
|
140
|
+
const txBuilder = createBasicTxBuilder();
|
|
141
|
+
txBuilder.stakingContractAddress(constants_1.VALIDATOR_REGISTRATION_STAKER_CONTRACT_ADDRESS_TESTNET);
|
|
142
|
+
txBuilder.stakingPeriod(stakingPeriod);
|
|
143
|
+
txBuilder.validator(validatorAddress);
|
|
144
|
+
txBuilder.amountToStake(amountLessThanMinStake);
|
|
145
|
+
await txBuilder.build().should.be.rejectedWith('Staking amount must be between 25M and 600M VET');
|
|
146
|
+
});
|
|
147
|
+
it('should throw error when amount is greater than maximum stake', async function () {
|
|
148
|
+
const txBuilder = createBasicTxBuilder();
|
|
149
|
+
txBuilder.stakingContractAddress(constants_1.VALIDATOR_REGISTRATION_STAKER_CONTRACT_ADDRESS_TESTNET);
|
|
150
|
+
txBuilder.stakingPeriod(stakingPeriod);
|
|
151
|
+
txBuilder.validator(validatorAddress);
|
|
152
|
+
txBuilder.amountToStake(amountGreaterThanMaxStake);
|
|
153
|
+
await txBuilder.build().should.be.rejectedWith('Staking amount must be between 25M and 600M VET');
|
|
154
|
+
});
|
|
155
|
+
it('should throw error when stakingContractAddress is invalid', async function () {
|
|
156
|
+
const txBuilder = createBasicTxBuilder();
|
|
157
|
+
// Invalid address (wrong format)
|
|
158
|
+
(0, should_1.default)(() => {
|
|
159
|
+
txBuilder.stakingContractAddress('invalid-address');
|
|
160
|
+
}).throw(/Invalid address/);
|
|
161
|
+
});
|
|
162
|
+
it('should build transaction with undefined sender but include it in inputs', async function () {
|
|
163
|
+
const txBuilder = factory.getValidatorRegistrationBuilder();
|
|
164
|
+
txBuilder.stakingContractAddress(constants_1.VALIDATOR_REGISTRATION_STAKER_CONTRACT_ADDRESS_TESTNET);
|
|
165
|
+
txBuilder.stakingPeriod(stakingPeriod);
|
|
166
|
+
txBuilder.amountToStake(amountToStake);
|
|
167
|
+
txBuilder.chainTag(0x27);
|
|
168
|
+
txBuilder.blockRef('0x0000000000000000');
|
|
169
|
+
txBuilder.expiration(64);
|
|
170
|
+
txBuilder.gas(100000);
|
|
171
|
+
txBuilder.gasPriceCoef(0);
|
|
172
|
+
txBuilder.nonce('12345');
|
|
173
|
+
txBuilder.validator(validatorAddress);
|
|
174
|
+
// Not setting sender
|
|
175
|
+
const tx = await txBuilder.build();
|
|
176
|
+
tx.should.be.instanceof(lib_1.ValidatorRegistrationTransaction);
|
|
177
|
+
const validatorRegistrationTransaction = tx;
|
|
178
|
+
// Verify the transaction has inputs but with undefined address
|
|
179
|
+
validatorRegistrationTransaction.inputs.length.should.equal(1);
|
|
180
|
+
should_1.default.not.exist(validatorRegistrationTransaction.inputs[0].address);
|
|
181
|
+
// Verify the transaction has the correct output
|
|
182
|
+
validatorRegistrationTransaction.outputs.length.should.equal(1);
|
|
183
|
+
validatorRegistrationTransaction.outputs[0].address.should.equal(constants_1.VALIDATOR_REGISTRATION_STAKER_CONTRACT_ADDRESS_TESTNET);
|
|
184
|
+
});
|
|
185
|
+
it('should use network default chainTag when not explicitly set', async function () {
|
|
186
|
+
const txBuilder = factory.getValidatorRegistrationBuilder();
|
|
187
|
+
txBuilder.stakingContractAddress(constants_1.VALIDATOR_REGISTRATION_STAKER_CONTRACT_ADDRESS_TESTNET);
|
|
188
|
+
txBuilder.stakingPeriod(stakingPeriod);
|
|
189
|
+
// Not setting chainTag
|
|
190
|
+
txBuilder.blockRef('0x0000000000000000');
|
|
191
|
+
txBuilder.amountToStake(amountToStake);
|
|
192
|
+
txBuilder.expiration(64);
|
|
193
|
+
txBuilder.gas(100000);
|
|
194
|
+
txBuilder.gasPriceCoef(0);
|
|
195
|
+
txBuilder.nonce('12345');
|
|
196
|
+
txBuilder.sender('0x9378c12BD7502A11F770a5C1F223c959B2805dA9');
|
|
197
|
+
txBuilder.validator(validatorAddress);
|
|
198
|
+
const tx = await txBuilder.build();
|
|
199
|
+
tx.should.be.instanceof(lib_1.ValidatorRegistrationTransaction);
|
|
200
|
+
const validatorRegistrationTransaction = tx;
|
|
201
|
+
// Verify the chainTag is set to the testnet default (39)
|
|
202
|
+
validatorRegistrationTransaction.chainTag.should.equal(39);
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
describe('decodeAddValidationData', function () {
|
|
206
|
+
it('should correctly decode validator registration transaction data with proper address formatting', function () {
|
|
207
|
+
const decodedData = utils_1.default.decodeAddValidationData(testData.VALIDATOR_REGISTRATION_CLAUSE_DATA);
|
|
208
|
+
decodedData.period.should.equal(testData.STAKING_PERIOD);
|
|
209
|
+
decodedData.validator.should.equal(testData.VALIDATOR_REGISTRATION_VALIDATOR);
|
|
210
|
+
decodedData.validator.should.startWith('0x');
|
|
211
|
+
decodedData.validator.should.equal(decodedData.validator.toLowerCase());
|
|
212
|
+
});
|
|
213
|
+
it('should correctly deserialize real signed validator registration transaction from raw hex', async function () {
|
|
214
|
+
const txBuilder = factory.from(testData.VALIDATOR_REGISTRATION_TRANSACTION);
|
|
215
|
+
const tx = txBuilder.transaction;
|
|
216
|
+
tx.should.be.instanceof(lib_1.ValidatorRegistrationTransaction);
|
|
217
|
+
tx.stakingContractAddress.should.equal(testData.VALIDATOR_REGISTRATION_STAKER_CONTRACT);
|
|
218
|
+
tx.stakingPeriod.should.equal(testData.VALIDATOR_REGISTRATION_STAKING_PERIOD);
|
|
219
|
+
tx.validator.should.equal(testData.VALIDATOR_REGISTRATION_VALIDATOR);
|
|
220
|
+
tx.amountToStake.should.equal(testData.VALIDATOR_REGISTRATION_AMOUNT);
|
|
221
|
+
tx.validator.should.startWith('0x');
|
|
222
|
+
tx.validator.should.equal(tx.validator.toLowerCase());
|
|
223
|
+
should_1.default.exist(tx.inputs);
|
|
224
|
+
tx.inputs.length.should.equal(1);
|
|
225
|
+
const decodedData = utils_1.default.decodeAddValidationData(tx.clauses[0].data);
|
|
226
|
+
decodedData.period.should.equal(testData.VALIDATOR_REGISTRATION_STAKING_PERIOD);
|
|
227
|
+
decodedData.validator.should.equal(testData.VALIDATOR_REGISTRATION_VALIDATOR);
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yUmVnaXN0cmF0aW9uVHhuQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdHJhbnNhY3Rpb25CdWlsZGVyL3ZhbGlkYXRvclJlZ2lzdHJhdGlvblR4bkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBNEM7QUFDNUMsdUNBQXlHO0FBQ3pHLG9EQUE0QjtBQUM1Qix1REFHaUM7QUFDakMsb0VBQXlDO0FBQ3pDLDJEQUE2QztBQUM3QyxxREFBcUM7QUFDckMsZ0VBQXdDO0FBRXhDLFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRTtJQUNqRCxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRSxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDNUIsTUFBTSxnQkFBZ0IsR0FBRyw0Q0FBNEMsQ0FBQztJQUN0RSxNQUFNLGFBQWEsR0FBRyw0QkFBNEIsQ0FBQyxDQUFDLGVBQWU7SUFDbkUsTUFBTSxzQkFBc0IsR0FBRyw0QkFBNEIsQ0FBQyxDQUFDLGVBQWU7SUFDNUUsTUFBTSx5QkFBeUIsR0FBRyw2QkFBNkIsQ0FBQyxDQUFDLGdCQUFnQjtJQUVqRiwrRUFBK0U7SUFDL0UsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLEVBQUU7UUFDaEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFDNUQsU0FBUyxDQUFDLE1BQU0sQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQy9ELFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxvQkFBb0I7UUFDOUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3pDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBRUYsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEtBQUs7UUFDM0QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFDNUQsU0FBUyxDQUFDLHNCQUFzQixDQUFDLGtFQUFzRCxDQUFDLENBQUM7UUFDekYsU0FBUyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2QyxTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZDLFNBQVMsQ0FBQyxNQUFNLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUMvRCxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CO1FBQzlDLFNBQVMsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN6QyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pCLFNBQVMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV0QyxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQixFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsaUJBQVcsQ0FBQyxDQUFDO1FBQ3JDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxzQ0FBZ0MsQ0FBQyxDQUFDO1FBRTFELE1BQU0sZ0NBQWdDLEdBQUcsRUFBc0MsQ0FBQztRQUNoRixnQ0FBZ0MsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNsRSxrRUFBc0QsQ0FDdkQsQ0FBQztRQUNGLGdDQUFnQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNFLGdDQUFnQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUUsZ0NBQWdDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFM0UsaUJBQWlCO1FBQ2pCLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0QsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FDMUQsa0VBQXNELENBQ3ZELENBQUM7UUFDRixnQ0FBZ0MsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFL0UsaUVBQWlFO1FBQ2pFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxnQ0FBZ0MsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLG9DQUF3QixDQUFDLENBQUM7UUFFbEQsa0VBQWtFO1FBQ2xFLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQztRQUNuQyxNQUFNLEtBQUssR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixFQUFFLElBQUksb0JBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBRXpELE1BQU0sTUFBTSxHQUFHLHdCQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyx3QkFBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbEMsb0JBQW9CO1FBQ3BCLGdDQUFnQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRSxnQ0FBZ0MsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2pFLGtFQUFzRCxDQUN2RCxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsbUJBQW1CLEVBQUU7UUFDNUIsRUFBRSxDQUFDLDJEQUEyRCxFQUFFLEtBQUs7WUFDbkUsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztZQUN6QyxTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZDLFNBQVMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN0QyxTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRXZDLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDekYsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUUsS0FBSztZQUMxRCxNQUFNLFNBQVMsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3pDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxrRUFBc0QsQ0FBQyxDQUFDO1lBQ3pGLFNBQVMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN0QyxTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRXZDLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsc0RBQXNELEVBQUUsS0FBSztZQUM5RCxNQUFNLFNBQVMsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3pDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxrRUFBc0QsQ0FBQyxDQUFDO1lBQ3pGLFNBQVMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdkMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUV2QyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ2xGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEtBQUs7WUFDbkQsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztZQUN6QyxTQUFTLENBQUMsc0JBQXNCLENBQUMsa0VBQXNELENBQUMsQ0FBQztZQUN6RixTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZDLFNBQVMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUV0QyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQy9FLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJEQUEyRCxFQUFFLEtBQUs7WUFDbkUsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztZQUN6QyxTQUFTLENBQUMsc0JBQXNCLENBQUMsa0VBQXNELENBQUMsQ0FBQztZQUN6RixTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZDLFNBQVMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN0QyxTQUFTLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFFaEQsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUNwRyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4REFBOEQsRUFBRSxLQUFLO1lBQ3RFLE1BQU0sU0FBUyxHQUFHLG9CQUFvQixFQUFFLENBQUM7WUFDekMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLGtFQUFzRCxDQUFDLENBQUM7WUFDekYsU0FBUyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2QyxTQUFTLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDdEMsU0FBUyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBRW5ELE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFDcEcsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMkRBQTJELEVBQUUsS0FBSztZQUNuRSxNQUFNLFNBQVMsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1lBRXpDLGlDQUFpQztZQUNqQyxJQUFBLGdCQUFNLEVBQUMsR0FBRyxFQUFFO2dCQUNWLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3RELENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlFQUF5RSxFQUFFLEtBQUs7WUFDakYsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLCtCQUErQixFQUFFLENBQUM7WUFDNUQsU0FBUyxDQUFDLHNCQUFzQixDQUFDLGtFQUFzRCxDQUFDLENBQUM7WUFDekYsU0FBUyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2QyxTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3pDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QixTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3RDLHFCQUFxQjtZQUVyQixNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsc0NBQWdDLENBQUMsQ0FBQztZQUUxRCxNQUFNLGdDQUFnQyxHQUFHLEVBQXNDLENBQUM7WUFDaEYsK0RBQStEO1lBQy9ELGdDQUFnQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvRCxnQkFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXJFLGdEQUFnRDtZQUNoRCxnQ0FBZ0MsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEUsZ0NBQWdDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUM5RCxrRUFBc0QsQ0FDdkQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEtBQUs7WUFDckUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLCtCQUErQixFQUFFLENBQUM7WUFDNUQsU0FBUyxDQUFDLHNCQUFzQixDQUFDLGtFQUFzRCxDQUFDLENBQUM7WUFDekYsU0FBUyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2Qyx1QkFBdUI7WUFDdkIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3pDLFNBQVMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdkMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QixTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RCLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6QixTQUFTLENBQUMsTUFBTSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFDL0QsU0FBUyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBRXRDLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxzQ0FBZ0MsQ0FBQyxDQUFDO1lBRTFELE1BQU0sZ0NBQWdDLEdBQUcsRUFBc0MsQ0FBQztZQUNoRix5REFBeUQ7WUFDekQsZ0NBQWdDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx5QkFBeUIsRUFBRTtRQUNsQyxFQUFFLENBQUMsZ0dBQWdHLEVBQUU7WUFDbkcsTUFBTSxXQUFXLEdBQUcsZUFBSyxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1lBRS9GLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDekQsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQzlFLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBGQUEwRixFQUFFLEtBQUs7WUFDbEcsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsa0NBQWtDLENBQUMsQ0FBQztZQUM1RSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsV0FBK0MsQ0FBQztZQUNyRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsc0NBQWdDLENBQUMsQ0FBQztZQUMxRCxFQUFFLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUN4RixFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7WUFDOUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQ3JFLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUN0RSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN0RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVqQyxNQUFNLFdBQVcsR0FBRyxlQUFLLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RSxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7WUFDaEYsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBUcmFuc2FjdGlvbiwgVmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7XG4gIEFERF9WQUxJREFUSU9OX01FVEhPRF9JRCxcbiAgVkFMSURBVE9SX1JFR0lTVFJBVElPTl9TVEFLRVJfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVULFxufSBmcm9tICcuLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgRXRoZXJldW1BYmkgZnJvbSAnZXRoZXJldW1qcy1hYmknO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3ZldCc7XG5pbXBvcnQgeyBCTiB9IGZyb20gJ2V0aGVyZXVtanMtdXRpbCc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5cbmRlc2NyaWJlKCdWRVQgVmFsaWRhdG9yIFJlZ2lzdHJhdGlvbiBUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndHZldCcpKTtcbiAgY29uc3Qgc3Rha2luZ1BlcmlvZCA9IDYwNDgwO1xuICBjb25zdCB2YWxpZGF0b3JBZGRyZXNzID0gJzB4OWE3YUZDQUNjODhjMTA2ZjNiYkQ2QjIxM0NEMDgyMUQ5MjI0ZDk0NSc7XG4gIGNvbnN0IGFtb3VudFRvU3Rha2UgPSAnMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnOyAvLyAyNTAwMDAwMCBWRVRcbiAgY29uc3QgYW1vdW50TGVzc1RoYW5NaW5TdGFrZSA9ICcyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7IC8vIDI0MDAwMDAwIFZFVFxuICBjb25zdCBhbW91bnRHcmVhdGVyVGhhbk1heFN0YWtlID0gJzY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7IC8vIDY1MDAwMDAwMCBWRVRcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgYmFzaWMgdHJhbnNhY3Rpb24gYnVpbGRlciB3aXRoIGNvbW1vbiBwcm9wZXJ0aWVzXG4gIGNvbnN0IGNyZWF0ZUJhc2ljVHhCdWlsZGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VmFsaWRhdG9yUmVnaXN0cmF0aW9uQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIoJzB4OTM3OGMxMkJENzUwMkExMUY3NzBhNUMxRjIyM2M5NTlCMjgwNWRBOScpO1xuICAgIHR4QnVpbGRlci5jaGFpblRhZygweDI3KTsgLy8gVGVzdG5ldCBjaGFpbiB0YWdcbiAgICB0eEJ1aWxkZXIuYmxvY2tSZWYoJzB4MDAwMDAwMDAwMDAwMDAwMCcpO1xuICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKDY0KTtcbiAgICB0eEJ1aWxkZXIuZ2FzKDEwMDAwMCk7XG4gICAgdHhCdWlsZGVyLmdhc1ByaWNlQ29lZigwKTtcbiAgICB0eEJ1aWxkZXIubm9uY2UoJzEyMzQ1Jyk7XG4gICAgcmV0dXJuIHR4QnVpbGRlcjtcbiAgfTtcblxuICBpdCgnc2hvdWxkIGJ1aWxkIGEgdmFsaWRhdG9yIHJlZ2lzdHJhdGlvbiB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFZhbGlkYXRvclJlZ2lzdHJhdGlvbkJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhWQUxJREFUT1JfUkVHSVNUUkFUSU9OX1NUQUtFUl9DT05UUkFDVF9BRERSRVNTX1RFU1RORVQpO1xuICAgIHR4QnVpbGRlci5zdGFraW5nUGVyaW9kKHN0YWtpbmdQZXJpb2QpO1xuICAgIHR4QnVpbGRlci5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2UpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIoJzB4OTM3OGMxMkJENzUwMkExMUY3NzBhNUMxRjIyM2M5NTlCMjgwNWRBOScpO1xuICAgIHR4QnVpbGRlci5jaGFpblRhZygweDI3KTsgLy8gVGVzdG5ldCBjaGFpbiB0YWdcbiAgICB0eEJ1aWxkZXIuYmxvY2tSZWYoJzB4MDAwMDAwMDAwMDAwMDAwMCcpO1xuICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKDY0KTtcbiAgICB0eEJ1aWxkZXIuZ2FzKDEwMDAwMCk7XG4gICAgdHhCdWlsZGVyLmdhc1ByaWNlQ29lZigwKTtcbiAgICB0eEJ1aWxkZXIubm9uY2UoJzEyMzQ1Jyk7XG4gICAgdHhCdWlsZGVyLnZhbGlkYXRvcih2YWxpZGF0b3JBZGRyZXNzKTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmV4aXN0KHR4KTtcbiAgICB0eC5zaG91bGQuYmUuaW5zdGFuY2VvZihUcmFuc2FjdGlvbik7XG4gICAgdHguc2hvdWxkLmJlLmluc3RhbmNlb2YoVmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24pO1xuXG4gICAgY29uc3QgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24gPSB0eCBhcyBWYWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbjtcbiAgICB2YWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbi5zdGFraW5nQ29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbChcbiAgICAgIFZBTElEQVRPUl9SRUdJU1RSQVRJT05fU1RBS0VSX0NPTlRSQUNUX0FERFJFU1NfVEVTVE5FVFxuICAgICk7XG4gICAgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24uc3Rha2luZ1BlcmlvZC5zaG91bGQuZXF1YWwoc3Rha2luZ1BlcmlvZCk7XG4gICAgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24udmFsaWRhdG9yLnNob3VsZC5lcXVhbCh2YWxpZGF0b3JBZGRyZXNzKTtcbiAgICB2YWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbi5hbW91bnRUb1N0YWtlLnNob3VsZC5lcXVhbChhbW91bnRUb1N0YWtlKTtcblxuICAgIC8vIFZlcmlmeSBjbGF1c2VzXG4gICAgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24uY2xhdXNlcy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHNob3VsZC5leGlzdCh2YWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbi5jbGF1c2VzWzBdLnRvKTtcbiAgICBzaG91bGQuZXhpc3QodmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24uY2xhdXNlc1swXS52YWx1ZSk7XG4gICAgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24uY2xhdXNlc1swXS50bz8uc2hvdWxkLmVxdWFsKFxuICAgICAgVkFMSURBVE9SX1JFR0lTVFJBVElPTl9TVEFLRVJfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUXG4gICAgKTtcbiAgICB2YWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbi5jbGF1c2VzWzBdLnZhbHVlPy5zaG91bGQuZXF1YWwoYW1vdW50VG9TdGFrZSk7XG5cbiAgICAvLyBWZXJpZnkgdHJhbnNhY3Rpb24gZGF0YSBpcyBjb3JyZWN0bHkgZW5jb2RlZCB1c2luZyBldGhlcmV1bUFCSVxuICAgIHNob3VsZC5leGlzdCh2YWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbi5jbGF1c2VzWzBdLmRhdGEpO1xuICAgIGNvbnN0IHR4RGF0YSA9IHZhbGlkYXRvclJlZ2lzdHJhdGlvblRyYW5zYWN0aW9uLmNsYXVzZXNbMF0uZGF0YTtcbiAgICB0eERhdGEuc2hvdWxkLnN0YXJ0V2l0aChBRERfVkFMSURBVElPTl9NRVRIT0RfSUQpO1xuXG4gICAgLy8gVmVyaWZ5IHRoZSBlbmNvZGVkIGRhdGEgbWF0Y2hlcyB3aGF0IHdlIGV4cGVjdCBmcm9tIGV0aGVyZXVtQUJJXG4gICAgY29uc3QgbWV0aG9kTmFtZSA9ICdhZGRWYWxpZGF0aW9uJztcbiAgICBjb25zdCB0eXBlcyA9IFsnYWRkcmVzcycsICd1aW50MzInXTtcbiAgICBjb25zdCBwYXJhbXMgPSBbdmFsaWRhdG9yQWRkcmVzcywgbmV3IEJOKHN0YWtpbmdQZXJpb2QpXTtcblxuICAgIGNvbnN0IG1ldGhvZCA9IEV0aGVyZXVtQWJpLm1ldGhvZElEKG1ldGhvZE5hbWUsIHR5cGVzKTtcbiAgICBjb25zdCBhcmdzID0gRXRoZXJldW1BYmkucmF3RW5jb2RlKHR5cGVzLCBwYXJhbXMpO1xuICAgIGNvbnN0IGV4cGVjdGVkRGF0YSA9ICcweCcgKyBCdWZmZXIuY29uY2F0KFttZXRob2QsIGFyZ3NdKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICB0eERhdGEuc2hvdWxkLmVxdWFsKGV4cGVjdGVkRGF0YSk7XG5cbiAgICAvLyBWZXJpZnkgcmVjaXBpZW50c1xuICAgIHZhbGlkYXRvclJlZ2lzdHJhdGlvblRyYW5zYWN0aW9uLnJlY2lwaWVudHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICB2YWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbi5yZWNpcGllbnRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKFxuICAgICAgVkFMSURBVE9SX1JFR0lTVFJBVElPTl9TVEFLRVJfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUXG4gICAgKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0ZhaWx1cmUgc2NlbmFyaW9zJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBzdGFraW5nQ29udHJhY3RBZGRyZXNzIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnN0YWtpbmdQZXJpb2Qoc3Rha2luZ1BlcmlvZCk7XG4gICAgICB0eEJ1aWxkZXIudmFsaWRhdG9yKHZhbGlkYXRvckFkZHJlc3MpO1xuICAgICAgdHhCdWlsZGVyLmFtb3VudFRvU3Rha2UoYW1vdW50VG9TdGFrZSk7XG5cbiAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1N0YWtpbmcgY29udHJhY3QgYWRkcmVzcyBpcyByZXF1aXJlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIHN0YWtpbmdQZXJpb2QgaXMgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNyZWF0ZUJhc2ljVHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhWQUxJREFUT1JfUkVHSVNUUkFUSU9OX1NUQUtFUl9DT05UUkFDVF9BRERSRVNTX1RFU1RORVQpO1xuICAgICAgdHhCdWlsZGVyLnZhbGlkYXRvcih2YWxpZGF0b3JBZGRyZXNzKTtcbiAgICAgIHR4QnVpbGRlci5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2UpO1xuXG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdTdGFraW5nIHBlcmlvZCBpcyByZXF1aXJlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIHZhbGlkYXRvciBhZGRyZXNzIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnN0YWtpbmdDb250cmFjdEFkZHJlc3MoVkFMSURBVE9SX1JFR0lTVFJBVElPTl9TVEFLRVJfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUKTtcbiAgICAgIHR4QnVpbGRlci5zdGFraW5nUGVyaW9kKHN0YWtpbmdQZXJpb2QpO1xuICAgICAgdHhCdWlsZGVyLmFtb3VudFRvU3Rha2UoYW1vdW50VG9TdGFrZSk7XG5cbiAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1ZhbGlkYXRvciBhZGRyZXNzIGlzIHJlcXVpcmVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gYW1vdW50IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnN0YWtpbmdDb250cmFjdEFkZHJlc3MoVkFMSURBVE9SX1JFR0lTVFJBVElPTl9TVEFLRVJfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUKTtcbiAgICAgIHR4QnVpbGRlci5zdGFraW5nUGVyaW9kKHN0YWtpbmdQZXJpb2QpO1xuICAgICAgdHhCdWlsZGVyLnZhbGlkYXRvcih2YWxpZGF0b3JBZGRyZXNzKTtcblxuICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnU3Rha2luZyBhbW91bnQgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBhbW91bnQgaXMgbGVzcyB0aGFuIG1pbmltdW0gc3Rha2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjcmVhdGVCYXNpY1R4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnN0YWtpbmdDb250cmFjdEFkZHJlc3MoVkFMSURBVE9SX1JFR0lTVFJBVElPTl9TVEFLRVJfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUKTtcbiAgICAgIHR4QnVpbGRlci5zdGFraW5nUGVyaW9kKHN0YWtpbmdQZXJpb2QpO1xuICAgICAgdHhCdWlsZGVyLnZhbGlkYXRvcih2YWxpZGF0b3JBZGRyZXNzKTtcbiAgICAgIHR4QnVpbGRlci5hbW91bnRUb1N0YWtlKGFtb3VudExlc3NUaGFuTWluU3Rha2UpO1xuXG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdTdGFraW5nIGFtb3VudCBtdXN0IGJlIGJldHdlZW4gMjVNIGFuZCA2MDBNIFZFVCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIGFtb3VudCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSBzdGFrZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNyZWF0ZUJhc2ljVHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhWQUxJREFUT1JfUkVHSVNUUkFUSU9OX1NUQUtFUl9DT05UUkFDVF9BRERSRVNTX1RFU1RORVQpO1xuICAgICAgdHhCdWlsZGVyLnN0YWtpbmdQZXJpb2Qoc3Rha2luZ1BlcmlvZCk7XG4gICAgICB0eEJ1aWxkZXIudmFsaWRhdG9yKHZhbGlkYXRvckFkZHJlc3MpO1xuICAgICAgdHhCdWlsZGVyLmFtb3VudFRvU3Rha2UoYW1vdW50R3JlYXRlclRoYW5NYXhTdGFrZSk7XG5cbiAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1N0YWtpbmcgYW1vdW50IG11c3QgYmUgYmV0d2VlbiAyNU0gYW5kIDYwME0gVkVUJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyBpcyBpbnZhbGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gY3JlYXRlQmFzaWNUeEJ1aWxkZXIoKTtcblxuICAgICAgLy8gSW52YWxpZCBhZGRyZXNzICh3cm9uZyBmb3JtYXQpXG4gICAgICBzaG91bGQoKCkgPT4ge1xuICAgICAgICB0eEJ1aWxkZXIuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcygnaW52YWxpZC1hZGRyZXNzJyk7XG4gICAgICB9KS50aHJvdygvSW52YWxpZCBhZGRyZXNzLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHRyYW5zYWN0aW9uIHdpdGggdW5kZWZpbmVkIHNlbmRlciBidXQgaW5jbHVkZSBpdCBpbiBpbnB1dHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFZhbGlkYXRvclJlZ2lzdHJhdGlvbkJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5zdGFraW5nQ29udHJhY3RBZGRyZXNzKFZBTElEQVRPUl9SRUdJU1RSQVRJT05fU1RBS0VSX0NPTlRSQUNUX0FERFJFU1NfVEVTVE5FVCk7XG4gICAgICB0eEJ1aWxkZXIuc3Rha2luZ1BlcmlvZChzdGFraW5nUGVyaW9kKTtcbiAgICAgIHR4QnVpbGRlci5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2UpO1xuICAgICAgdHhCdWlsZGVyLmNoYWluVGFnKDB4MjcpO1xuICAgICAgdHhCdWlsZGVyLmJsb2NrUmVmKCcweDAwMDAwMDAwMDAwMDAwMDAnKTtcbiAgICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKDY0KTtcbiAgICAgIHR4QnVpbGRlci5nYXMoMTAwMDAwKTtcbiAgICAgIHR4QnVpbGRlci5nYXNQcmljZUNvZWYoMCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UoJzEyMzQ1Jyk7XG4gICAgICB0eEJ1aWxkZXIudmFsaWRhdG9yKHZhbGlkYXRvckFkZHJlc3MpO1xuICAgICAgLy8gTm90IHNldHRpbmcgc2VuZGVyXG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC5zaG91bGQuYmUuaW5zdGFuY2VvZihWYWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbik7XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRvclJlZ2lzdHJhdGlvblRyYW5zYWN0aW9uID0gdHggYXMgVmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb247XG4gICAgICAvLyBWZXJpZnkgdGhlIHRyYW5zYWN0aW9uIGhhcyBpbnB1dHMgYnV0IHdpdGggdW5kZWZpbmVkIGFkZHJlc3NcbiAgICAgIHZhbGlkYXRvclJlZ2lzdHJhdGlvblRyYW5zYWN0aW9uLmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdCh2YWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbi5pbnB1dHNbMF0uYWRkcmVzcyk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gaGFzIHRoZSBjb3JyZWN0IG91dHB1dFxuICAgICAgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24ub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbChcbiAgICAgICAgVkFMSURBVE9SX1JFR0lTVFJBVElPTl9TVEFLRVJfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2UgbmV0d29yayBkZWZhdWx0IGNoYWluVGFnIHdoZW4gbm90IGV4cGxpY2l0bHkgc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRWYWxpZGF0b3JSZWdpc3RyYXRpb25CdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhWQUxJREFUT1JfUkVHSVNUUkFUSU9OX1NUQUtFUl9DT05UUkFDVF9BRERSRVNTX1RFU1RORVQpO1xuICAgICAgdHhCdWlsZGVyLnN0YWtpbmdQZXJpb2Qoc3Rha2luZ1BlcmlvZCk7XG4gICAgICAvLyBOb3Qgc2V0dGluZyBjaGFpblRhZ1xuICAgICAgdHhCdWlsZGVyLmJsb2NrUmVmKCcweDAwMDAwMDAwMDAwMDAwMDAnKTtcbiAgICAgIHR4QnVpbGRlci5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2UpO1xuICAgICAgdHhCdWlsZGVyLmV4cGlyYXRpb24oNjQpO1xuICAgICAgdHhCdWlsZGVyLmdhcygxMDAwMDApO1xuICAgICAgdHhCdWlsZGVyLmdhc1ByaWNlQ29lZigwKTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgnMTIzNDUnKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIoJzB4OTM3OGMxMkJENzUwMkExMUY3NzBhNUMxRjIyM2M5NTlCMjgwNWRBOScpO1xuICAgICAgdHhCdWlsZGVyLnZhbGlkYXRvcih2YWxpZGF0b3JBZGRyZXNzKTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnNob3VsZC5iZS5pbnN0YW5jZW9mKFZhbGlkYXRvclJlZ2lzdHJhdGlvblRyYW5zYWN0aW9uKTtcblxuICAgICAgY29uc3QgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24gPSB0eCBhcyBWYWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbjtcbiAgICAgIC8vIFZlcmlmeSB0aGUgY2hhaW5UYWcgaXMgc2V0IHRvIHRoZSB0ZXN0bmV0IGRlZmF1bHQgKDM5KVxuICAgICAgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24uY2hhaW5UYWcuc2hvdWxkLmVxdWFsKDM5KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RlY29kZUFkZFZhbGlkYXRpb25EYXRhJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGRlY29kZSB2YWxpZGF0b3IgcmVnaXN0cmF0aW9uIHRyYW5zYWN0aW9uIGRhdGEgd2l0aCBwcm9wZXIgYWRkcmVzcyBmb3JtYXR0aW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGVjb2RlZERhdGEgPSB1dGlscy5kZWNvZGVBZGRWYWxpZGF0aW9uRGF0YSh0ZXN0RGF0YS5WQUxJREFUT1JfUkVHSVNUUkFUSU9OX0NMQVVTRV9EQVRBKTtcblxuICAgICAgZGVjb2RlZERhdGEucGVyaW9kLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5TVEFLSU5HX1BFUklPRCk7XG4gICAgICBkZWNvZGVkRGF0YS52YWxpZGF0b3Iuc2hvdWxkLmVxdWFsKHRlc3REYXRhLlZBTElEQVRPUl9SRUdJU1RSQVRJT05fVkFMSURBVE9SKTtcbiAgICAgIGRlY29kZWREYXRhLnZhbGlkYXRvci5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuICAgICAgZGVjb2RlZERhdGEudmFsaWRhdG9yLnNob3VsZC5lcXVhbChkZWNvZGVkRGF0YS52YWxpZGF0b3IudG9Mb3dlckNhc2UoKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBkZXNlcmlhbGl6ZSByZWFsIHNpZ25lZCB2YWxpZGF0b3IgcmVnaXN0cmF0aW9uIHRyYW5zYWN0aW9uIGZyb20gcmF3IGhleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5WQUxJREFUT1JfUkVHSVNUUkFUSU9OX1RSQU5TQUNUSU9OKTtcbiAgICAgIGNvbnN0IHR4ID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIFZhbGlkYXRvclJlZ2lzdHJhdGlvblRyYW5zYWN0aW9uO1xuICAgICAgdHguc2hvdWxkLmJlLmluc3RhbmNlb2YoVmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24pO1xuICAgICAgdHguc3Rha2luZ0NvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuVkFMSURBVE9SX1JFR0lTVFJBVElPTl9TVEFLRVJfQ09OVFJBQ1QpO1xuICAgICAgdHguc3Rha2luZ1BlcmlvZC5zaG91bGQuZXF1YWwodGVzdERhdGEuVkFMSURBVE9SX1JFR0lTVFJBVElPTl9TVEFLSU5HX1BFUklPRCk7XG4gICAgICB0eC52YWxpZGF0b3Iuc2hvdWxkLmVxdWFsKHRlc3REYXRhLlZBTElEQVRPUl9SRUdJU1RSQVRJT05fVkFMSURBVE9SKTtcbiAgICAgIHR4LmFtb3VudFRvU3Rha2Uuc2hvdWxkLmVxdWFsKHRlc3REYXRhLlZBTElEQVRPUl9SRUdJU1RSQVRJT05fQU1PVU5UKTtcbiAgICAgIHR4LnZhbGlkYXRvci5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuICAgICAgdHgudmFsaWRhdG9yLnNob3VsZC5lcXVhbCh0eC52YWxpZGF0b3IudG9Mb3dlckNhc2UoKSk7XG4gICAgICBzaG91bGQuZXhpc3QodHguaW5wdXRzKTtcbiAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuXG4gICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IHV0aWxzLmRlY29kZUFkZFZhbGlkYXRpb25EYXRhKHR4LmNsYXVzZXNbMF0uZGF0YSk7XG4gICAgICBkZWNvZGVkRGF0YS5wZXJpb2Quc2hvdWxkLmVxdWFsKHRlc3REYXRhLlZBTElEQVRPUl9SRUdJU1RSQVRJT05fU1RBS0lOR19QRVJJT0QpO1xuICAgICAgZGVjb2RlZERhdGEudmFsaWRhdG9yLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5WQUxJREFUT1JfUkVHSVNUUkFUSU9OX1ZBTElEQVRPUik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../test/unit/keyPair.ts"],"names":[],"mappings":""}
|