@bitgo-beta/sdk-coin-cosmos 1.0.1-alpha.8 → 1.0.1-alpha.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/cosmosSharedCoin.d.ts +28 -3
- package/dist/src/cosmosSharedCoin.d.ts.map +1 -1
- package/dist/src/cosmosSharedCoin.js +69 -5
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +18 -4
- package/dist/src/lib/index.d.ts +5 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +13 -0
- package/dist/src/lib/keyPair.d.ts +19 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +38 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +32 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +81 -0
- package/dist/src/lib/utils.d.ts +19 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +48 -0
- package/dist/src/register.d.ts +7 -0
- package/dist/src/register.d.ts.map +1 -0
- package/dist/src/register.js +17 -0
- package/dist/test/resources/mantra.d.ts +70 -0
- package/dist/test/resources/mantra.d.ts.map +1 -0
- package/dist/test/resources/mantra.js +80 -0
- package/dist/test/testUtils/generators.d.ts +54 -0
- package/dist/test/testUtils/generators.d.ts.map +1 -0
- package/dist/test/testUtils/generators.js +183 -0
- package/dist/test/testUtils/index.d.ts +8 -0
- package/dist/test/testUtils/index.d.ts.map +1 -0
- package/dist/test/testUtils/index.js +25 -0
- package/dist/test/testUtils/types.d.ts +203 -0
- package/dist/test/testUtils/types.d.ts.map +1 -0
- package/dist/test/testUtils/types.js +7 -0
- package/dist/test/testUtils/utils.d.ts +43 -0
- package/dist/test/testUtils/utils.d.ts.map +1 -0
- package/dist/test/testUtils/utils.js +122 -0
- package/dist/test/unit/cosmosSharedCoin.d.ts +2 -0
- package/dist/test/unit/cosmosSharedCoin.d.ts.map +1 -0
- package/dist/test/unit/cosmosSharedCoin.js +300 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +73 -0
- package/dist/test/unit/register.d.ts +2 -0
- package/dist/test/unit/register.d.ts.map +1 -0
- package/dist/test/unit/register.js +48 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.js +46 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +186 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +82 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +18 -6
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -10
|
@@ -0,0 +1,73 @@
|
|
|
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
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const should_1 = __importDefault(require("should"));
|
|
8
|
+
const encoding_1 = require("@cosmjs/encoding");
|
|
9
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
10
|
+
const src_1 = require("../../src");
|
|
11
|
+
const testUtils_1 = require("../testUtils");
|
|
12
|
+
describe('Cosmos KeyPair', function () {
|
|
13
|
+
const availableCoins = (0, testUtils_1.getAvailableTestCoins)();
|
|
14
|
+
// TODO: COIN-5039 - Running tests for each coin in parallel to improve test performance
|
|
15
|
+
// Loop through each available coin and run tests
|
|
16
|
+
availableCoins.forEach((coinName) => {
|
|
17
|
+
describe(`${coinName} KeyPair`, function () {
|
|
18
|
+
const testData = (0, testUtils_1.getTestData)(coinName);
|
|
19
|
+
const coin = statics_1.coins.get(testData.testnetCoin);
|
|
20
|
+
describe('should create a valid KeyPair', () => {
|
|
21
|
+
it('from an empty value', () => {
|
|
22
|
+
const keyPairObj = new src_1.KeyPair();
|
|
23
|
+
const keys = keyPairObj.getKeys();
|
|
24
|
+
should_1.default.exists(keys.prv);
|
|
25
|
+
should_1.default.exists(keys.pub);
|
|
26
|
+
should_1.default.equal(keys.prv?.length, 64);
|
|
27
|
+
should_1.default.equal(keys.pub.length, 66);
|
|
28
|
+
const extendedKeys = keyPairObj.getExtendedKeys();
|
|
29
|
+
should_1.default.exists(extendedKeys.xprv);
|
|
30
|
+
should_1.default.exists(extendedKeys.xpub);
|
|
31
|
+
});
|
|
32
|
+
it('from a private key', () => {
|
|
33
|
+
const privateKey = testData.privateKey;
|
|
34
|
+
const keyPairObj = new src_1.KeyPair({ prv: (0, encoding_1.toHex)((0, encoding_1.fromBase64)(privateKey)) }, coin);
|
|
35
|
+
const keys = keyPairObj.getKeys();
|
|
36
|
+
should_1.default.exists(keys.prv);
|
|
37
|
+
should_1.default.exists(keys.pub);
|
|
38
|
+
should_1.default.equal(keys.prv, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testData.privateKey)));
|
|
39
|
+
should_1.default.equal(keys.pub, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testData.pubKey)));
|
|
40
|
+
should_1.default.equal(keyPairObj.getAddress(), testData.senderAddress);
|
|
41
|
+
assert_1.default.throws(() => keyPairObj.getExtendedKeys());
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
describe('should fail to create a KeyPair', () => {
|
|
45
|
+
it('from an invalid privateKey', () => {
|
|
46
|
+
assert_1.default.throws(() => new src_1.KeyPair({ prv: '' }, coin), (e) => e.message === 'Unsupported private key');
|
|
47
|
+
});
|
|
48
|
+
it('from an invalid publicKey', () => {
|
|
49
|
+
assert_1.default.throws(() => new src_1.KeyPair({ pub: '' }, coin), (e) => e.message.startsWith('Unsupported public key'));
|
|
50
|
+
});
|
|
51
|
+
it('from an undefined seed', () => {
|
|
52
|
+
const undefinedBuffer = undefined;
|
|
53
|
+
assert_1.default.throws(() => new src_1.KeyPair({ seed: undefinedBuffer }, coin), (e) => e.message.startsWith('Invalid key pair options'));
|
|
54
|
+
});
|
|
55
|
+
it('from an undefined private key', () => {
|
|
56
|
+
const undefinedStr = undefined;
|
|
57
|
+
assert_1.default.throws(() => new src_1.KeyPair({ prv: undefinedStr }, coin), (e) => e.message.startsWith('Invalid key pair options'));
|
|
58
|
+
});
|
|
59
|
+
it('from an undefined public key', () => {
|
|
60
|
+
const undefinedStr = undefined;
|
|
61
|
+
assert_1.default.throws(() => new src_1.KeyPair({ pub: undefinedStr }, coin), (e) => e.message.startsWith('Invalid key pair options'));
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
describe('get unique address ', () => {
|
|
65
|
+
it('from a private key', () => {
|
|
66
|
+
const keyPair = new src_1.KeyPair({ prv: (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testData.privateKey)) }, coin);
|
|
67
|
+
should_1.default.equal(keyPair.getAddress(), testData.senderAddress);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9rZXlQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1QiwrQ0FBcUQ7QUFDckQsaURBQTRDO0FBQzVDLG1DQUFvQztBQUNwQyw0Q0FBa0U7QUFFbEUsUUFBUSxDQUFDLGdCQUFnQixFQUFFO0lBQ3pCLE1BQU0sY0FBYyxHQUFHLElBQUEsaUNBQXFCLEdBQUUsQ0FBQztJQUMvQyx5RkFBeUY7SUFDekYsaURBQWlEO0lBQ2pELGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNsQyxRQUFRLENBQUMsR0FBRyxRQUFRLFVBQVUsRUFBRTtZQUM5QixNQUFNLFFBQVEsR0FBRyxJQUFBLHVCQUFXLEVBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsTUFBTSxJQUFJLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFN0MsUUFBUSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtnQkFDN0MsRUFBRSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtvQkFDN0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxhQUFPLEVBQUUsQ0FBQztvQkFDakMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNsQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLGdCQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDeEIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ25DLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVB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Q0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IGZyb21CYXNlNjQsIHRvSGV4IH0gZnJvbSAnQGNvc21qcy9lbmNvZGluZyc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBnZXRBdmFpbGFibGVUZXN0Q29pbnMsIGdldFRlc3REYXRhIH0gZnJvbSAnLi4vdGVzdFV0aWxzJztcblxuZGVzY3JpYmUoJ0Nvc21vcyBLZXlQYWlyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBhdmFpbGFibGVDb2lucyA9IGdldEF2YWlsYWJsZVRlc3RDb2lucygpO1xuICAvLyBUT0RPOiBDT0lOLTUwMzkgLSAgUnVubmluZyB0ZXN0cyBmb3IgZWFjaCBjb2luIGluIHBhcmFsbGVsIHRvIGltcHJvdmUgdGVzdCBwZXJmb3JtYW5jZVxuICAvLyBMb29wIHRocm91Z2ggZWFjaCBhdmFpbGFibGUgY29pbiBhbmQgcnVuIHRlc3RzXG4gIGF2YWlsYWJsZUNvaW5zLmZvckVhY2goKGNvaW5OYW1lKSA9PiB7XG4gICAgZGVzY3JpYmUoYCR7Y29pbk5hbWV9IEtleVBhaXJgLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IGdldFRlc3REYXRhKGNvaW5OYW1lKTtcbiAgICAgIGNvbnN0IGNvaW4gPSBjb2lucy5nZXQodGVzdERhdGEudGVzdG5ldENvaW4pO1xuXG4gICAgICBkZXNjcmliZSgnc2hvdWxkIGNyZWF0ZSBhIHZhbGlkIEtleVBhaXInLCAoKSA9PiB7XG4gICAgICAgIGl0KCdmcm9tIGFuIGVtcHR5IHZhbHVlJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGtleVBhaXJPYmogPSBuZXcgS2V5UGFpcigpO1xuICAgICAgICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyT2JqLmdldEtleXMoKTtcbiAgICAgICAgICBzaG91bGQuZXhpc3RzKGtleXMucHJ2KTtcbiAgICAgICAgICBzaG91bGQuZXhpc3RzKGtleXMucHViKTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwoa2V5cy5wcnY/Lmxlbmd0aCwgNjQpO1xuICAgICAgICAgIHNob3VsZC5lcXVhbChrZXlzLnB1Yi5sZW5ndGgsIDY2KTtcblxuICAgICAgICAgIGNvbnN0IGV4dGVuZGVkS2V5cyA9IGtleVBhaXJPYmouZ2V0RXh0ZW5kZWRLZXlzKCk7XG4gICAgICAgICAgc2hvdWxkLmV4aXN0cyhleHRlbmRlZEtleXMueHBydik7XG4gICAgICAgICAgc2hvdWxkLmV4aXN0cyhleHRlbmRlZEtleXMueHB1Yik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdmcm9tIGEgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IHRlc3REYXRhLnByaXZhdGVLZXk7XG4gICAgICAgICAgY29uc3Qga2V5UGFpck9iaiA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0b0hleChmcm9tQmFzZTY0KHByaXZhdGVLZXkpKSB9LCBjb2luKTtcbiAgICAgICAgICBjb25zdCBrZXlzID0ga2V5UGFpck9iai5nZXRLZXlzKCk7XG4gICAgICAgICAgc2hvdWxkLmV4aXN0cyhrZXlzLnBydik7XG4gICAgICAgICAgc2hvdWxkLmV4aXN0cyhrZXlzLnB1Yik7XG4gICAgICAgICAgc2hvdWxkLmVxdWFsKGtleXMucHJ2LCB0b0hleChmcm9tQmFzZTY0KHRlc3REYXRhLnByaXZhdGVLZXkpKSk7XG4gICAgICAgICAgc2hvdWxkLmVxdWFsKGtleXMucHViLCB0b0hleChmcm9tQmFzZTY0KHRlc3REYXRhLnB1YktleSkpKTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwoa2V5UGFpck9iai5nZXRBZGRyZXNzKCksIHRlc3REYXRhLnNlbmRlckFkZHJlc3MpO1xuXG4gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBrZXlQYWlyT2JqLmdldEV4dGVuZGVkS2V5cygpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ3Nob3VsZCBmYWlsIHRvIGNyZWF0ZSBhIEtleVBhaXInLCAoKSA9PiB7XG4gICAgICAgIGl0KCdmcm9tIGFuIGludmFsaWQgcHJpdmF0ZUtleScsICgpID0+IHtcbiAgICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICAgKCkgPT4gbmV3IEtleVBhaXIoeyBwcnY6ICcnIH0sIGNvaW4pLFxuICAgICAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnVW5zdXBwb3J0ZWQgcHJpdmF0ZSBrZXknXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2Zyb20gYW4gaW52YWxpZCBwdWJsaWNLZXknLCAoKSA9PiB7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAgICgpID0+IG5ldyBLZXlQYWlyKHsgcHViOiAnJyB9LCBjb2luKSxcbiAgICAgICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZS5zdGFydHNXaXRoKCdVbnN1cHBvcnRlZCBwdWJsaWMga2V5JylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnZnJvbSBhbiB1bmRlZmluZWQgc2VlZCcsICgpID0+IHtcbiAgICAgICAgICBjb25zdCB1bmRlZmluZWRCdWZmZXIgPSB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBCdWZmZXI7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAgICgpID0+IG5ldyBLZXlQYWlyKHsgc2VlZDogdW5kZWZpbmVkQnVmZmVyIH0sIGNvaW4pLFxuICAgICAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2Zyb20gYW4gdW5kZWZpbmVkIHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVuZGVmaW5lZFN0cjogc3RyaW5nID0gdW5kZWZpbmVkIGFzIHVua25vd24gYXMgc3RyaW5nO1xuICAgICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgICAoKSA9PiBuZXcgS2V5UGFpcih7IHBydjogdW5kZWZpbmVkU3RyIH0sIGNvaW4pLFxuICAgICAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2Zyb20gYW4gdW5kZWZpbmVkIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdW5kZWZpbmVkU3RyOiBzdHJpbmcgPSB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBzdHJpbmc7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAgICgpID0+IG5ldyBLZXlQYWlyKHsgcHViOiB1bmRlZmluZWRTdHIgfSwgY29pbiksXG4gICAgICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnSW52YWxpZCBrZXkgcGFpciBvcHRpb25zJylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnZ2V0IHVuaXF1ZSBhZGRyZXNzICcsICgpID0+IHtcbiAgICAgICAgaXQoJ2Zyb20gYSBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRvSGV4KGZyb21CYXNlNjQodGVzdERhdGEucHJpdmF0ZUtleSkpIH0sIGNvaW4pO1xuICAgICAgICAgIHNob3VsZC5lcXVhbChrZXlQYWlyLmdldEFkZHJlc3MoKSwgdGVzdERhdGEuc2VuZGVyQWRkcmVzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../test/unit/register.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
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
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
7
|
+
const should_1 = __importDefault(require("should"));
|
|
8
|
+
const sdk_api_1 = require("@bitgo-beta/sdk-api");
|
|
9
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
10
|
+
const src_1 = require("../../src");
|
|
11
|
+
describe('Cosmos Register', function () {
|
|
12
|
+
let bitgo;
|
|
13
|
+
let registerSpy;
|
|
14
|
+
let cosmosCoins;
|
|
15
|
+
before(function () {
|
|
16
|
+
// Get all coins with the SHARED_COSMOS_SDK feature
|
|
17
|
+
cosmosCoins = new Set(statics_1.coins.filter((coin) => coin.features.includes(statics_1.CoinFeature.SHARED_COSMOS_SDK)).map((coin) => coin.name));
|
|
18
|
+
});
|
|
19
|
+
beforeEach(function () {
|
|
20
|
+
bitgo = new sdk_api_1.BitGoAPI({ env: 'test' });
|
|
21
|
+
registerSpy = sinon_1.default.spy(bitgo, 'register');
|
|
22
|
+
});
|
|
23
|
+
afterEach(function () {
|
|
24
|
+
registerSpy.restore();
|
|
25
|
+
});
|
|
26
|
+
it('should register all cosmos coins', function () {
|
|
27
|
+
(0, src_1.register)(bitgo);
|
|
28
|
+
// Verify that register was called for each cosmos coin
|
|
29
|
+
should_1.default.equal(registerSpy.callCount, cosmosCoins.size);
|
|
30
|
+
// Verify that each call was for a cosmos coin with the correct factory
|
|
31
|
+
for (let i = 0; i < registerSpy.callCount; i++) {
|
|
32
|
+
const call = registerSpy.getCall(i);
|
|
33
|
+
const coinName = call.args[0];
|
|
34
|
+
const factory = call.args[1];
|
|
35
|
+
should_1.default.ok(cosmosCoins.has(coinName), `${coinName} should be a cosmos coin`);
|
|
36
|
+
should_1.default.equal(factory, src_1.CosmosSharedCoin.createInstance);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
it('should register each coin only once', function () {
|
|
40
|
+
(0, src_1.register)(bitgo);
|
|
41
|
+
// Get the list of registered coins
|
|
42
|
+
const registeredCoins = registerSpy.getCalls().map((call) => call.args[0]);
|
|
43
|
+
// Check for duplicates
|
|
44
|
+
const uniqueCoins = new Set(registeredCoins);
|
|
45
|
+
should_1.default.equal(uniqueCoins.size, registeredCoins.length, 'There should be no duplicate coin registrations');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsb0RBQTRCO0FBQzVCLGlEQUErQztBQUMvQyxpREFBeUQ7QUFDekQsbUNBQXVEO0FBRXZELFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtJQUMxQixJQUFJLEtBQWUsQ0FBQztJQUNwQixJQUFJLFdBQTJCLENBQUM7SUFDaEMsSUFBSSxXQUF3QixDQUFDO0lBRTdCLE1BQU0sQ0FBQztRQUNMLG1EQUFtRDtRQUNuRCxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQ25CLGVBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHFCQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUN2RyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxVQUFVLENBQUM7UUFDVCxLQUFLLEdBQUcsSUFBSSxrQkFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEMsV0FBVyxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzdDLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDO1FBQ1IsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGtDQUFrQyxFQUFFO1FBQ3JDLElBQUEsY0FBUSxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhCLHVEQUF1RDtRQUN2RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0RCx1RUFBdUU7UUFDdkUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU3QixnQkFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsUUFBUSwwQkFBMEIsQ0FBQyxDQUFDO1lBQzVFLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxzQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMscUNBQXFDLEVBQUU7UUFDeEMsSUFBQSxjQUFRLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEIsbUNBQW1DO1FBQ25DLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRSx1QkFBdUI7UUFDdkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDN0MsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsTUFBTSxFQUFFLGlEQUFpRCxDQUFDLENBQUM7SUFDNUcsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0IHsgQ29pbkZlYXR1cmUsIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyByZWdpc3RlciwgQ29zbW9zU2hhcmVkQ29pbiB9IGZyb20gJy4uLy4uL3NyYyc7XG5cbmRlc2NyaWJlKCdDb3Ntb3MgUmVnaXN0ZXInLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBiaXRnbzogQml0R29BUEk7XG4gIGxldCByZWdpc3RlclNweTogc2lub24uU2lub25TcHk7XG4gIGxldCBjb3Ntb3NDb2luczogU2V0PHN0cmluZz47XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBHZXQgYWxsIGNvaW5zIHdpdGggdGhlIFNIQVJFRF9DT1NNT1NfU0RLIGZlYXR1cmVcbiAgICBjb3Ntb3NDb2lucyA9IG5ldyBTZXQoXG4gICAgICBjb2lucy5maWx0ZXIoKGNvaW4pID0+IGNvaW4uZmVhdHVyZXMuaW5jbHVkZXMoQ29pbkZlYXR1cmUuU0hBUkVEX0NPU01PU19TREspKS5tYXAoKGNvaW4pID0+IGNvaW4ubmFtZSlcbiAgICApO1xuICB9KTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ3Rlc3QnIH0pO1xuICAgIHJlZ2lzdGVyU3B5ID0gc2lub24uc3B5KGJpdGdvLCAncmVnaXN0ZXInKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICByZWdpc3RlclNweS5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVnaXN0ZXIgYWxsIGNvc21vcyBjb2lucycsIGZ1bmN0aW9uICgpIHtcbiAgICByZWdpc3RlcihiaXRnbyk7XG5cbiAgICAvLyBWZXJpZnkgdGhhdCByZWdpc3RlciB3YXMgY2FsbGVkIGZvciBlYWNoIGNvc21vcyBjb2luXG4gICAgc2hvdWxkLmVxdWFsKHJlZ2lzdGVyU3B5LmNhbGxDb3VudCwgY29zbW9zQ29pbnMuc2l6ZSk7XG5cbiAgICAvLyBWZXJpZnkgdGhhdCBlYWNoIGNhbGwgd2FzIGZvciBhIGNvc21vcyBjb2luIHdpdGggdGhlIGNvcnJlY3QgZmFjdG9yeVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVnaXN0ZXJTcHkuY2FsbENvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IGNhbGwgPSByZWdpc3RlclNweS5nZXRDYWxsKGkpO1xuICAgICAgY29uc3QgY29pbk5hbWUgPSBjYWxsLmFyZ3NbMF07XG4gICAgICBjb25zdCBmYWN0b3J5ID0gY2FsbC5hcmdzWzFdO1xuXG4gICAgICBzaG91bGQub2soY29zbW9zQ29pbnMuaGFzKGNvaW5OYW1lKSwgYCR7Y29pbk5hbWV9IHNob3VsZCBiZSBhIGNvc21vcyBjb2luYCk7XG4gICAgICBzaG91bGQuZXF1YWwoZmFjdG9yeSwgQ29zbW9zU2hhcmVkQ29pbi5jcmVhdGVJbnN0YW5jZSk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlZ2lzdGVyIGVhY2ggY29pbiBvbmx5IG9uY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgcmVnaXN0ZXIoYml0Z28pO1xuXG4gICAgLy8gR2V0IHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgY29pbnNcbiAgICBjb25zdCByZWdpc3RlcmVkQ29pbnMgPSByZWdpc3RlclNweS5nZXRDYWxscygpLm1hcCgoY2FsbCkgPT4gY2FsbC5hcmdzWzBdKTtcblxuICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGVzXG4gICAgY29uc3QgdW5pcXVlQ29pbnMgPSBuZXcgU2V0KHJlZ2lzdGVyZWRDb2lucyk7XG4gICAgc2hvdWxkLmVxdWFsKHVuaXF1ZUNvaW5zLnNpemUsIHJlZ2lzdGVyZWRDb2lucy5sZW5ndGgsICdUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlIGNvaW4gcmVnaXN0cmF0aW9ucycpO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/transactionBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
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
|
+
const should_1 = __importDefault(require("should"));
|
|
7
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
+
const testUtils_1 = require("../../testUtils");
|
|
9
|
+
describe('Cosmos Transaction Builder', function () {
|
|
10
|
+
const availableCoins = (0, testUtils_1.getAvailableTestCoins)();
|
|
11
|
+
// TODO: COIN-5039 - Running tests for each coin in parallel to improve test performance
|
|
12
|
+
// Loop through each available coin and run tests
|
|
13
|
+
availableCoins.forEach((coinName) => {
|
|
14
|
+
describe(`${coinName.toUpperCase()} Transaction Builder`, function () {
|
|
15
|
+
const testData = (0, testUtils_1.getTestData)(coinName);
|
|
16
|
+
const factory = (0, testUtils_1.getBuilderFactory)(testData.testnetCoin);
|
|
17
|
+
const testTx = testData.testSendTx;
|
|
18
|
+
it('should build a signed tx from signed tx data', async function () {
|
|
19
|
+
const txBuilder = factory.from(testTx.signedTxBase64);
|
|
20
|
+
const tx = await txBuilder.build();
|
|
21
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
|
|
22
|
+
// Should recreate the same raw tx data when re-build and turned to broadcast format
|
|
23
|
+
const rawTx = tx.toBroadcastFormat();
|
|
24
|
+
should_1.default.equal(rawTx, testTx.signedTxBase64);
|
|
25
|
+
});
|
|
26
|
+
describe('gasBudget tests', async () => {
|
|
27
|
+
it('should succeed for valid gasBudget', function () {
|
|
28
|
+
const builder = factory.getTransferBuilder();
|
|
29
|
+
should_1.default.doesNotThrow(() => builder.gasBudget(testTx.gasBudget));
|
|
30
|
+
});
|
|
31
|
+
it('should throw for invalid gasBudget', function () {
|
|
32
|
+
const builder = factory.getTransferBuilder();
|
|
33
|
+
const invalidGasBudget = { amount: testTx.gasBudget.amount, gasLimit: 0 };
|
|
34
|
+
(0, should_1.default)(() => builder.gasBudget(invalidGasBudget)).throw('Invalid gas limit 0');
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
it('validateAddress', function () {
|
|
38
|
+
const builder = factory.getTransferBuilder();
|
|
39
|
+
const invalidAddress = { address: 'randomString' };
|
|
40
|
+
should_1.default.doesNotThrow(() => builder.validateAddress({ address: testTx.sender }));
|
|
41
|
+
(0, should_1.default)(() => builder.validateAddress(invalidAddress)).throwError('transactionBuilder: address isValidAddress check failed: ' + invalidAddress.address);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsbURBQXVEO0FBRXZELCtDQUF3RjtBQUV4RixRQUFRLENBQUMsNEJBQTRCLEVBQUU7SUFDckMsTUFBTSxjQUFjLEdBQUcsSUFBQSxpQ0FBcUIsR0FBRSxDQUFDO0lBQy9DLHlGQUF5RjtJQUN6RixpREFBaUQ7SUFDakQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ2xDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsc0JBQXNCLEVBQUU7WUFDeEQsTUFBTSxRQUFRLEdBQUcsSUFBQSx1QkFBVyxFQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUEsNkJBQWlCLEVBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxVQUFrRCxDQUFDO1lBRTNFLEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLO2dCQUN0RCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25DLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsMEJBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUMsb0ZBQW9GO2dCQUNwRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDckMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM3QyxDQUFDLENBQUMsQ0FBQztZQUVILFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDckMsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO29CQUN2QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDN0MsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBVSxDQUFDLENBQUMsQ0FBQztnQkFDbEUsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO29CQUN2QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsU0FBVSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQzNFLElBQUEsZ0JBQU0sRUFBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDakYsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDcEIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzdDLE1BQU0sY0FBYyxHQUFHLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxDQUFDO2dCQUNuRCxnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9FLElBQUEsZ0JBQU0sRUFBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUM5RCwyREFBMkQsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUNyRixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IGdldEF2YWlsYWJsZVRlc3RDb2lucywgZ2V0QnVpbGRlckZhY3RvcnksIGdldFRlc3REYXRhIH0gZnJvbSAnLi4vLi4vdGVzdFV0aWxzJztcblxuZGVzY3JpYmUoJ0Nvc21vcyBUcmFuc2FjdGlvbiBCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBhdmFpbGFibGVDb2lucyA9IGdldEF2YWlsYWJsZVRlc3RDb2lucygpO1xuICAvLyBUT0RPOiBDT0lOLTUwMzkgLSAgUnVubmluZyB0ZXN0cyBmb3IgZWFjaCBjb2luIGluIHBhcmFsbGVsIHRvIGltcHJvdmUgdGVzdCBwZXJmb3JtYW5jZVxuICAvLyBMb29wIHRocm91Z2ggZWFjaCBhdmFpbGFibGUgY29pbiBhbmQgcnVuIHRlc3RzXG4gIGF2YWlsYWJsZUNvaW5zLmZvckVhY2goKGNvaW5OYW1lKSA9PiB7XG4gICAgZGVzY3JpYmUoYCR7Y29pbk5hbWUudG9VcHBlckNhc2UoKX0gVHJhbnNhY3Rpb24gQnVpbGRlcmAsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRlc3REYXRhID0gZ2V0VGVzdERhdGEoY29pbk5hbWUpO1xuICAgICAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KHRlc3REYXRhLnRlc3RuZXRDb2luKTtcbiAgICAgIGNvbnN0IHRlc3RUeCA9IHRlc3REYXRhLnRlc3RTZW5kVHggYXMgUmVxdWlyZWQ8dHlwZW9mIHRlc3REYXRhLnRlc3RTZW5kVHg+O1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2lnbmVkIHR4IGZyb20gc2lnbmVkIHR4IGRhdGEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0VHguc2lnbmVkVHhCYXNlNjQpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgICAvLyBTaG91bGQgcmVjcmVhdGUgdGhlIHNhbWUgcmF3IHR4IGRhdGEgd2hlbiByZS1idWlsZCBhbmQgdHVybmVkIHRvIGJyb2FkY2FzdCBmb3JtYXRcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3RUeC5zaWduZWRUeEJhc2U2NCk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ2dhc0J1ZGdldCB0ZXN0cycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIGZvciB2YWxpZCBnYXNCdWRnZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLmdhc0J1ZGdldCh0ZXN0VHguZ2FzQnVkZ2V0ISkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGZvciBpbnZhbGlkIGdhc0J1ZGdldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgICAgICBjb25zdCBpbnZhbGlkR2FzQnVkZ2V0ID0geyBhbW91bnQ6IHRlc3RUeC5nYXNCdWRnZXQhLmFtb3VudCwgZ2FzTGltaXQ6IDAgfTtcbiAgICAgICAgICBzaG91bGQoKCkgPT4gYnVpbGRlci5nYXNCdWRnZXQoaW52YWxpZEdhc0J1ZGdldCkpLnRocm93KCdJbnZhbGlkIGdhcyBsaW1pdCAwJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCd2YWxpZGF0ZUFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgICBjb25zdCBpbnZhbGlkQWRkcmVzcyA9IHsgYWRkcmVzczogJ3JhbmRvbVN0cmluZycgfTtcbiAgICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3M6IHRlc3RUeC5zZW5kZXIgfSkpO1xuICAgICAgICBzaG91bGQoKCkgPT4gYnVpbGRlci52YWxpZGF0ZUFkZHJlc3MoaW52YWxpZEFkZHJlc3MpKS50aHJvd0Vycm9yKFxuICAgICAgICAgICd0cmFuc2FjdGlvbkJ1aWxkZXI6IGFkZHJlc3MgaXNWYWxpZEFkZHJlc3MgY2hlY2sgZmFpbGVkOiAnICsgaW52YWxpZEFkZHJlc3MuYWRkcmVzc1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/transferBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,186 @@
|
|
|
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
|
+
const should_1 = __importDefault(require("should"));
|
|
7
|
+
const encoding_1 = require("@cosmjs/encoding");
|
|
8
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
9
|
+
const testUtils_1 = require("../../testUtils");
|
|
10
|
+
describe('Cosmos Transfer Builder', function () {
|
|
11
|
+
const availableCoins = (0, testUtils_1.getAvailableTestCoins)();
|
|
12
|
+
// TODO: COIN-5039 - Running tests for each coin in parallel to improve test performance
|
|
13
|
+
// Loop through each available coin and run tests
|
|
14
|
+
availableCoins.forEach((coinName) => {
|
|
15
|
+
describe(`${coinName.toUpperCase()} Transfer Builder`, function () {
|
|
16
|
+
const testData = (0, testUtils_1.getTestData)(coinName);
|
|
17
|
+
const factory = (0, testUtils_1.getBuilderFactory)(testData.testnetCoin);
|
|
18
|
+
const testTx = testData.testSendTx;
|
|
19
|
+
const testTx2 = testData.testSendTx2;
|
|
20
|
+
const testTxWithMemo = testData.testTxWithMemo;
|
|
21
|
+
const testSendManyTx = testData.testSendManyTx;
|
|
22
|
+
it('should build a Transfer tx with signature', async function () {
|
|
23
|
+
const txBuilder = factory.getTransferBuilder();
|
|
24
|
+
txBuilder.sequence(testTx.sequence);
|
|
25
|
+
txBuilder.gasBudget(testTx.gasBudget);
|
|
26
|
+
txBuilder.messages([testTx.sendMessage.value]);
|
|
27
|
+
txBuilder.publicKey((0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.pubKey)));
|
|
28
|
+
txBuilder.addSignature({ pub: (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.pubKey)) }, Buffer.from(testTx.signature, 'base64'));
|
|
29
|
+
const tx = await txBuilder.build();
|
|
30
|
+
const json = await (await txBuilder.build()).toJson();
|
|
31
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
|
|
32
|
+
should_1.default.deepEqual(json.gasBudget, testTx.gasBudget);
|
|
33
|
+
should_1.default.deepEqual(json.sendMessages, [testTx.sendMessage]);
|
|
34
|
+
should_1.default.deepEqual(json.publicKey, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.pubKey)));
|
|
35
|
+
should_1.default.deepEqual(json.sequence, testTx.sequence);
|
|
36
|
+
const rawTx = tx.toBroadcastFormat();
|
|
37
|
+
should_1.default.equal(rawTx, testTx.signedTxBase64);
|
|
38
|
+
should_1.default.deepEqual(tx.inputs, [
|
|
39
|
+
{
|
|
40
|
+
address: testTx.sender,
|
|
41
|
+
value: testTx.sendMessage.value.amount[0].amount,
|
|
42
|
+
coin: testData.testnetCoin,
|
|
43
|
+
},
|
|
44
|
+
]);
|
|
45
|
+
should_1.default.deepEqual(tx.outputs, [
|
|
46
|
+
{
|
|
47
|
+
address: testTx.sendMessage.value.toAddress,
|
|
48
|
+
value: testTx.sendMessage.value.amount[0].amount,
|
|
49
|
+
coin: testData.testnetCoin,
|
|
50
|
+
},
|
|
51
|
+
]);
|
|
52
|
+
});
|
|
53
|
+
it('should build a Transfer tx with signature and memo', async function () {
|
|
54
|
+
const txBuilder = factory.getTransferBuilder();
|
|
55
|
+
txBuilder.sequence(testTxWithMemo.sequence);
|
|
56
|
+
txBuilder.gasBudget(testTxWithMemo.gasBudget);
|
|
57
|
+
txBuilder.messages([testTxWithMemo.sendMessage.value]);
|
|
58
|
+
txBuilder.publicKey((0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTxWithMemo.pubKey)));
|
|
59
|
+
txBuilder.memo(testTxWithMemo.memo);
|
|
60
|
+
txBuilder.addSignature({ pub: (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTxWithMemo.pubKey)) }, Buffer.from(testTxWithMemo.signature, 'base64'));
|
|
61
|
+
const tx = await txBuilder.build();
|
|
62
|
+
const json = await (await txBuilder.build()).toJson();
|
|
63
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
|
|
64
|
+
should_1.default.deepEqual(json.gasBudget, testTxWithMemo.gasBudget);
|
|
65
|
+
should_1.default.deepEqual(json.sendMessages, [testTxWithMemo.sendMessage]);
|
|
66
|
+
should_1.default.deepEqual(json.publicKey, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTxWithMemo.pubKey)));
|
|
67
|
+
should_1.default.deepEqual(json.sequence, testTxWithMemo.sequence);
|
|
68
|
+
should_1.default.equal(json.memo, testTxWithMemo.memo);
|
|
69
|
+
const rawTx = tx.toBroadcastFormat();
|
|
70
|
+
should_1.default.equal(rawTx, testTxWithMemo.signedTxBase64);
|
|
71
|
+
should_1.default.deepEqual(tx.inputs, [
|
|
72
|
+
{
|
|
73
|
+
address: testTxWithMemo.sender,
|
|
74
|
+
value: testTxWithMemo.sendMessage.value.amount[0].amount,
|
|
75
|
+
coin: testData.testnetCoin,
|
|
76
|
+
},
|
|
77
|
+
]);
|
|
78
|
+
should_1.default.deepEqual(tx.outputs, [
|
|
79
|
+
{
|
|
80
|
+
address: testTxWithMemo.sendMessage.value.toAddress,
|
|
81
|
+
value: testTxWithMemo.sendMessage.value.amount[0].amount,
|
|
82
|
+
coin: testData.testnetCoin,
|
|
83
|
+
},
|
|
84
|
+
]);
|
|
85
|
+
});
|
|
86
|
+
it('should build a Transfer tx without signature', async function () {
|
|
87
|
+
const txBuilder = factory.getTransferBuilder();
|
|
88
|
+
txBuilder.sequence(testTx.sequence);
|
|
89
|
+
txBuilder.gasBudget(testTx.gasBudget);
|
|
90
|
+
txBuilder.messages([testTx.sendMessage.value]);
|
|
91
|
+
txBuilder.publicKey((0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.pubKey)));
|
|
92
|
+
const tx = await txBuilder.build();
|
|
93
|
+
const json = await (await txBuilder.build()).toJson();
|
|
94
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
|
|
95
|
+
should_1.default.deepEqual(json.gasBudget, testTx.gasBudget);
|
|
96
|
+
should_1.default.deepEqual(json.sendMessages, [testTx.sendMessage]);
|
|
97
|
+
should_1.default.deepEqual(json.publicKey, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.pubKey)));
|
|
98
|
+
should_1.default.deepEqual(json.sequence, testTx.sequence);
|
|
99
|
+
tx.toBroadcastFormat();
|
|
100
|
+
should_1.default.deepEqual(tx.inputs, [
|
|
101
|
+
{
|
|
102
|
+
address: testTx.sender,
|
|
103
|
+
value: testTx.sendMessage.value.amount[0].amount,
|
|
104
|
+
coin: testData.testnetCoin,
|
|
105
|
+
},
|
|
106
|
+
]);
|
|
107
|
+
should_1.default.deepEqual(tx.outputs, [
|
|
108
|
+
{
|
|
109
|
+
address: testTx.sendMessage.value.toAddress,
|
|
110
|
+
value: testTx.sendMessage.value.amount[0].amount,
|
|
111
|
+
coin: testData.testnetCoin,
|
|
112
|
+
},
|
|
113
|
+
]);
|
|
114
|
+
});
|
|
115
|
+
it('should sign a Transfer tx', async function () {
|
|
116
|
+
const txBuilder = factory.getTransferBuilder();
|
|
117
|
+
txBuilder.sequence(testTx2.sequence);
|
|
118
|
+
txBuilder.gasBudget(testTx2.gasBudget);
|
|
119
|
+
txBuilder.messages([testTx2.sendMessage.value]);
|
|
120
|
+
txBuilder.accountNumber(testTx2.accountNumber);
|
|
121
|
+
txBuilder.chainId(testTx2.chainId);
|
|
122
|
+
txBuilder.sign({ key: (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx2.privateKey)) });
|
|
123
|
+
const tx = await txBuilder.build();
|
|
124
|
+
const json = await (await txBuilder.build()).toJson();
|
|
125
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
|
|
126
|
+
should_1.default.deepEqual(json.gasBudget, testTx2.gasBudget);
|
|
127
|
+
should_1.default.deepEqual(json.sendMessages, [testTx2.sendMessage]);
|
|
128
|
+
should_1.default.deepEqual(json.publicKey, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx2.pubKey)));
|
|
129
|
+
should_1.default.deepEqual(json.sequence, testTx2.sequence);
|
|
130
|
+
const rawTx = tx.toBroadcastFormat();
|
|
131
|
+
should_1.default.equal(tx.signature[0], (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx2.signature)));
|
|
132
|
+
should_1.default.equal(rawTx, testTx2.signedTxBase64);
|
|
133
|
+
should_1.default.deepEqual(tx.inputs, [
|
|
134
|
+
{
|
|
135
|
+
address: testTx2.sender,
|
|
136
|
+
value: testTx2.sendMessage.value.amount[0].amount,
|
|
137
|
+
coin: testData.testnetCoin,
|
|
138
|
+
},
|
|
139
|
+
]);
|
|
140
|
+
should_1.default.deepEqual(tx.outputs, [
|
|
141
|
+
{
|
|
142
|
+
address: testTx2.sendMessage.value.toAddress,
|
|
143
|
+
value: testTx2.sendMessage.value.amount[0].amount,
|
|
144
|
+
coin: testData.testnetCoin,
|
|
145
|
+
},
|
|
146
|
+
]);
|
|
147
|
+
});
|
|
148
|
+
it('should build a sendMany Transfer tx', async function () {
|
|
149
|
+
const txBuilder = factory.getTransferBuilder();
|
|
150
|
+
txBuilder.sequence(testSendManyTx.sequence);
|
|
151
|
+
txBuilder.gasBudget(testSendManyTx.gasBudget);
|
|
152
|
+
txBuilder.messages(testSendManyTx.sendMessages.map((msg) => msg.value));
|
|
153
|
+
txBuilder.publicKey((0, encoding_1.toHex)((0, encoding_1.fromBase64)(testSendManyTx.pubKey)));
|
|
154
|
+
txBuilder.chainId(testSendManyTx.chainId);
|
|
155
|
+
txBuilder.accountNumber(testSendManyTx.accountNumber);
|
|
156
|
+
txBuilder.memo(testSendManyTx.memo);
|
|
157
|
+
txBuilder.addSignature({ pub: (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testSendManyTx.pubKey)) }, Buffer.from(testSendManyTx.signature, 'base64'));
|
|
158
|
+
const tx = await txBuilder.build();
|
|
159
|
+
const json = await (await txBuilder.build()).toJson();
|
|
160
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
|
|
161
|
+
should_1.default.deepEqual(json.gasBudget, testSendManyTx.gasBudget);
|
|
162
|
+
should_1.default.deepEqual(json.sendMessages, testSendManyTx.sendMessages);
|
|
163
|
+
should_1.default.deepEqual(json.publicKey, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testSendManyTx.pubKey)));
|
|
164
|
+
should_1.default.deepEqual(json.sequence, testSendManyTx.sequence);
|
|
165
|
+
should_1.default.deepEqual(tx.inputs, testSendManyTx.sendMessages.map((msg) => {
|
|
166
|
+
return {
|
|
167
|
+
address: msg.value.fromAddress,
|
|
168
|
+
value: msg.value.amount[0].amount,
|
|
169
|
+
coin: testData.testnetCoin,
|
|
170
|
+
};
|
|
171
|
+
}));
|
|
172
|
+
should_1.default.deepEqual(tx.outputs, testSendManyTx.sendMessages.map((msg) => {
|
|
173
|
+
return {
|
|
174
|
+
address: msg.value.toAddress,
|
|
175
|
+
value: msg.value.amount[0].amount,
|
|
176
|
+
coin: testData.testnetCoin,
|
|
177
|
+
};
|
|
178
|
+
}));
|
|
179
|
+
should_1.default.equal(tx.id, testSendManyTx.hash);
|
|
180
|
+
const rawTx = tx.toBroadcastFormat();
|
|
181
|
+
should_1.default.equal(rawTx, testSendManyTx.signedTxBase64);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsK0NBQXFEO0FBQ3JELG1EQUF1RDtBQUN2RCwrQ0FBd0Y7QUFFeEYsUUFBUSxDQUFDLHlCQUF5QixFQUFFO0lBQ2xDLE1BQU0sY0FBYyxHQUFHLElBQUEsaUNBQXFCLEdBQUUsQ0FBQztJQUMvQyx5RkFBeUY7SUFDekYsaURBQWlEO0lBQ2pELGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNsQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFFO1lBQ3JELE1BQU0sUUFBUSxHQUFHLElBQUEsdUJBQVcsRUFBQyxRQUFRLENBQUMsQ0FBQztZQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFBLDZCQUFpQixFQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN4RCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsVUFBa0QsQ0FBQztZQUMzRSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsV0FBb0QsQ0FBQztZQUM5RSxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBMEQsQ0FBQztZQUMzRixNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBMEQsQ0FBQztZQUMzRixFQUFFLENBQUMsMkNBQTJDLEVBQUUsS0FBSztnQkFDbkQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQy9DLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFVLENBQUMsQ0FBQztnQkFDdkMsU0FBUyxDQUFDLFFBQVEsQ0FB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LEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTt3QkFDakMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxXQUFXO3FCQUMzQixDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7Z0JBQ0YsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUNyQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3JELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgZnJvbUJhc2U2NCwgdG9IZXggfSBmcm9tICdAY29zbWpzL2VuY29kaW5nJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGdldEF2YWlsYWJsZVRlc3RDb2lucywgZ2V0QnVpbGRlckZhY3RvcnksIGdldFRlc3REYXRhIH0gZnJvbSAnLi4vLi4vdGVzdFV0aWxzJztcblxuZGVzY3JpYmUoJ0Nvc21vcyBUcmFuc2ZlciBCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBhdmFpbGFibGVDb2lucyA9IGdldEF2YWlsYWJsZVRlc3RDb2lucygpO1xuICAvLyBUT0RPOiBDT0lOLTUwMzkgLSAgUnVubmluZyB0ZXN0cyBmb3IgZWFjaCBjb2luIGluIHBhcmFsbGVsIHRvIGltcHJvdmUgdGVzdCBwZXJmb3JtYW5jZVxuICAvLyBMb29wIHRocm91Z2ggZWFjaCBhdmFpbGFibGUgY29pbiBhbmQgcnVuIHRlc3RzXG4gIGF2YWlsYWJsZUNvaW5zLmZvckVhY2goKGNvaW5OYW1lKSA9PiB7XG4gICAgZGVzY3JpYmUoYCR7Y29pbk5hbWUudG9VcHBlckNhc2UoKX0gVHJhbnNmZXIgQnVpbGRlcmAsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRlc3REYXRhID0gZ2V0VGVzdERhdGEoY29pbk5hbWUpO1xuICAgICAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KHRlc3REYXRhLnRlc3RuZXRDb2luKTtcbiAgICAgIGNvbnN0IHRlc3RUeCA9IHRlc3REYXRhLnRlc3RTZW5kVHggYXMgUmVxdWlyZWQ8dHlwZW9mIHRlc3REYXRhLnRlc3RTZW5kVHg+O1xuICAgICAgY29uc3QgdGVzdFR4MiA9IHRlc3REYXRhLnRlc3RTZW5kVHgyIGFzIFJlcXVpcmVkPHR5cGVvZiB0ZXN0RGF0YS50ZXN0U2VuZFR4Mj47XG4gICAgICBjb25zdCB0ZXN0VHhXaXRoTWVtbyA9IHRlc3REYXRhLnRlc3RUeFdpdGhNZW1vIGFzIFJlcXVpcmVkPHR5cGVvZiB0ZXN0RGF0YS50ZXN0VHhXaXRoTWVtbz47XG4gICAgICBjb25zdCB0ZXN0U2VuZE1hbnlUeCA9IHRlc3REYXRhLnRlc3RTZW5kTWFueVR4IGFzIFJlcXVpcmVkPHR5cGVvZiB0ZXN0RGF0YS50ZXN0U2VuZE1hbnlUeD47XG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgVHJhbnNmZXIgdHggd2l0aCBzaWduYXR1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5zZXF1ZW5jZSh0ZXN0VHguc2VxdWVuY2UpO1xuICAgICAgICB0eEJ1aWxkZXIuZ2FzQnVkZ2V0KHRlc3RUeC5nYXNCdWRnZXQhKTtcbiAgICAgICAgdHhCdWlsZGVyLm1lc3NhZ2VzKFt0ZXN0VHguc2VuZE1lc3NhZ2UhLnZhbHVlXSk7XG4gICAgICAgIHR4QnVpbGRlci5wdWJsaWNLZXkodG9IZXgoZnJvbUJhc2U2NCh0ZXN0VHgucHViS2V5ISkpKTtcbiAgICAgICAgdHhCdWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1YjogdG9IZXgoZnJvbUJhc2U2NCh0ZXN0VHgucHViS2V5KSkgfSwgQnVmZmVyLmZyb20odGVzdFR4LnNpZ25hdHVyZSwgJ2Jhc2U2NCcpKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKS50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChqc29uLmdhc0J1ZGdldCwgdGVzdFR4Lmdhc0J1ZGdldCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5zZW5kTWVzc2FnZXMsIFt0ZXN0VHguc2VuZE1lc3NhZ2VdKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChqc29uLnB1YmxpY0tleSwgdG9IZXgoZnJvbUJhc2U2NCh0ZXN0VHgucHViS2V5KSkpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uc2VxdWVuY2UsIHRlc3RUeC5zZXF1ZW5jZSk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0VHguc2lnbmVkVHhCYXNlNjQpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LmlucHV0cywgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRlc3RUeC5zZW5kZXIsXG4gICAgICAgICAgICB2YWx1ZTogdGVzdFR4LnNlbmRNZXNzYWdlLnZhbHVlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiB0ZXN0RGF0YS50ZXN0bmV0Q29pbixcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5vdXRwdXRzLCBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdFR4LnNlbmRNZXNzYWdlLnZhbHVlLnRvQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiB0ZXN0VHguc2VuZE1lc3NhZ2UudmFsdWUuYW1vdW50WzBdLmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IHRlc3REYXRhLnRlc3RuZXRDb2luLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBUcmFuc2ZlciB0eCB3aXRoIHNpZ25hdHVyZSBhbmQgbWVtbycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLnNlcXVlbmNlKHRlc3RUeFdpdGhNZW1vLnNlcXVlbmNlKTtcbiAgICAgICAgdHhCdWlsZGVyLmdhc0J1ZGdldCh0ZXN0VHhXaXRoTWVtby5nYXNCdWRnZXQpO1xuICAgICAgICB0eEJ1aWxkZXIubWVzc2FnZXMoW3Rlc3RUeFdpdGhNZW1vLnNlbmRNZXNzYWdlLnZhbHVlXSk7XG4gICAgICAgIHR4QnVpbGRlci5wdWJsaWNLZXkodG9IZXgoZnJvbUJhc2U2NCh0ZXN0VHhXaXRoTWVtby5wdWJLZXkpKSk7XG4gICAgICAgIHR4QnVpbGRlci5tZW1vKHRlc3RUeFdpdGhNZW1vLm1lbW8pO1xuICAgICAgICB0eEJ1aWxkZXIuYWRkU2lnbmF0dXJlKFxuICAgICAgICAgIHsgcHViOiB0b0hleChmcm9tQmFzZTY0KHRlc3RUeFdpdGhNZW1vLnB1YktleSkpIH0sXG4gICAgICAgICAgQnVmZmVyLmZyb20odGVzdFR4V2l0aE1lbW8uc2lnbmF0dXJlLCAnYmFzZTY0JylcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKS50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChqc29uLmdhc0J1ZGdldCwgdGVzdFR4V2l0aE1lbW8uZ2FzQnVkZ2V0KTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChqc29uLnNlbmRNZXNzYWdlcywgW3Rlc3RUeFdpdGhNZW1vLnNlbmRNZXNzYWdlXSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5wdWJsaWNLZXksIHRvSGV4KGZyb21CYXNlNjQodGVzdFR4V2l0aE1lbW8ucHViS2V5KSkpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uc2VxdWVuY2UsIHRlc3RUeFdpdGhNZW1vLnNlcXVlbmNlKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGpzb24ubWVtbywgdGVzdFR4V2l0aE1lbW8ubWVtbyk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0VHhXaXRoTWVtby5zaWduZWRUeEJhc2U2NCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHguaW5wdXRzLCBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdFR4V2l0aE1lbW8uc2VuZGVyLFxuICAgICAgICAgICAgdmFsdWU6IHRlc3RUeFdpdGhNZW1vLnNlbmRNZXNzYWdlLnZhbHVlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiB0ZXN0RGF0YS50ZXN0bmV0Q29pbixcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5vdXRwdXRzLCBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdFR4V2l0aE1lbW8uc2VuZE1lc3NhZ2UudmFsdWUudG9BZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IHRlc3RUeFdpdGhNZW1vLnNlbmRNZXNzYWdlLnZhbHVlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiB0ZXN0RGF0YS50ZXN0bmV0Q29pbixcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgVHJhbnNmZXIgdHggd2l0aG91dCBzaWduYXR1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5zZXF1ZW5jZSh0ZXN0VHguc2VxdWVuY2UpO1xuICAgICAgICB0eEJ1aWxkZXIuZ2FzQnVkZ2V0KHRlc3RUeC5nYXNCdWRnZXQpO1xuICAgICAgICB0eEJ1aWxkZXIubWVzc2FnZXMoW3Rlc3RUeC5zZW5kTWVzc2FnZS52YWx1ZV0pO1xuICAgICAgICB0eEJ1aWxkZXIucHVibGljS2V5KHRvSGV4KGZyb21CYXNlNjQodGVzdFR4LnB1YktleSkpKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5nYXNCdWRnZXQsIHRlc3RUeC5nYXNCdWRnZXQpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uc2VuZE1lc3NhZ2VzLCBbdGVzdFR4LnNlbmRNZXNzYWdlXSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5wdWJsaWNLZXksIHRvSGV4KGZyb21CYXNlNjQodGVzdFR4LnB1YktleSkpKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChqc29uLnNlcXVlbmNlLCB0ZXN0VHguc2VxdWVuY2UpO1xuICAgICAgICB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LmlucHV0cywgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRlc3RUeC5zZW5kZXIsXG4gICAgICAgICAgICB2YWx1ZTogdGVzdFR4LnNlbmRNZXNzYWdlLnZhbHVlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiB0ZXN0RGF0YS50ZXN0bmV0Q29pbixcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5vdXRwdXRzLCBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdFR4LnNlbmRNZXNzYWdlLnZhbHVlLnRvQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiB0ZXN0VHguc2VuZE1lc3NhZ2UudmFsdWUuYW1vdW50WzBdLmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IHRlc3REYXRhLnRlc3RuZXRDb2luLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc2lnbiBhIFRyYW5zZmVyIHR4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIuc2VxdWVuY2UodGVzdFR4Mi5zZXF1ZW5jZSk7XG4gICAgICAgIHR4QnVpbGRlci5nYXNCdWRnZXQodGVzdFR4Mi5nYXNCdWRnZXQpO1xuICAgICAgICB0eEJ1aWxkZXIubWVzc2FnZXMoW3Rlc3RUeDIuc2VuZE1lc3NhZ2UudmFsdWVdKTtcbiAgICAgICAgdHhCdWlsZGVyLmFjY291bnROdW1iZXIodGVzdFR4Mi5hY2NvdW50TnVtYmVyKTtcbiAgICAgICAgdHhCdWlsZGVyLmNoYWluSWQodGVzdFR4Mi5jaGFpbklkKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRvSGV4KGZyb21CYXNlNjQodGVzdFR4Mi5wcml2YXRlS2V5KSkgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpLnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uZ2FzQnVkZ2V0LCB0ZXN0VHgyLmdhc0J1ZGdldCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5zZW5kTWVzc2FnZXMsIFt0ZXN0VHgyLnNlbmRNZXNzYWdlXSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5wdWJsaWNLZXksIHRvSGV4KGZyb21CYXNlNjQodGVzdFR4Mi5wdWJLZXkpKSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5zZXF1ZW5jZSwgdGVzdFR4Mi5zZXF1ZW5jZSk7XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4LnNpZ25hdHVyZVswXSwgdG9IZXgoZnJvbUJhc2U2NCh0ZXN0VHgyLnNpZ25hdHVyZSkpKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3RUeDIuc2lnbmVkVHhCYXNlNjQpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LmlucHV0cywgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRlc3RUeDIuc2VuZGVyLFxuICAgICAgICAgICAgdmFsdWU6IHRlc3RUeDIuc2VuZE1lc3NhZ2UudmFsdWUuYW1vdW50WzBdLmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IHRlc3REYXRhLnRlc3RuZXRDb2luLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4Lm91dHB1dHMsIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0VHgyLnNlbmRNZXNzYWdlLnZhbHVlLnRvQWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiB0ZXN0VHgyLnNlbmRNZXNzYWdlLnZhbHVlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiB0ZXN0RGF0YS50ZXN0bmV0Q29pbixcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2VuZE1hbnkgVHJhbnNmZXIgdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5zZXF1ZW5jZSh0ZXN0U2VuZE1hbnlUeC5zZXF1ZW5jZSk7XG4gICAgICAgIHR4QnVpbGRlci5nYXNCdWRnZXQodGVzdFNlbmRNYW55VHguZ2FzQnVkZ2V0KTtcbiAgICAgICAgdHhCdWlsZGVyLm1lc3NhZ2VzKHRlc3RTZW5kTWFueVR4LnNlbmRNZXNzYWdlcy5tYXAoKG1zZykgPT4gbXNnLnZhbHVlKSk7XG4gICAgICAgIHR4QnVpbGRlci5wdWJsaWNLZXkodG9IZXgoZnJvbUJhc2U2NCh0ZXN0U2VuZE1hbnlUeC5wdWJLZXkpKSk7XG4gICAgICAgIHR4QnVpbGRlci5jaGFpbklkKHRlc3RTZW5kTWFueVR4LmNoYWluSWQpO1xuICAgICAgICB0eEJ1aWxkZXIuYWNjb3VudE51bWJlcih0ZXN0U2VuZE1hbnlUeC5hY2NvdW50TnVtYmVyKTtcbiAgICAgICAgdHhCdWlsZGVyLm1lbW8odGVzdFNlbmRNYW55VHgubWVtbyk7XG4gICAgICAgIHR4QnVpbGRlci5hZGRTaWduYXR1cmUoXG4gICAgICAgICAgeyBwdWI6IHRvSGV4KGZyb21CYXNlNjQodGVzdFNlbmRNYW55VHgucHViS2V5KSkgfSxcbiAgICAgICAgICBCdWZmZXIuZnJvbSh0ZXN0U2VuZE1hbnlUeC5zaWduYXR1cmUsICdiYXNlNjQnKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpLnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uZ2FzQnVkZ2V0LCB0ZXN0U2VuZE1hbnlUeC5nYXNCdWRnZXQpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uc2VuZE1lc3NhZ2VzLCB0ZXN0U2VuZE1hbnlUeC5zZW5kTWVzc2FnZXMpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24ucHVibGljS2V5LCB0b0hleChmcm9tQmFzZTY0KHRlc3RTZW5kTWFueVR4LnB1YktleSkpKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChqc29uLnNlcXVlbmNlLCB0ZXN0U2VuZE1hbnlUeC5zZXF1ZW5jZSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwoXG4gICAgICAgICAgdHguaW5wdXRzLFxuICAgICAgICAgIHRlc3RTZW5kTWFueVR4LnNlbmRNZXNzYWdlcy5tYXAoKG1zZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogbXNnLnZhbHVlLmZyb21BZGRyZXNzLFxuICAgICAgICAgICAgICB2YWx1ZTogbXNnLnZhbHVlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgICAgICAgIGNvaW46IHRlc3REYXRhLnRlc3RuZXRDb2luLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKFxuICAgICAgICAgIHR4Lm91dHB1dHMsXG4gICAgICAgICAgdGVzdFNlbmRNYW55VHguc2VuZE1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBhZGRyZXNzOiBtc2cudmFsdWUudG9BZGRyZXNzLFxuICAgICAgICAgICAgICB2YWx1ZTogbXNnLnZhbHVlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgICAgICAgIGNvaW46IHRlc3REYXRhLnRlc3RuZXRDb2luLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICBzaG91bGQuZXF1YWwodHguaWQsIHRlc3RTZW5kTWFueVR4Lmhhc2gpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdFNlbmRNYW55VHguc2lnbmVkVHhCYXNlNjQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../test/unit/utils.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,82 @@
|
|
|
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
|
+
const should_1 = __importDefault(require("should"));
|
|
7
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
8
|
+
const testUtils_1 = require("../testUtils");
|
|
9
|
+
const src_1 = require("../../src");
|
|
10
|
+
describe('Cosmos Utils', function () {
|
|
11
|
+
const availableCoins = (0, testUtils_1.getAvailableTestCoins)();
|
|
12
|
+
// TODO: COIN-5039 - Running tests for each coin in parallel to improve test performance
|
|
13
|
+
// Loop through each available coin and run tests
|
|
14
|
+
availableCoins.forEach((coinName) => {
|
|
15
|
+
describe(`${coinName} Utils`, function () {
|
|
16
|
+
const testData = (0, testUtils_1.getTestData)(coinName);
|
|
17
|
+
const addresses = testData.addresses;
|
|
18
|
+
const coin = statics_1.coins.get(testData.testnetCoin);
|
|
19
|
+
const network = coin.network;
|
|
20
|
+
const utils = new src_1.Utils(network);
|
|
21
|
+
describe('isValidAddress', function () {
|
|
22
|
+
it('should return true for valid address', function () {
|
|
23
|
+
should_1.default.equal(utils.isValidAddress(addresses.address1), true);
|
|
24
|
+
should_1.default.equal(utils.isValidAddress(addresses.address2), true);
|
|
25
|
+
});
|
|
26
|
+
it('should return false for invalid address', function () {
|
|
27
|
+
should_1.default.equal(utils.isValidAddress(addresses.address6), false);
|
|
28
|
+
should_1.default.equal(utils.isValidAddress('invalid'), false);
|
|
29
|
+
});
|
|
30
|
+
it('should validate memo id addresses correctly', function () {
|
|
31
|
+
should_1.default.equal(utils.isValidAddress(addresses.noMemoIdAddress), true);
|
|
32
|
+
should_1.default.equal(utils.isValidAddress(addresses.validMemoIdAddress), true);
|
|
33
|
+
should_1.default.equal(utils.isValidAddress(addresses.invalidMemoIdAddress), false);
|
|
34
|
+
should_1.default.equal(utils.isValidAddress(addresses.multipleMemoIdAddress), false);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('isValidValidatorAddress', function () {
|
|
38
|
+
it('should return true for valid validator address', function () {
|
|
39
|
+
should_1.default.equal(utils.isValidValidatorAddress(addresses.validatorAddress1), true);
|
|
40
|
+
should_1.default.equal(utils.isValidValidatorAddress(addresses.validatorAddress2), true);
|
|
41
|
+
});
|
|
42
|
+
it('should return false for invalid validator address', function () {
|
|
43
|
+
should_1.default.equal(utils.isValidValidatorAddress(addresses.address1), false);
|
|
44
|
+
should_1.default.equal(utils.isValidValidatorAddress('invalid'), false);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
describe('isValidContractAddress', function () {
|
|
48
|
+
it('should return true for valid contract address', function () {
|
|
49
|
+
// Contract addresses follow the same format as regular addresses
|
|
50
|
+
should_1.default.equal(utils.isValidContractAddress(addresses.address1), true);
|
|
51
|
+
should_1.default.equal(utils.isValidContractAddress(addresses.address2), true);
|
|
52
|
+
});
|
|
53
|
+
it('should return false for invalid contract address', function () {
|
|
54
|
+
should_1.default.equal(utils.isValidContractAddress(addresses.address6), false);
|
|
55
|
+
should_1.default.equal(utils.isValidContractAddress('invalid'), false);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
describe('validateAmount', function () {
|
|
59
|
+
it('should not throw for valid amount', function () {
|
|
60
|
+
should_1.default.doesNotThrow(() => {
|
|
61
|
+
utils.validateAmount(testData.coinAmounts.amount1);
|
|
62
|
+
utils.validateAmount(testData.coinAmounts.amount2);
|
|
63
|
+
utils.validateAmount(testData.coinAmounts.amount3);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
it('should throw for invalid amount', function () {
|
|
67
|
+
(0, should_1.default)(() => utils.validateAmount(testData.coinAmounts.amount4)).throwError(`Invalid amount: '${testData.coinAmounts.amount4.amount}' is not a valid positive integer`);
|
|
68
|
+
});
|
|
69
|
+
it('should throw for invalid denom', function () {
|
|
70
|
+
(0, should_1.default)(() => utils.validateAmount({ denom: 'invalid', amount: '100' })).throwError(`Invalid amount: denom 'invalid' is not a valid denomination`);
|
|
71
|
+
});
|
|
72
|
+
it('should throw for missing denom', function () {
|
|
73
|
+
(0, should_1.default)(() => utils.validateAmount({ amount: '100' })).throwError(`Invalid amount: missing denom`);
|
|
74
|
+
});
|
|
75
|
+
it('should throw for missing amount', function () {
|
|
76
|
+
should_1.default.throws(() => utils.validateAmount({ denom: testData.baseDenom }), 'Invalid amount: missing amount');
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsaURBQTJEO0FBQzNELDRDQUFrRTtBQUNsRSxtQ0FBa0M7QUFFbEMsUUFBUSxDQUFDLGNBQWMsRUFBRTtJQUN2QixNQUFNLGNBQWMsR0FBRyxJQUFBLGlDQUFxQixHQUFFLENBQUM7SUFDL0MseUZBQXlGO0lBQ3pGLGlEQUFpRDtJQUNqRCxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDbEMsUUFBUSxDQUFDLEdBQUcsUUFBUSxRQUFRLEVBQUU7WUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBQSx1QkFBVyxFQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFnRCxDQUFDO1lBQzVFLE1BQU0sSUFBSSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUF3QixDQUFDO1lBQzlDLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWpDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDekIsRUFBRSxDQUFDLHNDQUFzQyxFQUFFO29CQUN6QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDN0QsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELENBQUMsQ0FBQyxDQUFDO2dCQUVILEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRTtvQkFDNUMsZ0JBQU0sQ0FBQyxL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QUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgY29pbnMsIENvc21vc05ldHdvcmsgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IGdldEF2YWlsYWJsZVRlc3RDb2lucywgZ2V0VGVzdERhdGEgfSBmcm9tICcuLi90ZXN0VXRpbHMnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi9zcmMnO1xuXG5kZXNjcmliZSgnQ29zbW9zIFV0aWxzJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBhdmFpbGFibGVDb2lucyA9IGdldEF2YWlsYWJsZVRlc3RDb2lucygpO1xuICAvLyBUT0RPOiBDT0lOLTUwMzkgLSAgUnVubmluZyB0ZXN0cyBmb3IgZWFjaCBjb2luIGluIHBhcmFsbGVsIHRvIGltcHJvdmUgdGVzdCBwZXJmb3JtYW5jZVxuICAvLyBMb29wIHRocm91Z2ggZWFjaCBhdmFpbGFibGUgY29pbiBhbmQgcnVuIHRlc3RzXG4gIGF2YWlsYWJsZUNvaW5zLmZvckVhY2goKGNvaW5OYW1lKSA9PiB7XG4gICAgZGVzY3JpYmUoYCR7Y29pbk5hbWV9IFV0aWxzYCwgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBnZXRUZXN0RGF0YShjb2luTmFtZSk7XG4gICAgICBjb25zdCBhZGRyZXNzZXMgPSB0ZXN0RGF0YS5hZGRyZXNzZXMgYXMgUmVxdWlyZWQ8dHlwZW9mIHRlc3REYXRhLmFkZHJlc3Nlcz47XG4gICAgICBjb25zdCBjb2luID0gY29pbnMuZ2V0KHRlc3REYXRhLnRlc3RuZXRDb2luKTtcbiAgICAgIGNvbnN0IG5ldHdvcmsgPSBjb2luLm5ldHdvcmsgYXMgQ29zbW9zTmV0d29yaztcbiAgICAgIGNvbnN0IHV0aWxzID0gbmV3IFV0aWxzKG5ldHdvcmspO1xuXG4gICAgICBkZXNjcmliZSgnaXNWYWxpZEFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIHZhbGlkIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3Nlcy5hZGRyZXNzMSksIHRydWUpO1xuICAgICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzZXMuYWRkcmVzczIpLCB0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIGludmFsaWQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzc2VzLmFkZHJlc3M2KSwgZmFsc2UpO1xuICAgICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcygnaW52YWxpZCcpLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbWVtbyBpZCBhZGRyZXNzZXMgY29ycmVjdGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzZXMubm9NZW1vSWRBZGRyZXNzKSwgdHJ1ZSk7XG4gICAgICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3Nlcy52YWxpZE1lbW9JZEFkZHJlc3MpLCB0cnVlKTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzc2VzLmludmFsaWRNZW1vSWRBZGRyZXNzKSwgZmFsc2UpO1xuICAgICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzZXMubXVsdGlwbGVNZW1vSWRBZGRyZXNzKSwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnaXNWYWxpZFZhbGlkYXRvckFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIHZhbGlkIHZhbGlkYXRvciBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVmFsaWRhdG9yQWRkcmVzcyhhZGRyZXNzZXMudmFsaWRhdG9yQWRkcmVzczEpLCB0cnVlKTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFZhbGlkYXRvckFkZHJlc3MoYWRkcmVzc2VzLnZhbGlkYXRvckFkZHJlc3MyKSwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBpbnZhbGlkIHZhbGlkYXRvciBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVmFsaWRhdG9yQWRkcmVzcyhhZGRyZXNzZXMuYWRkcmVzczEpLCBmYWxzZSk7XG4gICAgICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRWYWxpZGF0b3JBZGRyZXNzKCdpbnZhbGlkJyksIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ2lzVmFsaWRDb250cmFjdEFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIHZhbGlkIGNvbnRyYWN0IGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQ29udHJhY3QgYWRkcmVzc2VzIGZvbGxvdyB0aGUgc2FtZSBmb3JtYXQgYXMgcmVndWxhciBhZGRyZXNzZXNcbiAgICAgICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZENvbnRyYWN0QWRkcmVzcyhhZGRyZXNzZXMuYWRkcmVzczEpLCB0cnVlKTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZENvbnRyYWN0QWRkcmVzcyhhZGRyZXNzZXMuYWRkcmVzczIpLCB0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIGludmFsaWQgY29udHJhY3QgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZENvbnRyYWN0QWRkcmVzcyhhZGRyZXNzZXMuYWRkcmVzczYpLCBmYWxzZSk7XG4gICAgICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRDb250cmFjdEFkZHJlc3MoJ2ludmFsaWQnKSwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgndmFsaWRhdGVBbW91bnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgbm90IHRocm93IGZvciB2YWxpZCBhbW91bnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgICAgICB1dGlscy52YWxpZGF0ZUFtb3VudCh0ZXN0RGF0YS5jb2luQW1vdW50cy5hbW91bnQxKTtcbiAgICAgICAgICAgIHV0aWxzLnZhbGlkYXRlQW1vdW50KHRlc3REYXRhLmNvaW5BbW91bnRzLmFtb3VudDIpO1xuICAgICAgICAgICAgdXRpbHMudmFsaWRhdGVBbW91bnQodGVzdERhdGEuY29pbkFtb3VudHMuYW1vdW50Myk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGludmFsaWQgYW1vdW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNob3VsZCgoKSA9PiB1dGlscy52YWxpZGF0ZUFtb3VudCh0ZXN0RGF0YS5jb2luQW1vdW50cy5hbW91bnQ0KSkudGhyb3dFcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIGFtb3VudDogJyR7dGVzdERhdGEuY29pbkFtb3VudHMuYW1vdW50NC5hbW91bnR9JyBpcyBub3QgYSB2YWxpZCBwb3NpdGl2ZSBpbnRlZ2VyYFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGludmFsaWQgZGVub20nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2hvdWxkKCgpID0+IHV0aWxzLnZhbGlkYXRlQW1vdW50KHsgZGVub206ICdpbnZhbGlkJywgYW1vdW50OiAnMTAwJyB9KSkudGhyb3dFcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIGFtb3VudDogZGVub20gJ2ludmFsaWQnIGlzIG5vdCBhIHZhbGlkIGRlbm9taW5hdGlvbmBcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGZvciBtaXNzaW5nIGRlbm9tJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNob3VsZCgoKSA9PiB1dGlscy52YWxpZGF0ZUFtb3VudCh7IGFtb3VudDogJzEwMCcgfSBhcyBhbnkpKS50aHJvd0Vycm9yKGBJbnZhbGlkIGFtb3VudDogbWlzc2luZyBkZW5vbWApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGZvciBtaXNzaW5nIGFtb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaG91bGQudGhyb3dzKFxuICAgICAgICAgICAgKCkgPT4gdXRpbHMudmFsaWRhdGVBbW91bnQoeyBkZW5vbTogdGVzdERhdGEuYmFzZURlbm9tIH0gYXMgYW55KSxcbiAgICAgICAgICAgICdJbnZhbGlkIGFtb3VudDogbWlzc2luZyBhbW91bnQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|