@bitgo/sdk-coin-atom 1.1.1 → 2.0.0
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 +30 -0
- 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 +4 -0
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +7 -2
- package/dist/src/lib/iface.d.ts +31 -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 +46 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +161 -0
- package/dist/src/lib/transactionBuilder.d.ts +75 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +202 -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 +59 -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 +92 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +213 -0
- package/package.json +12 -8
|
@@ -0,0 +1,213 @@
|
|
|
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/sdk-core");
|
|
8
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
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 amino_1 = require("@cosmjs/amino");
|
|
13
|
+
const tx_1 = require("cosmjs-types/cosmos/tx/v1beta1/tx");
|
|
14
|
+
class Utils {
|
|
15
|
+
/** @inheritdoc */
|
|
16
|
+
isValidBlockId(hash) {
|
|
17
|
+
return this.validateBlake2b(hash);
|
|
18
|
+
}
|
|
19
|
+
/** @inheritdoc */
|
|
20
|
+
isValidPrivateKey(key) {
|
|
21
|
+
throw new Error('Method not implemented.');
|
|
22
|
+
}
|
|
23
|
+
/** @inheritdoc */
|
|
24
|
+
isValidPublicKey(key) {
|
|
25
|
+
throw new Error('Method not implemented.');
|
|
26
|
+
}
|
|
27
|
+
/** @inheritdoc */
|
|
28
|
+
isValidSignature(signature) {
|
|
29
|
+
throw new Error('Method not implemented.');
|
|
30
|
+
}
|
|
31
|
+
/** @inheritdoc */
|
|
32
|
+
isValidTransactionId(txId) {
|
|
33
|
+
return this.validateBlake2b(txId);
|
|
34
|
+
}
|
|
35
|
+
validateBlake2b(hash) {
|
|
36
|
+
if ((hash === null || hash === void 0 ? void 0 : hash.length) !== 64) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
return hash.match(/^[a-zA-Z0-9]+$/) !== null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Checks if raw transaction can be deserialized
|
|
43
|
+
*
|
|
44
|
+
* @param {string} rawTransaction - transaction in base64 string format
|
|
45
|
+
* @returns {boolean} - the validation result
|
|
46
|
+
*/
|
|
47
|
+
isValidRawTransaction(rawTransaction) {
|
|
48
|
+
throw new Error('Method not implemented.');
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Check the raw transaction has a valid format in the blockchain context, throw otherwise.
|
|
52
|
+
*
|
|
53
|
+
* @param {string} rawTransaction - Transaction in base64 string format
|
|
54
|
+
*/
|
|
55
|
+
validateRawTransaction(rawTransaction) {
|
|
56
|
+
if (!rawTransaction) {
|
|
57
|
+
throw new sdk_core_1.ParseTransactionError('Invalid raw transaction: Undefined');
|
|
58
|
+
}
|
|
59
|
+
if (!this.isValidRawTransaction(rawTransaction)) {
|
|
60
|
+
throw new sdk_core_1.ParseTransactionError('Invalid raw transaction');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
isValidAddress(address) {
|
|
64
|
+
const allowed_chars = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';
|
|
65
|
+
const atomRegex = '^(cosmos)1([' + allowed_chars + ']+)$';
|
|
66
|
+
const re = new RegExp(atomRegex);
|
|
67
|
+
return re.test(address);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Returns whether or not the string is a valid amount
|
|
71
|
+
*
|
|
72
|
+
* @param {number[]} amounts - the amounts to validate
|
|
73
|
+
* @returns {boolean} - the validation result
|
|
74
|
+
*/
|
|
75
|
+
isValidAmounts(amounts) {
|
|
76
|
+
for (const amount of amounts) {
|
|
77
|
+
if (!this.isValidAmount(amount)) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
isValidAmount(amount) {
|
|
84
|
+
const bigNumberAmount = new bignumber_js_1.default(amount);
|
|
85
|
+
if (!bigNumberAmount.isInteger() || bigNumberAmount.isLessThanOrEqualTo(0)) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Decodes raw tx data into messages, signing info, and fee data
|
|
92
|
+
* @param txHex - raw base64 tx
|
|
93
|
+
*/
|
|
94
|
+
getDecodedTxFromRawBase64(txRaw) {
|
|
95
|
+
return proto_signing_1.decodeTxRaw(encoding_1.fromBase64(txRaw));
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Returns the array of messages in the body of the decoded transaction
|
|
99
|
+
* @param decodedTx
|
|
100
|
+
*/
|
|
101
|
+
getEncodedMessagesFromDecodedTx(decodedTx) {
|
|
102
|
+
return decodedTx.body.messages;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Arranges a decoded message into our MessageData value interface
|
|
106
|
+
* @param decodedMessage
|
|
107
|
+
* @private
|
|
108
|
+
*/
|
|
109
|
+
getMessageValueDataFromDecodedMessage(decodedMessage) {
|
|
110
|
+
return {
|
|
111
|
+
fromAddress: decodedMessage.fromAddress,
|
|
112
|
+
toAddress: decodedMessage.toAddress,
|
|
113
|
+
amount: decodedMessage.amount,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Returns an array of MessageData[] from an encoded messages array
|
|
118
|
+
* @param encodedMessages
|
|
119
|
+
* @private
|
|
120
|
+
*/
|
|
121
|
+
getMessageDataFromEncodedMessages(encodedMessages) {
|
|
122
|
+
const registry = new proto_signing_1.Registry(stargate_1.defaultRegistryTypes);
|
|
123
|
+
const messageData = [];
|
|
124
|
+
for (const message of encodedMessages) {
|
|
125
|
+
messageData.push({
|
|
126
|
+
value: this.getMessageValueDataFromDecodedMessage(registry.decode(message)),
|
|
127
|
+
typeUrl: message.typeUrl,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return messageData;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Pulls the sequence number from a DecodedTxRaw AuthInfo property
|
|
134
|
+
* @param decodedTx
|
|
135
|
+
* @private
|
|
136
|
+
*/
|
|
137
|
+
getSequenceFromDecodedTx(decodedTx) {
|
|
138
|
+
return Number(decodedTx.authInfo.signerInfos[0].sequence);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Pulls the typeUrl from the encoded message of a DecodedTxRaw
|
|
142
|
+
* @param decodedTx
|
|
143
|
+
*/
|
|
144
|
+
getTypeUrlFromDecodedTx(decodedTx) {
|
|
145
|
+
const encodedMessage = this.getEncodedMessagesFromDecodedTx(decodedTx)[0];
|
|
146
|
+
return encodedMessage.typeUrl;
|
|
147
|
+
}
|
|
148
|
+
getGasBudgetFromDecodedTx(decodedTx) {
|
|
149
|
+
var _a, _b;
|
|
150
|
+
return {
|
|
151
|
+
amount: (_a = decodedTx.authInfo.fee) === null || _a === void 0 ? void 0 : _a.amount,
|
|
152
|
+
gas: Number((_b = decodedTx.authInfo.fee) === null || _b === void 0 ? void 0 : _b.gasLimit),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Returns the array of MessageData[] from the decoded transaction
|
|
157
|
+
* @param decodedTx
|
|
158
|
+
*/
|
|
159
|
+
getMessageDataFromDecodedTx(decodedTx) {
|
|
160
|
+
const encodedMessages = this.getEncodedMessagesFromDecodedTx(decodedTx);
|
|
161
|
+
return this.getMessageDataFromEncodedMessages(encodedMessages);
|
|
162
|
+
}
|
|
163
|
+
createSignDocFromAtomTransaction(pubkey, atomTransaction) {
|
|
164
|
+
const register = new proto_signing_1.Registry(stargate_1.defaultRegistryTypes);
|
|
165
|
+
const txBodyValue = {
|
|
166
|
+
messages: atomTransaction.sendMessages,
|
|
167
|
+
};
|
|
168
|
+
const txBodyBytes = register.encodeTxBody(txBodyValue);
|
|
169
|
+
const sequence = atomTransaction.sequence;
|
|
170
|
+
const authInfoBytes = proto_signing_1.makeAuthInfoBytes([{ pubkey, sequence }], atomTransaction.gasBudget.amount, atomTransaction.gasBudget.gas, undefined, undefined, undefined);
|
|
171
|
+
// Ignoring linting because makeSignDoc expects string/number inputs but are null for our purposes
|
|
172
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
173
|
+
// @ts-ignore
|
|
174
|
+
return proto_signing_1.makeSignDoc(txBodyBytes, authInfoBytes, null, null);
|
|
175
|
+
}
|
|
176
|
+
createSignedTxRaw(atomSignature, signDoc) {
|
|
177
|
+
const stdSignature = amino_1.encodeSecp256k1Signature(encoding_1.fromHex(atomSignature.publicKey.pub), atomSignature.signature);
|
|
178
|
+
return tx_1.TxRaw.fromPartial({
|
|
179
|
+
bodyBytes: signDoc.bodyBytes,
|
|
180
|
+
authInfoBytes: signDoc.authInfoBytes,
|
|
181
|
+
signatures: [encoding_1.fromBase64(stdSignature.signature)],
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
createBase64SignedTxBytesFromSignedTxRaw(signedTxRaw) {
|
|
185
|
+
const signedTxBytes = tx_1.TxRaw.encode(signedTxRaw).finish();
|
|
186
|
+
return encoding_1.toBase64(signedTxBytes);
|
|
187
|
+
}
|
|
188
|
+
isSignedRawTx(rawTransaction) {
|
|
189
|
+
const decodedTx = this.getDecodedTxFromRawBase64(rawTransaction);
|
|
190
|
+
if (decodedTx.authInfo.signerInfos.length > 0) {
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
getSignerInfoFromRawSignedTx(rawTransaction) {
|
|
196
|
+
var _a;
|
|
197
|
+
if (!this.isSignedRawTx(rawTransaction)) {
|
|
198
|
+
throw new Error('getSignerInfoFromRawTx failed, raw tx is not signed');
|
|
199
|
+
}
|
|
200
|
+
const decodedTx = this.getDecodedTxFromRawBase64(rawTransaction);
|
|
201
|
+
const aminoPubKey = decodedTx.authInfo.signerInfos[0].publicKey;
|
|
202
|
+
const decodedPubKeyHex = encoding_1.toHex(encoding_1.fromBase64((_a = proto_signing_1.decodePubkey(aminoPubKey)) === null || _a === void 0 ? void 0 : _a.value));
|
|
203
|
+
const pubKey = {
|
|
204
|
+
pub: decodedPubKeyHex,
|
|
205
|
+
};
|
|
206
|
+
const signature = Buffer.from(decodedTx.signatures[0]);
|
|
207
|
+
return { pubKey, signature };
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
exports.Utils = Utils;
|
|
211
|
+
const utils = new Utils();
|
|
212
|
+
exports.default = utils;
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhDQUE4RTtBQUM5RSxnRUFBcUM7QUFDckMsK0NBQXdFO0FBQ3hFLHlEQVErQjtBQUUvQiwrQ0FBOEQ7QUFDOUQseUNBQXlEO0FBQ3pELDBEQUFtRTtBQUduRSxNQUFhLEtBQUs7SUFDaEIsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGlCQUFpQixDQUFDLEdBQVc7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsZ0JBQWdCLENBQUMsR0FBVztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixnQkFBZ0IsQ0FBQyxTQUFpQjtRQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixvQkFBb0IsQ0FBQyxJQUFZO1FBQy9CLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQVk7UUFDMUIsSUFBSSxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxNQUFNLE1BQUssRUFBRSxFQUFFO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLENBQUM7SUFDL0MsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0gscUJBQXFCLENBQUMsY0FBc0I7UUFDMUMsTUFB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Q0FBQyxTQUFnQixDQUFDO1FBQ3ZFLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQUssQ0FBQyxxQkFBVSxDQUFDLE1BQUEsNEJBQVksQ0FBQyxXQUFXLENBQUMsMENBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM3RSxNQUFNLE1BQU0sR0FBRztZQUNiLEdBQUcsRUFBRSxnQkFBZ0I7U0FDdEIsQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBOU5ELHNCQThOQztBQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFFMUIsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZVV0aWxzLCBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsIFNpZ25hdHVyZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBmcm9tQmFzZTY0LCBmcm9tSGV4LCB0b0Jhc2U2NCwgdG9IZXggfSBmcm9tICdAY29zbWpzL2VuY29kaW5nJztcbmltcG9ydCB7XG4gIERlY29kZWRUeFJhdyxcbiAgZGVjb2RlUHVia2V5LFxuICBkZWNvZGVUeFJhdyxcbiAgRW5jb2RlT2JqZWN0LFxuICBtYWtlQXV0aEluZm9CeXRlcyxcbiAgbWFrZVNpZ25Eb2MsXG4gIFJlZ2lzdHJ5LFxufSBmcm9tICdAY29zbWpzL3Byb3RvLXNpZ25pbmcnO1xuaW1wb3J0IHsgQXRvbVRyYW5zYWN0aW9uLCBHYXNGZWVMaW1pdERhdGEsIE1lc3NhZ2VEYXRhIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBDb2luLCBkZWZhdWx0UmVnaXN0cnlUeXBlcyB9IGZyb20gJ0Bjb3NtanMvc3RhcmdhdGUnO1xuaW1wb3J0IHsgZW5jb2RlU2VjcDI1NmsxU2lnbmF0dXJlIH0gZnJvbSAnQGNvc21qcy9hbWlubyc7XG5pbXBvcnQgeyBUeFJhdywgU2lnbkRvYyB9IGZyb20gJ2Nvc21qcy10eXBlcy9jb3Ntb3MvdHgvdjFiZXRhMS90eCc7XG5pbXBvcnQgeyBBbnkgfSBmcm9tICdjb3NtanMtdHlwZXMvZ29vZ2xlL3Byb3RvYnVmL2FueSc7XG5cbmV4cG9ydCBjbGFzcyBVdGlscyBpbXBsZW1lbnRzIEJhc2VVdGlscyB7XG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkQmxvY2tJZChoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUJsYWtlMmIoaGFzaCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFByaXZhdGVLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFB1YmxpY0tleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQmxha2UyYih0eElkKTtcbiAgfVxuXG4gIHZhbGlkYXRlQmxha2UyYihoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoaGFzaD8ubGVuZ3RoICE9PSA2NCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gaGFzaC5tYXRjaCgvXlthLXpBLVowLTldKyQvKSAhPT0gbnVsbDtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIGlmIHJhdyB0cmFuc2FjdGlvbiBjYW4gYmUgZGVzZXJpYWxpemVkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByYXdUcmFuc2FjdGlvbiAtIHRyYW5zYWN0aW9uIGluIGJhc2U2NCBzdHJpbmcgZm9ybWF0XG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICAgKi9cbiAgaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIHJhdyB0cmFuc2FjdGlvbiBoYXMgYSB2YWxpZCBmb3JtYXQgaW4gdGhlIGJsb2NrY2hhaW4gY29udGV4dCwgdGhyb3cgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmF3VHJhbnNhY3Rpb24gLSBUcmFuc2FjdGlvbiBpbiBiYXNlNjQgc3RyaW5nICBmb3JtYXRcbiAgICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghcmF3VHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcmF3IHRyYW5zYWN0aW9uOiBVbmRlZmluZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYWxsb3dlZF9jaGFycyA9ICdxcHpyeTl4OGdmMnR2ZHcwczNqbjU0a2hjZTZtdWE3bCc7XG4gICAgY29uc3QgYXRvbVJlZ2V4ID0gJ14oY29zbW9zKTEoWycgKyBhbGxvd2VkX2NoYXJzICsgJ10rKSQnO1xuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChhdG9tUmVnZXgpO1xuICAgIHJldHVybiByZS50ZXN0KGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIHZhbGlkIGFtb3VudFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdfSBhbW91bnRzIC0gdGhlIGFtb3VudHMgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gICAqL1xuICBpc1ZhbGlkQW1vdW50cyhhbW91bnRzOiBudW1iZXJbXSk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgYW1vdW50IG9mIGFtb3VudHMpIHtcbiAgICAgIGlmICghdGhpcy5pc1ZhbGlkQW1vdW50KGFtb3VudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzVmFsaWRBbW91bnQoYW1vdW50OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBiaWdOdW1iZXJBbW91bnQgPSBuZXcgQmlnTnVtYmVyKGFtb3VudCk7XG4gICAgaWYgKCFiaWdOdW1iZXJBbW91bnQuaXNJbnRlZ2VyKCkgfHwgYmlnTnVtYmVyQW1vdW50LmlzTGVzc1RoYW5PckVxdWFsVG8oMCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyByYXcgdHggZGF0YSBpbnRvIG1lc3NhZ2VzLCBzaWduaW5nIGluZm8sIGFuZCBmZWUgZGF0YVxuICAgKiBAcGFyYW0gdHhIZXggLSByYXcgYmFzZTY0IHR4XG4gICAqL1xuICBnZXREZWNvZGVkVHhGcm9tUmF3QmFzZTY0KHR4UmF3OiBzdHJpbmcpOiBEZWNvZGVkVHhSYXcge1xuICAgIHJldHVybiBkZWNvZGVUeFJhdyhmcm9tQmFzZTY0KHR4UmF3KSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXJyYXkgb2YgbWVzc2FnZXMgaW4gdGhlIGJvZHkgb2YgdGhlIGRlY29kZWQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIGRlY29kZWRUeFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbmNvZGVkTWVzc2FnZXNGcm9tRGVjb2RlZFR4KGRlY29kZWRUeDogRGVjb2RlZFR4UmF3KTogRW5jb2RlT2JqZWN0W10ge1xuICAgIHJldHVybiBkZWNvZGVkVHguYm9keS5tZXNzYWdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcnJhbmdlcyBhIGRlY29kZWQgbWVzc2FnZSBpbnRvIG91ciBNZXNzYWdlRGF0YSB2YWx1ZSBpbnRlcmZhY2VcbiAgICogQHBhcmFtIGRlY29kZWRNZXNzYWdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGdldE1lc3NhZ2VWYWx1ZURhdGFGcm9tRGVjb2RlZE1lc3NhZ2UoZGVjb2RlZE1lc3NhZ2U6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb21BZGRyZXNzOiBkZWNvZGVkTWVzc2FnZS5mcm9tQWRkcmVzcyxcbiAgICAgIHRvQWRkcmVzczogZGVjb2RlZE1lc3NhZ2UudG9BZGRyZXNzLFxuICAgICAgYW1vdW50OiBkZWNvZGVkTWVzc2FnZS5hbW91bnQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIE1lc3NhZ2VEYXRhW10gZnJvbSBhbiBlbmNvZGVkIG1lc3NhZ2VzIGFycmF5XG4gICAqIEBwYXJhbSBlbmNvZGVkTWVzc2FnZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZ2V0TWVzc2FnZURhdGFGcm9tRW5jb2RlZE1lc3NhZ2VzKGVuY29kZWRNZXNzYWdlczogRW5jb2RlT2JqZWN0W10pOiBNZXNzYWdlRGF0YVtdIHtcbiAgICBjb25zdCByZWdpc3RyeSA9IG5ldyBSZWdpc3RyeShkZWZhdWx0UmVnaXN0cnlUeXBlcyk7XG4gICAgY29uc3QgbWVzc2FnZURhdGE6IE1lc3NhZ2VEYXRhW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgZW5jb2RlZE1lc3NhZ2VzKSB7XG4gICAgICBtZXNzYWdlRGF0YS5wdXNoKHtcbiAgICAgICAgdmFsdWU6IHRoaXMuZ2V0TWVzc2FnZVZhbHVlRGF0YUZyb21EZWNvZGVkTWVzc2FnZShyZWdpc3RyeS5kZWNvZGUobWVzc2FnZSkpLFxuICAgICAgICB0eXBlVXJsOiBtZXNzYWdlLnR5cGVVcmwsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VEYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1bGxzIHRoZSBzZXF1ZW5jZSBudW1iZXIgZnJvbSBhIERlY29kZWRUeFJhdyBBdXRoSW5mbyBwcm9wZXJ0eVxuICAgKiBAcGFyYW0gZGVjb2RlZFR4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRTZXF1ZW5jZUZyb21EZWNvZGVkVHgoZGVjb2RlZFR4OiBEZWNvZGVkVHhSYXcpOiBudW1iZXIge1xuICAgIHJldHVybiBOdW1iZXIoZGVjb2RlZFR4LmF1dGhJbmZvLnNpZ25lckluZm9zWzBdLnNlcXVlbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWxscyB0aGUgdHlwZVVybCBmcm9tIHRoZSBlbmNvZGVkIG1lc3NhZ2Ugb2YgYSBEZWNvZGVkVHhSYXdcbiAgICogQHBhcmFtIGRlY29kZWRUeFxuICAgKi9cbiAgZ2V0VHlwZVVybEZyb21EZWNvZGVkVHgoZGVjb2RlZFR4OiBEZWNvZGVkVHhSYXcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGVuY29kZWRNZXNzYWdlID0gdGhpcy5nZXRFbmNvZGVkTWVzc2FnZXNGcm9tRGVjb2RlZFR4KGRlY29kZWRUeClbMF07XG4gICAgcmV0dXJuIGVuY29kZWRNZXNzYWdlLnR5cGVVcmw7XG4gIH1cblxuICBnZXRHYXNCdWRnZXRGcm9tRGVjb2RlZFR4KGRlY29kZWRUeDogRGVjb2RlZFR4UmF3KTogR2FzRmVlTGltaXREYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgYW1vdW50OiBkZWNvZGVkVHguYXV0aEluZm8uZmVlPy5hbW91bnQgYXMgQ29pbltdLFxuICAgICAgZ2FzOiBOdW1iZXIoZGVjb2RlZFR4LmF1dGhJbmZvLmZlZT8uZ2FzTGltaXQpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXJyYXkgb2YgTWVzc2FnZURhdGFbXSBmcm9tIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBkZWNvZGVkVHhcbiAgICovXG4gIGdldE1lc3NhZ2VEYXRhRnJvbURlY29kZWRUeChkZWNvZGVkVHg6IERlY29kZWRUeFJhdyk6IE1lc3NhZ2VEYXRhW10ge1xuICAgIGNvbnN0IGVuY29kZWRNZXNzYWdlcyA9IHRoaXMuZ2V0RW5jb2RlZE1lc3NhZ2VzRnJvbURlY29kZWRUeChkZWNvZGVkVHgpO1xuICAgIHJldHVybiB0aGlzLmdldE1lc3NhZ2VEYXRhRnJvbUVuY29kZWRNZXNzYWdlcyhlbmNvZGVkTWVzc2FnZXMpO1xuICB9XG5cbiAgY3JlYXRlU2lnbkRvY0Zyb21BdG9tVHJhbnNhY3Rpb24ocHVia2V5OiBhbnksIGF0b21UcmFuc2FjdGlvbjogQXRvbVRyYW5zYWN0aW9uKSB7XG4gICAgY29uc3QgcmVnaXN0ZXIgPSBuZXcgUmVnaXN0cnkoZGVmYXVsdFJlZ2lzdHJ5VHlwZXMpO1xuICAgIGNvbnN0IHR4Qm9keVZhbHVlID0ge1xuICAgICAgbWVzc2FnZXM6IGF0b21UcmFuc2FjdGlvbi5zZW5kTWVzc2FnZXMgYXMgdW5rbm93biBhcyBBbnlbXSxcbiAgICB9O1xuICAgIGNvbnN0IHR4Qm9keUJ5dGVzID0gcmVnaXN0ZXIuZW5jb2RlVHhCb2R5KHR4Qm9keVZhbHVlKTtcbiAgICBjb25zdCBzZXF1ZW5jZSA9IGF0b21UcmFuc2FjdGlvbi5zZXF1ZW5jZTtcbiAgICBjb25zdCBhdXRoSW5mb0J5dGVzID0gbWFrZUF1dGhJbmZvQnl0ZXMoXG4gICAgICBbeyBwdWJrZXksIHNlcXVlbmNlIH1dLFxuICAgICAgYXRvbVRyYW5zYWN0aW9uLmdhc0J1ZGdldC5hbW91bnQsXG4gICAgICBhdG9tVHJhbnNhY3Rpb24uZ2FzQnVkZ2V0LmdhcyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZFxuICAgICk7XG4gICAgLy8gSWdub3JpbmcgbGludGluZyBiZWNhdXNlIG1ha2VTaWduRG9jIGV4cGVjdHMgc3RyaW5nL251bWJlciBpbnB1dHMgYnV0IGFyZSBudWxsIGZvciBvdXIgcHVycG9zZXNcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBtYWtlU2lnbkRvYyh0eEJvZHlCeXRlcywgYXV0aEluZm9CeXRlcywgbnVsbCwgbnVsbCk7XG4gIH1cblxuICBjcmVhdGVTaWduZWRUeFJhdyhhdG9tU2lnbmF0dXJlOiBTaWduYXR1cmUsIHNpZ25Eb2M6IFNpZ25Eb2MpOiBUeFJhdyB7XG4gICAgY29uc3Qgc3RkU2lnbmF0dXJlID0gZW5jb2RlU2VjcDI1NmsxU2lnbmF0dXJlKGZyb21IZXgoYXRvbVNpZ25hdHVyZS5wdWJsaWNLZXkucHViKSwgYXRvbVNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgIHJldHVybiBUeFJhdy5mcm9tUGFydGlhbCh7XG4gICAgICBib2R5Qnl0ZXM6IHNpZ25Eb2MuYm9keUJ5dGVzLFxuICAgICAgYXV0aEluZm9CeXRlczogc2lnbkRvYy5hdXRoSW5mb0J5dGVzLFxuICAgICAgc2lnbmF0dXJlczogW2Zyb21CYXNlNjQoc3RkU2lnbmF0dXJlLnNpZ25hdHVyZSldLFxuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlQmFzZTY0U2lnbmVkVHhCeXRlc0Zyb21TaWduZWRUeFJhdyhzaWduZWRUeFJhdzogVHhSYXcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNpZ25lZFR4Qnl0ZXMgPSBUeFJhdy5lbmNvZGUoc2lnbmVkVHhSYXcpLmZpbmlzaCgpO1xuICAgIHJldHVybiB0b0Jhc2U2NChzaWduZWRUeEJ5dGVzKTtcbiAgfVxuXG4gIGlzU2lnbmVkUmF3VHgocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRlY29kZWRUeCA9IHRoaXMuZ2V0RGVjb2RlZFR4RnJvbVJhd0Jhc2U2NChyYXdUcmFuc2FjdGlvbik7XG4gICAgaWYgKGRlY29kZWRUeC5hdXRoSW5mby5zaWduZXJJbmZvcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0U2lnbmVySW5mb0Zyb21SYXdTaWduZWRUeChyYXdUcmFuc2FjdGlvbjogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmlzU2lnbmVkUmF3VHgocmF3VHJhbnNhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldFNpZ25lckluZm9Gcm9tUmF3VHggZmFpbGVkLCByYXcgdHggaXMgbm90IHNpZ25lZCcpO1xuICAgIH1cbiAgICBjb25zdCBkZWNvZGVkVHggPSB0aGlzLmdldERlY29kZWRUeEZyb21SYXdCYXNlNjQocmF3VHJhbnNhY3Rpb24pO1xuICAgIGNvbnN0IGFtaW5vUHViS2V5ID0gZGVjb2RlZFR4LmF1dGhJbmZvLnNpZ25lckluZm9zWzBdLnB1YmxpY0tleSBhcyBBbnk7XG4gICAgY29uc3QgZGVjb2RlZFB1YktleUhleCA9IHRvSGV4KGZyb21CYXNlNjQoZGVjb2RlUHVia2V5KGFtaW5vUHViS2V5KT8udmFsdWUpKTtcbiAgICBjb25zdCBwdWJLZXkgPSB7XG4gICAgICBwdWI6IGRlY29kZWRQdWJLZXlIZXgsXG4gICAgfTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBCdWZmZXIuZnJvbShkZWNvZGVkVHguc2lnbmF0dXJlc1swXSk7XG4gICAgcmV0dXJuIHsgcHViS2V5LCBzaWduYXR1cmUgfTtcbiAgfVxufVxuXG5jb25zdCB1dGlscyA9IG5ldyBVdGlscygpO1xuXG5leHBvcnQgZGVmYXVsdCB1dGlscztcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo/sdk-coin-atom",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
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,19 @@
|
|
|
40
40
|
]
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@bitgo/sdk-core": "^
|
|
44
|
-
"@bitgo/statics": "^14.
|
|
45
|
-
"@bitgo/utxo-lib": "^7.
|
|
43
|
+
"@bitgo/sdk-core": "^7.0.0",
|
|
44
|
+
"@bitgo/statics": "^14.3.0",
|
|
45
|
+
"@bitgo/utxo-lib": "^7.7.0",
|
|
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"
|
|
48
52
|
},
|
|
49
53
|
"devDependencies": {
|
|
50
|
-
"@bitgo/sdk-api": "^1.9.
|
|
51
|
-
"@bitgo/sdk-test": "^1.2.
|
|
54
|
+
"@bitgo/sdk-api": "^1.9.9",
|
|
55
|
+
"@bitgo/sdk-test": "^1.2.14"
|
|
52
56
|
},
|
|
53
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "fc7357c09510d49b27b88a9c04f48f4b5a3921f8"
|
|
54
58
|
}
|