@bitgo/sdk-coin-cspr 2.2.13 → 2.2.15
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/CHANGELOG.md +8 -0
- package/package.json +6 -6
- package/LICENSE +0 -191
- package/dist/src/cspr.d.ts +0 -107
- package/dist/src/cspr.d.ts.map +0 -1
- package/dist/src/cspr.js +0 -314
- package/dist/src/index.d.ts +0 -5
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -44
- package/dist/src/lib/constants.d.ts +0 -19
- package/dist/src/lib/constants.d.ts.map +0 -1
- package/dist/src/lib/constants.js +0 -28
- package/dist/src/lib/delegateBuilder.d.ts +0 -49
- package/dist/src/lib/delegateBuilder.d.ts.map +0 -1
- package/dist/src/lib/delegateBuilder.js +0 -111
- package/dist/src/lib/ifaces.d.ts +0 -69
- package/dist/src/lib/ifaces.d.ts.map +0 -1
- package/dist/src/lib/ifaces.js +0 -3
- package/dist/src/lib/index.d.ts +0 -6
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/index.js +0 -45
- package/dist/src/lib/keyPair.d.ts +0 -18
- package/dist/src/lib/keyPair.d.ts.map +0 -1
- package/dist/src/lib/keyPair.js +0 -55
- package/dist/src/lib/transaction.d.ts +0 -55
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -240
- package/dist/src/lib/transactionBuilder.d.ts +0 -124
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -312
- package/dist/src/lib/transactionBuilderFactory.d.ts +0 -46
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilderFactory.js +0 -98
- package/dist/src/lib/transferBuilder.d.ts +0 -39
- package/dist/src/lib/transferBuilder.d.ts.map +0 -1
- package/dist/src/lib/transferBuilder.js +0 -106
- package/dist/src/lib/undelegateBuilder.d.ts +0 -49
- package/dist/src/lib/undelegateBuilder.d.ts.map +0 -1
- package/dist/src/lib/undelegateBuilder.js +0 -111
- package/dist/src/lib/utils.d.ts +0 -188
- package/dist/src/lib/utils.d.ts.map +0 -1
- package/dist/src/lib/utils.js +0 -490
- package/dist/src/lib/walletInitializationBuilder.d.ts +0 -27
- package/dist/src/lib/walletInitializationBuilder.d.ts.map +0 -1
- package/dist/src/lib/walletInitializationBuilder.js +0 -95
- package/dist/src/register.d.ts +0 -3
- package/dist/src/register.d.ts.map +0 -1
- package/dist/src/register.js +0 -11
- package/dist/src/tcspr.d.ts +0 -11
- package/dist/src/tcspr.d.ts.map +0 -1
- package/dist/src/tcspr.js +0 -24
package/dist/src/cspr.js
DELETED
|
@@ -1,314 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.Cspr = void 0;
|
|
40
|
-
/**
|
|
41
|
-
* @prettier
|
|
42
|
-
*/
|
|
43
|
-
const CsprLib = __importStar(require("./lib"));
|
|
44
|
-
const secp256k1_1 = require("@bitgo/secp256k1");
|
|
45
|
-
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
46
|
-
const statics_1 = require("@bitgo/statics");
|
|
47
|
-
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
48
|
-
class Cspr extends sdk_core_1.BaseCoin {
|
|
49
|
-
constructor(bitgo, staticsCoin) {
|
|
50
|
-
super(bitgo);
|
|
51
|
-
if (!staticsCoin) {
|
|
52
|
-
throw new Error('missing required constructor parameter staticsCoin');
|
|
53
|
-
}
|
|
54
|
-
this._staticsCoin = staticsCoin;
|
|
55
|
-
}
|
|
56
|
-
static createInstance(bitgo, staticsCoin) {
|
|
57
|
-
return new Cspr(bitgo, staticsCoin);
|
|
58
|
-
}
|
|
59
|
-
getChain() {
|
|
60
|
-
return this._staticsCoin.name;
|
|
61
|
-
}
|
|
62
|
-
getFamily() {
|
|
63
|
-
return this._staticsCoin.family;
|
|
64
|
-
}
|
|
65
|
-
getFullName() {
|
|
66
|
-
return this._staticsCoin.fullName;
|
|
67
|
-
}
|
|
68
|
-
getBaseFactor() {
|
|
69
|
-
return Math.pow(10, this._staticsCoin.decimalPlaces);
|
|
70
|
-
}
|
|
71
|
-
/** inherited doc */
|
|
72
|
-
getDefaultMultisigType() {
|
|
73
|
-
return sdk_core_1.multisigTypes.onchain;
|
|
74
|
-
}
|
|
75
|
-
async verifyTransaction(params) {
|
|
76
|
-
// TODO: Implement when available on the SDK.
|
|
77
|
-
return true;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Check if address is valid, then make sure it matches the root address.
|
|
81
|
-
*
|
|
82
|
-
* @param {VerifyAddressOptions} params address and rootAddress to verify
|
|
83
|
-
*/
|
|
84
|
-
async isWalletAddress(params) {
|
|
85
|
-
const { address, rootAddress } = params;
|
|
86
|
-
if (!this.isValidAddress(address)) {
|
|
87
|
-
throw new sdk_core_1.InvalidAddressError(`invalid address: ${address}`);
|
|
88
|
-
}
|
|
89
|
-
if (!this.isValidAddress(rootAddress)) {
|
|
90
|
-
throw new sdk_core_1.InvalidAddressError('wallet root address is not valid');
|
|
91
|
-
}
|
|
92
|
-
const newAddressDetails = CsprLib.Utils.getAddressDetails(address);
|
|
93
|
-
const rootAddressDetails = CsprLib.Utils.getAddressDetails(rootAddress);
|
|
94
|
-
if (newAddressDetails.address.toLowerCase() !== rootAddressDetails.address.toLowerCase()) {
|
|
95
|
-
throw new sdk_core_1.UnexpectedAddressError(`address validation failure: ${newAddressDetails.address} vs ${rootAddress}`);
|
|
96
|
-
}
|
|
97
|
-
return true;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Generate Casper key pair - BitGo xpub format
|
|
101
|
-
*
|
|
102
|
-
* @param {Buffer} seed - Seed from which the new keypair should be generated, otherwise a random seed is used
|
|
103
|
-
* @returns {Object} object with generated xpub and xprv
|
|
104
|
-
*/
|
|
105
|
-
generateKeyPair(seed) {
|
|
106
|
-
const keyPair = seed ? new CsprLib.KeyPair({ seed }) : new CsprLib.KeyPair();
|
|
107
|
-
const keys = keyPair.getExtendedKeys();
|
|
108
|
-
if (!keys.xprv) {
|
|
109
|
-
throw new Error('Missing xprv in key generation.');
|
|
110
|
-
}
|
|
111
|
-
return {
|
|
112
|
-
pub: keys.xpub,
|
|
113
|
-
prv: keys.xprv,
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
isValidPub(pub) {
|
|
117
|
-
// TODO(STLX-1344): Validate using account-lib when available
|
|
118
|
-
// return accountLib.Cspr.Utils.isValidPublicKey(pub);
|
|
119
|
-
try {
|
|
120
|
-
new CsprLib.KeyPair({ pub });
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
catch (e) {
|
|
124
|
-
return false;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Return boolean indicating whether input is valid private key for the coin
|
|
129
|
-
*
|
|
130
|
-
* @param prv the prv to be checked
|
|
131
|
-
* @returns is it valid?
|
|
132
|
-
*/
|
|
133
|
-
isValidPrv(prv) {
|
|
134
|
-
// TODO(STLX-1345): Validate using account-lib when available
|
|
135
|
-
// return accountLib.Cspr.Utils.isValidPrivateKey(prv);
|
|
136
|
-
try {
|
|
137
|
-
new CsprLib.KeyPair({ prv });
|
|
138
|
-
return true;
|
|
139
|
-
}
|
|
140
|
-
catch (e) {
|
|
141
|
-
return false;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Return boolean indicating whether input is valid CSPR address
|
|
146
|
-
*
|
|
147
|
-
* @param address the pub to be checked
|
|
148
|
-
* @returns true if the address is valid
|
|
149
|
-
*/
|
|
150
|
-
isValidAddress(address) {
|
|
151
|
-
try {
|
|
152
|
-
const addressDetails = CsprLib.Utils.getAddressDetails(address);
|
|
153
|
-
return address === CsprLib.Utils.normalizeAddress(addressDetails);
|
|
154
|
-
}
|
|
155
|
-
catch (e) {
|
|
156
|
-
return false;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Assemble keychain and half-sign prebuilt transaction
|
|
161
|
-
*
|
|
162
|
-
* @param {SignTransactionOptions} params data required to rebuild and sign the transaction
|
|
163
|
-
* @param {TransactionPrebuild} params.txPrebuild prebuild object returned by platform
|
|
164
|
-
* @param {String} params.prv user prv used to sign the transaction
|
|
165
|
-
* @returns Bluebird<SignedTransaction>
|
|
166
|
-
*/
|
|
167
|
-
async signTransaction(params) {
|
|
168
|
-
const txBuilder = this.getBuilder().from(params.txPrebuild.txHex);
|
|
169
|
-
const key = params.prv;
|
|
170
|
-
txBuilder.sign({ key });
|
|
171
|
-
const transaction = await txBuilder.build();
|
|
172
|
-
if (!transaction) {
|
|
173
|
-
throw new sdk_core_1.InvalidTransactionError('Error while trying to build transaction');
|
|
174
|
-
}
|
|
175
|
-
const response = {
|
|
176
|
-
txHex: transaction.toBroadcastFormat(),
|
|
177
|
-
};
|
|
178
|
-
return transaction.signature.length >= 2 ? response : { halfSigned: response };
|
|
179
|
-
}
|
|
180
|
-
async parseTransaction(params) {
|
|
181
|
-
return {};
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Extend walletParams with extra params required for generating a Casper wallet
|
|
185
|
-
*
|
|
186
|
-
* Casper wallets have three three keys, user, backup and bitgo.
|
|
187
|
-
* Initially, we need a root prv to generate the account, which must be distinct from all three keychains on the wallet.
|
|
188
|
-
* If a root private key is not provided, a random one is generated.
|
|
189
|
-
* The root public key is the basis for the wallet root address.
|
|
190
|
-
*/
|
|
191
|
-
async supplementGenerateWallet(walletParams) {
|
|
192
|
-
if (walletParams.rootPrivateKey) {
|
|
193
|
-
if (!this.isValidPrv(walletParams.rootPrivateKey) || walletParams.rootPrivateKey.length !== 64) {
|
|
194
|
-
throw new Error('rootPrivateKey needs to be a hexadecimal private key string');
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
const keyPair = secp256k1_1.ECPair.makeRandom();
|
|
199
|
-
if (!keyPair.privateKey) {
|
|
200
|
-
throw new Error('no privateKey');
|
|
201
|
-
}
|
|
202
|
-
walletParams.rootPrivateKey = keyPair.privateKey.toString('hex');
|
|
203
|
-
}
|
|
204
|
-
return walletParams;
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Sign message with private key
|
|
208
|
-
*
|
|
209
|
-
* @param key
|
|
210
|
-
* @param message
|
|
211
|
-
*/
|
|
212
|
-
async signMessage(key, message) {
|
|
213
|
-
const keyPair = new CsprLib.KeyPair({ prv: key.prv });
|
|
214
|
-
const messageHex = typeof message === 'string' ? message : message.toString('hex');
|
|
215
|
-
const signatureData = CsprLib.Utils.signMessage(keyPair, messageHex);
|
|
216
|
-
return Buffer.from(signatureData.signature);
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* Explain a Casper transaction from Raw Tx
|
|
220
|
-
*
|
|
221
|
-
* @param {ExplainTransactionOptions} params given explain transaction params
|
|
222
|
-
* @param {String} params.txHex raw transaction
|
|
223
|
-
* @param {String} params.halfSigned.txHex raw half signed transaction
|
|
224
|
-
* @param {TransactionFee} fee fee information
|
|
225
|
-
* @returns Bluebird<TransactionExplanation>
|
|
226
|
-
*/
|
|
227
|
-
async explainTransaction(params) {
|
|
228
|
-
const txHex = params.txHex || (params.halfSigned && params.halfSigned.txHex);
|
|
229
|
-
if (!txHex || !params.feeInfo) {
|
|
230
|
-
throw new Error('missing explain tx parameters');
|
|
231
|
-
}
|
|
232
|
-
const txBuilder = this.getBuilder().from(txHex);
|
|
233
|
-
const tx = await txBuilder.build();
|
|
234
|
-
if (!tx) {
|
|
235
|
-
throw new sdk_core_1.InvalidTransactionError('Error while trying to build transaction');
|
|
236
|
-
}
|
|
237
|
-
const id = Buffer.from(tx.casperTx.hash).toString('hex');
|
|
238
|
-
const amount = CsprLib.Utils.getTransferAmount(tx.casperTx.session);
|
|
239
|
-
let transferId;
|
|
240
|
-
const outputs = [];
|
|
241
|
-
const operations = [];
|
|
242
|
-
switch (tx.type) {
|
|
243
|
-
case sdk_core_1.TransactionType.Send: {
|
|
244
|
-
transferId = CsprLib.Utils.getTransferId(tx.casperTx.session);
|
|
245
|
-
const toAddress = CsprLib.Utils.getTransferDestinationAddress(tx._deploy.session);
|
|
246
|
-
outputs.push({
|
|
247
|
-
address: toAddress,
|
|
248
|
-
amount,
|
|
249
|
-
coin: this.getChain(),
|
|
250
|
-
});
|
|
251
|
-
break;
|
|
252
|
-
}
|
|
253
|
-
case sdk_core_1.TransactionType.StakingLock: {
|
|
254
|
-
const validator = CsprLib.Utils.getValidatorAddress(tx._deploy.session);
|
|
255
|
-
operations.push({
|
|
256
|
-
type: sdk_core_1.TransactionType.StakingLock,
|
|
257
|
-
amount,
|
|
258
|
-
coin: this.getChain(),
|
|
259
|
-
validator: validator,
|
|
260
|
-
});
|
|
261
|
-
break;
|
|
262
|
-
}
|
|
263
|
-
case sdk_core_1.TransactionType.StakingUnlock: {
|
|
264
|
-
const validator = CsprLib.Utils.getValidatorAddress(tx._deploy.session);
|
|
265
|
-
operations.push({
|
|
266
|
-
type: sdk_core_1.TransactionType.StakingUnlock,
|
|
267
|
-
amount,
|
|
268
|
-
coin: this.getChain(),
|
|
269
|
-
validator: validator,
|
|
270
|
-
});
|
|
271
|
-
break;
|
|
272
|
-
}
|
|
273
|
-
default: {
|
|
274
|
-
throw new sdk_core_1.InvalidTransactionError('Error while trying to get transaction type');
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
const outputAmount = outputs
|
|
278
|
-
.reduce((acumulator, output) => {
|
|
279
|
-
const currentValue = new bignumber_js_1.default(output.amount);
|
|
280
|
-
return acumulator.plus(currentValue);
|
|
281
|
-
}, new bignumber_js_1.default(0))
|
|
282
|
-
.toFixed(0);
|
|
283
|
-
const displayOrder = [
|
|
284
|
-
'id',
|
|
285
|
-
'outputAmount',
|
|
286
|
-
'changeAmount',
|
|
287
|
-
'outputs',
|
|
288
|
-
'changeOutputs',
|
|
289
|
-
'transferId',
|
|
290
|
-
'fee',
|
|
291
|
-
'operations',
|
|
292
|
-
];
|
|
293
|
-
return {
|
|
294
|
-
displayOrder,
|
|
295
|
-
id,
|
|
296
|
-
outputs,
|
|
297
|
-
outputAmount,
|
|
298
|
-
changeOutputs: [], // account based does not use change outputs
|
|
299
|
-
changeAmount: '0', // account base does not make change
|
|
300
|
-
transferId,
|
|
301
|
-
fee: params.feeInfo,
|
|
302
|
-
operations,
|
|
303
|
-
};
|
|
304
|
-
}
|
|
305
|
-
getBuilder() {
|
|
306
|
-
return new CsprLib.TransactionBuilderFactory(statics_1.coins.get(this.getChain()));
|
|
307
|
-
}
|
|
308
|
-
/** @inheritDoc */
|
|
309
|
-
auditDecryptedKey(params) {
|
|
310
|
-
throw new sdk_core_1.MethodNotImplementedError();
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
exports.Cspr = Cspr;
|
|
314
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Nwci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jc3ByLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gsK0NBQWlDO0FBQ2pDLGdEQUEwQztBQUMxQyxnRUFBcUM7QUFFckMsNENBQWdGO0FBQ2hGLDhDQW9CeUI7QUE2Q3pCLE1BQWEsSUFBSyxTQUFRLG1CQUFRO0lBR2hDLFlBQVksS0FBZ0IsRUFBRSxXQUF1QztRQUNuRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFYixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBQ0QsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUNELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFDRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsc0JBQXNCO1FBQ3BCLE9BQU8sd0JBQWEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUVELEtBQUssQ0FBQyxp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LENBQUM7YUFDbkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWQsTUFBTSxZQUFZLEdBQUc7WUFDbkIsSUFBSTtZQUNKLGNBQWM7WUFDZCxjQUFjO1lBQ2QsU0FBUztZQUNULGVBQWU7WUFDZixZQUFZO1lBQ1osS0FBSztZQUNMLFlBQVk7U0FDYixDQUFDO1FBRUYsT0FBTztZQUNMLFlBQVk7WUFDWixFQUFFO1lBQ0YsT0FBTztZQUNQLFlBQVk7WUFDWixhQUFhLEVBQUUsRUFBRSxFQUFFLDRDQUE0QztZQUMvRCxZQUFZLEVBQUUsR0FBRyxFQUFFLG9DQUFvQztZQUN2RCxVQUFVO1lBQ1YsR0FBRyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ25CLFVBQVU7U0FDSixDQUFDO0lBQ1gsQ0FBQztJQUVPLFVBQVU7UUFDaEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQkFBaUIsQ0FBQyxNQUErQjtRQUMvQyxNQUFNLElBQUksb0NBQXlCLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0NBQ0Y7QUFuU0Qsb0JBbVNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0ICogYXMgQ3NwckxpYiBmcm9tICcuL2xpYic7XG5pbXBvcnQgeyBFQ1BhaXIgfSBmcm9tICdAYml0Z28vc2VjcDI1NmsxJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcblxuaW1wb3J0IHsgQmFzZUNvaW4gYXMgU3RhdGljc0Jhc2VDb2luLCBDb2luRmFtaWx5LCBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEF1ZGl0RGVjcnlwdGVkS2V5UGFyYW1zLFxuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBJbnZhbGlkQWRkcmVzc0Vycm9yLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgS2V5UGFpcixcbiAgTXVsdGlzaWdUeXBlLFxuICBtdWx0aXNpZ1R5cGVzLFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zIGFzIEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBUcmFuc2FjdGlvblByZWJ1aWxkIGFzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkLFxuICBUcmFuc2FjdGlvblR5cGUsXG4gIFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IsXG4gIFZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIE1ldGhvZE5vdEltcGxlbWVudGVkRXJyb3IsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmludGVyZmFjZSBTaWduVHJhbnNhY3Rpb25PcHRpb25zIGV4dGVuZHMgQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkO1xuICBwcnY6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblByZWJ1aWxkIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uUHJlYnVpbGQge1xuICB0eEhleDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uRmVlIHtcbiAgZ2FzTGltaXQ6IHN0cmluZztcbiAgZ2FzUHJpY2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhIZXg/OiBzdHJpbmc7XG4gIGhhbGZTaWduZWQ/OiB7XG4gICAgdHhIZXg6IHN0cmluZztcbiAgfTtcbiAgZmVlSW5mbzogVHJhbnNhY3Rpb25GZWU7XG59XG5cbmludGVyZmFjZSBTdXBwbGVtZW50R2VuZXJhdGVXYWxsZXRPcHRpb25zIHtcbiAgcm9vdFByaXZhdGVLZXk/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBUcmFuc2FjdGlvbk91dHB1dCB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgYW1vdW50OiBzdHJpbmc7XG4gIGNvaW46IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFRyYW5zYWN0aW9uT3BlcmF0aW9uIHtcbiAgdHlwZTogbnVtYmVyO1xuICBhbW91bnQ6IHN0cmluZztcbiAgY29pbjogc3RyaW5nO1xuICB2YWxpZGF0b3I6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENzcHJWZXJpZnlBZGRyZXNzT3B0aW9ucyBleHRlbmRzIFZlcmlmeUFkZHJlc3NPcHRpb25zIHtcbiAgcm9vdEFkZHJlc3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIENzcHIgZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28pO1xuXG4gICAgaWYgKCFzdGF0aWNzQ29pbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBzdGF0aWNzQ29pbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRpY3NDb2luID0gc3RhdGljc0NvaW47XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgQ3NwcihiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgZ2V0Q2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4ubmFtZTtcbiAgfVxuICBnZXRGYW1pbHkoKTogQ29pbkZhbWlseSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZhbWlseTtcbiAgfVxuICBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mdWxsTmFtZTtcbiAgfVxuICBnZXRCYXNlRmFjdG9yKCk6IHN0cmluZyB8IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucG93KDEwLCB0aGlzLl9zdGF0aWNzQ29pbi5kZWNpbWFsUGxhY2VzKTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIGdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKTogTXVsdGlzaWdUeXBlIHtcbiAgICByZXR1cm4gbXVsdGlzaWdUeXBlcy5vbmNoYWluO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24ocGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgd2hlbiBhdmFpbGFibGUgb24gdGhlIFNESy5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhZGRyZXNzIGlzIHZhbGlkLCB0aGVuIG1ha2Ugc3VyZSBpdCBtYXRjaGVzIHRoZSByb290IGFkZHJlc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVyaWZ5QWRkcmVzc09wdGlvbnN9IHBhcmFtcyBhZGRyZXNzIGFuZCByb290QWRkcmVzcyB0byB2ZXJpZnlcbiAgICovXG4gIGFzeW5jIGlzV2FsbGV0QWRkcmVzcyhwYXJhbXM6IENzcHJWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgYWRkcmVzcywgcm9vdEFkZHJlc3MgfSA9IHBhcmFtcztcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKHJvb3RBZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoJ3dhbGxldCByb290IGFkZHJlc3MgaXMgbm90IHZhbGlkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3QWRkcmVzc0RldGFpbHMgPSBDc3ByTGliLlV0aWxzLmdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuICAgIGNvbnN0IHJvb3RBZGRyZXNzRGV0YWlscyA9IENzcHJMaWIuVXRpbHMuZ2V0QWRkcmVzc0RldGFpbHMocm9vdEFkZHJlc3MpO1xuICAgIGlmIChuZXdBZGRyZXNzRGV0YWlscy5hZGRyZXNzLnRvTG93ZXJDYXNlKCkgIT09IHJvb3RBZGRyZXNzRGV0YWlscy5hZGRyZXNzLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yKGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogJHtuZXdBZGRyZXNzRGV0YWlscy5hZGRyZXNzfSB2cyAke3Jvb3RBZGRyZXNzfWApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBDYXNwZXIga2V5IHBhaXIgLSBCaXRHbyB4cHViIGZvcm1hdFxuICAgKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gc2VlZCAtIFNlZWQgZnJvbSB3aGljaCB0aGUgbmV3IGtleXBhaXIgc2hvdWxkIGJlIGdlbmVyYXRlZCwgb3RoZXJ3aXNlIGEgcmFuZG9tIHNlZWQgaXMgdXNlZFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBvYmplY3Qgd2l0aCBnZW5lcmF0ZWQgeHB1YiBhbmQgeHBydlxuICAgKi9cbiAgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiBLZXlQYWlyIHtcbiAgICBjb25zdCBrZXlQYWlyID0gc2VlZCA/IG5ldyBDc3ByTGliLktleVBhaXIoeyBzZWVkIH0pIDogbmV3IENzcHJMaWIuS2V5UGFpcigpO1xuICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEV4dGVuZGVkS2V5cygpO1xuXG4gICAgaWYgKCFrZXlzLnhwcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB4cHJ2IGluIGtleSBnZW5lcmF0aW9uLicpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGtleXMueHB1YixcbiAgICAgIHBydjoga2V5cy54cHJ2LFxuICAgIH07XG4gIH1cblxuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gVE9ETyhTVExYLTEzNDQpOiBWYWxpZGF0ZSB1c2luZyBhY2NvdW50LWxpYiB3aGVuIGF2YWlsYWJsZVxuICAgIC8vICByZXR1cm4gYWNjb3VudExpYi5Dc3ByLlV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocHViKTtcbiAgICB0cnkge1xuICAgICAgbmV3IENzcHJMaWIuS2V5UGFpcih7IHB1YiB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHByaXZhdGUga2V5IGZvciB0aGUgY29pblxuICAgKlxuICAgKiBAcGFyYW0gcHJ2IHRoZSBwcnYgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyBpcyBpdCB2YWxpZD9cbiAgICovXG4gIGlzVmFsaWRQcnYocHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBUT0RPKFNUTFgtMTM0NSk6IFZhbGlkYXRlIHVzaW5nIGFjY291bnQtbGliIHdoZW4gYXZhaWxhYmxlXG4gICAgLy8gIHJldHVybiBhY2NvdW50TGliLkNzcHIuVXRpbHMuaXNWYWxpZFByaXZhdGVLZXkocHJ2KTtcbiAgICB0cnkge1xuICAgICAgbmV3IENzcHJMaWIuS2V5UGFpcih7IHBydiB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIENTUFIgYWRkcmVzc1xuICAgKlxuICAgKiBAcGFyYW0gYWRkcmVzcyB0aGUgcHViIHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZFxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gQ3NwckxpYi5VdGlscy5nZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzKTtcbiAgICAgIHJldHVybiBhZGRyZXNzID09PSBDc3ByTGliLlV0aWxzLm5vcm1hbGl6ZUFkZHJlc3MoYWRkcmVzc0RldGFpbHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXNzZW1ibGUga2V5Y2hhaW4gYW5kIGhhbGYtc2lnbiBwcmVidWlsdCB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1NpZ25UcmFuc2FjdGlvbk9wdGlvbnN9IHBhcmFtcyBkYXRhIHJlcXVpcmVkIHRvIHJlYnVpbGQgYW5kIHNpZ24gdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25QcmVidWlsZH0gcGFyYW1zLnR4UHJlYnVpbGQgcHJlYnVpbGQgb2JqZWN0IHJldHVybmVkIGJ5IHBsYXRmb3JtXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMucHJ2IHVzZXIgcHJ2IHVzZWQgdG8gc2lnbiB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybnMgQmx1ZWJpcmQ8U2lnbmVkVHJhbnNhY3Rpb24+XG4gICAqL1xuICBhc3luYyBzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0QnVpbGRlcigpLmZyb20ocGFyYW1zLnR4UHJlYnVpbGQudHhIZXgpO1xuICAgIGNvbnN0IGtleSA9IHBhcmFtcy5wcnY7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXkgfSk7XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbjogYW55ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgaWYgKCF0cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFcnJvciB3aGlsZSB0cnlpbmcgdG8gYnVpbGQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICB0eEhleDogdHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICB9O1xuICAgIHJldHVybiB0cmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoID49IDIgPyByZXNwb25zZSA6IHsgaGFsZlNpZ25lZDogcmVzcG9uc2UgfTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogRXh0ZW5kIHdhbGxldFBhcmFtcyB3aXRoIGV4dHJhIHBhcmFtcyByZXF1aXJlZCBmb3IgZ2VuZXJhdGluZyBhIENhc3BlciB3YWxsZXRcbiAgICpcbiAgICogQ2FzcGVyIHdhbGxldHMgaGF2ZSB0aHJlZSB0aHJlZSBrZXlzLCB1c2VyLCBiYWNrdXAgYW5kIGJpdGdvLlxuICAgKiBJbml0aWFsbHksIHdlIG5lZWQgYSByb290IHBydiB0byBnZW5lcmF0ZSB0aGUgYWNjb3VudCwgd2hpY2ggbXVzdCBiZSBkaXN0aW5jdCBmcm9tIGFsbCB0aHJlZSBrZXljaGFpbnMgb24gdGhlIHdhbGxldC5cbiAgICogSWYgYSByb290IHByaXZhdGUga2V5IGlzIG5vdCBwcm92aWRlZCwgYSByYW5kb20gb25lIGlzIGdlbmVyYXRlZC5cbiAgICogVGhlIHJvb3QgcHVibGljIGtleSBpcyB0aGUgYmFzaXMgZm9yIHRoZSB3YWxsZXQgcm9vdCBhZGRyZXNzLlxuICAgKi9cbiAgYXN5bmMgc3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0KFxuICAgIHdhbGxldFBhcmFtczogU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9uc1xuICApOiBQcm9taXNlPFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnM+IHtcbiAgICBpZiAod2FsbGV0UGFyYW1zLnJvb3RQcml2YXRlS2V5KSB7XG4gICAgICBpZiAoIXRoaXMuaXNWYWxpZFBydih3YWxsZXRQYXJhbXMucm9vdFByaXZhdGVLZXkpIHx8IHdhbGxldFBhcmFtcy5yb290UHJpdmF0ZUtleS5sZW5ndGggIT09IDY0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncm9vdFByaXZhdGVLZXkgbmVlZHMgdG8gYmUgYSBoZXhhZGVjaW1hbCBwcml2YXRlIGtleSBzdHJpbmcnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qga2V5UGFpciA9IEVDUGFpci5tYWtlUmFuZG9tKCk7XG4gICAgICBpZiAoIWtleVBhaXIucHJpdmF0ZUtleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHByaXZhdGVLZXknKTtcbiAgICAgIH1cbiAgICAgIHdhbGxldFBhcmFtcy5yb290UHJpdmF0ZUtleSA9IGtleVBhaXIucHJpdmF0ZUtleS50b1N0cmluZygnaGV4Jyk7XG4gICAgfVxuICAgIHJldHVybiB3YWxsZXRQYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBtZXNzYWdlIHdpdGggcHJpdmF0ZSBrZXlcbiAgICpcbiAgICogQHBhcmFtIGtleVxuICAgKiBAcGFyYW0gbWVzc2FnZVxuICAgKi9cbiAgYXN5bmMgc2lnbk1lc3NhZ2Uoa2V5OiBLZXlQYWlyLCBtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgQ3NwckxpYi5LZXlQYWlyKHsgcHJ2OiBrZXkucHJ2IH0pO1xuICAgIGNvbnN0IG1lc3NhZ2VIZXggPSB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycgPyBtZXNzYWdlIDogbWVzc2FnZS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3Qgc2lnbmF0dXJlRGF0YSA9IENzcHJMaWIuVXRpbHMuc2lnbk1lc3NhZ2Uoa2V5UGFpciwgbWVzc2FnZUhleCk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZURhdGEuc2lnbmF0dXJlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBsYWluIGEgQ2FzcGVyIHRyYW5zYWN0aW9uIGZyb20gUmF3IFR4XG4gICAqXG4gICAqIEBwYXJhbSB7RXhwbGFpblRyYW5zYWN0aW9uT3B0aW9uc30gcGFyYW1zIGdpdmVuIGV4cGxhaW4gdHJhbnNhY3Rpb24gcGFyYW1zXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMudHhIZXggcmF3IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMuaGFsZlNpZ25lZC50eEhleCByYXcgaGFsZiBzaWduZWQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbkZlZX0gZmVlIGZlZSBpbmZvcm1hdGlvblxuICAgKiBAcmV0dXJucyBCbHVlYmlyZDxUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPlxuICAgKi9cbiAgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8VHJhbnNhY3Rpb25FeHBsYW5hdGlvbj4ge1xuICAgIGNvbnN0IHR4SGV4ID0gcGFyYW1zLnR4SGV4IHx8IChwYXJhbXMuaGFsZlNpZ25lZCAmJiBwYXJhbXMuaGFsZlNpZ25lZC50eEhleCk7XG4gICAgaWYgKCF0eEhleCB8fCAhcGFyYW1zLmZlZUluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBleHBsYWluIHR4IHBhcmFtZXRlcnMnKTtcbiAgICB9XG4gICAgY29uc3QgdHhCdWlsZGVyID0gdGhpcy5nZXRCdWlsZGVyKCkuZnJvbSh0eEhleCk7XG5cbiAgICBjb25zdCB0eDogYW55ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgaWYgKCF0eCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFcnJvciB3aGlsZSB0cnlpbmcgdG8gYnVpbGQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSBCdWZmZXIuZnJvbSh0eC5jYXNwZXJUeC5oYXNoKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgYW1vdW50ID0gQ3NwckxpYi5VdGlscy5nZXRUcmFuc2ZlckFtb3VudCh0eC5jYXNwZXJUeC5zZXNzaW9uKTtcbiAgICBsZXQgdHJhbnNmZXJJZDtcbiAgICBjb25zdCBvdXRwdXRzOiBUcmFuc2FjdGlvbk91dHB1dFtdID0gW107XG4gICAgY29uc3Qgb3BlcmF0aW9uczogVHJhbnNhY3Rpb25PcGVyYXRpb25bXSA9IFtdO1xuXG4gICAgc3dpdGNoICh0eC50eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kOiB7XG4gICAgICAgIHRyYW5zZmVySWQgPSBDc3ByTGliLlV0aWxzLmdldFRyYW5zZmVySWQodHguY2FzcGVyVHguc2Vzc2lvbik7XG4gICAgICAgIGNvbnN0IHRvQWRkcmVzcyA9IENzcHJMaWIuVXRpbHMuZ2V0VHJhbnNmZXJEZXN0aW5hdGlvbkFkZHJlc3ModHguX2RlcGxveS5zZXNzaW9uKTtcbiAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiB0b0FkZHJlc3MsXG4gICAgICAgICAgYW1vdW50LFxuICAgICAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0xvY2s6IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gQ3NwckxpYi5VdGlscy5nZXRWYWxpZGF0b3JBZGRyZXNzKHR4Ll9kZXBsb3kuc2Vzc2lvbik7XG4gICAgICAgIG9wZXJhdGlvbnMucHVzaCh7XG4gICAgICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdMb2NrLFxuICAgICAgICAgIGFtb3VudCxcbiAgICAgICAgICBjb2luOiB0aGlzLmdldENoYWluKCksXG4gICAgICAgICAgdmFsaWRhdG9yOiB2YWxpZGF0b3IsXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2s6IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gQ3NwckxpYi5VdGlscy5nZXRWYWxpZGF0b3JBZGRyZXNzKHR4Ll9kZXBsb3kuc2Vzc2lvbik7XG4gICAgICAgIG9wZXJhdGlvbnMucHVzaCh7XG4gICAgICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2ssXG4gICAgICAgICAgYW1vdW50LFxuICAgICAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgICAgICB2YWxpZGF0b3I6IHZhbGlkYXRvcixcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0Vycm9yIHdoaWxlIHRyeWluZyB0byBnZXQgdHJhbnNhY3Rpb24gdHlwZScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IG91dHB1dHNcbiAgICAgIC5yZWR1Y2UoKGFjdW11bGF0b3IsIG91dHB1dCkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBuZXcgQmlnTnVtYmVyKG91dHB1dC5hbW91bnQpO1xuICAgICAgICByZXR1cm4gYWN1bXVsYXRvci5wbHVzKGN1cnJlbnRWYWx1ZSk7XG4gICAgICB9LCBuZXcgQmlnTnVtYmVyKDApKVxuICAgICAgLnRvRml4ZWQoMCk7XG5cbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbXG4gICAgICAnaWQnLFxuICAgICAgJ291dHB1dEFtb3VudCcsXG4gICAgICAnY2hhbmdlQW1vdW50JyxcbiAgICAgICdvdXRwdXRzJyxcbiAgICAgICdjaGFuZ2VPdXRwdXRzJyxcbiAgICAgICd0cmFuc2ZlcklkJyxcbiAgICAgICdmZWUnLFxuICAgICAgJ29wZXJhdGlvbnMnLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQsXG4gICAgICBvdXRwdXRzLFxuICAgICAgb3V0cHV0QW1vdW50LFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sIC8vIGFjY291bnQgYmFzZWQgZG9lcyBub3QgdXNlIGNoYW5nZSBvdXRwdXRzXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJywgLy8gYWNjb3VudCBiYXNlIGRvZXMgbm90IG1ha2UgY2hhbmdlXG4gICAgICB0cmFuc2ZlcklkLFxuICAgICAgZmVlOiBwYXJhbXMuZmVlSW5mbyxcbiAgICAgIG9wZXJhdGlvbnMsXG4gICAgfSBhcyBhbnk7XG4gIH1cblxuICBwcml2YXRlIGdldEJ1aWxkZXIoKTogQ3NwckxpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgICByZXR1cm4gbmV3IENzcHJMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYXVkaXREZWNyeXB0ZWRLZXkocGFyYW1zOiBBdWRpdERlY3J5cHRlZEtleVBhcmFtcykge1xuICAgIHRocm93IG5ldyBNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cbn1cbiJdfQ==
|
package/dist/src/index.d.ts
DELETED
package/dist/src/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,OAAO,KAAK,OAAO,MAAM,OAAO,CAAC;AACjC,cAAc,YAAY,CAAC"}
|
package/dist/src/index.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
-
};
|
|
21
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
-
var ownKeys = function(o) {
|
|
23
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
-
var ar = [];
|
|
25
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
-
return ar;
|
|
27
|
-
};
|
|
28
|
-
return ownKeys(o);
|
|
29
|
-
};
|
|
30
|
-
return function (mod) {
|
|
31
|
-
if (mod && mod.__esModule) return mod;
|
|
32
|
-
var result = {};
|
|
33
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
-
__setModuleDefault(result, mod);
|
|
35
|
-
return result;
|
|
36
|
-
};
|
|
37
|
-
})();
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.CsprLib = void 0;
|
|
40
|
-
__exportStar(require("./cspr"), exports);
|
|
41
|
-
__exportStar(require("./tcspr"), exports);
|
|
42
|
-
exports.CsprLib = __importStar(require("./lib"));
|
|
43
|
-
__exportStar(require("./register"), exports);
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQXVCO0FBQ3ZCLDBDQUF3QjtBQUN4QixpREFBaUM7QUFDakMsNkNBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jc3ByJztcbmV4cG9ydCAqIGZyb20gJy4vdGNzcHInO1xuZXhwb3J0ICogYXMgQ3NwckxpYiBmcm9tICcuL2xpYic7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdGVyJztcbiJdfQ==
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export declare const SECP256K1_PREFIX = "02";
|
|
2
|
-
export declare const ED25519_PREFIX = "01";
|
|
3
|
-
export declare const DEFAULT_CHAIN_NAMES: {
|
|
4
|
-
testnet: string;
|
|
5
|
-
mainnet: string;
|
|
6
|
-
};
|
|
7
|
-
export declare const TRANSACTION_EXPIRATION = 7200000;
|
|
8
|
-
export declare const DELEGATE_VALIDATOR_ACCOUNT = "0100cd28cec3dd6d29b959ae7b36a8201c92fe6af75fa44d5fa84b7d2e417ca940";
|
|
9
|
-
export declare const MODULE_BYTES_ACTION = "action";
|
|
10
|
-
export declare const WALLET_INITIALIZATION_CONTRACT_ACTION = "set_all";
|
|
11
|
-
export declare const DELEGATE_CONTRACT_ACTION = "delegate";
|
|
12
|
-
export declare const UNDELEGATE_CONTRACT_ACTION = "undelegate";
|
|
13
|
-
export declare const OWNER_PREFIX = "owner_";
|
|
14
|
-
export declare const TRANSFER_TO_ADDRESS = "to_address";
|
|
15
|
-
export declare const DELEGATE_FROM_ADDRESS = "from_address";
|
|
16
|
-
export declare const TRANSACTION_TYPE = "deploy_type";
|
|
17
|
-
export declare const DELEGATE_VALIDATOR = "validator";
|
|
18
|
-
export declare const STAKING_TYPE = "staking_type";
|
|
19
|
-
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,mBAAmB;;;CAG/B,CAAC;AACF,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAC9C,eAAO,MAAM,0BAA0B,uEAAuE,CAAC;AAG/G,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAI5C,eAAO,MAAM,qCAAqC,YAAY,CAAC;AAC/D,eAAO,MAAM,wBAAwB,aAAa,CAAC;AACnD,eAAO,MAAM,0BAA0B,eAAe,CAAC;AAIvD,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAChD,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AACpD,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C,eAAO,MAAM,kBAAkB,cAAc,CAAC;AAC9C,eAAO,MAAM,YAAY,iBAAiB,CAAC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.STAKING_TYPE = exports.DELEGATE_VALIDATOR = exports.TRANSACTION_TYPE = exports.DELEGATE_FROM_ADDRESS = exports.TRANSFER_TO_ADDRESS = exports.OWNER_PREFIX = exports.UNDELEGATE_CONTRACT_ACTION = exports.DELEGATE_CONTRACT_ACTION = exports.WALLET_INITIALIZATION_CONTRACT_ACTION = exports.MODULE_BYTES_ACTION = exports.DELEGATE_VALIDATOR_ACCOUNT = exports.TRANSACTION_EXPIRATION = exports.DEFAULT_CHAIN_NAMES = exports.ED25519_PREFIX = exports.SECP256K1_PREFIX = void 0;
|
|
4
|
-
exports.SECP256K1_PREFIX = '02';
|
|
5
|
-
exports.ED25519_PREFIX = '01';
|
|
6
|
-
exports.DEFAULT_CHAIN_NAMES = {
|
|
7
|
-
testnet: 'integration-test',
|
|
8
|
-
mainnet: 'casper',
|
|
9
|
-
};
|
|
10
|
-
exports.TRANSACTION_EXPIRATION = 7200000; // 2 hours in milliseconds (max TTL)
|
|
11
|
-
exports.DELEGATE_VALIDATOR_ACCOUNT = '0100cd28cec3dd6d29b959ae7b36a8201c92fe6af75fa44d5fa84b7d2e417ca940';
|
|
12
|
-
// #region contract arguments
|
|
13
|
-
exports.MODULE_BYTES_ACTION = 'action';
|
|
14
|
-
// #endregion
|
|
15
|
-
// #region contract actions
|
|
16
|
-
exports.WALLET_INITIALIZATION_CONTRACT_ACTION = 'set_all';
|
|
17
|
-
exports.DELEGATE_CONTRACT_ACTION = 'delegate';
|
|
18
|
-
exports.UNDELEGATE_CONTRACT_ACTION = 'undelegate';
|
|
19
|
-
// #endregion
|
|
20
|
-
// #region extra deploy arguments
|
|
21
|
-
exports.OWNER_PREFIX = 'owner_';
|
|
22
|
-
exports.TRANSFER_TO_ADDRESS = 'to_address';
|
|
23
|
-
exports.DELEGATE_FROM_ADDRESS = 'from_address';
|
|
24
|
-
exports.TRANSACTION_TYPE = 'deploy_type';
|
|
25
|
-
exports.DELEGATE_VALIDATOR = 'validator';
|
|
26
|
-
exports.STAKING_TYPE = 'staking_type';
|
|
27
|
-
// #endregion
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDeEIsUUFBQSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLFFBQUEsbUJBQW1CLEdBQUc7SUFDakMsT0FBTyxFQUFFLGtCQUFrQjtJQUMzQixPQUFPLEVBQUUsUUFBUTtDQUNsQixDQUFDO0FBQ1csUUFBQSxzQkFBc0IsR0FBRyxPQUFPLENBQUMsQ0FBQyxvQ0FBb0M7QUFDdEUsUUFBQSwwQkFBMEIsR0FBRyxvRUFBb0UsQ0FBQztBQUUvRyw2QkFBNkI7QUFDaEIsUUFBQSxtQkFBbUIsR0FBRyxRQUFRLENBQUM7QUFDNUMsYUFBYTtBQUViLDJCQUEyQjtBQUNkLFFBQUEscUNBQXFDLEdBQUcsU0FBUyxDQUFDO0FBQ2xELFFBQUEsd0JBQXdCLEdBQUcsVUFBVSxDQUFDO0FBQ3RDLFFBQUEsMEJBQTBCLEdBQUcsWUFBWSxDQUFDO0FBQ3ZELGFBQWE7QUFFYixpQ0FBaUM7QUFDcEIsUUFBQSxZQUFZLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLFFBQUEsbUJBQW1CLEdBQUcsWUFBWSxDQUFDO0FBQ25DLFFBQUEscUJBQXFCLEdBQUcsY0FBYyxDQUFDO0FBQ3ZDLFFBQUEsZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO0FBQ2pDLFFBQUEsa0JBQWtCLEdBQUcsV0FBVyxDQUFDO0FBQ2pDLFFBQUEsWUFBWSxHQUFHLGNBQWMsQ0FBQztBQUMzQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFNFQ1AyNTZLMV9QUkVGSVggPSAnMDInO1xuZXhwb3J0IGNvbnN0IEVEMjU1MTlfUFJFRklYID0gJzAxJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0NIQUlOX05BTUVTID0ge1xuICB0ZXN0bmV0OiAnaW50ZWdyYXRpb24tdGVzdCcsXG4gIG1haW5uZXQ6ICdjYXNwZXInLFxufTtcbmV4cG9ydCBjb25zdCBUUkFOU0FDVElPTl9FWFBJUkFUSU9OID0gNzIwMDAwMDsgLy8gMiBob3VycyBpbiBtaWxsaXNlY29uZHMgKG1heCBUVEwpXG5leHBvcnQgY29uc3QgREVMRUdBVEVfVkFMSURBVE9SX0FDQ09VTlQgPSAnMDEwMGNkMjhjZWMzZGQ2ZDI5Yjk1OWFlN2IzNmE4MjAxYzkyZmU2YWY3NWZhNDRkNWZhODRiN2QyZTQxN2NhOTQwJztcblxuLy8gI3JlZ2lvbiBjb250cmFjdCBhcmd1bWVudHNcbmV4cG9ydCBjb25zdCBNT0RVTEVfQllURVNfQUNUSU9OID0gJ2FjdGlvbic7XG4vLyAjZW5kcmVnaW9uXG5cbi8vICNyZWdpb24gY29udHJhY3QgYWN0aW9uc1xuZXhwb3J0IGNvbnN0IFdBTExFVF9JTklUSUFMSVpBVElPTl9DT05UUkFDVF9BQ1RJT04gPSAnc2V0X2FsbCc7XG5leHBvcnQgY29uc3QgREVMRUdBVEVfQ09OVFJBQ1RfQUNUSU9OID0gJ2RlbGVnYXRlJztcbmV4cG9ydCBjb25zdCBVTkRFTEVHQVRFX0NPTlRSQUNUX0FDVElPTiA9ICd1bmRlbGVnYXRlJztcbi8vICNlbmRyZWdpb25cblxuLy8gI3JlZ2lvbiBleHRyYSBkZXBsb3kgYXJndW1lbnRzXG5leHBvcnQgY29uc3QgT1dORVJfUFJFRklYID0gJ293bmVyXyc7XG5leHBvcnQgY29uc3QgVFJBTlNGRVJfVE9fQUREUkVTUyA9ICd0b19hZGRyZXNzJztcbmV4cG9ydCBjb25zdCBERUxFR0FURV9GUk9NX0FERFJFU1MgPSAnZnJvbV9hZGRyZXNzJztcbmV4cG9ydCBjb25zdCBUUkFOU0FDVElPTl9UWVBFID0gJ2RlcGxveV90eXBlJztcbmV4cG9ydCBjb25zdCBERUxFR0FURV9WQUxJREFUT1IgPSAndmFsaWRhdG9yJztcbmV4cG9ydCBjb25zdCBTVEFLSU5HX1RZUEUgPSAnc3Rha2luZ190eXBlJztcbi8vICNlbmRyZWdpb25cbiJdfQ==
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
2
|
-
import { BaseKey } from '@bitgo/sdk-core';
|
|
3
|
-
import { TransactionBuilder } from './transactionBuilder';
|
|
4
|
-
import { Transaction } from './transaction';
|
|
5
|
-
export declare class DelegateBuilder extends TransactionBuilder {
|
|
6
|
-
private _validator;
|
|
7
|
-
private readonly _action;
|
|
8
|
-
private _amount;
|
|
9
|
-
private readonly _contract;
|
|
10
|
-
/**
|
|
11
|
-
* Public constructor.
|
|
12
|
-
*
|
|
13
|
-
* @param {CoinConfig} _coinConfig Coin configuration object
|
|
14
|
-
*/
|
|
15
|
-
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
16
|
-
/** @inheritdoc */
|
|
17
|
-
protected buildImplementation(): Promise<Transaction>;
|
|
18
|
-
/** @inheritdoc */
|
|
19
|
-
initBuilder(tx: Transaction): void;
|
|
20
|
-
/** @inheritdoc */
|
|
21
|
-
protected signImplementation(key: BaseKey): Transaction;
|
|
22
|
-
/**
|
|
23
|
-
* Build args needed to create a session, then we can send this session with the contract
|
|
24
|
-
*
|
|
25
|
-
* @returns {DelegateUndelegateContractArgs} contracts args to create a session
|
|
26
|
-
*/
|
|
27
|
-
private buildDelegateParameters;
|
|
28
|
-
/**
|
|
29
|
-
* Set the destination address where the funds will be sent,
|
|
30
|
-
*
|
|
31
|
-
* @param {string} address the 68 bits address to transfer funds to
|
|
32
|
-
* @returns {DelegateBuilder} the builder with the new parameter set
|
|
33
|
-
*/
|
|
34
|
-
validator(address: string): this;
|
|
35
|
-
/**
|
|
36
|
-
* Set the amount to be transferred
|
|
37
|
-
*
|
|
38
|
-
* @param {string} amount amount to transfer
|
|
39
|
-
* @returns {DelegateBuilder} the builder with the new parameter set
|
|
40
|
-
*/
|
|
41
|
-
amount(amount: string): this;
|
|
42
|
-
/**
|
|
43
|
-
* Validate mandatory fields in the class
|
|
44
|
-
*
|
|
45
|
-
* @throws {Error} In case of missing or invalid fields
|
|
46
|
-
*/
|
|
47
|
-
validateMandatoryFields(): void;
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=delegateBuilder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"delegateBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/delegateBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGxD,OAAO,EACL,OAAO,EAMR,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAa,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAkB5C,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAa;IAEvC;;;;OAIG;gBACS,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAmB3D,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAOlC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAOvD;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;;;;OAKG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQhC;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAY5B;;;;OAIG;IACH,uBAAuB,IAAI,IAAI;CAUhC"}
|