@bitgo/sdk-coin-ton 4.0.4 → 4.0.6
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/cjs/src/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/index.js +1 -1
- package/dist/cjs/src/jettonToken.d.ts.map +1 -0
- package/dist/cjs/src/jettonToken.js +52 -0
- package/dist/cjs/src/lib/constants.d.ts.map +1 -0
- package/dist/cjs/src/lib/constants.js +12 -0
- package/dist/{src → cjs/src}/lib/explainTransactionWasm.d.ts +15 -1
- package/dist/cjs/src/lib/explainTransactionWasm.d.ts.map +1 -0
- package/dist/cjs/src/lib/explainTransactionWasm.js +104 -0
- package/dist/cjs/src/lib/iface.d.ts.map +1 -0
- package/dist/cjs/src/lib/iface.js +3 -0
- package/dist/cjs/src/lib/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/lib/index.js +1 -1
- package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
- package/dist/cjs/src/lib/keyPair.js +103 -0
- package/dist/cjs/src/lib/singleNominatorWithdrawBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/singleNominatorWithdrawBuilder.js +38 -0
- package/dist/cjs/src/lib/tokenTransaction.d.ts.map +1 -0
- package/dist/cjs/src/lib/tokenTransaction.js +97 -0
- package/dist/cjs/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/tokenTransferBuilder.js +57 -0
- package/dist/cjs/src/lib/tonWhalesDepositBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/tonWhalesDepositBuilder.js +42 -0
- package/dist/cjs/src/lib/tonWhalesVestingDepositBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/tonWhalesVestingDepositBuilder.js +37 -0
- package/dist/cjs/src/lib/tonWhalesVestingWithdrawBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/tonWhalesVestingWithdrawBuilder.js +37 -0
- package/dist/cjs/src/lib/tonWhalesWithdrawalBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/tonWhalesWithdrawalBuilder.js +60 -0
- package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
- package/dist/cjs/src/lib/transaction.js +415 -0
- package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionBuilder.js +152 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.js +100 -0
- package/dist/cjs/src/lib/transactionExplanation.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionExplanation.js +3 -0
- package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/transferBuilder.js +21 -0
- package/dist/cjs/src/lib/utils.d.ts.map +1 -0
- package/dist/cjs/src/lib/utils.js +159 -0
- package/dist/cjs/src/register.d.ts.map +1 -0
- package/dist/cjs/src/register.js +15 -0
- package/dist/cjs/src/ton.d.ts.map +1 -0
- package/dist/cjs/src/ton.js +520 -0
- package/dist/cjs/src/tton.d.ts.map +1 -0
- package/dist/cjs/src/tton.js +30 -0
- package/dist/cjs/test/resources/ton.d.ts.map +1 -0
- package/dist/cjs/test/resources/ton.js +208 -0
- package/dist/cjs/test/unit/explainTransactionWasm.d.ts.map +1 -0
- package/dist/cjs/test/unit/explainTransactionWasm.js +147 -0
- package/dist/cjs/test/unit/jettonToken.d.ts.map +1 -0
- package/dist/cjs/test/unit/jettonToken.js +341 -0
- package/dist/{test → cjs/test}/unit/keyPair.d.ts.map +1 -1
- package/dist/cjs/test/unit/keyPair.js +55 -0
- package/dist/cjs/test/unit/singleNominatorWithdrawBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/singleNominatorWithdrawBuilder.js +314 -0
- package/dist/cjs/test/unit/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/tokenTransferBuilder.js +262 -0
- package/dist/{test → cjs/test}/unit/ton.d.ts.map +1 -1
- package/dist/cjs/test/unit/ton.js +752 -0
- package/dist/cjs/test/unit/tonWhalesDepositBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/tonWhalesDepositBuilder.js +114 -0
- package/dist/cjs/test/unit/tonWhalesVestingDepositBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/tonWhalesVestingDepositBuilder.js +136 -0
- package/dist/cjs/test/unit/tonWhalesVestingWithdrawBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/tonWhalesVestingWithdrawBuilder.js +136 -0
- package/dist/cjs/test/unit/tonWhalesWithdrawalBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/tonWhalesWithdrawalBuilder.js +130 -0
- package/dist/cjs/test/unit/transferBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transferBuilder.js +281 -0
- package/dist/cjs/test/unit/wasmCrossCompatibility.d.ts.map +1 -0
- package/dist/cjs/test/unit/wasmCrossCompatibility.js +176 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/jettonToken.d.ts +19 -0
- package/dist/esm/jettonToken.js +48 -0
- package/dist/esm/lib/constants.d.ts +9 -0
- package/dist/esm/lib/constants.js +9 -0
- package/dist/esm/lib/explainTransactionWasm.d.ts +36 -0
- package/dist/esm/lib/explainTransactionWasm.d.ts.map +1 -0
- package/dist/esm/lib/explainTransactionWasm.js +99 -0
- package/dist/esm/lib/iface.d.ts +32 -0
- package/dist/{src → esm}/lib/iface.js +1 -2
- package/dist/esm/lib/index.d.ts +14 -0
- package/dist/esm/lib/index.js +14 -0
- package/dist/esm/lib/keyPair.d.ts +25 -0
- package/dist/esm/lib/keyPair.js +63 -0
- package/dist/esm/lib/singleNominatorWithdrawBuilder.d.ts +17 -0
- package/dist/esm/lib/singleNominatorWithdrawBuilder.js +34 -0
- package/dist/esm/lib/tokenTransaction.d.ts +16 -0
- package/dist/esm/lib/tokenTransaction.js +90 -0
- package/dist/esm/lib/tokenTransferBuilder.d.ts +20 -0
- package/dist/esm/lib/tokenTransferBuilder.js +53 -0
- package/dist/esm/lib/tonWhalesDepositBuilder.d.ts +12 -0
- package/dist/esm/lib/tonWhalesDepositBuilder.js +38 -0
- package/dist/esm/lib/tonWhalesVestingDepositBuilder.d.ts +12 -0
- package/dist/esm/lib/tonWhalesVestingDepositBuilder.js +33 -0
- package/dist/esm/lib/tonWhalesVestingWithdrawBuilder.d.ts +12 -0
- package/dist/esm/lib/tonWhalesVestingWithdrawBuilder.js +33 -0
- package/dist/esm/lib/tonWhalesWithdrawalBuilder.d.ts +30 -0
- package/dist/esm/lib/tonWhalesWithdrawalBuilder.js +56 -0
- package/dist/esm/lib/transaction.d.ts +42 -0
- package/dist/esm/lib/transaction.js +408 -0
- package/dist/esm/lib/transactionBuilder.d.ts +74 -0
- package/dist/esm/lib/transactionBuilder.js +145 -0
- package/dist/esm/lib/transactionBuilderFactory.d.ts +32 -0
- package/dist/esm/lib/transactionBuilderFactory.js +96 -0
- package/dist/esm/lib/transactionExplanation.d.ts +14 -0
- package/dist/{src → esm}/lib/transactionExplanation.js +1 -2
- package/dist/esm/lib/transferBuilder.d.ts +9 -0
- package/dist/esm/lib/transferBuilder.js +17 -0
- package/dist/esm/lib/utils.d.ts +41 -0
- package/dist/esm/lib/utils.js +151 -0
- package/dist/esm/register.d.ts +3 -0
- package/dist/esm/register.js +11 -0
- package/dist/esm/ton.d.ts +59 -0
- package/dist/{src → esm}/ton.d.ts.map +1 -1
- package/dist/esm/ton.js +480 -0
- package/dist/esm/tton.d.ts +22 -0
- package/dist/esm/tton.js +26 -0
- package/package.json +27 -10
- package/dist/src/jettonToken.js +0 -52
- package/dist/src/lib/constants.js +0 -12
- package/dist/src/lib/explainTransactionWasm.d.ts.map +0 -1
- package/dist/src/lib/explainTransactionWasm.js +0 -61
- package/dist/src/lib/keyPair.js +0 -103
- package/dist/src/lib/singleNominatorWithdrawBuilder.js +0 -38
- package/dist/src/lib/tokenTransaction.js +0 -97
- package/dist/src/lib/tokenTransferBuilder.js +0 -57
- package/dist/src/lib/tonWhalesDepositBuilder.js +0 -42
- package/dist/src/lib/tonWhalesVestingDepositBuilder.js +0 -37
- package/dist/src/lib/tonWhalesVestingWithdrawBuilder.js +0 -37
- package/dist/src/lib/tonWhalesWithdrawalBuilder.js +0 -60
- package/dist/src/lib/transaction.js +0 -415
- package/dist/src/lib/transactionBuilder.js +0 -152
- package/dist/src/lib/transactionBuilderFactory.js +0 -100
- package/dist/src/lib/transferBuilder.js +0 -21
- package/dist/src/lib/utils.js +0 -159
- package/dist/src/register.js +0 -15
- package/dist/src/ton.js +0 -525
- package/dist/src/tton.js +0 -30
- package/dist/test/resources/ton.d.ts.map +0 -1
- package/dist/test/resources/ton.js +0 -208
- package/dist/test/unit/explainTransactionWasm.d.ts.map +0 -1
- package/dist/test/unit/explainTransactionWasm.js +0 -147
- package/dist/test/unit/jettonToken.d.ts.map +0 -1
- package/dist/test/unit/jettonToken.js +0 -341
- package/dist/test/unit/keyPair.js +0 -55
- package/dist/test/unit/singleNominatorWithdrawBuilder.d.ts.map +0 -1
- package/dist/test/unit/singleNominatorWithdrawBuilder.js +0 -314
- package/dist/test/unit/tokenTransferBuilder.d.ts.map +0 -1
- package/dist/test/unit/tokenTransferBuilder.js +0 -262
- package/dist/test/unit/ton.js +0 -752
- package/dist/test/unit/tonWhalesDepositBuilder.d.ts.map +0 -1
- package/dist/test/unit/tonWhalesDepositBuilder.js +0 -114
- package/dist/test/unit/tonWhalesVestingDepositBuilder.d.ts.map +0 -1
- package/dist/test/unit/tonWhalesVestingDepositBuilder.js +0 -136
- package/dist/test/unit/tonWhalesVestingWithdrawBuilder.d.ts.map +0 -1
- package/dist/test/unit/tonWhalesVestingWithdrawBuilder.js +0 -136
- package/dist/test/unit/tonWhalesWithdrawalBuilder.d.ts.map +0 -1
- package/dist/test/unit/tonWhalesWithdrawalBuilder.js +0 -130
- package/dist/test/unit/transferBuilder.d.ts.map +0 -1
- package/dist/test/unit/transferBuilder.js +0 -281
- package/dist/test/unit/wasmCrossCompatibility.d.ts.map +0 -1
- package/dist/test/unit/wasmCrossCompatibility.js +0 -176
- package/dist/tsconfig.tsbuildinfo +0 -1
- /package/dist/{src → cjs/src}/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/jettonToken.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/constants.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/iface.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/keyPair.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/singleNominatorWithdrawBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/tokenTransaction.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/tokenTransferBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/tonWhalesDepositBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/tonWhalesVestingDepositBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/tonWhalesVestingWithdrawBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/tonWhalesWithdrawalBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/transaction.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/transactionBuilderFactory.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/transactionExplanation.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/transferBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/utils.d.ts +0 -0
- /package/dist/{src → cjs/src}/register.d.ts +0 -0
- /package/dist/{src → cjs/src}/ton.d.ts +0 -0
- /package/dist/{src → cjs/src}/tton.d.ts +0 -0
- /package/dist/{test → cjs/test}/resources/ton.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/explainTransactionWasm.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/jettonToken.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/keyPair.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/singleNominatorWithdrawBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/tokenTransferBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/ton.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/tonWhalesDepositBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/tonWhalesVestingDepositBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/tonWhalesVestingWithdrawBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/tonWhalesWithdrawalBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transferBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/wasmCrossCompatibility.d.ts +0 -0
- /package/dist/{src → esm}/index.d.ts.map +0 -0
- /package/dist/{src → esm}/jettonToken.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/constants.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/iface.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/index.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/keyPair.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/singleNominatorWithdrawBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/tokenTransaction.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/tokenTransferBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/tonWhalesDepositBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/tonWhalesVestingDepositBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/tonWhalesVestingWithdrawBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/tonWhalesWithdrawalBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/transaction.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/transactionBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/transactionBuilderFactory.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/transactionExplanation.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/transferBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/utils.d.ts.map +0 -0
- /package/dist/{src → esm}/register.d.ts.map +0 -0
- /package/dist/{src → esm}/tton.d.ts.map +0 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const tonweb_1 = __importDefault(require("tonweb"));
|
|
40
|
+
const should_1 = __importDefault(require("should"));
|
|
41
|
+
const sinon = __importStar(require("sinon"));
|
|
42
|
+
const sdk_test_1 = require("@bitgo/sdk-test");
|
|
43
|
+
const sdk_api_1 = require("@bitgo/sdk-api");
|
|
44
|
+
const src_1 = require("../../src");
|
|
45
|
+
const testData = __importStar(require("../resources/ton"));
|
|
46
|
+
describe('Jetton Tokens', function () {
|
|
47
|
+
let bitgo;
|
|
48
|
+
let testnetJettonToken;
|
|
49
|
+
let mainnetJettonToken;
|
|
50
|
+
const testnetTokenName = 'tton:ukwny-us';
|
|
51
|
+
const mainnetTokenName = 'ton:usdt';
|
|
52
|
+
const txPrebuildList = [
|
|
53
|
+
{
|
|
54
|
+
txHex: Buffer.from(testData.signedTokenSendTransaction.tx, 'base64').toString('hex'),
|
|
55
|
+
txInfo: {},
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
const txPrebuildBounceableList = [
|
|
59
|
+
{
|
|
60
|
+
txHex: Buffer.from(testData.signedTokenSendTransaction.txBounceable, 'base64').toString('hex'),
|
|
61
|
+
txInfo: {},
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
const txParamsList = [
|
|
65
|
+
{
|
|
66
|
+
recipients: [testData.signedTokenSendTransaction.recipient],
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
const txParamsBounceableList = [
|
|
70
|
+
{
|
|
71
|
+
recipients: [testData.signedTokenSendTransaction.recipientBounceable],
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
before(function () {
|
|
75
|
+
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
|
|
76
|
+
src_1.JettonToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
|
|
77
|
+
bitgo.safeRegister(name, coinConstructor);
|
|
78
|
+
});
|
|
79
|
+
bitgo.initializeTestVars();
|
|
80
|
+
testnetJettonToken = bitgo.coin(testnetTokenName);
|
|
81
|
+
mainnetJettonToken = bitgo.coin(mainnetTokenName);
|
|
82
|
+
});
|
|
83
|
+
it('should return constants for Testnet Ton token', function () {
|
|
84
|
+
testnetJettonToken.getChain().should.equal(testnetTokenName);
|
|
85
|
+
testnetJettonToken.getBaseChain().should.equal('tton');
|
|
86
|
+
testnetJettonToken.getFullName().should.equal('Ton Token');
|
|
87
|
+
testnetJettonToken.getBaseFactor().should.equal(1e9);
|
|
88
|
+
testnetJettonToken.type.should.equal(testnetTokenName);
|
|
89
|
+
testnetJettonToken.name.should.equal('Test Unknown TokenY-US');
|
|
90
|
+
testnetJettonToken.coin.should.equal('tton');
|
|
91
|
+
testnetJettonToken.network.should.equal('Testnet');
|
|
92
|
+
testnetJettonToken.contractAddress.should.equal('kQD8EQMavE1w6gvgMXUhN8hi7pSk4bKYM-W2dgkNqV54Y16Y');
|
|
93
|
+
testnetJettonToken.decimalPlaces.should.equal(9);
|
|
94
|
+
});
|
|
95
|
+
it('should return constants for Mainnet Ton token', function () {
|
|
96
|
+
mainnetJettonToken.getChain().should.equal(mainnetTokenName);
|
|
97
|
+
mainnetJettonToken.getBaseChain().should.equal('ton');
|
|
98
|
+
mainnetJettonToken.getFullName().should.equal('Ton Token');
|
|
99
|
+
mainnetJettonToken.getBaseFactor().should.equal(1e6);
|
|
100
|
+
mainnetJettonToken.type.should.equal(mainnetTokenName);
|
|
101
|
+
mainnetJettonToken.name.should.equal('Tether USD');
|
|
102
|
+
mainnetJettonToken.coin.should.equal('ton');
|
|
103
|
+
mainnetJettonToken.network.should.equal('Mainnet');
|
|
104
|
+
mainnetJettonToken.contractAddress.should.equal('EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs');
|
|
105
|
+
mainnetJettonToken.decimalPlaces.should.equal(6);
|
|
106
|
+
});
|
|
107
|
+
describe('Verify Jetton transaction: ', () => {
|
|
108
|
+
txParamsList.forEach((_, index) => {
|
|
109
|
+
const txParams = txParamsList[index];
|
|
110
|
+
const txPrebuild = txPrebuildList[index];
|
|
111
|
+
const txParamsBounceable = txParamsBounceableList[index];
|
|
112
|
+
const txPrebuildBounceable = txPrebuildBounceableList[index];
|
|
113
|
+
it('should succeed to verify transaction', async function () {
|
|
114
|
+
const verification = {};
|
|
115
|
+
const isTransactionVerified = await testnetJettonToken.verifyTransaction({
|
|
116
|
+
txParams,
|
|
117
|
+
txPrebuild,
|
|
118
|
+
verification,
|
|
119
|
+
});
|
|
120
|
+
isTransactionVerified.should.equal(true);
|
|
121
|
+
const isBounceableTransactionVerified = await testnetJettonToken.verifyTransaction({
|
|
122
|
+
txParams: txParamsBounceable,
|
|
123
|
+
txPrebuild: txPrebuildBounceable,
|
|
124
|
+
verification: {},
|
|
125
|
+
});
|
|
126
|
+
isBounceableTransactionVerified.should.equal(true);
|
|
127
|
+
});
|
|
128
|
+
it('should succeed to verify transaction when recipients amount are numbers', async function () {
|
|
129
|
+
const txParamsWithNumberAmounts = JSON.parse(JSON.stringify(txParams));
|
|
130
|
+
txParamsWithNumberAmounts.recipients[0].amount = 20000000;
|
|
131
|
+
const verification = {};
|
|
132
|
+
await testnetJettonToken
|
|
133
|
+
.verifyTransaction({
|
|
134
|
+
txParams: txParamsWithNumberAmounts,
|
|
135
|
+
txPrebuild,
|
|
136
|
+
verification,
|
|
137
|
+
})
|
|
138
|
+
.should.rejectedWith('Tx outputs does not match with expected txParams recipients');
|
|
139
|
+
});
|
|
140
|
+
it('should succeed to verify transaction when recipients amount are strings', async function () {
|
|
141
|
+
const txParamsWithNumberAmounts = JSON.parse(JSON.stringify(txParams));
|
|
142
|
+
txParamsWithNumberAmounts.recipients[0].amount = '20000000';
|
|
143
|
+
const verification = {};
|
|
144
|
+
await testnetJettonToken
|
|
145
|
+
.verifyTransaction({
|
|
146
|
+
txParams: txParamsWithNumberAmounts,
|
|
147
|
+
txPrebuild,
|
|
148
|
+
verification,
|
|
149
|
+
})
|
|
150
|
+
.should.rejectedWith('Tx outputs does not match with expected txParams recipients');
|
|
151
|
+
});
|
|
152
|
+
it('should succeed to verify transaction when recipients amounts are number and amount is same', async function () {
|
|
153
|
+
const verification = {};
|
|
154
|
+
await testnetJettonToken
|
|
155
|
+
.verifyTransaction({
|
|
156
|
+
txParams,
|
|
157
|
+
txPrebuild,
|
|
158
|
+
verification,
|
|
159
|
+
})
|
|
160
|
+
.should.resolvedWith(true);
|
|
161
|
+
});
|
|
162
|
+
it('should succeed to verify transaction when recipients amounts are string and amount is same', async function () {
|
|
163
|
+
const verification = {};
|
|
164
|
+
await testnetJettonToken
|
|
165
|
+
.verifyTransaction({
|
|
166
|
+
txParams,
|
|
167
|
+
txPrebuild,
|
|
168
|
+
verification,
|
|
169
|
+
})
|
|
170
|
+
.should.resolvedWith(true);
|
|
171
|
+
});
|
|
172
|
+
it('should succeed to verify transaction when recipient address are non bounceable', async function () {
|
|
173
|
+
const txParamsWithNumberAmounts = JSON.parse(JSON.stringify(txParams));
|
|
174
|
+
txParamsWithNumberAmounts.recipients[0].address = new tonweb_1.default.Address(txParamsWithNumberAmounts.recipients[0].address).toString(true, true, false);
|
|
175
|
+
const verification = {};
|
|
176
|
+
const isVerified = await testnetJettonToken.verifyTransaction({
|
|
177
|
+
txParams: txParamsWithNumberAmounts,
|
|
178
|
+
txPrebuild,
|
|
179
|
+
verification,
|
|
180
|
+
});
|
|
181
|
+
isVerified.should.equal(true);
|
|
182
|
+
});
|
|
183
|
+
it('should fail to verify transaction with invalid param', async function () {
|
|
184
|
+
const txPrebuild = {};
|
|
185
|
+
await testnetJettonToken
|
|
186
|
+
.verifyTransaction({
|
|
187
|
+
txParams,
|
|
188
|
+
txPrebuild,
|
|
189
|
+
})
|
|
190
|
+
.should.rejectedWith('missing required tx prebuild property txHex');
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
it('should succeed to verify transaction with recipient having memo', async function () {
|
|
194
|
+
const txParams = {
|
|
195
|
+
recipients: [testData.signedTokenSendTransactionForMemoId.recipient],
|
|
196
|
+
};
|
|
197
|
+
const txPrebuild = {
|
|
198
|
+
txHex: Buffer.from(testData.signedTokenSendTransactionForMemoId.tx, 'base64').toString('hex'),
|
|
199
|
+
txInfo: {},
|
|
200
|
+
};
|
|
201
|
+
const verification = {};
|
|
202
|
+
const isTransactionVerified = await testnetJettonToken.verifyTransaction({
|
|
203
|
+
txParams,
|
|
204
|
+
txPrebuild,
|
|
205
|
+
verification,
|
|
206
|
+
});
|
|
207
|
+
isTransactionVerified.should.equal(true);
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
describe('Explain Jetton Transaction: ', () => {
|
|
211
|
+
it('should explain a jetton transfer transaction', async function () {
|
|
212
|
+
const explainedTransaction = (await testnetJettonToken.explainTransaction({
|
|
213
|
+
txHex: Buffer.from(testData.signedTokenSendTransaction.tx, 'base64').toString('hex'),
|
|
214
|
+
}));
|
|
215
|
+
explainedTransaction.should.deepEqual({
|
|
216
|
+
displayOrder: ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'withdrawAmount'],
|
|
217
|
+
id: testData.signedTokenSendTransaction.txId,
|
|
218
|
+
outputs: [
|
|
219
|
+
{
|
|
220
|
+
address: testData.signedTokenSendTransaction.recipient.address,
|
|
221
|
+
amount: testData.signedTokenSendTransaction.recipient.amount,
|
|
222
|
+
},
|
|
223
|
+
],
|
|
224
|
+
outputAmount: testData.signedTokenSendTransaction.recipient.amount,
|
|
225
|
+
changeOutputs: [],
|
|
226
|
+
changeAmount: '0',
|
|
227
|
+
fee: { fee: 'UNKNOWN' },
|
|
228
|
+
withdrawAmount: undefined,
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
it('should explain a non-bounceable jetton transfer transaction', async function () {
|
|
232
|
+
const explainedTransaction = (await testnetJettonToken.explainTransaction({
|
|
233
|
+
txHex: Buffer.from(testData.signedTokenSendTransaction.txBounceable, 'base64').toString('hex'),
|
|
234
|
+
toAddressBounceable: false,
|
|
235
|
+
fromAddressBounceable: false,
|
|
236
|
+
}));
|
|
237
|
+
explainedTransaction.should.deepEqual({
|
|
238
|
+
displayOrder: ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'withdrawAmount'],
|
|
239
|
+
id: testData.signedTokenSendTransaction.txIdBounceable,
|
|
240
|
+
outputs: [
|
|
241
|
+
{
|
|
242
|
+
address: testData.signedTokenSendTransaction.recipientBounceable.address,
|
|
243
|
+
amount: testData.signedTokenSendTransaction.recipientBounceable.amount,
|
|
244
|
+
},
|
|
245
|
+
],
|
|
246
|
+
outputAmount: testData.signedTokenSendTransaction.recipientBounceable.amount,
|
|
247
|
+
changeOutputs: [],
|
|
248
|
+
changeAmount: '0',
|
|
249
|
+
fee: { fee: 'UNKNOWN' },
|
|
250
|
+
withdrawAmount: undefined,
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
it('should fail to explain transaction with missing params', async function () {
|
|
254
|
+
try {
|
|
255
|
+
await testnetJettonToken.explainTransaction({});
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
should_1.default.equal(error.message, 'Invalid transaction');
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
it('should fail to explain transaction with invalid params', async function () {
|
|
262
|
+
try {
|
|
263
|
+
await testnetJettonToken.explainTransaction({ txHex: 'randomString' });
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
should_1.default.equal(error.message, 'Invalid transaction');
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
describe('Parse Jetton Transactions: ', () => {
|
|
271
|
+
const transactionsList = [testData.signedTokenSendTransaction.tx];
|
|
272
|
+
const transactionInputsResponseList = [
|
|
273
|
+
[
|
|
274
|
+
{
|
|
275
|
+
address: 'EQCqQzfyg0cZ-8t9v2YoHmFFxG5jgjvQRTZ2yeDjO5z5ZRy9',
|
|
276
|
+
amount: testData.tokenRecipients[0].amount,
|
|
277
|
+
},
|
|
278
|
+
],
|
|
279
|
+
];
|
|
280
|
+
const transactionInputsResponseBounceableList = [
|
|
281
|
+
[
|
|
282
|
+
{
|
|
283
|
+
address: testData.tokenSender.address,
|
|
284
|
+
amount: testData.tokenRecipients[0].amount,
|
|
285
|
+
},
|
|
286
|
+
],
|
|
287
|
+
];
|
|
288
|
+
const transactionOutputsResponseList = [
|
|
289
|
+
[
|
|
290
|
+
{
|
|
291
|
+
address: 'EQB-CM6DF-jpq9XVdiSdefAMU5KC1gpZuYBFp-Q65aUhnx5K',
|
|
292
|
+
amount: testData.tokenRecipients[0].amount,
|
|
293
|
+
},
|
|
294
|
+
],
|
|
295
|
+
];
|
|
296
|
+
const transactionOutputsResponseBounceableList = [
|
|
297
|
+
[
|
|
298
|
+
{
|
|
299
|
+
address: testData.tokenRecipients[0].address,
|
|
300
|
+
amount: testData.tokenRecipients[0].amount,
|
|
301
|
+
},
|
|
302
|
+
],
|
|
303
|
+
];
|
|
304
|
+
transactionsList.forEach((_, index) => {
|
|
305
|
+
const transaction = transactionsList[index];
|
|
306
|
+
const transactionInputsResponse = transactionInputsResponseList[index];
|
|
307
|
+
const transactionInputsResponseBounceable = transactionInputsResponseBounceableList[index];
|
|
308
|
+
const transactionOutputsResponse = transactionOutputsResponseList[index];
|
|
309
|
+
const transactionOutputsResponseBounceable = transactionOutputsResponseBounceableList[index];
|
|
310
|
+
it('should parse a TON transaction', async function () {
|
|
311
|
+
const parsedTransaction = await testnetJettonToken.parseTransaction({
|
|
312
|
+
txHex: Buffer.from(transaction, 'base64').toString('hex'),
|
|
313
|
+
});
|
|
314
|
+
parsedTransaction.should.deepEqual({
|
|
315
|
+
inputs: transactionInputsResponse,
|
|
316
|
+
outputs: transactionOutputsResponse,
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
it('should parse a non-bounceable TON transaction', async function () {
|
|
320
|
+
const parsedTransaction = await testnetJettonToken.parseTransaction({
|
|
321
|
+
txHex: Buffer.from(transaction, 'base64').toString('hex'),
|
|
322
|
+
toAddressBounceable: false,
|
|
323
|
+
fromAddressBounceable: false,
|
|
324
|
+
});
|
|
325
|
+
parsedTransaction.should.deepEqual({
|
|
326
|
+
inputs: transactionInputsResponseBounceable,
|
|
327
|
+
outputs: transactionOutputsResponseBounceable,
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
it('should fail to parse a TON transaction when explainTransaction response is undefined', async function () {
|
|
331
|
+
const stub = sinon.stub(src_1.Ton.prototype, 'explainTransaction');
|
|
332
|
+
stub.resolves(undefined);
|
|
333
|
+
await testnetJettonToken
|
|
334
|
+
.parseTransaction({ txHex: transaction })
|
|
335
|
+
.should.be.rejectedWith('invalid raw transaction');
|
|
336
|
+
stub.restore();
|
|
337
|
+
});
|
|
338
|
+
});
|
|
339
|
+
});
|
|
340
|
+
});
|
|
341
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamV0dG9uVG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvamV0dG9uVG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLDZDQUErQjtBQUUvQiw4Q0FBMEQ7QUFDMUQsNENBQTBDO0FBQzFDLG1DQUF5RTtBQUN6RSwyREFBNkM7QUFFN0MsUUFBUSxDQUFDLGVBQWUsRUFBRTtJQUN4QixJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxrQkFBa0IsQ0FBQztJQUN2QixJQUFJLGtCQUFrQixDQUFDO0lBQ3ZCLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO0lBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDO0lBRXBDLE1BQU0sY0FBYyxHQUFHO1FBQ3JCO1lBQ0UsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ3BGLE1BQU0sRUFBRSxFQUFFO1NBQ1g7S0FDRixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsR0FBRztRQUMvQjtZQUNFLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUM5RixNQUFNLEVBQUUsRUFBRTtTQUNYO0tBQ0YsQ0FBQztJQUVGLE1BQU0sWUFBWSxHQUFHO1FBQ25CO1lBQ0UsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLFNBQVMsQ0FBQztTQUM1RDtLQUNGLENBQUM7SUFFRixNQUFNLHNCQUFzQixHQUFHO1FBQzdCO1lBQ0UsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLDBC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WUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVG9ud2ViIGZyb20gJ3RvbndlYic7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgSmV0dG9uVG9rZW4sIFRvbiwgVG9uUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3Rvbic7XG5cbmRlc2NyaWJlKCdKZXR0b24gVG9rZW5zJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IHRlc3RuZXRKZXR0b25Ub2tlbjtcbiAgbGV0IG1haW5uZXRKZXR0b25Ub2tlbjtcbiAgY29uc3QgdGVzdG5ldFRva2VuTmFtZSA9ICd0dG9uOnVrd255LXVzJztcbiAgY29uc3QgbWFpbm5ldFRva2VuTmFtZSA9ICd0b246dXNkdCc7XG5cbiAgY29uc3QgdHhQcmVidWlsZExpc3QgPSBbXG4gICAge1xuICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFRva2VuU2VuZFRyYW5zYWN0aW9uLnR4LCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgdHhJbmZvOiB7fSxcbiAgICB9LFxuICBdO1xuICBjb25zdCB0eFByZWJ1aWxkQm91bmNlYWJsZUxpc3QgPSBbXG4gICAge1xuICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFRva2VuU2VuZFRyYW5zYWN0aW9uLnR4Qm91bmNlYWJsZSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHR4SW5mbzoge30sXG4gICAgfSxcbiAgXTtcblxuICBjb25zdCB0eFBhcmFtc0xpc3QgPSBbXG4gICAge1xuICAgICAgcmVjaXBpZW50czogW3Rlc3REYXRhLnNpZ25lZFRva2VuU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudF0sXG4gICAgfSxcbiAgXTtcblxuICBjb25zdCB0eFBhcmFtc0JvdW5jZWFibGVMaXN0ID0gW1xuICAgIHtcbiAgICAgIHJlY2lwaWVudHM6IFt0ZXN0RGF0YS5zaWduZWRUb2tlblNlbmRUcmFuc2FjdGlvbi5yZWNpcGllbnRCb3VuY2VhYmxlXSxcbiAgICB9LFxuICBdO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgSmV0dG9uVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgICBiaXRnby5zYWZlUmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgICB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICB0ZXN0bmV0SmV0dG9uVG9rZW4gPSBiaXRnby5jb2luKHRlc3RuZXRUb2tlbk5hbWUpO1xuICAgIG1haW5uZXRKZXR0b25Ub2tlbiA9IGJpdGdvLmNvaW4obWFpbm5ldFRva2VuTmFtZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGNvbnN0YW50cyBmb3IgVGVzdG5ldCBUb24gdG9rZW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgdGVzdG5ldEpldHRvblRva2VuLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKHRlc3RuZXRUb2tlbk5hbWUpO1xuICAgIHRlc3RuZXRKZXR0b25Ub2tlbi5nZXRCYXNlQ2hhaW4oKS5zaG91bGQuZXF1YWwoJ3R0b24nKTtcbiAgICB0ZXN0bmV0SmV0dG9uVG9rZW4uZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1RvbiBUb2tlbicpO1xuICAgIHRlc3RuZXRKZXR0b25Ub2tlbi5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlOSk7XG4gICAgdGVzdG5ldEpldHRvblRva2VuLnR5cGUuc2hvdWxkLmVxdWFsKHRlc3RuZXRUb2tlbk5hbWUpO1xuICAgIHRlc3RuZXRKZXR0b25Ub2tlbi5uYW1lLnNob3VsZC5lcXVhbCgnVGVzdCBVbmtub3duIFRva2VuWS1VUycpO1xuICAgIHRlc3RuZXRKZXR0b25Ub2tlbi5jb2luLnNob3VsZC5lcXVhbCgndHRvbicpO1xuICAgIHRlc3RuZXRKZXR0b25Ub2tlbi5uZXR3b3JrLnNob3VsZC5lcXVhbCgnVGVzdG5ldCcpO1xuICAgIHRlc3RuZXRKZXR0b25Ub2tlbi5jb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKCdrUUQ4RVFNYXZFMXc2Z3ZnTVhVaE44aGk3cFNrNGJLWU0tVzJkZ2tOcVY1NFkxNlknKTtcbiAgICB0ZXN0bmV0SmV0dG9uVG9rZW4uZGVjaW1hbFBsYWNlcy5zaG91bGQuZXF1YWwoOSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGNvbnN0YW50cyBmb3IgTWFpbm5ldCBUb24gdG9rZW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgbWFpbm5ldEpldHRvblRva2VuLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKG1haW5uZXRUb2tlbk5hbWUpO1xuICAgIG1haW5uZXRKZXR0b25Ub2tlbi5nZXRCYXNlQ2hhaW4oKS5zaG91bGQuZXF1YWwoJ3RvbicpO1xuICAgIG1haW5uZXRKZXR0b25Ub2tlbi5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnVG9uIFRva2VuJyk7XG4gICAgbWFpbm5ldEpldHRvblRva2VuLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU2KTtcbiAgICBtYWlubmV0SmV0dG9uVG9rZW4udHlwZS5zaG91bGQuZXF1YWwobWFpbm5ldFRva2VuTmFtZSk7XG4gICAgbWFpbm5ldEpldHRvblRva2VuLm5hbWUuc2hvdWxkLmVxdWFsKCdUZXRoZXIgVVNEJyk7XG4gICAgbWFpbm5ldEpldHRvblRva2VuLmNvaW4uc2hvdWxkLmVxdWFsKCd0b24nKTtcbiAgICBtYWlubmV0SmV0dG9uVG9rZW4ubmV0d29yay5zaG91bGQuZXF1YWwoJ01haW5uZXQnKTtcbiAgICBtYWlubmV0SmV0dG9uVG9rZW4uY29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbCgnRVFDeEU2bVV0UUpLRm5HZmFST1RLT3QxbFpiRGlpWDFrQ2l4UnY3TncySWRfc0RzJyk7XG4gICAgbWFpbm5ldEpldHRvblRva2VuLmRlY2ltYWxQbGFjZXMuc2hvdWxkLmVxdWFsKDYpO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5IEpldHRvbiB0cmFuc2FjdGlvbjogJywgKCkgPT4ge1xuICAgIHR4UGFyYW1zTGlzdC5mb3JFYWNoKChfLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB0eFBhcmFtc0xpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHR4UHJlYnVpbGRMaXN0W2luZGV4XTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zQm91bmNlYWJsZSA9IHR4UGFyYW1zQm91bmNlYWJsZUxpc3RbaW5kZXhdO1xuICAgICAgY29uc3QgdHhQcmVidWlsZEJvdW5jZWFibGUgPSB0eFByZWJ1aWxkQm91bmNlYWJsZUxpc3RbaW5kZXhdO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgdGVzdG5ldEpldHRvblRva2VuLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgfSBhcyBhbnkpO1xuICAgICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuXG4gICAgICAgIGNvbnN0IGlzQm91bmNlYWJsZVRyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCB0ZXN0bmV0SmV0dG9uVG9rZW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtc0JvdW5jZWFibGUsXG4gICAgICAgICAgdHhQcmVidWlsZDogdHhQcmVidWlsZEJvdW5jZWFibGUsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uOiB7fSxcbiAgICAgICAgfSBhcyBhbnkpO1xuICAgICAgICBpc0JvdW5jZWFibGVUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdoZW4gcmVjaXBpZW50cyBhbW91bnQgYXJlIG51bWJlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHR4UGFyYW1zKSk7XG4gICAgICAgIHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMucmVjaXBpZW50c1swXS5hbW91bnQgPSAyMDAwMDAwMDtcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICAgIGF3YWl0IHRlc3RuZXRKZXR0b25Ub2tlblxuICAgICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFBhcmFtczogdHhQYXJhbXNXaXRoTnVtYmVyQW1vdW50cyxcbiAgICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgfSBhcyBhbnkpXG4gICAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnRzJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aGVuIHJlY2lwaWVudHMgYW1vdW50IGFyZSBzdHJpbmdzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0eFBhcmFtcykpO1xuICAgICAgICB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLnJlY2lwaWVudHNbMF0uYW1vdW50ID0gJzIwMDAwMDAwJztcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICAgIGF3YWl0IHRlc3RuZXRKZXR0b25Ub2tlblxuICAgICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFBhcmFtczogdHhQYXJhbXNXaXRoTnVtYmVyQW1vdW50cyxcbiAgICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgfSBhcyBhbnkpXG4gICAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnRzJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aGVuIHJlY2lwaWVudHMgYW1vdW50cyBhcmUgbnVtYmVyIGFuZCBhbW91bnQgaXMgc2FtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICAgIGF3YWl0IHRlc3RuZXRKZXR0b25Ub2tlblxuICAgICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgfSBhcyBhbnkpXG4gICAgICAgICAgLnNob3VsZC5yZXNvbHZlZFdpdGgodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aGVuIHJlY2lwaWVudHMgYW1vdW50cyBhcmUgc3RyaW5nIGFuZCBhbW91bnQgaXMgc2FtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICAgIGF3YWl0IHRlc3RuZXRKZXR0b25Ub2tlblxuICAgICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgfSBhcyBhbnkpXG4gICAgICAgICAgLnNob3VsZC5yZXNvbHZlZFdpdGgodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aGVuIHJlY2lwaWVudCBhZGRyZXNzIGFyZSBub24gYm91bmNlYWJsZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhQYXJhbXNXaXRoTnVtYmVyQW1vdW50cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodHhQYXJhbXMpKTtcbiAgICAgICAgdHhQYXJhbXNXaXRoTnVtYmVyQW1vdW50cy5yZWNpcGllbnRzWzBdLmFkZHJlc3MgPSBuZXcgVG9ud2ViLkFkZHJlc3MoXG4gICAgICAgICAgdHhQYXJhbXNXaXRoTnVtYmVyQW1vdW50cy5yZWNpcGllbnRzWzBdLmFkZHJlc3NcbiAgICAgICAgKS50b1N0cmluZyh0cnVlLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgICBjb25zdCBpc1ZlcmlmaWVkID0gYXdhaXQgdGVzdG5ldEpldHRvblRva2VuLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtczogdHhQYXJhbXNXaXRoTnVtYmVyQW1vdW50cyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgfSBhcyBhbnkpO1xuICAgICAgICBpc1ZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdpdGggaW52YWxpZCBwYXJhbScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHt9O1xuICAgICAgICBhd2FpdCB0ZXN0bmV0SmV0dG9uVG9rZW5cbiAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIH0gYXMgYW55KVxuICAgICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCByZWNpcGllbnQgaGF2aW5nIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW3Rlc3REYXRhLnNpZ25lZFRva2VuU2VuZFRyYW5zYWN0aW9uRm9yTWVtb0lkLnJlY2lwaWVudF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFRva2VuU2VuZFRyYW5zYWN0aW9uRm9yTWVtb0lkLnR4LCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgdGVzdG5ldEpldHRvblRva2VuLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgIH0gYXMgYW55KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFeHBsYWluIEpldHRvbiBUcmFuc2FjdGlvbjogJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIGpldHRvbiB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gKGF3YWl0IHRlc3RuZXRKZXR0b25Ub2tlbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEhleDogQnVmZmVyLmZyb20odGVzdERhdGEuc2lnbmVkVG9rZW5TZW5kVHJhbnNhY3Rpb24udHgsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JyksXG4gICAgICB9KSkgYXMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3dpdGhkcmF3QW1vdW50J10sXG4gICAgICAgIGlkOiB0ZXN0RGF0YS5zaWduZWRUb2tlblNlbmRUcmFuc2FjdGlvbi50eElkLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuc2lnbmVkVG9rZW5TZW5kVHJhbnNhY3Rpb24ucmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IHRlc3REYXRhLnNpZ25lZFRva2VuU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgb3V0cHV0QW1vdW50OiB0ZXN0RGF0YS5zaWduZWRUb2tlblNlbmRUcmFuc2FjdGlvbi5yZWNpcGllbnQuYW1vdW50LFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIGZlZTogeyBmZWU6ICdVTktOT1dOJyB9LFxuICAgICAgICB3aXRoZHJhd0Ftb3VudDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBub24tYm91bmNlYWJsZSBqZXR0b24gdHJhbnNmZXIgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleHBsYWluZWRUcmFuc2FjdGlvbiA9IChhd2FpdCB0ZXN0bmV0SmV0dG9uVG9rZW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNpZ25lZFRva2VuU2VuZFRyYW5zYWN0aW9uLnR4Qm91bmNlYWJsZSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdG9BZGRyZXNzQm91bmNlYWJsZTogZmFsc2UsXG4gICAgICAgIGZyb21BZGRyZXNzQm91bmNlYWJsZTogZmFsc2UsXG4gICAgICB9KSkgYXMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICBkaXNwbGF5T3JkZXI6IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3dpdGhkcmF3QW1vdW50J10sXG4gICAgICAgIGlkOiB0ZXN0RGF0YS5zaWduZWRUb2tlblNlbmRUcmFuc2FjdGlvbi50eElkQm91bmNlYWJsZSxcbiAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLnNpZ25lZFRva2VuU2VuZFRyYW5zYWN0aW9uLnJlY2lwaWVudEJvdW5jZWFibGUuYWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogdGVzdERhdGEuc2lnbmVkVG9rZW5TZW5kVHJhbnNhY3Rpb24ucmVjaXBpZW50Qm91bmNlYWJsZS5hbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgb3V0cHV0QW1vdW50OiB0ZXN0RGF0YS5zaWduZWRUb2tlblNlbmRUcmFuc2FjdGlvbi5yZWNpcGllbnRCb3VuY2VhYmxlLmFtb3VudCxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBmZWU6IHsgZmVlOiAnVU5LTk9XTicgfSxcbiAgICAgICAgd2l0aGRyYXdBbW91bnQ6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGV4cGxhaW4gdHJhbnNhY3Rpb24gd2l0aCBtaXNzaW5nIHBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRlc3RuZXRKZXR0b25Ub2tlbi5leHBsYWluVHJhbnNhY3Rpb24oe30pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGVycm9yLm1lc3NhZ2UsICdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZXhwbGFpbiB0cmFuc2FjdGlvbiB3aXRoIGludmFsaWQgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGVzdG5ldEpldHRvblRva2VuLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiAncmFuZG9tU3RyaW5nJyB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbChlcnJvci5tZXNzYWdlLCAnSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUGFyc2UgSmV0dG9uIFRyYW5zYWN0aW9uczogJywgKCkgPT4ge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uc0xpc3QgPSBbdGVzdERhdGEuc2lnbmVkVG9rZW5TZW5kVHJhbnNhY3Rpb24udHhdO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uSW5wdXRzUmVzcG9uc2VMaXN0ID0gW1xuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogJ0VRQ3FRemZ5ZzBjWi04dDl2MllvSG1GRnhHNWpnanZRUlRaMnllRGpPNXo1WlJ5OScsXG4gICAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS50b2tlblJlY2lwaWVudHNbMF0uYW1vdW50LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICBdO1xuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25JbnB1dHNSZXNwb25zZUJvdW5jZWFibGVMaXN0ID0gW1xuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogdGVzdERhdGEudG9rZW5TZW5kZXIuYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IHRlc3REYXRhLnRva2VuUmVjaXBpZW50c1swXS5hbW91bnQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIF07XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbk91dHB1dHNSZXNwb25zZUxpc3QgPSBbXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiAnRVFCLUNNNkRGLWpwcTlYVmRpU2RlZkFNVTVLQzFncFp1WUJGcC1RNjVhVWhueDVLJyxcbiAgICAgICAgICBhbW91bnQ6IHRlc3REYXRhLnRva2VuUmVjaXBpZW50c1swXS5hbW91bnQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIF07XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbk91dHB1dHNSZXNwb25zZUJvdW5jZWFibGVMaXN0ID0gW1xuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogdGVzdERhdGEudG9rZW5SZWNpcGllbnRzWzBdLmFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiB0ZXN0RGF0YS50b2tlblJlY2lwaWVudHNbMF0uYW1vdW50LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICBdO1xuXG4gICAgdHJhbnNhY3Rpb25zTGlzdC5mb3JFYWNoKChfLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbnNMaXN0W2luZGV4XTtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSW5wdXRzUmVzcG9uc2UgPSB0cmFuc2FjdGlvbklucHV0c1Jlc3BvbnNlTGlzdFtpbmRleF07XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbklucHV0c1Jlc3BvbnNlQm91bmNlYWJsZSA9IHRyYW5zYWN0aW9uSW5wdXRzUmVzcG9uc2VCb3VuY2VhYmxlTGlzdFtpbmRleF07XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbk91dHB1dHNSZXNwb25zZSA9IHRyYW5zYWN0aW9uT3V0cHV0c1Jlc3BvbnNlTGlzdFtpbmRleF07XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbk91dHB1dHNSZXNwb25zZUJvdW5jZWFibGUgPSB0cmFuc2FjdGlvbk91dHB1dHNSZXNwb25zZUJvdW5jZWFibGVMaXN0W2luZGV4XTtcblxuICAgICAgaXQoJ3Nob3VsZCBwYXJzZSBhIFRPTiB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHJhbnNhY3Rpb24gPSBhd2FpdCB0ZXN0bmV0SmV0dG9uVG9rZW4ucGFyc2VUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhIZXg6IEJ1ZmZlci5mcm9tKHRyYW5zYWN0aW9uLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9KTtcblxuICAgICAgICBwYXJzZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICBpbnB1dHM6IHRyYW5zYWN0aW9uSW5wdXRzUmVzcG9uc2UsXG4gICAgICAgICAgb3V0cHV0czogdHJhbnNhY3Rpb25PdXRwdXRzUmVzcG9uc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcGFyc2UgYSBub24tYm91bmNlYWJsZSBUT04gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgdGVzdG5ldEpldHRvblRva2VuLnBhcnNlVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4SGV4OiBCdWZmZXIuZnJvbSh0cmFuc2FjdGlvbiwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB0b0FkZHJlc3NCb3VuY2VhYmxlOiBmYWxzZSxcbiAgICAgICAgICBmcm9tQWRkcmVzc0JvdW5jZWFibGU6IGZhbHNlLFxuICAgICAgICB9IGFzIFRvblBhcnNlVHJhbnNhY3Rpb25PcHRpb25zKTtcblxuICAgICAgICBwYXJzZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICBpbnB1dHM6IHRyYW5zYWN0aW9uSW5wdXRzUmVzcG9uc2VCb3VuY2VhYmxlLFxuICAgICAgICAgIG91dHB1dHM6IHRyYW5zYWN0aW9uT3V0cHV0c1Jlc3BvbnNlQm91bmNlYWJsZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHBhcnNlIGEgVE9OIHRyYW5zYWN0aW9uIHdoZW4gZXhwbGFpblRyYW5zYWN0aW9uIHJlc3BvbnNlIGlzIHVuZGVmaW5lZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc3R1YiA9IHNpbm9uLnN0dWIoVG9uLnByb3RvdHlwZSwgJ2V4cGxhaW5UcmFuc2FjdGlvbicpO1xuICAgICAgICBzdHViLnJlc29sdmVzKHVuZGVmaW5lZCk7XG4gICAgICAgIGF3YWl0IHRlc3RuZXRKZXR0b25Ub2tlblxuICAgICAgICAgIC5wYXJzZVRyYW5zYWN0aW9uKHsgdHhIZXg6IHRyYW5zYWN0aW9uIH0pXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgICAgIHN0dWIucmVzdG9yZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../../test/unit/keyPair.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,55 @@
|
|
|
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 src_1 = require("../../src");
|
|
8
|
+
const utils_1 = __importDefault(require("../../src/lib/utils"));
|
|
9
|
+
const should_1 = __importDefault(require("should"));
|
|
10
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
11
|
+
const sdk_lib_mpc_1 = require("@bitgo/sdk-lib-mpc");
|
|
12
|
+
describe('Ton KeyPair', function () {
|
|
13
|
+
let rootKeychain;
|
|
14
|
+
let rootPublicKey;
|
|
15
|
+
let MPC;
|
|
16
|
+
let hdTree;
|
|
17
|
+
before(async () => {
|
|
18
|
+
hdTree = await sdk_lib_mpc_1.Ed25519Bip32HdTree.initialize();
|
|
19
|
+
MPC = await sdk_core_1.Eddsa.initialize(hdTree);
|
|
20
|
+
const A = MPC.keyShare(1, 2, 3);
|
|
21
|
+
const B = MPC.keyShare(2, 2, 3);
|
|
22
|
+
const C = MPC.keyShare(3, 2, 3);
|
|
23
|
+
const A_combine = MPC.keyCombine(A.uShare, [B.yShares[1], C.yShares[1]]);
|
|
24
|
+
const commonKeychain = A_combine.pShare.y + A_combine.pShare.chaincode;
|
|
25
|
+
rootKeychain = MPC.deriveUnhardened(commonKeychain, 'm/0');
|
|
26
|
+
rootPublicKey = Buffer.from(rootKeychain, 'hex').slice(0, 32).toString('hex');
|
|
27
|
+
});
|
|
28
|
+
describe('should create a valid KeyPair', () => {
|
|
29
|
+
it('from an empty value', async () => {
|
|
30
|
+
const keyPair = new src_1.KeyPair();
|
|
31
|
+
should_1.default.exists(keyPair.getKeys().prv);
|
|
32
|
+
should_1.default.exists(keyPair.getKeys().pub);
|
|
33
|
+
const address = await utils_1.default.getAddressFromPublicKey(keyPair.getKeys().pub);
|
|
34
|
+
should_1.default.exists(address);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('Keypair from derived Public Key', () => {
|
|
38
|
+
it('should create keypair with just derived public key', () => {
|
|
39
|
+
const keyPair = new src_1.KeyPair({ pub: rootPublicKey });
|
|
40
|
+
keyPair.getKeys().pub.should.equal(rootPublicKey);
|
|
41
|
+
});
|
|
42
|
+
it('should derived ed25519 public key should be valid', () => {
|
|
43
|
+
utils_1.default.isValidPublicKey(rootPublicKey).should.be.true();
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe('should fail to create a KeyPair', function () {
|
|
47
|
+
it('from an invalid public key', () => {
|
|
48
|
+
const source = {
|
|
49
|
+
pub: '01D63D',
|
|
50
|
+
};
|
|
51
|
+
assert_1.default.throws(() => new src_1.KeyPair(source));
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9rZXlQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG1DQUFvQztBQUNwQyxnRUFBd0M7QUFDeEMsb0RBQTRCO0FBQzVCLDhDQUF3QztBQUN4QyxvREFBZ0U7QUFFaEUsUUFBUSxDQUFDLGFBQWEsRUFBRTtJQUN0QixJQUFJLFlBQVksQ0FBQztJQUNqQixJQUFJLGFBQWEsQ0FBQztJQUNsQixJQUFJLEdBQVUsQ0FBQztJQUNmLElBQUksTUFBYyxDQUFDO0lBRW5CLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNoQixNQUFNLEdBQUcsTUFBTSxnQ0FBa0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQyxHQUFHLEdBQUcsTUFBTSxnQkFBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVoQyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpFLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3ZFLFlBQVksR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNELGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRixDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7UUFDN0MsRUFBRSxDQUFDLHFCQUFxQixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksYUFBTyxFQUFFLENBQUM7WUFDOUIsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLGdCQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQyxNQUFNLE9BQU8sR0FBRyxNQUFNLGVBQUssQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0UsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxpQ0FBaUMsRUFBRSxHQUFHLEVBQUU7UUFDL0MsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEdBQUcsRUFBRTtZQUM1RCxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsZUFBSyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxpQ0FBaUMsRUFBRTtRQUMxQyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1lBQ3BDLE1BQU0sTUFBTSxHQUFHO2dCQUNiLEdBQUcsRUFBRSxRQUFRO2FBQ2QsQ0FBQztZQUVGLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksYUFBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBFZGRzYSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBFZDI1NTE5QmlwMzJIZFRyZWUsIEhEVHJlZSB9IGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5cbmRlc2NyaWJlKCdUb24gS2V5UGFpcicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHJvb3RLZXljaGFpbjtcbiAgbGV0IHJvb3RQdWJsaWNLZXk7XG4gIGxldCBNUEM6IEVkZHNhO1xuICBsZXQgaGRUcmVlOiBIRFRyZWU7XG5cbiAgYmVmb3JlKGFzeW5jICgpID0+IHtcbiAgICBoZFRyZWUgPSBhd2FpdCBFZDI1NTE5QmlwMzJIZFRyZWUuaW5pdGlhbGl6ZSgpO1xuICAgIE1QQyA9IGF3YWl0IEVkZHNhLmluaXRpYWxpemUoaGRUcmVlKTtcbiAgICBjb25zdCBBID0gTVBDLmtleVNoYXJlKDEsIDIsIDMpO1xuICAgIGNvbnN0IEIgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG4gICAgY29uc3QgQyA9IE1QQy5rZXlTaGFyZSgzLCAyLCAzKTtcblxuICAgIGNvbnN0IEFfY29tYmluZSA9IE1QQy5rZXlDb21iaW5lKEEudVNoYXJlLCBbQi55U2hhcmVzWzFdLCBDLnlTaGFyZXNbMV1dKTtcblxuICAgIGNvbnN0IGNvbW1vbktleWNoYWluID0gQV9jb21iaW5lLnBTaGFyZS55ICsgQV9jb21iaW5lLnBTaGFyZS5jaGFpbmNvZGU7XG4gICAgcm9vdEtleWNoYWluID0gTVBDLmRlcml2ZVVuaGFyZGVuZWQoY29tbW9uS2V5Y2hhaW4sICdtLzAnKTtcbiAgICByb290UHVibGljS2V5ID0gQnVmZmVyLmZyb20ocm9vdEtleWNoYWluLCAnaGV4Jykuc2xpY2UoMCwgMzIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBjcmVhdGUgYSB2YWxpZCBLZXlQYWlyJywgKCkgPT4ge1xuICAgIGl0KCdmcm9tIGFuIGVtcHR5IHZhbHVlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKCk7XG4gICAgICBzaG91bGQuZXhpc3RzKGtleVBhaXIuZ2V0S2V5cygpLnBydik7XG4gICAgICBzaG91bGQuZXhpc3RzKGtleVBhaXIuZ2V0S2V5cygpLnB1Yik7XG4gICAgICBjb25zdCBhZGRyZXNzID0gYXdhaXQgdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoa2V5UGFpci5nZXRLZXlzKCkucHViKTtcbiAgICAgIHNob3VsZC5leGlzdHMoYWRkcmVzcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdLZXlwYWlyIGZyb20gZGVyaXZlZCBQdWJsaWMgS2V5JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgY3JlYXRlIGtleXBhaXIgd2l0aCBqdXN0IGRlcml2ZWQgcHVibGljIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHB1Yjogcm9vdFB1YmxpY0tleSB9KTtcbiAgICAgIGtleVBhaXIuZ2V0S2V5cygpLnB1Yi5zaG91bGQuZXF1YWwocm9vdFB1YmxpY0tleSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlcml2ZWQgZWQyNTUxOSBwdWJsaWMga2V5IHNob3VsZCBiZSB2YWxpZCcsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocm9vdFB1YmxpY0tleSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBmYWlsIHRvIGNyZWF0ZSBhIEtleVBhaXInLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2Zyb20gYW4gaW52YWxpZCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0ge1xuICAgICAgICBwdWI6ICcwMUQ2M0QnLFxuICAgICAgfTtcblxuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgS2V5UGFpcihzb3VyY2UpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"singleNominatorWithdrawBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/singleNominatorWithdrawBuilder.ts"],"names":[],"mappings":""}
|