@bitgo-beta/sdk-coin-atom 1.0.1-beta.4 → 1.0.1-beta.41
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 +40 -0
- package/dist/src/atom.d.ts +7 -3
- package/dist/src/atom.d.ts.map +1 -1
- package/dist/src/atom.js +100 -11
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -2
- package/dist/src/lib/constants.d.ts +6 -0
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +9 -2
- package/dist/src/lib/iface.d.ts +34 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +3 -0
- package/dist/src/lib/index.d.ts +7 -1
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +25 -5
- package/dist/src/lib/keyPair.js +2 -2
- package/dist/src/lib/transaction.d.ts +52 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +171 -0
- package/dist/src/lib/transactionBuilder.d.ts +82 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +223 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +29 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +57 -0
- package/dist/src/lib/transferBuilder.d.ts +8 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +15 -0
- package/dist/src/lib/utils.d.ts +155 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +328 -0
- package/package.json +14 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transferBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,qBAAa,eAAgB,SAAQ,kBAAkB;gBACzC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransferBuilder = void 0;
|
|
4
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
5
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
6
|
+
class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
7
|
+
constructor(_coinConfig) {
|
|
8
|
+
super(_coinConfig);
|
|
9
|
+
}
|
|
10
|
+
get transactionType() {
|
|
11
|
+
return sdk_core_1.TransactionType.Send;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.TransferBuilder = TransferBuilder;
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkRBQTBEO0FBRTFELG1EQUF1RDtBQUV2RCxNQUFhLGVBQWdCLFNBQVEsdUNBQWtCO0lBQ3JELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFSRCwwQ0FRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zZmVyQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { BaseUtils, Signature } from '@bitgo-beta/sdk-core';
|
|
3
|
+
import { DecodedTxRaw } from '@cosmjs/proto-signing';
|
|
4
|
+
import { TxRaw } from 'cosmjs-types/cosmos/tx/v1beta1/tx';
|
|
5
|
+
import { AtomTransaction, FeeData, MessageData } from './iface';
|
|
6
|
+
export declare class Utils implements BaseUtils {
|
|
7
|
+
private registry;
|
|
8
|
+
/** @inheritdoc */
|
|
9
|
+
isValidBlockId(hash: string): boolean;
|
|
10
|
+
/** @inheritdoc */
|
|
11
|
+
isValidPrivateKey(key: string): boolean;
|
|
12
|
+
/** @inheritdoc */
|
|
13
|
+
isValidPublicKey(key: string): boolean;
|
|
14
|
+
/** @inheritdoc */
|
|
15
|
+
isValidSignature(signature: string): boolean;
|
|
16
|
+
/** @inheritdoc */
|
|
17
|
+
isValidTransactionId(txId: string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Checks if transaction hash is in valid black2b format
|
|
20
|
+
*/
|
|
21
|
+
validateBlake2b(hash: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Checks if raw transaction can be deserialized
|
|
24
|
+
*
|
|
25
|
+
* @param {string} rawTransaction - transaction in base64 string format
|
|
26
|
+
* @returns {boolean} - the validation result
|
|
27
|
+
*/
|
|
28
|
+
private isValidRawTransaction;
|
|
29
|
+
/**
|
|
30
|
+
* Check the raw transaction has a valid format in the blockchain context, throw otherwise.
|
|
31
|
+
*
|
|
32
|
+
* @param {string} rawTransaction - Transaction in base64 string format
|
|
33
|
+
*/
|
|
34
|
+
validateRawTransaction(rawTransaction: string | undefined): void;
|
|
35
|
+
/**
|
|
36
|
+
* Validates if the address matches with regex @see accountAddressRegex
|
|
37
|
+
*
|
|
38
|
+
* @param address
|
|
39
|
+
*/
|
|
40
|
+
isValidAddress(address: string): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Validates whether amounts are in range
|
|
43
|
+
*
|
|
44
|
+
* @param {number[]} amounts - the amounts to validate
|
|
45
|
+
* @returns {boolean} - the validation result
|
|
46
|
+
*/
|
|
47
|
+
isValidAmounts(amounts: number[]): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Validates whether amount is in range
|
|
50
|
+
*
|
|
51
|
+
* @param amount
|
|
52
|
+
* @returns
|
|
53
|
+
*/
|
|
54
|
+
isValidAmount(amount: number): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Decodes raw tx data into messages, signing info, and fee data
|
|
57
|
+
* @param txHex - raw base64 tx
|
|
58
|
+
*/
|
|
59
|
+
getDecodedTxFromRawBase64(txRaw: string): DecodedTxRaw;
|
|
60
|
+
/**
|
|
61
|
+
* Returns the array of messages in the body of the decoded transaction
|
|
62
|
+
* @param decodedTx
|
|
63
|
+
*/
|
|
64
|
+
private getEncodedMessagesFromDecodedTx;
|
|
65
|
+
/**
|
|
66
|
+
* Arranges a decoded message into our MessageData value interface
|
|
67
|
+
* @param decodedMessage
|
|
68
|
+
* @private
|
|
69
|
+
*/
|
|
70
|
+
private getMessageValueDataFromDecodedMessage;
|
|
71
|
+
/**
|
|
72
|
+
* Returns an array of MessageData[] from an encoded messages array
|
|
73
|
+
* @param encodedMessages
|
|
74
|
+
* @private
|
|
75
|
+
*/
|
|
76
|
+
private getMessageDataFromEncodedMessages;
|
|
77
|
+
/**
|
|
78
|
+
* Pulls the sequence number from a DecodedTxRaw AuthInfo property
|
|
79
|
+
* @param decodedTx
|
|
80
|
+
* @private
|
|
81
|
+
*/
|
|
82
|
+
getSequenceFromDecodedTx(decodedTx: DecodedTxRaw): number;
|
|
83
|
+
/**
|
|
84
|
+
* Pulls the typeUrl from the encoded message of a DecodedTxRaw
|
|
85
|
+
* @param decodedTx
|
|
86
|
+
*/
|
|
87
|
+
getTypeUrlFromDecodedTx(decodedTx: DecodedTxRaw): string;
|
|
88
|
+
/**
|
|
89
|
+
* Returns the fee data from the decoded transaction
|
|
90
|
+
* @param decodedTx
|
|
91
|
+
* @returns
|
|
92
|
+
*/
|
|
93
|
+
getGasBudgetFromDecodedTx(decodedTx: DecodedTxRaw): FeeData;
|
|
94
|
+
/**
|
|
95
|
+
* Returns the publicKey from the decoded transaction
|
|
96
|
+
* @param decodedTx
|
|
97
|
+
* @returns publicKey in hex format if it exists, undefined otherwise
|
|
98
|
+
*/
|
|
99
|
+
getPublicKeyFromDecodedTx(decodedTx: DecodedTxRaw): string | undefined;
|
|
100
|
+
/**
|
|
101
|
+
* Returns the array of MessageData[] from the decoded transaction
|
|
102
|
+
* @param decodedTx
|
|
103
|
+
*/
|
|
104
|
+
getMessageDataFromDecodedTx(decodedTx: DecodedTxRaw): MessageData[];
|
|
105
|
+
/**
|
|
106
|
+
* Creates a sign doc from an atom transaction @see AtomTransaction
|
|
107
|
+
*
|
|
108
|
+
* @Precondition atomTransaction.accountNumber and atomTransaction.chainId must be defined
|
|
109
|
+
* @param atomTransaction
|
|
110
|
+
* @returns
|
|
111
|
+
*/
|
|
112
|
+
createSignDocFromAtomTransaction(atomTransaction: AtomTransaction): import("cosmjs-types/cosmos/tx/v1beta1/tx").SignDoc;
|
|
113
|
+
/**
|
|
114
|
+
* Creates a txRaw from an atom transaction @see AtomTransaction
|
|
115
|
+
*
|
|
116
|
+
* @Precondition atomTransaction.publicKey must be defined
|
|
117
|
+
* @param atomTransaction
|
|
118
|
+
* @returns
|
|
119
|
+
*/
|
|
120
|
+
createTxRawFromAtomTransaction(atomTransaction: AtomTransaction): TxRaw;
|
|
121
|
+
/**
|
|
122
|
+
* Encodes a signature into a txRaw
|
|
123
|
+
*
|
|
124
|
+
* @param signature
|
|
125
|
+
* @param tx
|
|
126
|
+
* @returns
|
|
127
|
+
*/
|
|
128
|
+
createSignedTxRaw(signature: Signature, tx: {
|
|
129
|
+
bodyBytes: Uint8Array;
|
|
130
|
+
authInfoBytes: Uint8Array;
|
|
131
|
+
}): TxRaw;
|
|
132
|
+
/**
|
|
133
|
+
* Decodes a raw transaction into a DecodedTxRaw and checks if it has non empty signatures
|
|
134
|
+
*
|
|
135
|
+
* @param rawTransaction
|
|
136
|
+
* @returns
|
|
137
|
+
*/
|
|
138
|
+
isSignedRawTx(rawTransaction: string): boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Decodes a raw transaction into a DecodedTxRaw and returns the signer info in form of {pubKey, signature}
|
|
141
|
+
*
|
|
142
|
+
* @Assumption Only one signature is present in the raw transaction
|
|
143
|
+
* @param rawTransaction
|
|
144
|
+
* @returns
|
|
145
|
+
*/
|
|
146
|
+
getSignerInfoFromRawSignedTx(rawTransaction: string): {
|
|
147
|
+
pubKey: {
|
|
148
|
+
pub: string;
|
|
149
|
+
};
|
|
150
|
+
signature: Buffer;
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
declare const utils: Utils;
|
|
154
|
+
export default utils;
|
|
155
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAA8C,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGxG,OAAO,EACL,YAAY,EAQb,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAI1D,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGhE,qBAAa,KAAM,YAAW,SAAS;IACrC,OAAO,CAAC,QAAQ,CAA2C;IAE3D,kBAAkB;IAClB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,kBAAkB;IAClB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASvC,kBAAkB;IAClB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAStC,kBAAkB;IAClB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI5C,kBAAkB;IAClB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI3C;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAMtC;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IA8B7B;;;;OAIG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAShE;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO;IAS1C;;;;;OAKG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAQtC;;;OAGG;IACH,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY;IAItD;;;OAGG;IACH,OAAO,CAAC,+BAA+B;IAIvC;;;;OAIG;IACH,OAAO,CAAC,qCAAqC;IAQ7C;;;;OAIG;IACH,OAAO,CAAC,iCAAiC;IAWzC;;;;OAIG;IACH,wBAAwB,CAAC,SAAS,EAAE,YAAY,GAAG,MAAM;IAIzD;;;OAGG;IACH,uBAAuB,CAAC,SAAS,EAAE,YAAY,GAAG,MAAM;IAKxD;;;;OAIG;IACH,yBAAyB,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO;IAO3D;;;;OAIG;IACH,yBAAyB,CAAC,SAAS,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS;IAQtE;;;OAGG;IACH,2BAA2B,CAAC,SAAS,EAAE,YAAY,GAAG,WAAW,EAAE;IAKnE;;;;;;OAMG;IACH,gCAAgC,CAAC,eAAe,EAAE,eAAe;IAWjE;;;;;;OAMG;IACH,8BAA8B,CAAC,eAAe,EAAE,eAAe,GAAG,KAAK;IAwBvE;;;;;;OAMG;IACH,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,aAAa,EAAE,UAAU,CAAA;KAAE,GAAG,KAAK;IASxG;;;;;OAKG;IACH,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAQ9C;;;;;;OAMG;IACH,4BAA4B,CAAC,cAAc,EAAE,MAAM;;;;;;CAapD;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,328 @@
|
|
|
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 amino_1 = require("@cosmjs/amino");
|
|
9
|
+
const encoding_1 = require("@cosmjs/encoding");
|
|
10
|
+
const proto_signing_1 = require("@cosmjs/proto-signing");
|
|
11
|
+
const stargate_1 = require("@cosmjs/stargate");
|
|
12
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
13
|
+
const tx_1 = require("cosmjs-types/cosmos/tx/v1beta1/tx");
|
|
14
|
+
const constants_1 = require("./constants");
|
|
15
|
+
const keyPair_1 = require("./keyPair");
|
|
16
|
+
class Utils {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.registry = new proto_signing_1.Registry([...stargate_1.defaultRegistryTypes]);
|
|
19
|
+
}
|
|
20
|
+
/** @inheritdoc */
|
|
21
|
+
isValidBlockId(hash) {
|
|
22
|
+
return this.validateBlake2b(hash);
|
|
23
|
+
}
|
|
24
|
+
/** @inheritdoc */
|
|
25
|
+
isValidPrivateKey(key) {
|
|
26
|
+
try {
|
|
27
|
+
new keyPair_1.KeyPair({ prv: key });
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/** @inheritdoc */
|
|
35
|
+
isValidPublicKey(key) {
|
|
36
|
+
try {
|
|
37
|
+
new keyPair_1.KeyPair({ pub: key });
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** @inheritdoc */
|
|
45
|
+
isValidSignature(signature) {
|
|
46
|
+
throw new sdk_core_1.NotImplementedError('isValidSignature not implemented');
|
|
47
|
+
}
|
|
48
|
+
/** @inheritdoc */
|
|
49
|
+
isValidTransactionId(txId) {
|
|
50
|
+
return this.validateBlake2b(txId);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Checks if transaction hash is in valid black2b format
|
|
54
|
+
*/
|
|
55
|
+
validateBlake2b(hash) {
|
|
56
|
+
if ((hash === null || hash === void 0 ? void 0 : hash.length) !== 64) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
return hash.match(/^[a-zA-Z0-9]+$/) !== null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Checks if raw transaction can be deserialized
|
|
63
|
+
*
|
|
64
|
+
* @param {string} rawTransaction - transaction in base64 string format
|
|
65
|
+
* @returns {boolean} - the validation result
|
|
66
|
+
*/
|
|
67
|
+
isValidRawTransaction(rawTransaction) {
|
|
68
|
+
try {
|
|
69
|
+
const decodedTx = this.getDecodedTxFromRawBase64(rawTransaction);
|
|
70
|
+
if (decodedTx) {
|
|
71
|
+
if (!decodedTx.body) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
if (!decodedTx.body.messages || !decodedTx.body.messages.length) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
if (!decodedTx.authInfo) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
if (!decodedTx.authInfo.fee) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
if (!decodedTx.authInfo.signerInfos || !decodedTx.authInfo.signerInfos.length) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
if (!decodedTx.authInfo.signerInfos[0].publicKey) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
catch (e) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Check the raw transaction has a valid format in the blockchain context, throw otherwise.
|
|
99
|
+
*
|
|
100
|
+
* @param {string} rawTransaction - Transaction in base64 string format
|
|
101
|
+
*/
|
|
102
|
+
validateRawTransaction(rawTransaction) {
|
|
103
|
+
if (!rawTransaction) {
|
|
104
|
+
throw new sdk_core_1.ParseTransactionError('Invalid raw transaction: Undefined');
|
|
105
|
+
}
|
|
106
|
+
if (!this.isValidRawTransaction(rawTransaction)) {
|
|
107
|
+
throw new sdk_core_1.ParseTransactionError('Invalid raw transaction');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Validates if the address matches with regex @see accountAddressRegex
|
|
112
|
+
*
|
|
113
|
+
* @param address
|
|
114
|
+
*/
|
|
115
|
+
isValidAddress(address) {
|
|
116
|
+
return constants_1.accountAddressRegex.test(address);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Validates whether amounts are in range
|
|
120
|
+
*
|
|
121
|
+
* @param {number[]} amounts - the amounts to validate
|
|
122
|
+
* @returns {boolean} - the validation result
|
|
123
|
+
*/
|
|
124
|
+
isValidAmounts(amounts) {
|
|
125
|
+
for (const amount of amounts) {
|
|
126
|
+
if (!this.isValidAmount(amount)) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Validates whether amount is in range
|
|
134
|
+
*
|
|
135
|
+
* @param amount
|
|
136
|
+
* @returns
|
|
137
|
+
*/
|
|
138
|
+
isValidAmount(amount) {
|
|
139
|
+
const bigNumberAmount = new bignumber_js_1.default(amount);
|
|
140
|
+
if (!bigNumberAmount.isInteger() || bigNumberAmount.isLessThanOrEqualTo(0)) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Decodes raw tx data into messages, signing info, and fee data
|
|
147
|
+
* @param txHex - raw base64 tx
|
|
148
|
+
*/
|
|
149
|
+
getDecodedTxFromRawBase64(txRaw) {
|
|
150
|
+
return proto_signing_1.decodeTxRaw(encoding_1.fromBase64(txRaw));
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Returns the array of messages in the body of the decoded transaction
|
|
154
|
+
* @param decodedTx
|
|
155
|
+
*/
|
|
156
|
+
getEncodedMessagesFromDecodedTx(decodedTx) {
|
|
157
|
+
return decodedTx.body.messages;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Arranges a decoded message into our MessageData value interface
|
|
161
|
+
* @param decodedMessage
|
|
162
|
+
* @private
|
|
163
|
+
*/
|
|
164
|
+
getMessageValueDataFromDecodedMessage(decodedMessage) {
|
|
165
|
+
return {
|
|
166
|
+
fromAddress: decodedMessage.fromAddress,
|
|
167
|
+
toAddress: decodedMessage.toAddress,
|
|
168
|
+
amount: decodedMessage.amount,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Returns an array of MessageData[] from an encoded messages array
|
|
173
|
+
* @param encodedMessages
|
|
174
|
+
* @private
|
|
175
|
+
*/
|
|
176
|
+
getMessageDataFromEncodedMessages(encodedMessages) {
|
|
177
|
+
const messageData = [];
|
|
178
|
+
for (const message of encodedMessages) {
|
|
179
|
+
messageData.push({
|
|
180
|
+
value: this.getMessageValueDataFromDecodedMessage(this.registry.decode(message)),
|
|
181
|
+
typeUrl: message.typeUrl,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return messageData;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Pulls the sequence number from a DecodedTxRaw AuthInfo property
|
|
188
|
+
* @param decodedTx
|
|
189
|
+
* @private
|
|
190
|
+
*/
|
|
191
|
+
getSequenceFromDecodedTx(decodedTx) {
|
|
192
|
+
return Number(decodedTx.authInfo.signerInfos[0].sequence);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Pulls the typeUrl from the encoded message of a DecodedTxRaw
|
|
196
|
+
* @param decodedTx
|
|
197
|
+
*/
|
|
198
|
+
getTypeUrlFromDecodedTx(decodedTx) {
|
|
199
|
+
const encodedMessage = this.getEncodedMessagesFromDecodedTx(decodedTx)[0];
|
|
200
|
+
return encodedMessage.typeUrl;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Returns the fee data from the decoded transaction
|
|
204
|
+
* @param decodedTx
|
|
205
|
+
* @returns
|
|
206
|
+
*/
|
|
207
|
+
getGasBudgetFromDecodedTx(decodedTx) {
|
|
208
|
+
var _a, _b;
|
|
209
|
+
return {
|
|
210
|
+
amount: (_a = decodedTx.authInfo.fee) === null || _a === void 0 ? void 0 : _a.amount,
|
|
211
|
+
gasLimit: Number((_b = decodedTx.authInfo.fee) === null || _b === void 0 ? void 0 : _b.gasLimit),
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Returns the publicKey from the decoded transaction
|
|
216
|
+
* @param decodedTx
|
|
217
|
+
* @returns publicKey in hex format if it exists, undefined otherwise
|
|
218
|
+
*/
|
|
219
|
+
getPublicKeyFromDecodedTx(decodedTx) {
|
|
220
|
+
var _a, _b, _c, _d;
|
|
221
|
+
const publicKeyUInt8Array = (_b = (_a = decodedTx.authInfo.signerInfos) === null || _a === void 0 ? void 0 : _a[0].publicKey) === null || _b === void 0 ? void 0 : _b.value;
|
|
222
|
+
if (publicKeyUInt8Array) {
|
|
223
|
+
return encoding_1.toHex(encoding_1.fromBase64((_d = proto_signing_1.decodePubkey((_c = decodedTx.authInfo.signerInfos) === null || _c === void 0 ? void 0 : _c[0].publicKey)) === null || _d === void 0 ? void 0 : _d.value));
|
|
224
|
+
}
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Returns the array of MessageData[] from the decoded transaction
|
|
229
|
+
* @param decodedTx
|
|
230
|
+
*/
|
|
231
|
+
getMessageDataFromDecodedTx(decodedTx) {
|
|
232
|
+
const encodedMessages = this.getEncodedMessagesFromDecodedTx(decodedTx);
|
|
233
|
+
return this.getMessageDataFromEncodedMessages(encodedMessages);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Creates a sign doc from an atom transaction @see AtomTransaction
|
|
237
|
+
*
|
|
238
|
+
* @Precondition atomTransaction.accountNumber and atomTransaction.chainId must be defined
|
|
239
|
+
* @param atomTransaction
|
|
240
|
+
* @returns
|
|
241
|
+
*/
|
|
242
|
+
createSignDocFromAtomTransaction(atomTransaction) {
|
|
243
|
+
if (!atomTransaction.accountNumber) {
|
|
244
|
+
throw new Error('accountNumber is required to create a sign doc');
|
|
245
|
+
}
|
|
246
|
+
if (!atomTransaction.chainId) {
|
|
247
|
+
throw new Error('chainId is required to create a sign doc');
|
|
248
|
+
}
|
|
249
|
+
const txRaw = this.createTxRawFromAtomTransaction(atomTransaction);
|
|
250
|
+
return proto_signing_1.makeSignDoc(txRaw.bodyBytes, txRaw.authInfoBytes, atomTransaction.chainId, atomTransaction.accountNumber);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Creates a txRaw from an atom transaction @see AtomTransaction
|
|
254
|
+
*
|
|
255
|
+
* @Precondition atomTransaction.publicKey must be defined
|
|
256
|
+
* @param atomTransaction
|
|
257
|
+
* @returns
|
|
258
|
+
*/
|
|
259
|
+
createTxRawFromAtomTransaction(atomTransaction) {
|
|
260
|
+
if (!atomTransaction.publicKey) {
|
|
261
|
+
throw new Error('publicKey is required to create a txRaw');
|
|
262
|
+
}
|
|
263
|
+
const encodedPublicKey = proto_signing_1.encodePubkey(amino_1.encodeSecp256k1Pubkey(encoding_1.fromHex(atomTransaction.publicKey)));
|
|
264
|
+
const txBodyValue = {
|
|
265
|
+
messages: atomTransaction.sendMessages,
|
|
266
|
+
};
|
|
267
|
+
const txBodyBytes = this.registry.encodeTxBody(txBodyValue);
|
|
268
|
+
const sequence = atomTransaction.sequence;
|
|
269
|
+
const authInfoBytes = proto_signing_1.makeAuthInfoBytes([{ pubkey: encodedPublicKey, sequence }], atomTransaction.gasBudget.amount, atomTransaction.gasBudget.gasLimit, undefined, undefined, undefined);
|
|
270
|
+
return tx_1.TxRaw.fromPartial({
|
|
271
|
+
bodyBytes: txBodyBytes,
|
|
272
|
+
authInfoBytes: authInfoBytes,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Encodes a signature into a txRaw
|
|
277
|
+
*
|
|
278
|
+
* @param signature
|
|
279
|
+
* @param tx
|
|
280
|
+
* @returns
|
|
281
|
+
*/
|
|
282
|
+
createSignedTxRaw(signature, tx) {
|
|
283
|
+
const stdSignature = amino_1.encodeSecp256k1Signature(encoding_1.fromHex(signature.publicKey.pub), signature.signature);
|
|
284
|
+
return tx_1.TxRaw.fromPartial({
|
|
285
|
+
bodyBytes: tx.bodyBytes,
|
|
286
|
+
authInfoBytes: tx.authInfoBytes,
|
|
287
|
+
signatures: [encoding_1.fromBase64(stdSignature.signature)],
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Decodes a raw transaction into a DecodedTxRaw and checks if it has non empty signatures
|
|
292
|
+
*
|
|
293
|
+
* @param rawTransaction
|
|
294
|
+
* @returns
|
|
295
|
+
*/
|
|
296
|
+
isSignedRawTx(rawTransaction) {
|
|
297
|
+
const decodedTx = this.getDecodedTxFromRawBase64(rawTransaction);
|
|
298
|
+
if (decodedTx.signatures.length > 0) {
|
|
299
|
+
return true;
|
|
300
|
+
}
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Decodes a raw transaction into a DecodedTxRaw and returns the signer info in form of {pubKey, signature}
|
|
305
|
+
*
|
|
306
|
+
* @Assumption Only one signature is present in the raw transaction
|
|
307
|
+
* @param rawTransaction
|
|
308
|
+
* @returns
|
|
309
|
+
*/
|
|
310
|
+
getSignerInfoFromRawSignedTx(rawTransaction) {
|
|
311
|
+
var _a;
|
|
312
|
+
if (!this.isSignedRawTx(rawTransaction)) {
|
|
313
|
+
throw new Error('getSignerInfoFromRawTx failed, raw tx is not signed');
|
|
314
|
+
}
|
|
315
|
+
const decodedTx = this.getDecodedTxFromRawBase64(rawTransaction);
|
|
316
|
+
const aminoPubKey = decodedTx.authInfo.signerInfos[0].publicKey;
|
|
317
|
+
const decodedPubKeyHex = encoding_1.toHex(encoding_1.fromBase64((_a = proto_signing_1.decodePubkey(aminoPubKey)) === null || _a === void 0 ? void 0 : _a.value));
|
|
318
|
+
const pubKey = {
|
|
319
|
+
pub: decodedPubKeyHex,
|
|
320
|
+
};
|
|
321
|
+
const signature = Buffer.from(decodedTx.signatures[0]);
|
|
322
|
+
return { pubKey, signature };
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
exports.Utils = Utils;
|
|
326
|
+
const utils = new Utils();
|
|
327
|
+
exports.default = utils;
|
|
328
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUF3RztBQUN4Ryx5Q0FBZ0Y7QUFDaEYsK0NBQThEO0FBQzlELHlEQVMrQjtBQUMvQiwrQ0FBOEQ7QUFDOUQsZ0VBQXFDO0FBQ3JDLDBEQUEwRDtBQUcxRCwyQ0FBa0Q7QUFFbEQsdUNBQW9DO0FBRXBDLE1BQWEsS0FBSztJQUFsQjtRQUNVLGFBQVEsR0FBRyxJQUFJLHdCQUFRLENBQUMsQ0FBQyxHQUFHLCtCQUFvQixDQUFDLENBQUMsQ0FBQztJQTBVN0QsQ0FBQztJQXhVQyxrQkFBa0I7SUFDbEIsY0FBYyxDQUFDLElBQVk7UUFDekIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsaUJBQWlCLENBQUMsR0FBVztRQUMzQixJQUFJO1lBQ0YsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUFDLE1BQU07WUFDTixPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixnQkFBZ0IsQ0FBQyxHQUFXO1FBQzFCLElBQUk7WUFDRixJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQUMsTUFBTTtZQUNOLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGdCQUFnQixDQUFDLFNBQWlCO1FBQ2hDLE1BQU0sSUFBSSw4QkFBbUIsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsb0JBQW9CLENBQUMsSUFBWTtRQUMvQixP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Q0FBQyxDQUFDO1FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBM1VELHNCQTJVQztBQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFFMUIsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZVV0aWxzLCBOb3RJbXBsZW1lbnRlZEVycm9yLCBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsIFNpZ25hdHVyZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGVuY29kZVNlY3AyNTZrMVB1YmtleSwgZW5jb2RlU2VjcDI1NmsxU2lnbmF0dXJlIH0gZnJvbSAnQGNvc21qcy9hbWlubyc7XG5pbXBvcnQgeyBmcm9tQmFzZTY0LCBmcm9tSGV4LCB0b0hleCB9IGZyb20gJ0Bjb3NtanMvZW5jb2RpbmcnO1xuaW1wb3J0IHtcbiAgRGVjb2RlZFR4UmF3LFxuICBkZWNvZGVQdWJrZXksXG4gIGRlY29kZVR4UmF3LFxuICBFbmNvZGVPYmplY3QsXG4gIGVuY29kZVB1YmtleSxcbiAgbWFrZUF1dGhJbmZvQnl0ZXMsXG4gIG1ha2VTaWduRG9jLFxuICBSZWdpc3RyeSxcbn0gZnJvbSAnQGNvc21qcy9wcm90by1zaWduaW5nJztcbmltcG9ydCB7IENvaW4sIGRlZmF1bHRSZWdpc3RyeVR5cGVzIH0gZnJvbSAnQGNvc21qcy9zdGFyZ2F0ZSc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBUeFJhdyB9IGZyb20gJ2Nvc21qcy10eXBlcy9jb3Ntb3MvdHgvdjFiZXRhMS90eCc7XG5pbXBvcnQgeyBBbnkgfSBmcm9tICdjb3NtanMtdHlwZXMvZ29vZ2xlL3Byb3RvYnVmL2FueSc7XG5cbmltcG9ydCB7IGFjY291bnRBZGRyZXNzUmVnZXggfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBdG9tVHJhbnNhY3Rpb24sIEZlZURhdGEsIE1lc3NhZ2VEYXRhIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcblxuZXhwb3J0IGNsYXNzIFV0aWxzIGltcGxlbWVudHMgQmFzZVV0aWxzIHtcbiAgcHJpdmF0ZSByZWdpc3RyeSA9IG5ldyBSZWdpc3RyeShbLi4uZGVmYXVsdFJlZ2lzdHJ5VHlwZXNdKTtcblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZEJsb2NrSWQoaGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVCbGFrZTJiKGhhc2gpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRQcml2YXRlS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFB1YmxpY0tleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHB1Yjoga2V5IH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcignaXNWYWxpZFNpZ25hdHVyZSBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUJsYWtlMmIodHhJZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRyYW5zYWN0aW9uIGhhc2ggaXMgaW4gdmFsaWQgYmxhY2syYiBmb3JtYXRcbiAgICovXG4gIHZhbGlkYXRlQmxha2UyYihoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoaGFzaD8ubGVuZ3RoICE9PSA2NCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gaGFzaC5tYXRjaCgvXlthLXpBLVowLTldKyQvKSAhPT0gbnVsbDtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIGlmIHJhdyB0cmFuc2FjdGlvbiBjYW4gYmUgZGVzZXJpYWxpemVkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByYXdUcmFuc2FjdGlvbiAtIHRyYW5zYWN0aW9uIGluIGJhc2U2NCBzdHJpbmcgZm9ybWF0XG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICAgKi9cbiAgcHJpdmF0ZSBpc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkVHg6IERlY29kZWRUeFJhdyA9IHRoaXMuZ2V0RGVjb2RlZFR4RnJvbVJhd0Jhc2U2NChyYXdUcmFuc2FjdGlvbik7XG4gICAgICBpZiAoZGVjb2RlZFR4KSB7XG4gICAgICAgIGlmICghZGVjb2RlZFR4LmJvZHkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZWNvZGVkVHguYm9keS5tZXNzYWdlcyB8fCAhZGVjb2RlZFR4LmJvZHkubWVzc2FnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVjb2RlZFR4LmF1dGhJbmZvKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVjb2RlZFR4LmF1dGhJbmZvLmZlZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlY29kZWRUeC5hdXRoSW5mby5zaWduZXJJbmZvcyB8fCAhZGVjb2RlZFR4LmF1dGhJbmZvLnNpZ25lckluZm9zLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlY29kZWRUeC5hdXRoSW5mby5zaWduZXJJbmZvc1swXS5wdWJsaWNLZXkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgcmF3IHRyYW5zYWN0aW9uIGhhcyBhIHZhbGlkIGZvcm1hdCBpbiB0aGUgYmxvY2tjaGFpbiBjb250ZXh0LCB0aHJvdyBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByYXdUcmFuc2FjdGlvbiAtIFRyYW5zYWN0aW9uIGluIGJhc2U2NCBzdHJpbmcgIGZvcm1hdFxuICAgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKCFyYXdUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCByYXcgdHJhbnNhY3Rpb246IFVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCByYXcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGlmIHRoZSBhZGRyZXNzIG1hdGNoZXMgd2l0aCByZWdleCBAc2VlIGFjY291bnRBZGRyZXNzUmVnZXhcbiAgICpcbiAgICogQHBhcmFtIGFkZHJlc3NcbiAgICovXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhY2NvdW50QWRkcmVzc1JlZ2V4LnRlc3QoYWRkcmVzcyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHdoZXRoZXIgYW1vdW50cyBhcmUgaW4gcmFuZ2VcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gYW1vdW50cyAtIHRoZSBhbW91bnRzIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICAgKi9cbiAgaXNWYWxpZEFtb3VudHMoYW1vdW50czogbnVtYmVyW10pOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IGFtb3VudCBvZiBhbW91bnRzKSB7XG4gICAgICBpZiAoIXRoaXMuaXNWYWxpZEFtb3VudChhbW91bnQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHdoZXRoZXIgYW1vdW50IGlzIGluIHJhbmdlXG4gICAqXG4gICAqIEBwYXJhbSBhbW91bnRcbiAgICogQHJldHVybnNcbiAgICovXG4gIGlzVmFsaWRBbW91bnQoYW1vdW50OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBiaWdOdW1iZXJBbW91bnQgPSBuZXcgQmlnTnVtYmVyKGFtb3VudCk7XG4gICAgaWYgKCFiaWdOdW1iZXJBbW91bnQuaXNJbnRlZ2VyKCkgfHwgYmlnTnVtYmVyQW1vdW50LmlzTGVzc1RoYW5PckVxdWFsVG8oMCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyByYXcgdHggZGF0YSBpbnRvIG1lc3NhZ2VzLCBzaWduaW5nIGluZm8sIGFuZCBmZWUgZGF0YVxuICAgKiBAcGFyYW0gdHhIZXggLSByYXcgYmFzZTY0IHR4XG4gICAqL1xuICBnZXREZWNvZGVkVHhGcm9tUmF3QmFzZTY0KHR4UmF3OiBzdHJpbmcpOiBEZWNvZGVkVHhSYXcge1xuICAgIHJldHVybiBkZWNvZGVUeFJhdyhmcm9tQmFzZTY0KHR4UmF3KSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXJyYXkgb2YgbWVzc2FnZXMgaW4gdGhlIGJvZHkgb2YgdGhlIGRlY29kZWQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIGRlY29kZWRUeFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbmNvZGVkTWVzc2FnZXNGcm9tRGVjb2RlZFR4KGRlY29kZWRUeDogRGVjb2RlZFR4UmF3KTogRW5jb2RlT2JqZWN0W10ge1xuICAgIHJldHVybiBkZWNvZGVkVHguYm9keS5tZXNzYWdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcnJhbmdlcyBhIGRlY29kZWQgbWVzc2FnZSBpbnRvIG91ciBNZXNzYWdlRGF0YSB2YWx1ZSBpbnRlcmZhY2VcbiAgICogQHBhcmFtIGRlY29kZWRNZXNzYWdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGdldE1lc3NhZ2VWYWx1ZURhdGFGcm9tRGVjb2RlZE1lc3NhZ2UoZGVjb2RlZE1lc3NhZ2U6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb21BZGRyZXNzOiBkZWNvZGVkTWVzc2FnZS5mcm9tQWRkcmVzcyxcbiAgICAgIHRvQWRkcmVzczogZGVjb2RlZE1lc3NhZ2UudG9BZGRyZXNzLFxuICAgICAgYW1vdW50OiBkZWNvZGVkTWVzc2FnZS5hbW91bnQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIE1lc3NhZ2VEYXRhW10gZnJvbSBhbiBlbmNvZGVkIG1lc3NhZ2VzIGFycmF5XG4gICAqIEBwYXJhbSBlbmNvZGVkTWVzc2FnZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZ2V0TWVzc2FnZURhdGFGcm9tRW5jb2RlZE1lc3NhZ2VzKGVuY29kZWRNZXNzYWdlczogRW5jb2RlT2JqZWN0W10pOiBNZXNzYWdlRGF0YVtdIHtcbiAgICBjb25zdCBtZXNzYWdlRGF0YTogTWVzc2FnZURhdGFbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBlbmNvZGVkTWVzc2FnZXMpIHtcbiAgICAgIG1lc3NhZ2VEYXRhLnB1c2goe1xuICAgICAgICB2YWx1ZTogdGhpcy5nZXRNZXNzYWdlVmFsdWVEYXRhRnJvbURlY29kZWRNZXNzYWdlKHRoaXMucmVnaXN0cnkuZGVjb2RlKG1lc3NhZ2UpKSxcbiAgICAgICAgdHlwZVVybDogbWVzc2FnZS50eXBlVXJsLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWxscyB0aGUgc2VxdWVuY2UgbnVtYmVyIGZyb20gYSBEZWNvZGVkVHhSYXcgQXV0aEluZm8gcHJvcGVydHlcbiAgICogQHBhcmFtIGRlY29kZWRUeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0U2VxdWVuY2VGcm9tRGVjb2RlZFR4KGRlY29kZWRUeDogRGVjb2RlZFR4UmF3KTogbnVtYmVyIHtcbiAgICByZXR1cm4gTnVtYmVyKGRlY29kZWRUeC5hdXRoSW5mby5zaWduZXJJbmZvc1swXS5zZXF1ZW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogUHVsbHMgdGhlIHR5cGVVcmwgZnJvbSB0aGUgZW5jb2RlZCBtZXNzYWdlIG9mIGEgRGVjb2RlZFR4UmF3XG4gICAqIEBwYXJhbSBkZWNvZGVkVHhcbiAgICovXG4gIGdldFR5cGVVcmxGcm9tRGVjb2RlZFR4KGRlY29kZWRUeDogRGVjb2RlZFR4UmF3KTogc3RyaW5nIHtcbiAgICBjb25zdCBlbmNvZGVkTWVzc2FnZSA9IHRoaXMuZ2V0RW5jb2RlZE1lc3NhZ2VzRnJvbURlY29kZWRUeChkZWNvZGVkVHgpWzBdO1xuICAgIHJldHVybiBlbmNvZGVkTWVzc2FnZS50eXBlVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZlZSBkYXRhIGZyb20gdGhlIGRlY29kZWQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIGRlY29kZWRUeFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0R2FzQnVkZ2V0RnJvbURlY29kZWRUeChkZWNvZGVkVHg6IERlY29kZWRUeFJhdyk6IEZlZURhdGEge1xuICAgIHJldHVybiB7XG4gICAgICBhbW91bnQ6IGRlY29kZWRUeC5hdXRoSW5mby5mZWU/LmFtb3VudCBhcyBDb2luW10sXG4gICAgICBnYXNMaW1pdDogTnVtYmVyKGRlY29kZWRUeC5hdXRoSW5mby5mZWU/Lmdhc0xpbWl0KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHB1YmxpY0tleSBmcm9tIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBkZWNvZGVkVHhcbiAgICogQHJldHVybnMgcHVibGljS2V5IGluIGhleCBmb3JtYXQgaWYgaXQgZXhpc3RzLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gICAqL1xuICBnZXRQdWJsaWNLZXlGcm9tRGVjb2RlZFR4KGRlY29kZWRUeDogRGVjb2RlZFR4UmF3KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwdWJsaWNLZXlVSW50OEFycmF5ID0gZGVjb2RlZFR4LmF1dGhJbmZvLnNpZ25lckluZm9zPy5bMF0ucHVibGljS2V5Py52YWx1ZTtcbiAgICBpZiAocHVibGljS2V5VUludDhBcnJheSkge1xuICAgICAgcmV0dXJuIHRvSGV4KGZyb21CYXNlNjQoZGVjb2RlUHVia2V5KGRlY29kZWRUeC5hdXRoSW5mby5zaWduZXJJbmZvcz8uWzBdLnB1YmxpY0tleSk/LnZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXJyYXkgb2YgTWVzc2FnZURhdGFbXSBmcm9tIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBkZWNvZGVkVHhcbiAgICovXG4gIGdldE1lc3NhZ2VEYXRhRnJvbURlY29kZWRUeChkZWNvZGVkVHg6IERlY29kZWRUeFJhdyk6IE1lc3NhZ2VEYXRhW10ge1xuICAgIGNvbnN0IGVuY29kZWRNZXNzYWdlcyA9IHRoaXMuZ2V0RW5jb2RlZE1lc3NhZ2VzRnJvbURlY29kZWRUeChkZWNvZGVkVHgpO1xuICAgIHJldHVybiB0aGlzLmdldE1lc3NhZ2VEYXRhRnJvbUVuY29kZWRNZXNzYWdlcyhlbmNvZGVkTWVzc2FnZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzaWduIGRvYyBmcm9tIGFuIGF0b20gdHJhbnNhY3Rpb24gQHNlZSBBdG9tVHJhbnNhY3Rpb25cbiAgICpcbiAgICogQFByZWNvbmRpdGlvbiBhdG9tVHJhbnNhY3Rpb24uYWNjb3VudE51bWJlciBhbmQgYXRvbVRyYW5zYWN0aW9uLmNoYWluSWQgbXVzdCBiZSBkZWZpbmVkXG4gICAqIEBwYXJhbSBhdG9tVHJhbnNhY3Rpb25cbiAgICogQHJldHVybnNcbiAgICovXG4gIGNyZWF0ZVNpZ25Eb2NGcm9tQXRvbVRyYW5zYWN0aW9uKGF0b21UcmFuc2FjdGlvbjogQXRvbVRyYW5zYWN0aW9uKSB7XG4gICAgaWYgKCFhdG9tVHJhbnNhY3Rpb24uYWNjb3VudE51bWJlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhY2NvdW50TnVtYmVyIGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIHNpZ24gZG9jJyk7XG4gICAgfVxuICAgIGlmICghYXRvbVRyYW5zYWN0aW9uLmNoYWluSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2hhaW5JZCBpcyByZXF1aXJlZCB0byBjcmVhdGUgYSBzaWduIGRvYycpO1xuICAgIH1cbiAgICBjb25zdCB0eFJhdyA9IHRoaXMuY3JlYXRlVHhSYXdGcm9tQXRvbVRyYW5zYWN0aW9uKGF0b21UcmFuc2FjdGlvbik7XG4gICAgcmV0dXJuIG1ha2VTaWduRG9jKHR4UmF3LmJvZHlCeXRlcywgdHhSYXcuYXV0aEluZm9CeXRlcywgYXRvbVRyYW5zYWN0aW9uLmNoYWluSWQsIGF0b21UcmFuc2FjdGlvbi5hY2NvdW50TnVtYmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdHhSYXcgZnJvbSBhbiBhdG9tIHRyYW5zYWN0aW9uIEBzZWUgQXRvbVRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBQcmVjb25kaXRpb24gYXRvbVRyYW5zYWN0aW9uLnB1YmxpY0tleSBtdXN0IGJlIGRlZmluZWRcbiAgICogQHBhcmFtIGF0b21UcmFuc2FjdGlvblxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgY3JlYXRlVHhSYXdGcm9tQXRvbVRyYW5zYWN0aW9uKGF0b21UcmFuc2FjdGlvbjogQXRvbVRyYW5zYWN0aW9uKTogVHhSYXcge1xuICAgIGlmICghYXRvbVRyYW5zYWN0aW9uLnB1YmxpY0tleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwdWJsaWNLZXkgaXMgcmVxdWlyZWQgdG8gY3JlYXRlIGEgdHhSYXcnKTtcbiAgICB9XG4gICAgY29uc3QgZW5jb2RlZFB1YmxpY0tleTogQW55ID0gZW5jb2RlUHVia2V5KGVuY29kZVNlY3AyNTZrMVB1YmtleShmcm9tSGV4KGF0b21UcmFuc2FjdGlvbi5wdWJsaWNLZXkpKSk7XG4gICAgY29uc3QgdHhCb2R5VmFsdWUgPSB7XG4gICAgICBtZXNzYWdlczogYXRvbVRyYW5zYWN0aW9uLnNlbmRNZXNzYWdlcyBhcyB1bmtub3duIGFzIEFueVtdLFxuICAgIH07XG4gICAgY29uc3QgdHhCb2R5Qnl0ZXMgPSB0aGlzLnJlZ2lzdHJ5LmVuY29kZVR4Qm9keSh0eEJvZHlWYWx1ZSk7XG4gICAgY29uc3Qgc2VxdWVuY2UgPSBhdG9tVHJhbnNhY3Rpb24uc2VxdWVuY2U7XG4gICAgY29uc3QgYXV0aEluZm9CeXRlcyA9IG1ha2VBdXRoSW5mb0J5dGVzKFxuICAgICAgW3sgcHVia2V5OiBlbmNvZGVkUHVibGljS2V5LCBzZXF1ZW5jZSB9XSxcbiAgICAgIGF0b21UcmFuc2FjdGlvbi5nYXNCdWRnZXQuYW1vdW50LFxuICAgICAgYXRvbVRyYW5zYWN0aW9uLmdhc0J1ZGdldC5nYXNMaW1pdCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZFxuICAgICk7XG4gICAgcmV0dXJuIFR4UmF3LmZyb21QYXJ0aWFsKHtcbiAgICAgIGJvZHlCeXRlczogdHhCb2R5Qnl0ZXMsXG4gICAgICBhdXRoSW5mb0J5dGVzOiBhdXRoSW5mb0J5dGVzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZXMgYSBzaWduYXR1cmUgaW50byBhIHR4UmF3XG4gICAqXG4gICAqIEBwYXJhbSBzaWduYXR1cmVcbiAgICogQHBhcmFtIHR4XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBjcmVhdGVTaWduZWRUeFJhdyhzaWduYXR1cmU6IFNpZ25hdHVyZSwgdHg6IHsgYm9keUJ5dGVzOiBVaW50OEFycmF5OyBhdXRoSW5mb0J5dGVzOiBVaW50OEFycmF5IH0pOiBUeFJhdyB7XG4gICAgY29uc3Qgc3RkU2lnbmF0dXJlID0gZW5jb2RlU2VjcDI1NmsxU2lnbmF0dXJlKGZyb21IZXgoc2lnbmF0dXJlLnB1YmxpY0tleS5wdWIpLCBzaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICByZXR1cm4gVHhSYXcuZnJvbVBhcnRpYWwoe1xuICAgICAgYm9keUJ5dGVzOiB0eC5ib2R5Qnl0ZXMsXG4gICAgICBhdXRoSW5mb0J5dGVzOiB0eC5hdXRoSW5mb0J5dGVzLFxuICAgICAgc2lnbmF0dXJlczogW2Zyb21CYXNlNjQoc3RkU2lnbmF0dXJlLnNpZ25hdHVyZSldLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY29kZXMgYSByYXcgdHJhbnNhY3Rpb24gaW50byBhIERlY29kZWRUeFJhdyBhbmQgY2hlY2tzIGlmIGl0IGhhcyBub24gZW1wdHkgc2lnbmF0dXJlc1xuICAgKlxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb25cbiAgICogQHJldHVybnNcbiAgICovXG4gIGlzU2lnbmVkUmF3VHgocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRlY29kZWRUeCA9IHRoaXMuZ2V0RGVjb2RlZFR4RnJvbVJhd0Jhc2U2NChyYXdUcmFuc2FjdGlvbik7XG4gICAgaWYgKGRlY29kZWRUeC5zaWduYXR1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBhIHJhdyB0cmFuc2FjdGlvbiBpbnRvIGEgRGVjb2RlZFR4UmF3IGFuZCByZXR1cm5zIHRoZSBzaWduZXIgaW5mbyBpbiBmb3JtIG9mIHtwdWJLZXksIHNpZ25hdHVyZX1cbiAgICpcbiAgICogQEFzc3VtcHRpb24gT25seSBvbmUgc2lnbmF0dXJlIGlzIHByZXNlbnQgaW4gdGhlIHJhdyB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb25cbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFNpZ25lckluZm9Gcm9tUmF3U2lnbmVkVHgocmF3VHJhbnNhY3Rpb246IHN0cmluZykge1xuICAgIGlmICghdGhpcy5pc1NpZ25lZFJhd1R4KHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRTaWduZXJJbmZvRnJvbVJhd1R4IGZhaWxlZCwgcmF3IHR4IGlzIG5vdCBzaWduZWQnKTtcbiAgICB9XG4gICAgY29uc3QgZGVjb2RlZFR4ID0gdGhpcy5nZXREZWNvZGVkVHhGcm9tUmF3QmFzZTY0KHJhd1RyYW5zYWN0aW9uKTtcbiAgICBjb25zdCBhbWlub1B1YktleSA9IGRlY29kZWRUeC5hdXRoSW5mby5zaWduZXJJbmZvc1swXS5wdWJsaWNLZXkgYXMgQW55O1xuICAgIGNvbnN0IGRlY29kZWRQdWJLZXlIZXggPSB0b0hleChmcm9tQmFzZTY0KGRlY29kZVB1YmtleShhbWlub1B1YktleSk/LnZhbHVlKSk7XG4gICAgY29uc3QgcHViS2V5ID0ge1xuICAgICAgcHViOiBkZWNvZGVkUHViS2V5SGV4LFxuICAgIH07XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gQnVmZmVyLmZyb20oZGVjb2RlZFR4LnNpZ25hdHVyZXNbMF0pO1xuICAgIHJldHVybiB7IHB1YktleSwgc2lnbmF0dXJlIH07XG4gIH1cbn1cblxuY29uc3QgdXRpbHMgPSBuZXcgVXRpbHMoKTtcblxuZXhwb3J0IGRlZmF1bHQgdXRpbHM7XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo-beta/sdk-coin-atom",
|
|
3
|
-
"version": "1.0.1-beta.
|
|
3
|
+
"version": "1.0.1-beta.41",
|
|
4
4
|
"description": "BitGo SDK coin library for Cosmos",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -40,15 +40,21 @@
|
|
|
40
40
|
]
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@bitgo-beta/sdk-core": "1.1.1-beta.
|
|
44
|
-
"@bitgo-beta/statics": "7.0.1-beta.
|
|
45
|
-
"@bitgo-beta/utxo-lib": "2.4.2-beta.
|
|
43
|
+
"@bitgo-beta/sdk-core": "1.1.1-beta.163",
|
|
44
|
+
"@bitgo-beta/statics": "7.0.1-beta.163",
|
|
45
|
+
"@bitgo-beta/utxo-lib": "2.4.2-beta.163",
|
|
46
46
|
"@cosmjs/amino": "^0.29.5",
|
|
47
|
-
"@cosmjs/encoding": "^0.29.5"
|
|
47
|
+
"@cosmjs/encoding": "^0.29.5",
|
|
48
|
+
"@cosmjs/proto-signing": "^0.29.5",
|
|
49
|
+
"@cosmjs/stargate": "^0.29.5",
|
|
50
|
+
"bignumber.js": "^9.1.1",
|
|
51
|
+
"cosmjs-types": "^0.6.1",
|
|
52
|
+
"lodash": "^4.17.21"
|
|
48
53
|
},
|
|
49
54
|
"devDependencies": {
|
|
50
|
-
"@bitgo-beta/sdk-api": "1.1.1-beta.
|
|
51
|
-
"@bitgo-beta/sdk-test": "^1.2.
|
|
55
|
+
"@bitgo-beta/sdk-api": "1.1.1-beta.163",
|
|
56
|
+
"@bitgo-beta/sdk-test": "^1.2.15",
|
|
57
|
+
"@types/lodash": "^4.14.183"
|
|
52
58
|
},
|
|
53
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "302bac4872efd799253b783a9e64569f82d9a7a1"
|
|
54
60
|
}
|