@bitgo-beta/sdk-coin-dot 1.0.1
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/.eslintignore +5 -0
- package/.mocharc.yml +8 -0
- package/CHANGELOG.md +24 -0
- package/LICENSE +191 -0
- package/README.md +30 -0
- package/dist/src/dot.d.ts +147 -0
- package/dist/src/dot.d.ts.map +1 -0
- package/dist/src/dot.js +355 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +16 -0
- package/dist/src/lib/addressInitializationBuilder.d.ts +79 -0
- package/dist/src/lib/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/src/lib/addressInitializationBuilder.js +182 -0
- package/dist/src/lib/batchTransactionBuilder.d.ts +47 -0
- package/dist/src/lib/batchTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/batchTransactionBuilder.js +122 -0
- package/dist/src/lib/claimBuilder.d.ts +58 -0
- package/dist/src/lib/claimBuilder.d.ts.map +1 -0
- package/dist/src/lib/claimBuilder.js +119 -0
- package/dist/src/lib/errors.d.ts +8 -0
- package/dist/src/lib/errors.d.ts.map +1 -0
- package/dist/src/lib/errors.js +19 -0
- package/dist/src/lib/iface.d.ts +204 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +40 -0
- package/dist/src/lib/index.d.ts +18 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +55 -0
- package/dist/src/lib/keyPair.d.ts +31 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +70 -0
- package/dist/src/lib/nativeTransferBuilder.d.ts +81 -0
- package/dist/src/lib/nativeTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/nativeTransferBuilder.js +213 -0
- package/dist/src/lib/singletonRegistry.d.ts +7 -0
- package/dist/src/lib/singletonRegistry.d.ts.map +1 -0
- package/dist/src/lib/singletonRegistry.js +20 -0
- package/dist/src/lib/stakingBuilder.d.ts +58 -0
- package/dist/src/lib/stakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/stakingBuilder.js +139 -0
- package/dist/src/lib/transaction.d.ts +65 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +410 -0
- package/dist/src/lib/transactionBuilder.d.ts +131 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +332 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +26 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +95 -0
- package/dist/src/lib/transferBuilder.d.ts +11 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +11 -0
- package/dist/src/lib/txnSchema.d.ts +15 -0
- package/dist/src/lib/txnSchema.d.ts.map +1 -0
- package/dist/src/lib/txnSchema.js +107 -0
- package/dist/src/lib/unnominateBuilder.d.ts +24 -0
- package/dist/src/lib/unnominateBuilder.d.ts.map +1 -0
- package/dist/src/lib/unnominateBuilder.js +50 -0
- package/dist/src/lib/unstakeBuilder.d.ts +38 -0
- package/dist/src/lib/unstakeBuilder.d.ts.map +1 -0
- package/dist/src/lib/unstakeBuilder.js +89 -0
- package/dist/src/lib/utils.d.ts +146 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +287 -0
- package/dist/src/lib/withdrawUnstakedBuilder.d.ts +38 -0
- package/dist/src/lib/withdrawUnstakedBuilder.d.ts.map +1 -0
- package/dist/src/lib/withdrawUnstakedBuilder.js +90 -0
- package/dist/src/tdot.d.ts +12 -0
- package/dist/src/tdot.d.ts.map +1 -0
- package/dist/src/tdot.js +27 -0
- package/package.json +65 -0
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Utils = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
+
const keyring_1 = require("@polkadot/keyring");
|
|
9
|
+
const decode_1 = require("@polkadot/keyring/pair/decode");
|
|
10
|
+
const types_1 = require("@polkadot/types");
|
|
11
|
+
const Extrinsic_1 = require("@polkadot/types/extrinsic/v4/Extrinsic");
|
|
12
|
+
const util_1 = require("@polkadot/util");
|
|
13
|
+
const util_crypto_1 = require("@polkadot/util-crypto");
|
|
14
|
+
const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
|
|
15
|
+
const bs58_1 = __importDefault(require("bs58"));
|
|
16
|
+
const hi_base32_1 = __importDefault(require("hi-base32"));
|
|
17
|
+
const tweetnacl_1 = __importDefault(require("tweetnacl"));
|
|
18
|
+
const _1 = require(".");
|
|
19
|
+
const PROXY_METHOD_ARG = 2;
|
|
20
|
+
// map to retrieve the address encoding format when the key is the asset name
|
|
21
|
+
const coinToAddressMap = new Map([
|
|
22
|
+
['dot', sdk_core_1.DotAddressFormat.polkadot],
|
|
23
|
+
['tdot', sdk_core_1.DotAddressFormat.substrate],
|
|
24
|
+
]);
|
|
25
|
+
class Utils {
|
|
26
|
+
/** @inheritdoc */
|
|
27
|
+
isValidAddress(address) {
|
|
28
|
+
try {
|
|
29
|
+
keyring_1.encodeAddress(util_1.isHex(address) ? util_1.hexToU8a(address) : keyring_1.decodeAddress(address));
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** @inheritdoc */
|
|
37
|
+
isValidBlockId(hash) {
|
|
38
|
+
return util_1.isHex(hash, 256);
|
|
39
|
+
}
|
|
40
|
+
/** @inheritdoc */
|
|
41
|
+
isValidPrivateKey(key) {
|
|
42
|
+
try {
|
|
43
|
+
const decodedPrv = util_1.hexToU8a(key);
|
|
44
|
+
return decodedPrv.length === tweetnacl_1.default.sign.secretKeyLength / 2;
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** @inheritdoc */
|
|
51
|
+
isValidPublicKey(key) {
|
|
52
|
+
let pubKey = key;
|
|
53
|
+
// convert base58 pub key to hex format
|
|
54
|
+
// tss common pub is in base58 format and decodes to length of 32
|
|
55
|
+
if (sdk_core_1.isBase58(pubKey, 32)) {
|
|
56
|
+
const base58Decode = bs58_1.default.decode(pubKey);
|
|
57
|
+
pubKey = base58Decode.toString('hex');
|
|
58
|
+
}
|
|
59
|
+
return sdk_core_1.isValidEd25519PublicKey(pubKey);
|
|
60
|
+
}
|
|
61
|
+
/** @inheritdoc */
|
|
62
|
+
isValidSignature(signature) {
|
|
63
|
+
const signatureU8a = util_1.u8aToU8a(signature);
|
|
64
|
+
return [64, 65, 66].includes(signatureU8a.length);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Verifies the signature on a given message
|
|
68
|
+
*
|
|
69
|
+
* @param {string} signedMessage the signed message for the signature
|
|
70
|
+
* @param {string} signature the signature to verify
|
|
71
|
+
* @param {string} address the address of the signer
|
|
72
|
+
* @returns {boolean} whether the signature is valid or not
|
|
73
|
+
*/
|
|
74
|
+
verifySignature(signedMessage, signature, address) {
|
|
75
|
+
const publicKey = keyring_1.decodeAddress(address);
|
|
76
|
+
const hexPublicKey = util_1.u8aToHex(publicKey);
|
|
77
|
+
return util_crypto_1.signatureVerify(signedMessage, signature, hexPublicKey).isValid;
|
|
78
|
+
}
|
|
79
|
+
/** @inheritdoc */
|
|
80
|
+
isValidTransactionId(txId) {
|
|
81
|
+
return util_1.isHex(txId, 256);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* decodeSeed decodes a dot seed
|
|
85
|
+
*
|
|
86
|
+
* @param {string} seed - the seed to be validated.
|
|
87
|
+
* @returns {Seed} - the object Seed
|
|
88
|
+
*/
|
|
89
|
+
decodeSeed(seed) {
|
|
90
|
+
const decoded = hi_base32_1.default.decode.asBytes(seed);
|
|
91
|
+
return {
|
|
92
|
+
seed: Buffer.from(decoded),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Helper function to capitalize the first letter of a string
|
|
97
|
+
*
|
|
98
|
+
* @param {string} val
|
|
99
|
+
* @returns {string}
|
|
100
|
+
*/
|
|
101
|
+
capitalizeFirstLetter(val) {
|
|
102
|
+
return val.charAt(0).toUpperCase() + val.slice(1);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Helper function to decode the internal method hex in case of a proxy transaction
|
|
106
|
+
*
|
|
107
|
+
* @param {string | UnsignedTransaction} tx
|
|
108
|
+
* @param { metadataRpc: string; registry: TypeRegistry } options
|
|
109
|
+
* @returns {TransferArgs}
|
|
110
|
+
*/
|
|
111
|
+
decodeCallMethod(tx, options) {
|
|
112
|
+
const { registry } = options;
|
|
113
|
+
let methodCall;
|
|
114
|
+
if (typeof tx === 'string') {
|
|
115
|
+
try {
|
|
116
|
+
const payload = types_1.createTypeUnsafe(registry, 'ExtrinsicPayload', [
|
|
117
|
+
tx,
|
|
118
|
+
{ version: Extrinsic_1.EXTRINSIC_VERSION },
|
|
119
|
+
]);
|
|
120
|
+
methodCall = types_1.createTypeUnsafe(registry, 'Call', [payload.method]);
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
methodCall = registry.createType('Extrinsic', util_1.hexToU8a(tx), {
|
|
124
|
+
isSigned: true,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
methodCall = registry.createType('Call', tx.method);
|
|
130
|
+
}
|
|
131
|
+
const method = methodCall.args[PROXY_METHOD_ARG];
|
|
132
|
+
const decodedArgs = method.toJSON();
|
|
133
|
+
return decodedArgs.args;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* keyPairFromSeed generates an object with secretKey and publicKey using the polkadot sdk
|
|
137
|
+
* @param seed 32 bytes long seed
|
|
138
|
+
* @returns KeyPair
|
|
139
|
+
*/
|
|
140
|
+
keyPairFromSeed(seed) {
|
|
141
|
+
const keyring = new keyring_1.Keyring({ type: 'ed25519' });
|
|
142
|
+
const keyringPair = keyring.addFromSeed(seed);
|
|
143
|
+
const pairJson = keyringPair.toJson();
|
|
144
|
+
const decodedKeyPair = decode_1.decodePair('', util_crypto_1.base64Decode(pairJson.encoded), pairJson.encoding.type);
|
|
145
|
+
return new _1.KeyPair({ prv: Buffer.from(decodedKeyPair.secretKey).toString('hex') });
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Signing function. Implement this on the OFFLINE signing device.
|
|
149
|
+
*
|
|
150
|
+
* @param {KeyringPair} pair - The signing pair.
|
|
151
|
+
* @param {string} signingPayload - Payload to sign.
|
|
152
|
+
* @param {UnsignedTransaction} transaction - raw transaction to sign
|
|
153
|
+
* @param {Object} options
|
|
154
|
+
* @param {HexString} options.metadataRpc - metadata that is needed for dot to sign
|
|
155
|
+
* @param {TypeRegistry} options.registry - metadata that is needed for dot to sign
|
|
156
|
+
*/
|
|
157
|
+
createSignedTx(pair, signingPayload, transaction, options) {
|
|
158
|
+
const { registry, metadataRpc } = options;
|
|
159
|
+
const { signature } = registry
|
|
160
|
+
.createType('ExtrinsicPayload', signingPayload, {
|
|
161
|
+
version: Extrinsic_1.EXTRINSIC_VERSION,
|
|
162
|
+
})
|
|
163
|
+
.sign(pair);
|
|
164
|
+
// Serialize a signed transaction.
|
|
165
|
+
return this.serializeSignedTransaction(transaction, signature, metadataRpc, registry);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Serializes the signed transaction
|
|
169
|
+
*
|
|
170
|
+
* @param transaction Transaction to serialize
|
|
171
|
+
* @param signature Signature of the message
|
|
172
|
+
* @param metadataRpc Network metadata
|
|
173
|
+
* @param registry Transaction registry
|
|
174
|
+
* @returns string Serialized transaction
|
|
175
|
+
*/
|
|
176
|
+
serializeSignedTransaction(transaction, signature, metadataRpc, registry) {
|
|
177
|
+
return txwrapper_polkadot_1.construct.signedTx(transaction, signature, {
|
|
178
|
+
metadataRpc,
|
|
179
|
+
registry,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Decodes the dot address from the given format
|
|
184
|
+
*
|
|
185
|
+
* @param {string} address
|
|
186
|
+
* @param {number} [ss58Format]
|
|
187
|
+
* @returns {string}
|
|
188
|
+
*/
|
|
189
|
+
decodeDotAddress(address, ss58Format) {
|
|
190
|
+
const keypair = new _1.KeyPair({ pub: Buffer.from(keyring_1.decodeAddress(address, undefined, ss58Format)).toString('hex') });
|
|
191
|
+
return keypair.getAddress(ss58Format);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Decodes the dot address from the given format
|
|
195
|
+
*
|
|
196
|
+
* @param {string} address
|
|
197
|
+
* @param {number} [ss58Format]
|
|
198
|
+
* @returns {string}
|
|
199
|
+
*/
|
|
200
|
+
encodeDotAddress(address, ss58Format) {
|
|
201
|
+
return keyring_1.encodeAddress(address, ss58Format);
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Retrieves the txHash of a signed txHex
|
|
205
|
+
*
|
|
206
|
+
* @param txHex signed transaction hex
|
|
207
|
+
* @returns {string}
|
|
208
|
+
*/
|
|
209
|
+
getTxHash(txHex) {
|
|
210
|
+
return txwrapper_polkadot_1.construct.txHash(txHex);
|
|
211
|
+
}
|
|
212
|
+
getMaterial(coinConfig) {
|
|
213
|
+
const networkConfig = coinConfig.network;
|
|
214
|
+
const { specName, specVersion, chainName, txVersion, genesisHash } = networkConfig;
|
|
215
|
+
return {
|
|
216
|
+
specName,
|
|
217
|
+
specVersion,
|
|
218
|
+
chainName,
|
|
219
|
+
metadata: networkConfig.metadataRpc,
|
|
220
|
+
txVersion,
|
|
221
|
+
genesisHash,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
isSigningPayload(payload) {
|
|
225
|
+
return payload.blockHash !== undefined;
|
|
226
|
+
}
|
|
227
|
+
isProxyTransfer(arg) {
|
|
228
|
+
return arg.real !== undefined;
|
|
229
|
+
}
|
|
230
|
+
isTransfer(arg) {
|
|
231
|
+
var _a;
|
|
232
|
+
return ((_a = arg.dest) === null || _a === void 0 ? void 0 : _a.id) !== undefined && arg.value !== undefined;
|
|
233
|
+
}
|
|
234
|
+
isTransferAll(arg) {
|
|
235
|
+
var _a;
|
|
236
|
+
return ((_a = arg.dest) === null || _a === void 0 ? void 0 : _a.id) !== undefined && arg.keepAlive !== undefined;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* extracts and returns the signature in hex format given a raw signed transaction
|
|
240
|
+
*
|
|
241
|
+
* @param {string} rawTx signed raw transaction
|
|
242
|
+
* @param options registry dot registry used to retrieve the signature
|
|
243
|
+
*/
|
|
244
|
+
recoverSignatureFromRawTx(rawTx, options) {
|
|
245
|
+
const { registry } = options;
|
|
246
|
+
const methodCall = registry.createType('Extrinsic', rawTx, {
|
|
247
|
+
isSigned: true,
|
|
248
|
+
});
|
|
249
|
+
let signature = util_1.u8aToHex(methodCall.signature);
|
|
250
|
+
// remove 0x from the signature since this is how it's returned from TSS signing
|
|
251
|
+
if (signature.startsWith('0x')) {
|
|
252
|
+
signature = signature.substr(2);
|
|
253
|
+
}
|
|
254
|
+
return signature;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Decodes the dot address from the given format
|
|
258
|
+
*
|
|
259
|
+
* @param {string} address
|
|
260
|
+
* @param {number} [ss58Format]
|
|
261
|
+
* @returns {KeyPair}
|
|
262
|
+
*/
|
|
263
|
+
decodeDotAddressToKeyPair(address, ss58Format) {
|
|
264
|
+
return new _1.KeyPair({ pub: Buffer.from(keyring_1.decodeAddress(address, undefined, ss58Format)).toString('hex') });
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Checks whether the given input is a hex string with with 0 value
|
|
268
|
+
* used to check whether a given transaction is immortal or mortal
|
|
269
|
+
* @param hexValue
|
|
270
|
+
*/
|
|
271
|
+
isZeroHex(hexValue) {
|
|
272
|
+
return hexValue === '0x00';
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Takes an asset name and returns the respective address to format to
|
|
276
|
+
* since polkadot addresses differ depending on the network
|
|
277
|
+
* ref: https://wiki.polkadot.network/docs/learn-accounts
|
|
278
|
+
* @param networkCoinName
|
|
279
|
+
*/
|
|
280
|
+
getAddressFormat(networkCoinName) {
|
|
281
|
+
return coinToAddressMap.get(networkCoinName);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
exports.Utils = Utils;
|
|
285
|
+
const utils = new Utils();
|
|
286
|
+
exports.default = utils;
|
|
287
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUEySDtBQUUzSCwrQ0FBMEU7QUFDMUUsMERBQTJEO0FBRTNELDJDQUEyRztBQUMzRyxzRUFBMkU7QUFDM0UseUNBQXFFO0FBQ3JFLHVEQUFzRTtBQUd0RSxzRUFBMEQ7QUFDMUQsZ0RBQXdCO0FBQ3hCLDBEQUErQjtBQUMvQiwwREFBNkI7QUFFN0Isd0JBQTRCO0FBRTVCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLDZFQUE2RTtBQUM3RSxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFrQztJQUNoRSxDQUFDLEtBQUssRUFBRSwyQkFBZ0IsQ0FBQyxRQUFRLENBQUM7SUFDbEMsQ0FBQyxNQUFNLEVBQUUsMkJBQWdCLENBQUMsU0FBUyxDQUFDO0NBQ3JDLENBQUMsQ0FBQztBQUVILE1BQWEsS0FBSztJQUNoQixrQkFBa0I7SUFDbEIsY0FBYyxDQUFDLE9BQWU7UUFDNUIsSUFBSTtZQUNGLHVCQUFhLENBQUMsWUFBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUMzRSxPQUFPLElBQUksQ0FBQztTQUNiO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixjQUFjLENBQUMsSUFBWTtRQUN6QixPQUFPLFlBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQkFBaUIsQ0FBQyxHQUFXO1FBQzNCLElBQUk7WUFDRixNQUFNLFVBQVUsR0FBRyxlQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFD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QUF5QixDQUFDLE9BQWUsRUFBRSxVQUFtQjtRQUM1RCxPQUFPLElBQUksVUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQWEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxRyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxRQUFnQjtRQUN4QixPQUFPLFFBQVEsS0FBSyxNQUFNLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZ0JBQWdCLENBQUMsZUFBOEI7UUFDN0MsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFxQixDQUFDO0lBQ25FLENBQUM7Q0FDRjtBQWxTRCxzQkFrU0M7QUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBRTFCLGtCQUFlLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERvdEFzc2V0VHlwZXMsIEJhc2VVdGlscywgRG90QWRkcmVzc0Zvcm1hdCwgaXNCYXNlNTgsIGlzVmFsaWRFZDI1NTE5UHVibGljS2V5LCBTZWVkIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZywgRG90TmV0d29yayB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgZGVjb2RlQWRkcmVzcywgZW5jb2RlQWRkcmVzcywgS2V5cmluZyB9IGZyb20gJ0Bwb2xrYWRvdC9rZXlyaW5nJztcbmltcG9ydCB7IGRlY29kZVBhaXIgfSBmcm9tICdAcG9sa2Fkb3Qva2V5cmluZy9wYWlyL2RlY29kZSc7XG5pbXBvcnQgeyBLZXlyaW5nUGFpciB9IGZyb20gJ0Bwb2xrYWRvdC9rZXlyaW5nL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZVR5cGVVbnNhZmUsIEdlbmVyaWNDYWxsLCBHZW5lcmljRXh0cmluc2ljLCBHZW5lcmljRXh0cmluc2ljUGF5bG9hZCB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcyc7XG5pbXBvcnQgeyBFWFRSSU5TSUNfVkVSU0lPTiB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcy9leHRyaW5zaWMvdjQvRXh0cmluc2ljJztcbmltcG9ydCB7IGhleFRvVThhLCBpc0hleCwgdThhVG9IZXgsIHU4YVRvVThhIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgYmFzZTY0RGVjb2RlLCBzaWduYXR1cmVWZXJpZnkgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbC1jcnlwdG8nO1xuaW1wb3J0IHsgVW5zaWduZWRUcmFuc2FjdGlvbiB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLWNvcmUnO1xuaW1wb3J0IHsgRGVjb2RlZFNpZ25lZFR4LCBEZWNvZGVkU2lnbmluZ1BheWxvYWQsIFR5cGVSZWdpc3RyeSB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLWNvcmUvbGliL3R5cGVzJztcbmltcG9ydCB7IGNvbnN0cnVjdCB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLXBvbGthZG90JztcbmltcG9ydCBiczU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IGJhc2UzMiBmcm9tICdoaS1iYXNlMzInO1xuaW1wb3J0IG5hY2wgZnJvbSAndHdlZXRuYWNsJztcbmltcG9ydCB7IEhleFN0cmluZywgTWF0ZXJpYWwsIFByb3h5QXJncywgUHJveHlDYWxsQXJncywgVHJhbnNmZXJBbGxBcmdzLCBUcmFuc2ZlckFyZ3MsIFR4TWV0aG9kIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLic7XG5cbmNvbnN0IFBST1hZX01FVEhPRF9BUkcgPSAyO1xuLy8gbWFwIHRvIHJldHJpZXZlIHRoZSBhZGRyZXNzIGVuY29kaW5nIGZvcm1hdCB3aGVuIHRoZSBrZXkgaXMgdGhlIGFzc2V0IG5hbWVcbmNvbnN0IGNvaW5Ub0FkZHJlc3NNYXAgPSBuZXcgTWFwPERvdEFzc2V0VHlwZXMsIERvdEFkZHJlc3NGb3JtYXQ+KFtcbiAgWydkb3QnLCBEb3RBZGRyZXNzRm9ybWF0LnBvbGthZG90XSxcbiAgWyd0ZG90JywgRG90QWRkcmVzc0Zvcm1hdC5zdWJzdHJhdGVdLFxuXSk7XG5cbmV4cG9ydCBjbGFzcyBVdGlscyBpbXBsZW1lbnRzIEJhc2VVdGlscyB7XG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgZW5jb2RlQWRkcmVzcyhpc0hleChhZGRyZXNzKSA/IGhleFRvVThhKGFkZHJlc3MpIDogZGVjb2RlQWRkcmVzcyhhZGRyZXNzKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkQmxvY2tJZChoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNIZXgoaGFzaCwgMjU2KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkUHJpdmF0ZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkUHJ2ID0gaGV4VG9VOGEoa2V5KTtcbiAgICAgIHJldHVybiBkZWNvZGVkUHJ2Lmxlbmd0aCA9PT0gbmFjbC5zaWduLnNlY3JldEtleUxlbmd0aCAvIDI7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkUHVibGljS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbGV0IHB1YktleSA9IGtleTtcblxuICAgIC8vIGNvbnZlcnQgYmFzZTU4IHB1YiBrZXkgdG8gaGV4IGZvcm1hdFxuICAgIC8vIHRzcyBjb21tb24gcHViIGlzIGluIGJhc2U1OCBmb3JtYXQgYW5kIGRlY29kZXMgdG8gbGVuZ3RoIG9mIDMyXG4gICAgaWYgKGlzQmFzZTU4KHB1YktleSwgMzIpKSB7XG4gICAgICBjb25zdCBiYXNlNThEZWNvZGUgPSBiczU4LmRlY29kZShwdWJLZXkpO1xuICAgICAgcHViS2V5ID0gYmFzZTU4RGVjb2RlLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNWYWxpZEVkMjU1MTlQdWJsaWNLZXkocHViS2V5KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2lnbmF0dXJlVThhID0gdThhVG9VOGEoc2lnbmF0dXJlKTtcbiAgICByZXR1cm4gWzY0LCA2NSwgNjZdLmluY2x1ZGVzKHNpZ25hdHVyZVU4YS5sZW5ndGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoZSBzaWduYXR1cmUgb24gYSBnaXZlbiBtZXNzYWdlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduZWRNZXNzYWdlIHRoZSBzaWduZWQgbWVzc2FnZSBmb3IgdGhlIHNpZ25hdHVyZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlIHRoZSBzaWduYXR1cmUgdG8gdmVyaWZ5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIHRoZSBhZGRyZXNzIG9mIHRoZSBzaWduZXJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHdoZXRoZXIgdGhlIHNpZ25hdHVyZSBpcyB2YWxpZCBvciBub3RcbiAgICovXG4gIHZlcmlmeVNpZ25hdHVyZShzaWduZWRNZXNzYWdlOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBwdWJsaWNLZXkgPSBkZWNvZGVBZGRyZXNzKGFkZHJlc3MpO1xuICAgIGNvbnN0IGhleFB1YmxpY0tleSA9IHU4YVRvSGV4KHB1YmxpY0tleSk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlVmVyaWZ5KHNpZ25lZE1lc3NhZ2UsIHNpZ25hdHVyZSwgaGV4UHVibGljS2V5KS5pc1ZhbGlkO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0hleCh0eElkLCAyNTYpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRlY29kZVNlZWQgZGVjb2RlcyBhIGRvdCBzZWVkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWVkIC0gdGhlIHNlZWQgdG8gYmUgdmFsaWRhdGVkLlxuICAgKiBAcmV0dXJucyB7U2VlZH0gLSB0aGUgb2JqZWN0IFNlZWRcbiAgICovXG4gIGRlY29kZVNlZWQoc2VlZDogc3RyaW5nKTogU2VlZCB7XG4gICAgY29uc3QgZGVjb2RlZCA9IGJhc2UzMi5kZWNvZGUuYXNCeXRlcyhzZWVkKTtcbiAgICByZXR1cm4ge1xuICAgICAgc2VlZDogQnVmZmVyLmZyb20oZGVjb2RlZCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY2FwaXRhbGl6ZSB0aGUgZmlyc3QgbGV0dGVyIG9mIGEgc3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGNhcGl0YWxpemVGaXJzdExldHRlcih2YWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbC5zbGljZSgxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGVjb2RlIHRoZSBpbnRlcm5hbCBtZXRob2QgaGV4IGluIGNhc2Ugb2YgYSBwcm94eSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVuc2lnbmVkVHJhbnNhY3Rpb259IHR4XG4gICAqIEBwYXJhbSB7IG1ldGFkYXRhUnBjOiBzdHJpbmc7IHJlZ2lzdHJ5OiBUeXBlUmVnaXN0cnkgfSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtUcmFuc2ZlckFyZ3N9XG4gICAqL1xuICBkZWNvZGVDYWxsTWV0aG9kKFxuICAgIHR4OiBzdHJpbmcgfCBVbnNpZ25lZFRyYW5zYWN0aW9uLFxuICAgIG9wdGlvbnM6IHsgbWV0YWRhdGFScGM6IHN0cmluZzsgcmVnaXN0cnk6IFR5cGVSZWdpc3RyeSB9XG4gICk6IFRyYW5zZmVyQXJncyB7XG4gICAgY29uc3QgeyByZWdpc3RyeSB9ID0gb3B0aW9ucztcbiAgICBsZXQgbWV0aG9kQ2FsbDogR2VuZXJpY0NhbGwgfCBHZW5lcmljRXh0cmluc2ljO1xuICAgIGlmICh0eXBlb2YgdHggPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBHZW5lcmljRXh0cmluc2ljUGF5bG9hZCA9IGNyZWF0ZVR5cGVVbnNhZmUocmVnaXN0cnksICdFeHRyaW5zaWNQYXlsb2FkJywgW1xuICAgICAgICAgIHR4LFxuICAgICAgICAgIHsgdmVyc2lvbjogRVhUUklOU0lDX1ZFUlNJT04gfSxcbiAgICAgICAgXSk7XG4gICAgICAgIG1ldGhvZENhbGwgPSBjcmVhdGVUeXBlVW5zYWZlKHJlZ2lzdHJ5LCAnQ2FsbCcsIFtwYXlsb2FkLm1ldGhvZF0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBtZXRob2RDYWxsID0gcmVnaXN0cnkuY3JlYXRlVHlwZSgnRXh0cmluc2ljJywgaGV4VG9VOGEodHgpLCB7XG4gICAgICAgICAgaXNTaWduZWQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBtZXRob2RDYWxsID0gcmVnaXN0cnkuY3JlYXRlVHlwZSgnQ2FsbCcsIHR4Lm1ldGhvZCk7XG4gICAgfVxuICAgIGNvbnN0IG1ldGhvZCA9IG1ldGhvZENhbGwuYXJnc1tQUk9YWV9NRVRIT0RfQVJHXTtcbiAgICBjb25zdCBkZWNvZGVkQXJncyA9IG1ldGhvZC50b0pTT04oKSBhcyB1bmtub3duIGFzIFByb3h5Q2FsbEFyZ3M7XG4gICAgcmV0dXJuIGRlY29kZWRBcmdzLmFyZ3M7XG4gIH1cblxuICAvKipcbiAgICoga2V5UGFpckZyb21TZWVkIGdlbmVyYXRlcyBhbiBvYmplY3Qgd2l0aCBzZWNyZXRLZXkgYW5kIHB1YmxpY0tleSB1c2luZyB0aGUgcG9sa2Fkb3Qgc2RrXG4gICAqIEBwYXJhbSBzZWVkIDMyIGJ5dGVzIGxvbmcgc2VlZFxuICAgKiBAcmV0dXJucyBLZXlQYWlyXG4gICAqL1xuICBrZXlQYWlyRnJvbVNlZWQoc2VlZDogVWludDhBcnJheSk6IEtleVBhaXIge1xuICAgIGNvbnN0IGtleXJpbmcgPSBuZXcgS2V5cmluZyh7IHR5cGU6ICdlZDI1NTE5JyB9KTtcbiAgICBjb25zdCBrZXlyaW5nUGFpciA9IGtleXJpbmcuYWRkRnJvbVNlZWQoc2VlZCk7XG4gICAgY29uc3QgcGFpckpzb24gPSBrZXlyaW5nUGFpci50b0pzb24oKTtcbiAgICBjb25zdCBkZWNvZGVkS2V5UGFpciA9IGRlY29kZVBhaXIoJycsIGJhc2U2NERlY29kZShwYWlySnNvbi5lbmNvZGVkKSwgcGFpckpzb24uZW5jb2RpbmcudHlwZSk7XG4gICAgcmV0dXJuIG5ldyBLZXlQYWlyKHsgcHJ2OiBCdWZmZXIuZnJvbShkZWNvZGVkS2V5UGFpci5zZWNyZXRLZXkpLnRvU3RyaW5nKCdoZXgnKSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduaW5nIGZ1bmN0aW9uLiBJbXBsZW1lbnQgdGhpcyBvbiB0aGUgT0ZGTElORSBzaWduaW5nIGRldmljZS5cbiAgICpcbiAgICogQHBhcmFtIHtLZXlyaW5nUGFpcn0gcGFpciAtIFRoZSBzaWduaW5nIHBhaXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduaW5nUGF5bG9hZCAtIFBheWxvYWQgdG8gc2lnbi5cbiAgICogQHBhcmFtIHtVbnNpZ25lZFRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvbiAtIHJhdyB0cmFuc2FjdGlvbiB0byBzaWduXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7SGV4U3RyaW5nfSBvcHRpb25zLm1ldGFkYXRhUnBjIC0gbWV0YWRhdGEgdGhhdCBpcyBuZWVkZWQgZm9yIGRvdCB0byBzaWduXG4gICAqIEBwYXJhbSB7VHlwZVJlZ2lzdHJ5fSBvcHRpb25zLnJlZ2lzdHJ5IC0gbWV0YWRhdGEgdGhhdCBpcyBuZWVkZWQgZm9yIGRvdCB0byBzaWduXG4gICAqL1xuICBjcmVhdGVTaWduZWRUeChcbiAgICBwYWlyOiBLZXlyaW5nUGFpcixcbiAgICBzaWduaW5nUGF5bG9hZDogc3RyaW5nLFxuICAgIHRyYW5zYWN0aW9uOiBVbnNpZ25lZFRyYW5zYWN0aW9uLFxuICAgIG9wdGlvbnM6IHsgbWV0YWRhdGFScGM6IEhleFN0cmluZzsgcmVnaXN0cnk6IFR5cGVSZWdpc3RyeSB9XG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgeyByZWdpc3RyeSwgbWV0YWRhdGFScGMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgeyBzaWduYXR1cmUgfSA9IHJlZ2lzdHJ5XG4gICAgICAuY3JlYXRlVHlwZSgnRXh0cmluc2ljUGF5bG9hZCcsIHNpZ25pbmdQYXlsb2FkLCB7XG4gICAgICAgIHZlcnNpb246IEVYVFJJTlNJQ19WRVJTSU9OLFxuICAgICAgfSlcbiAgICAgIC5zaWduKHBhaXIpO1xuXG4gICAgLy8gU2VyaWFsaXplIGEgc2lnbmVkIHRyYW5zYWN0aW9uLlxuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZVNpZ25lZFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBzaWduYXR1cmUsIG1ldGFkYXRhUnBjLCByZWdpc3RyeSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyB0aGUgc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvbiBUcmFuc2FjdGlvbiB0byBzZXJpYWxpemVcbiAgICogQHBhcmFtIHNpZ25hdHVyZSBTaWduYXR1cmUgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHBhcmFtIG1ldGFkYXRhUnBjIE5ldHdvcmsgbWV0YWRhdGFcbiAgICogQHBhcmFtIHJlZ2lzdHJ5IFRyYW5zYWN0aW9uIHJlZ2lzdHJ5XG4gICAqIEByZXR1cm5zIHN0cmluZyBTZXJpYWxpemVkIHRyYW5zYWN0aW9uXG4gICAqL1xuICBzZXJpYWxpemVTaWduZWRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgc2lnbmF0dXJlLCBtZXRhZGF0YVJwYzogYDB4JHtzdHJpbmd9YCwgcmVnaXN0cnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBjb25zdHJ1Y3Quc2lnbmVkVHgodHJhbnNhY3Rpb24sIHNpZ25hdHVyZSwge1xuICAgICAgbWV0YWRhdGFScGMsXG4gICAgICByZWdpc3RyeSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIHRoZSBkb3QgYWRkcmVzcyBmcm9tIHRoZSBnaXZlbiBmb3JtYXRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3NcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzczU4Rm9ybWF0XVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZGVjb2RlRG90QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcsIHNzNThGb3JtYXQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3Qga2V5cGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKGFkZHJlc3MsIHVuZGVmaW5lZCwgc3M1OEZvcm1hdCkpLnRvU3RyaW5nKCdoZXgnKSB9KTtcbiAgICByZXR1cm4ga2V5cGFpci5nZXRBZGRyZXNzKHNzNThGb3JtYXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY29kZXMgdGhlIGRvdCBhZGRyZXNzIGZyb20gdGhlIGdpdmVuIGZvcm1hdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzc1xuICAgKiBAcGFyYW0ge251bWJlcn0gW3NzNThGb3JtYXRdXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBlbmNvZGVEb3RBZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgc3M1OEZvcm1hdD86IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGVuY29kZUFkZHJlc3MoYWRkcmVzcywgc3M1OEZvcm1hdCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB0eEhhc2ggb2YgYSBzaWduZWQgdHhIZXhcbiAgICpcbiAgICogQHBhcmFtIHR4SGV4IHNpZ25lZCB0cmFuc2FjdGlvbiBoZXhcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldFR4SGFzaCh0eEhleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY29uc3RydWN0LnR4SGFzaCh0eEhleCk7XG4gIH1cblxuICBnZXRNYXRlcmlhbChjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPik6IE1hdGVyaWFsIHtcbiAgICBjb25zdCBuZXR3b3JrQ29uZmlnID0gY29pbkNvbmZpZy5uZXR3b3JrIGFzIERvdE5ldHdvcms7XG4gICAgY29uc3QgeyBzcGVjTmFtZSwgc3BlY1ZlcnNpb24sIGNoYWluTmFtZSwgdHhWZXJzaW9uLCBnZW5lc2lzSGFzaCB9ID0gbmV0d29ya0NvbmZpZztcblxuICAgIHJldHVybiB7XG4gICAgICBzcGVjTmFtZSxcbiAgICAgIHNwZWNWZXJzaW9uLFxuICAgICAgY2hhaW5OYW1lLFxuICAgICAgbWV0YWRhdGE6IG5ldHdvcmtDb25maWcubWV0YWRhdGFScGMsXG4gICAgICB0eFZlcnNpb24sXG4gICAgICBnZW5lc2lzSGFzaCxcbiAgICB9IGFzIE1hdGVyaWFsO1xuICB9XG5cbiAgaXNTaWduaW5nUGF5bG9hZChwYXlsb2FkOiBEZWNvZGVkU2lnbmluZ1BheWxvYWQgfCBEZWNvZGVkU2lnbmVkVHgpOiBwYXlsb2FkIGlzIERlY29kZWRTaWduaW5nUGF5bG9hZCB7XG4gICAgcmV0dXJuIChwYXlsb2FkIGFzIERlY29kZWRTaWduaW5nUGF5bG9hZCkuYmxvY2tIYXNoICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBpc1Byb3h5VHJhbnNmZXIoYXJnOiBUeE1ldGhvZFsnYXJncyddKTogYXJnIGlzIFByb3h5QXJncyB7XG4gICAgcmV0dXJuIChhcmcgYXMgUHJveHlBcmdzKS5yZWFsICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBpc1RyYW5zZmVyKGFyZzogVHhNZXRob2RbJ2FyZ3MnXSk6IGFyZyBpcyBUcmFuc2ZlckFyZ3Mge1xuICAgIHJldHVybiAoYXJnIGFzIFRyYW5zZmVyQXJncykuZGVzdD8uaWQgIT09IHVuZGVmaW5lZCAmJiAoYXJnIGFzIFRyYW5zZmVyQXJncykudmFsdWUgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzVHJhbnNmZXJBbGwoYXJnOiBUeE1ldGhvZFsnYXJncyddKTogYXJnIGlzIFRyYW5zZmVyQWxsQXJncyB7XG4gICAgcmV0dXJuIChhcmcgYXMgVHJhbnNmZXJBbGxBcmdzKS5kZXN0Py5pZCAhPT0gdW5kZWZpbmVkICYmIChhcmcgYXMgVHJhbnNmZXJBbGxBcmdzKS5rZWVwQWxpdmUgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgc2lnbmF0dXJlIGluIGhleCBmb3JtYXQgZ2l2ZW4gYSByYXcgc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByYXdUeCBzaWduZWQgcmF3IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBvcHRpb25zIHJlZ2lzdHJ5IGRvdCByZWdpc3RyeSB1c2VkIHRvIHJldHJpZXZlIHRoZSBzaWduYXR1cmVcbiAgICovXG4gIHJlY292ZXJTaWduYXR1cmVGcm9tUmF3VHgocmF3VHg6IHN0cmluZywgb3B0aW9uczogeyByZWdpc3RyeTogVHlwZVJlZ2lzdHJ5IH0pOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgcmVnaXN0cnkgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbWV0aG9kQ2FsbCA9IHJlZ2lzdHJ5LmNyZWF0ZVR5cGUoJ0V4dHJpbnNpYycsIHJhd1R4LCB7XG4gICAgICBpc1NpZ25lZDogdHJ1ZSxcbiAgICB9KTtcbiAgICBsZXQgc2lnbmF0dXJlID0gdThhVG9IZXgobWV0aG9kQ2FsbC5zaWduYXR1cmUpIGFzIHN0cmluZztcblxuICAgIC8vIHJlbW92ZSAweCBmcm9tIHRoZSBzaWduYXR1cmUgc2luY2UgdGhpcyBpcyBob3cgaXQncyByZXR1cm5lZCBmcm9tIFRTUyBzaWduaW5nXG4gICAgaWYgKHNpZ25hdHVyZS5zdGFydHNXaXRoKCcweCcpKSB7XG4gICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmUuc3Vic3RyKDIpO1xuICAgIH1cbiAgICByZXR1cm4gc2lnbmF0dXJlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY29kZXMgdGhlIGRvdCBhZGRyZXNzIGZyb20gdGhlIGdpdmVuIGZvcm1hdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzc1xuICAgKiBAcGFyYW0ge251bWJlcn0gW3NzNThGb3JtYXRdXG4gICAqIEByZXR1cm5zIHtLZXlQYWlyfVxuICAgKi9cbiAgZGVjb2RlRG90QWRkcmVzc1RvS2V5UGFpcihhZGRyZXNzOiBzdHJpbmcsIHNzNThGb3JtYXQ/OiBudW1iZXIpOiBLZXlQYWlyIHtcbiAgICByZXR1cm4gbmV3IEtleVBhaXIoeyBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3MoYWRkcmVzcywgdW5kZWZpbmVkLCBzczU4Rm9ybWF0KSkudG9TdHJpbmcoJ2hleCcpIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBpbnB1dCBpcyBhIGhleCBzdHJpbmcgd2l0aCB3aXRoIDAgdmFsdWVcbiAgICogdXNlZCB0byBjaGVjayB3aGV0aGVyIGEgZ2l2ZW4gdHJhbnNhY3Rpb24gaXMgaW1tb3J0YWwgb3IgbW9ydGFsXG4gICAqIEBwYXJhbSBoZXhWYWx1ZVxuICAgKi9cbiAgaXNaZXJvSGV4KGhleFZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaGV4VmFsdWUgPT09ICcweDAwJztcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhbiBhc3NldCBuYW1lIGFuZCByZXR1cm5zIHRoZSByZXNwZWN0aXZlIGFkZHJlc3MgdG8gZm9ybWF0IHRvXG4gICAqIHNpbmNlIHBvbGthZG90IGFkZHJlc3NlcyBkaWZmZXIgZGVwZW5kaW5nIG9uIHRoZSBuZXR3b3JrXG4gICAqIHJlZjogaHR0cHM6Ly93aWtpLnBvbGthZG90Lm5ldHdvcmsvZG9jcy9sZWFybi1hY2NvdW50c1xuICAgKiBAcGFyYW0gbmV0d29ya0NvaW5OYW1lXG4gICAqL1xuICBnZXRBZGRyZXNzRm9ybWF0KG5ldHdvcmtDb2luTmFtZTogRG90QXNzZXRUeXBlcyk6IERvdEFkZHJlc3NGb3JtYXQge1xuICAgIHJldHVybiBjb2luVG9BZGRyZXNzTWFwLmdldChuZXR3b3JrQ29pbk5hbWUpIGFzIERvdEFkZHJlc3NGb3JtYXQ7XG4gIH1cbn1cblxuY29uc3QgdXRpbHMgPSBuZXcgVXRpbHMoKTtcblxuZXhwb3J0IGRlZmF1bHQgdXRpbHM7XG4iXX0=
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { TransactionType } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { DecodedSignedTx, DecodedSigningPayload, UnsignedTransaction } from '@substrate/txwrapper-core';
|
|
4
|
+
import { Transaction } from './transaction';
|
|
5
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
6
|
+
export declare class WithdrawUnstakedBuilder extends TransactionBuilder {
|
|
7
|
+
protected _numSlashingSpans: number;
|
|
8
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
9
|
+
/**
|
|
10
|
+
*
|
|
11
|
+
* Frees up any unlocked chunks.
|
|
12
|
+
* The balance can now be used by the stash account to do whatever it wants.
|
|
13
|
+
*
|
|
14
|
+
* @returns {UnsignedTransaction} an unsigned Dot transaction
|
|
15
|
+
*
|
|
16
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#withdrawunbondednum_slashing_spans-u32
|
|
17
|
+
*/
|
|
18
|
+
protected buildTransaction(): UnsignedTransaction;
|
|
19
|
+
protected get transactionType(): TransactionType;
|
|
20
|
+
/**
|
|
21
|
+
*
|
|
22
|
+
* The number of slashing spans.
|
|
23
|
+
*
|
|
24
|
+
* @param {number} slashingSpans
|
|
25
|
+
* @returns {WithdrawUnstakedBuilder} This withdrawUnstaked builder.
|
|
26
|
+
*
|
|
27
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#withdrawunbondednum_slashing_spans-u32
|
|
28
|
+
*/
|
|
29
|
+
slashingSpans(slashingSpans: number): this;
|
|
30
|
+
/** @inheritdoc */
|
|
31
|
+
validateDecodedTransaction(decodedTxn: DecodedSigningPayload | DecodedSignedTx): void;
|
|
32
|
+
/** @inheritdoc */
|
|
33
|
+
protected fromImplementation(rawTransaction: string): Transaction;
|
|
34
|
+
/** @inheritdoc */
|
|
35
|
+
validateTransaction(_: Transaction): void;
|
|
36
|
+
private validateFields;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=withdrawUnstakedBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdrawUnstakedBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/withdrawUnstakedBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIxG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,qBAAa,uBAAwB,SAAQ,kBAAkB;IAC7D,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC;gBAExB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;;;;;;OAQG;IACH,SAAS,CAAC,gBAAgB,IAAI,mBAAmB;IAYjD,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;;;;;OAQG;IACH,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAM1C,kBAAkB;IAClB,0BAA0B,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,GAAG,IAAI;IAarF,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAWjE,kBAAkB;IAClB,mBAAmB,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;IAKzC,OAAO,CAAC,cAAc;CAWvB"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.WithdrawUnstakedBuilder = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
+
const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
|
|
9
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
10
|
+
const iface_1 = require("./iface");
|
|
11
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
12
|
+
const txnSchema_1 = require("./txnSchema");
|
|
13
|
+
class WithdrawUnstakedBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
14
|
+
constructor(_coinConfig) {
|
|
15
|
+
super(_coinConfig);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* Frees up any unlocked chunks.
|
|
20
|
+
* The balance can now be used by the stash account to do whatever it wants.
|
|
21
|
+
*
|
|
22
|
+
* @returns {UnsignedTransaction} an unsigned Dot transaction
|
|
23
|
+
*
|
|
24
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#withdrawunbondednum_slashing_spans-u32
|
|
25
|
+
*/
|
|
26
|
+
buildTransaction() {
|
|
27
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
28
|
+
// TODO: The method changes the args type from number to string, verify it doesn't break anything
|
|
29
|
+
return txwrapper_polkadot_1.methods.staking.withdrawUnbonded({
|
|
30
|
+
numSlashingSpans: this._numSlashingSpans,
|
|
31
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
32
|
+
}
|
|
33
|
+
get transactionType() {
|
|
34
|
+
return sdk_core_1.TransactionType.StakingWithdraw;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
*
|
|
38
|
+
* The number of slashing spans.
|
|
39
|
+
*
|
|
40
|
+
* @param {number} slashingSpans
|
|
41
|
+
* @returns {WithdrawUnstakedBuilder} This withdrawUnstaked builder.
|
|
42
|
+
*
|
|
43
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#withdrawunbondednum_slashing_spans-u32
|
|
44
|
+
*/
|
|
45
|
+
slashingSpans(slashingSpans) {
|
|
46
|
+
this.validateValue(new bignumber_js_1.default(slashingSpans));
|
|
47
|
+
this._numSlashingSpans = slashingSpans;
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
/** @inheritdoc */
|
|
51
|
+
validateDecodedTransaction(decodedTxn) {
|
|
52
|
+
var _a;
|
|
53
|
+
if (((_a = decodedTxn.method) === null || _a === void 0 ? void 0 : _a.name) === iface_1.MethodNames.WithdrawUnbonded) {
|
|
54
|
+
const txMethod = decodedTxn.method.args;
|
|
55
|
+
const value = txMethod.numSlashingSpans;
|
|
56
|
+
const validationResult = txnSchema_1.WithdrawUnstakedTransactionSchema.validate({ value });
|
|
57
|
+
if (validationResult.error) {
|
|
58
|
+
throw new sdk_core_1.InvalidTransactionError(`WithdrawUnstaked Transaction validation failed: ${validationResult.error.message}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** @inheritdoc */
|
|
63
|
+
fromImplementation(rawTransaction) {
|
|
64
|
+
var _a, _b;
|
|
65
|
+
const tx = super.fromImplementation(rawTransaction);
|
|
66
|
+
if (((_a = this._method) === null || _a === void 0 ? void 0 : _a.name) === iface_1.MethodNames.WithdrawUnbonded) {
|
|
67
|
+
const txMethod = this._method.args;
|
|
68
|
+
this.slashingSpans(txMethod.numSlashingSpans);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid Transaction Type: ${(_b = this._method) === null || _b === void 0 ? void 0 : _b.name}. Expected withdrawUnbonded`);
|
|
72
|
+
}
|
|
73
|
+
return tx;
|
|
74
|
+
}
|
|
75
|
+
/** @inheritdoc */
|
|
76
|
+
validateTransaction(_) {
|
|
77
|
+
super.validateTransaction(_);
|
|
78
|
+
this.validateFields(this._numSlashingSpans);
|
|
79
|
+
}
|
|
80
|
+
validateFields(value) {
|
|
81
|
+
const validationResult = txnSchema_1.WithdrawUnstakedTransactionSchema.validate({
|
|
82
|
+
value,
|
|
83
|
+
});
|
|
84
|
+
if (validationResult.error) {
|
|
85
|
+
throw new sdk_core_1.InvalidTransactionError(`WithdrawUnstaked Builder Transaction validation failed: ${validationResult.error.message}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.WithdrawUnstakedBuilder = WithdrawUnstakedBuilder;
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aGRyYXdVbnN0YWtlZEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3dpdGhkcmF3VW5zdGFrZWRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUFnRjtBQUdoRixzRUFBd0Q7QUFDeEQsZ0VBQXFDO0FBQ3JDLG1DQUE0RDtBQUU1RCw2REFBMEQ7QUFDMUQsMkNBQWdFO0FBRWhFLE1BQWEsdUJBQXdCLFNBQVEsdUNBQWtCO0lBRzdELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLGdCQUFnQjtRQUN4QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMzQyxpR0FBaUc7UUFDakcsT0FBTyw0QkFBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FDckM7WUFDRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1NBQ3pDLEVBQ0QsVUFBVSxDQUFDLFVBQVUsRUFDckIsVUFBVSxDQUFDLE9BQU8sQ0FDbkIsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxhQUFhLENBQUMsYUFBcUI7UUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLHNCQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsYUFBYSxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQiwwQkFBMEIsQ0FBQyxVQUFtRDs7UUFDNUUsSUFBSSxDQUFBLE1BQUEsVUFBVSxDQUFDLE1BQU0sMENBQUUsSUFBSSxNQUFLLG1CQUFXLENBQUMsZ0JBQWdCLEVBQUU7WUFDNUQsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUF1QyxDQUFDO1lBQzNFLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztZQUN4QyxNQUFNLGdCQUFnQixHQUFHLDZDQUFpQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDL0UsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSxrQ0FBdUIsQ0FDL0IsbURBQW1ELGdCQUFnQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FDcEYsQ0FBQzthQUNIO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1Isa0JBQWtCLENBQUMsY0FBc0I7O1FBQ2pELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxJQUFJLE1BQUssbUJBQVcsQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQTRCLENBQUM7WUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMvQzthQUFNO1lBQ0wsTUFBTSxJQUFJLGtDQUF1QixDQUFDLDZCQUE2QixNQUFBLElBQUksQ0FBQyxPQUFPLDBDQUFFLElBQUksNkJBQTZCLENBQUMsQ0FBQztTQUNqSDtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELGtCQUFrQjtJQUNsQixtQkFBbUIsQ0FBQyxDQUFjO1FBQ2hDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxjQUFjLENBQUMsS0FBYTtRQUNsQyxNQUFNLGdCQUFnQixHQUFHLDZDQUFpQyxDQUFDLFFBQVEsQ0FBQztZQUNsRSxLQUFLO1NBQ04sQ0FBQyxDQUFDO1FBRUgsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7WUFDMUIsTUFBTSxJQUFJLGtDQUF1QixDQUMvQiwyREFBMkQsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUM1RixDQUFDO1NBQ0g7SUFDSCxDQUFDO0NBQ0Y7QUExRkQsMERBMEZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IERlY29kZWRTaWduZWRUeCwgRGVjb2RlZFNpZ25pbmdQYXlsb2FkLCBVbnNpZ25lZFRyYW5zYWN0aW9uIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItY29yZSc7XG5pbXBvcnQgeyBtZXRob2RzIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItcG9sa2Fkb3QnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgTWV0aG9kTmFtZXMsIFdpdGhkcmF3VW5zdGFrZWRBcmdzIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgV2l0aGRyYXdVbnN0YWtlZFRyYW5zYWN0aW9uU2NoZW1hIH0gZnJvbSAnLi90eG5TY2hlbWEnO1xuXG5leHBvcnQgY2xhc3MgV2l0aGRyYXdVbnN0YWtlZEJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX251bVNsYXNoaW5nU3BhbnM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogRnJlZXMgdXAgYW55IHVubG9ja2VkIGNodW5rcy5cbiAgICogVGhlIGJhbGFuY2UgY2FuIG5vdyBiZSB1c2VkIGJ5IHRoZSBzdGFzaCBhY2NvdW50IHRvIGRvIHdoYXRldmVyIGl0IHdhbnRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7VW5zaWduZWRUcmFuc2FjdGlvbn0gYW4gdW5zaWduZWQgRG90IHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9wb2xrYWRvdC5qcy5vcmcvZG9jcy9zdWJzdHJhdGUvZXh0cmluc2ljcy8jd2l0aGRyYXd1bmJvbmRlZG51bV9zbGFzaGluZ19zcGFucy11MzJcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZFRyYW5zYWN0aW9uKCk6IFVuc2lnbmVkVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGJhc2VUeEluZm8gPSB0aGlzLmNyZWF0ZUJhc2VUeEluZm8oKTtcbiAgICAvLyBUT0RPOiBUaGUgbWV0aG9kIGNoYW5nZXMgdGhlIGFyZ3MgdHlwZSBmcm9tIG51bWJlciB0byBzdHJpbmcsIHZlcmlmeSBpdCBkb2Vzbid0IGJyZWFrIGFueXRoaW5nXG4gICAgcmV0dXJuIG1ldGhvZHMuc3Rha2luZy53aXRoZHJhd1VuYm9uZGVkKFxuICAgICAge1xuICAgICAgICBudW1TbGFzaGluZ1NwYW5zOiB0aGlzLl9udW1TbGFzaGluZ1NwYW5zLFxuICAgICAgfSxcbiAgICAgIGJhc2VUeEluZm8uYmFzZVR4SW5mbyxcbiAgICAgIGJhc2VUeEluZm8ub3B0aW9uc1xuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFRoZSBudW1iZXIgb2Ygc2xhc2hpbmcgc3BhbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzbGFzaGluZ1NwYW5zXG4gICAqIEByZXR1cm5zIHtXaXRoZHJhd1Vuc3Rha2VkQnVpbGRlcn0gVGhpcyB3aXRoZHJhd1Vuc3Rha2VkIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9wb2xrYWRvdC5qcy5vcmcvZG9jcy9zdWJzdHJhdGUvZXh0cmluc2ljcy8jd2l0aGRyYXd1bmJvbmRlZG51bV9zbGFzaGluZ19zcGFucy11MzJcbiAgICovXG4gIHNsYXNoaW5nU3BhbnMoc2xhc2hpbmdTcGFuczogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIoc2xhc2hpbmdTcGFucykpO1xuICAgIHRoaXMuX251bVNsYXNoaW5nU3BhbnMgPSBzbGFzaGluZ1NwYW5zO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlRGVjb2RlZFRyYW5zYWN0aW9uKGRlY29kZWRUeG46IERlY29kZWRTaWduaW5nUGF5bG9hZCB8IERlY29kZWRTaWduZWRUeCk6IHZvaWQge1xuICAgIGlmIChkZWNvZGVkVHhuLm1ldGhvZD8ubmFtZSA9PT0gTWV0aG9kTmFtZXMuV2l0aGRyYXdVbmJvbmRlZCkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHhuLm1ldGhvZC5hcmdzIGFzIHVua25vd24gYXMgV2l0aGRyYXdVbnN0YWtlZEFyZ3M7XG4gICAgICBjb25zdCB2YWx1ZSA9IHR4TWV0aG9kLm51bVNsYXNoaW5nU3BhbnM7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gV2l0aGRyYXdVbnN0YWtlZFRyYW5zYWN0aW9uU2NoZW1hLnZhbGlkYXRlKHsgdmFsdWUgfSk7XG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICAgYFdpdGhkcmF3VW5zdGFrZWQgVHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQ6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4ID0gc3VwZXIuZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICBpZiAodGhpcy5fbWV0aG9kPy5uYW1lID09PSBNZXRob2ROYW1lcy5XaXRoZHJhd1VuYm9uZGVkKSB7XG4gICAgICBjb25zdCB0eE1ldGhvZCA9IHRoaXMuX21ldGhvZC5hcmdzIGFzIFdpdGhkcmF3VW5zdGFrZWRBcmdzO1xuICAgICAgdGhpcy5zbGFzaGluZ1NwYW5zKHR4TWV0aG9kLm51bVNsYXNoaW5nU3BhbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgVHJhbnNhY3Rpb24gVHlwZTogJHt0aGlzLl9tZXRob2Q/Lm5hbWV9LiBFeHBlY3RlZCB3aXRoZHJhd1VuYm9uZGVkYCk7XG4gICAgfVxuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKF86IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIudmFsaWRhdGVUcmFuc2FjdGlvbihfKTtcbiAgICB0aGlzLnZhbGlkYXRlRmllbGRzKHRoaXMuX251bVNsYXNoaW5nU3BhbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUZpZWxkcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IFdpdGhkcmF3VW5zdGFrZWRUcmFuc2FjdGlvblNjaGVtYS52YWxpZGF0ZSh7XG4gICAgICB2YWx1ZSxcbiAgICB9KTtcblxuICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBXaXRoZHJhd1Vuc3Rha2VkIEJ1aWxkZXIgVHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQ6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseCoin, BitGoBase } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin as StaticsBaseCoin } from '@bitgo-beta/statics';
|
|
3
|
+
import { Dot } from './dot';
|
|
4
|
+
export declare class Tdot extends Dot {
|
|
5
|
+
protected readonly _staticsCoin: Readonly<StaticsBaseCoin>;
|
|
6
|
+
constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
|
|
7
|
+
static createInstance(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>): BaseCoin;
|
|
8
|
+
getChain(): string;
|
|
9
|
+
getFullName(): string;
|
|
10
|
+
getBaseFactor(): number;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=tdot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tdot.d.ts","sourceRoot":"","sources":["../../src/tdot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,qBAAa,IAAK,SAAQ,GAAG;IAC3B,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAC/C,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAUrE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,QAAQ,IAAI,MAAM;IAIlB,WAAW,IAAI,MAAM;IAIrB,aAAa,IAAI,MAAM;CAGxB"}
|
package/dist/src/tdot.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Tdot = void 0;
|
|
4
|
+
const dot_1 = require("./dot");
|
|
5
|
+
class Tdot extends dot_1.Dot {
|
|
6
|
+
constructor(bitgo, staticsCoin) {
|
|
7
|
+
super(bitgo, staticsCoin);
|
|
8
|
+
if (!staticsCoin) {
|
|
9
|
+
throw new Error('missing required constructor parameter staticsCoin');
|
|
10
|
+
}
|
|
11
|
+
this._staticsCoin = staticsCoin;
|
|
12
|
+
}
|
|
13
|
+
static createInstance(bitgo, staticsCoin) {
|
|
14
|
+
return new Tdot(bitgo, staticsCoin);
|
|
15
|
+
}
|
|
16
|
+
getChain() {
|
|
17
|
+
return 'tdot';
|
|
18
|
+
}
|
|
19
|
+
getFullName() {
|
|
20
|
+
return 'Testnet Polkadot';
|
|
21
|
+
}
|
|
22
|
+
getBaseFactor() {
|
|
23
|
+
return Math.pow(10, this._staticsCoin.decimalPlaces);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.Tdot = Tdot;
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGRvdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZG90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLCtCQUE0QjtBQUU1QixNQUFhLElBQUssU0FBUSxTQUFHO0lBRTNCLFlBQVksS0FBZ0IsRUFBRSxXQUF1QztRQUNuRSxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxrQkFBa0IsQ0FBQztJQUM1QixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2RCxDQUFDO0NBQ0Y7QUEzQkQsb0JBMkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4sIEJpdEdvQmFzZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgRG90IH0gZnJvbSAnLi9kb3QnO1xuXG5leHBvcnQgY2xhc3MgVGRvdCBleHRlbmRzIERvdCB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvLCBzdGF0aWNzQ29pbik7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBUZG90KGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAndGRvdCc7XG4gIH1cblxuICBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnVGVzdG5ldCBQb2xrYWRvdCc7XG4gIH1cblxuICBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucG93KDEwLCB0aGlzLl9zdGF0aWNzQ29pbi5kZWNpbWFsUGxhY2VzKTtcbiAgfVxufVxuIl19
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bitgo-beta/sdk-coin-dot",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "BitGo SDK coin library for Polkadot",
|
|
5
|
+
"main": "./dist/src/index.js",
|
|
6
|
+
"types": "./dist/src/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "yarn tsc --build --incremental --verbose .",
|
|
9
|
+
"fmt": "prettier --write .",
|
|
10
|
+
"check-fmt": "prettier --check .",
|
|
11
|
+
"clean": "rm -r ./dist",
|
|
12
|
+
"lint": "eslint --quiet .",
|
|
13
|
+
"prepare": "npm run build",
|
|
14
|
+
"test": "npm run coverage",
|
|
15
|
+
"coverage": "nyc -- npm run unit-test",
|
|
16
|
+
"unit-test": "mocha"
|
|
17
|
+
},
|
|
18
|
+
"author": "BitGo SDK Team <sdkteam@bitgo.com>",
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"engines": {
|
|
21
|
+
"node": ">=14 <17"
|
|
22
|
+
},
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://github.com/BitGo/BitGoJS.git",
|
|
26
|
+
"directory": "modules/sdk-coin-dot"
|
|
27
|
+
},
|
|
28
|
+
"lint-staged": {
|
|
29
|
+
"*.{js,ts}": [
|
|
30
|
+
"yarn prettier --write",
|
|
31
|
+
"yarn eslint --fix"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"publishConfig": {
|
|
35
|
+
"access": "public"
|
|
36
|
+
},
|
|
37
|
+
"nyc": {
|
|
38
|
+
"extension": [
|
|
39
|
+
".ts"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@bitgo-beta/sdk-core": "^1.1.0",
|
|
44
|
+
"@bitgo-beta/statics": "^7.0.0",
|
|
45
|
+
"@polkadot/api": "9.3.3",
|
|
46
|
+
"@polkadot/keyring": "^10.1.8",
|
|
47
|
+
"@polkadot/types": "9.3.3",
|
|
48
|
+
"@polkadot/util": "^10.1.8",
|
|
49
|
+
"@polkadot/util-crypto": "^10.1.8",
|
|
50
|
+
"@substrate/txwrapper-core": "3.2.2",
|
|
51
|
+
"@substrate/txwrapper-polkadot": "3.2.2",
|
|
52
|
+
"bignumber.js": "^9.0.0",
|
|
53
|
+
"bs58": "^4.0.1",
|
|
54
|
+
"hi-base32": "^0.5.1",
|
|
55
|
+
"joi": "^17.4.0",
|
|
56
|
+
"lodash": "^4.17.15",
|
|
57
|
+
"tweetnacl": "^1.0.3"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@bitgo-beta/sdk-api": "^1.1.0",
|
|
61
|
+
"@bitgo-beta/sdk-test": "^1.0.1",
|
|
62
|
+
"@types/lodash": "^4.14.151"
|
|
63
|
+
},
|
|
64
|
+
"gitHead": "3856d480cfc4866bdf8b3dae79804be4dbdb517a"
|
|
65
|
+
}
|