@bitgo-beta/sdk-coin-tao 1.0.1-alpha.18 → 1.0.1-alpha.180
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/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/lib/constants.d.ts +11 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +14 -0
- package/dist/src/lib/iface.d.ts +14 -335
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -126
- package/dist/src/lib/index.d.ts +9 -9
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +30 -51
- package/dist/src/lib/moveStakeBuilder.d.ts +84 -0
- package/dist/src/lib/moveStakeBuilder.d.ts.map +1 -0
- package/dist/src/lib/moveStakeBuilder.js +182 -0
- package/dist/src/lib/moveStakeTransaction.d.ts +10 -0
- package/dist/src/lib/moveStakeTransaction.d.ts.map +1 -0
- package/dist/src/lib/moveStakeTransaction.js +68 -0
- package/dist/src/lib/stakingBuilder.d.ts +63 -0
- package/dist/src/lib/stakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/stakingBuilder.js +133 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts +79 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferBuilder.js +165 -0
- package/dist/src/lib/tokenTransferTransaction.d.ts +8 -0
- package/dist/src/lib/tokenTransferTransaction.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferTransaction.js +57 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +10 -4
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +33 -8
- package/dist/src/lib/transferBuilder.d.ts +2 -7
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +8 -3
- package/dist/src/lib/unstakeBuilder.d.ts +66 -0
- package/dist/src/lib/unstakeBuilder.d.ts.map +1 -0
- package/dist/src/lib/unstakeBuilder.js +136 -0
- package/dist/src/lib/utils.d.ts +5 -264
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +15 -480
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/resources/index.d.ts +1 -1
- package/dist/src/resources/index.js +2 -2
- package/dist/src/resources/mainnet.d.ts +12 -1
- package/dist/src/resources/mainnet.d.ts.map +1 -1
- package/dist/src/resources/mainnet.js +14 -3
- package/dist/src/resources/testnet.d.ts +13 -0
- package/dist/src/resources/testnet.d.ts.map +1 -0
- package/dist/src/resources/testnet.js +16 -0
- package/dist/src/tao.d.ts +19 -6
- package/dist/src/tao.d.ts.map +1 -1
- package/dist/src/tao.js +43 -81
- package/dist/src/taoToken.d.ts +19 -0
- package/dist/src/taoToken.d.ts.map +1 -0
- package/dist/src/taoToken.js +52 -0
- package/dist/test/integration/index.d.ts +1 -0
- package/dist/test/integration/index.d.ts.map +1 -0
- package/dist/test/integration/index.js +1 -0
- package/dist/test/resources/index.d.ts +150 -0
- package/dist/test/resources/index.d.ts.map +1 -0
- package/dist/test/resources/index.js +166 -0
- package/dist/test/resources/materialData.json +8 -0
- package/dist/test/resources/materialDataModified.json +8 -0
- package/dist/{src/resources/westend.d.ts → test/resources/testnet.d.ts} +2 -2
- package/dist/test/resources/testnet.d.ts.map +1 -0
- package/dist/test/resources/testnet.js +5 -0
- package/dist/test/unit/fixtures.d.ts +31 -0
- package/dist/test/unit/fixtures.d.ts.map +1 -0
- package/dist/test/unit/fixtures.js +107 -0
- package/dist/test/unit/tao.d.ts +2 -0
- package/dist/test/unit/tao.d.ts.map +1 -0
- package/dist/test/unit/tao.js +415 -0
- package/dist/test/unit/transactionBuilder/base.d.ts +8 -0
- package/dist/test/unit/transactionBuilder/base.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/base.js +238 -0
- package/dist/test/unit/transactionBuilder/moveStakeBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/moveStakeBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/moveStakeBuilder.js +472 -0
- package/dist/test/unit/transactionBuilder/singeltonRegistry.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/singeltonRegistry.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/singeltonRegistry.js +59 -0
- package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/stakingBuilder.js +112 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +93 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +75 -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 +309 -0
- package/dist/test/unit/transactionBuilder/unstakeBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/unstakeBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/unstakeBuilder.js +112 -0
- package/dist/test/unit/util.d.ts +2 -0
- package/dist/test/unit/util.d.ts.map +1 -0
- package/dist/test/unit/util.js +29 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +14 -20
- package/.eslintignore +0 -4
- package/.gitignore +0 -3
- package/.mocharc.yml +0 -8
- package/.prettierignore +0 -2
- package/CHANGELOG.md +0 -36
- package/dist/src/lib/errors.d.ts +0 -8
- package/dist/src/lib/errors.d.ts.map +0 -1
- package/dist/src/lib/errors.js +0 -19
- package/dist/src/lib/iface_utils.d.ts +0 -59
- package/dist/src/lib/iface_utils.d.ts.map +0 -1
- package/dist/src/lib/iface_utils.js +0 -92
- package/dist/src/lib/keyPair.d.ts +0 -38
- package/dist/src/lib/keyPair.d.ts.map +0 -1
- package/dist/src/lib/keyPair.js +0 -117
- package/dist/src/lib/nativeTransferBuilder.d.ts +0 -84
- package/dist/src/lib/nativeTransferBuilder.d.ts.map +0 -1
- package/dist/src/lib/nativeTransferBuilder.js +0 -219
- package/dist/src/lib/singletonRegistry.d.ts +0 -7
- package/dist/src/lib/singletonRegistry.d.ts.map +0 -1
- package/dist/src/lib/singletonRegistry.js +0 -20
- package/dist/src/lib/transaction.d.ts +0 -83
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -610
- package/dist/src/lib/transactionBuilder.d.ts +0 -131
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -351
- package/dist/src/lib/txnSchema.d.ts +0 -15
- package/dist/src/lib/txnSchema.d.ts.map +0 -1
- package/dist/src/lib/txnSchema.js +0 -117
- package/dist/src/resources/westend.d.ts.map +0 -1
- package/dist/src/resources/westend.js +0 -5
|
@@ -0,0 +1,309 @@
|
|
|
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 sinon_1 = __importDefault(require("sinon"));
|
|
9
|
+
const lib_1 = require("../../../src/lib");
|
|
10
|
+
const src_1 = require("../../../src");
|
|
11
|
+
const resources_1 = require("../../resources");
|
|
12
|
+
const base_1 = require("./base");
|
|
13
|
+
const resources_2 = require("../../../src/resources");
|
|
14
|
+
describe('Tao Transfer Builder', () => {
|
|
15
|
+
let builder;
|
|
16
|
+
const sender = resources_1.accounts.account1;
|
|
17
|
+
const receiver = resources_1.accounts.account2;
|
|
18
|
+
// Consolidation/sweep tx's do not deseialize amounts.
|
|
19
|
+
const consolidationValue = '0';
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
const config = (0, base_1.buildTestConfig)();
|
|
22
|
+
builder = new lib_1.TransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
|
|
23
|
+
});
|
|
24
|
+
describe('setter validation', () => {
|
|
25
|
+
it('should validate to address', () => {
|
|
26
|
+
const spy = sinon_1.default.spy(builder, 'validateAddress');
|
|
27
|
+
assert_1.default.throws(() => builder.to({ address: 'asd' }), (e) => e.message === `The address 'asd' is not a well-formed dot address`);
|
|
28
|
+
should_1.default.doesNotThrow(() => builder.to({ address: sender.address }));
|
|
29
|
+
sinon_1.default.assert.calledTwice(spy);
|
|
30
|
+
});
|
|
31
|
+
it('should validate transfer amount', () => {
|
|
32
|
+
const spy = sinon_1.default.spy(builder, 'validateValue');
|
|
33
|
+
assert_1.default.throws(() => builder.amount('-1'), (e) => e.message === 'Value cannot be less than zero');
|
|
34
|
+
should_1.default.doesNotThrow(() => builder.amount('1000'));
|
|
35
|
+
sinon_1.default.assert.calledTwice(spy);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
describe('build transfer transaction', () => {
|
|
39
|
+
it('should build a transfer transaction', async () => {
|
|
40
|
+
builder
|
|
41
|
+
.amount('90034235235322')
|
|
42
|
+
.to({ address: receiver.address })
|
|
43
|
+
.sender({ address: sender.address })
|
|
44
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
45
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
46
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
|
|
47
|
+
.fee({ amount: 0, type: 'tip' });
|
|
48
|
+
builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
49
|
+
const tx = await builder.build();
|
|
50
|
+
const txJson = tx.toJson();
|
|
51
|
+
should_1.default.deepEqual(txJson.amount, '90034235235322');
|
|
52
|
+
should_1.default.deepEqual(txJson.to, receiver.address);
|
|
53
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
54
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
55
|
+
should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
56
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
57
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
58
|
+
should_1.default.deepEqual(txJson.nonce, 200);
|
|
59
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
60
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
61
|
+
should_1.default.deepEqual(txJson.chainName, resources_2.testnetMaterial.chainName);
|
|
62
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
63
|
+
const inputs = tx.inputs[0];
|
|
64
|
+
should_1.default.deepEqual(inputs.address, sender.address);
|
|
65
|
+
should_1.default.deepEqual(inputs.value, '90034235235322');
|
|
66
|
+
const outputs = tx.outputs[0];
|
|
67
|
+
should_1.default.deepEqual(outputs.address, receiver.address);
|
|
68
|
+
should_1.default.deepEqual(outputs.value, '90034235235322');
|
|
69
|
+
});
|
|
70
|
+
it('should build a transaction with zero maxDuration (immortal)', async () => {
|
|
71
|
+
builder
|
|
72
|
+
.amount('90034235235322')
|
|
73
|
+
.to({ address: receiver.address })
|
|
74
|
+
.sender({ address: sender.address })
|
|
75
|
+
.validity({ firstValid: 3933, maxDuration: 0 })
|
|
76
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
77
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
|
|
78
|
+
.fee({ amount: 0, type: 'tip' });
|
|
79
|
+
builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
80
|
+
const tx = await builder.build();
|
|
81
|
+
const txJson = tx.toJson();
|
|
82
|
+
should_1.default.deepEqual(txJson.amount, '90034235235322');
|
|
83
|
+
should_1.default.deepEqual(txJson.to, receiver.address);
|
|
84
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
85
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
86
|
+
should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
87
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
88
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
89
|
+
should_1.default.deepEqual(txJson.nonce, 200);
|
|
90
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
91
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
92
|
+
should_1.default.deepEqual(txJson.chainName.toLowerCase(), resources_1.chainName);
|
|
93
|
+
should_1.default.deepEqual(txJson.eraPeriod, 0);
|
|
94
|
+
const inputs = tx.inputs[0];
|
|
95
|
+
should_1.default.deepEqual(inputs.address, sender.address);
|
|
96
|
+
should_1.default.deepEqual(inputs.value, '90034235235322');
|
|
97
|
+
const outputs = tx.outputs[0];
|
|
98
|
+
should_1.default.deepEqual(outputs.address, receiver.address);
|
|
99
|
+
should_1.default.deepEqual(outputs.value, '90034235235322');
|
|
100
|
+
});
|
|
101
|
+
it('should build an unsigned transfer transaction', async () => {
|
|
102
|
+
builder
|
|
103
|
+
.amount('90034235235322')
|
|
104
|
+
.to({ address: receiver.address })
|
|
105
|
+
.sender({ address: sender.address })
|
|
106
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
107
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
108
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
|
|
109
|
+
.fee({ amount: 0, type: 'tip' });
|
|
110
|
+
const tx = await builder.build();
|
|
111
|
+
const txJson = tx.toJson();
|
|
112
|
+
should_1.default.deepEqual(txJson.amount, '90034235235322');
|
|
113
|
+
should_1.default.deepEqual(txJson.to, receiver.address);
|
|
114
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
115
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
116
|
+
should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
117
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
118
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
119
|
+
should_1.default.deepEqual(txJson.nonce, 200);
|
|
120
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
121
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
122
|
+
should_1.default.deepEqual(txJson.chainName.toLowerCase(), resources_1.chainName);
|
|
123
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
124
|
+
});
|
|
125
|
+
it('should build from raw signed tx', async () => {
|
|
126
|
+
builder.from(resources_1.rawTx.transfer.signed);
|
|
127
|
+
builder
|
|
128
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
129
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
130
|
+
const tx = await builder.build();
|
|
131
|
+
const txJson = tx.toJson();
|
|
132
|
+
should_1.default.deepEqual(txJson.amount, '2');
|
|
133
|
+
should_1.default.deepEqual(txJson.to, '5EQZSJmHuFH8asYYJruSRwpJmE5aqSdhdiX9oxRbxujKUkTe');
|
|
134
|
+
should_1.default.deepEqual(txJson.sender, '5H56KVtb3sSMxuhFsH51iFi1gei7tnBQjpVmj6hu9tK7CBDR');
|
|
135
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
136
|
+
should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
137
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
138
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
139
|
+
should_1.default.deepEqual(txJson.nonce, 17);
|
|
140
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
141
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
142
|
+
should_1.default.deepEqual(txJson.chainName.toLowerCase(), resources_1.chainName);
|
|
143
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
144
|
+
});
|
|
145
|
+
it('should build from raw unsigned tx', async () => {
|
|
146
|
+
builder.from(resources_1.rawTx.transfer.unsigned);
|
|
147
|
+
builder
|
|
148
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
149
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
150
|
+
.sender({ address: sender.address })
|
|
151
|
+
.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
152
|
+
const tx = await builder.build();
|
|
153
|
+
const txJson = tx.toJson();
|
|
154
|
+
should_1.default.deepEqual(txJson.amount, '2');
|
|
155
|
+
should_1.default.deepEqual(txJson.to, '5EQZSJmHuFH8asYYJruSRwpJmE5aqSdhdiX9oxRbxujKUkTe');
|
|
156
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
157
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
158
|
+
should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
159
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
160
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
161
|
+
should_1.default.deepEqual(txJson.nonce, 17);
|
|
162
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
163
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
164
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
165
|
+
should_1.default.deepEqual(txJson.chainName.toLowerCase(), resources_1.chainName);
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
describe('build sweep transfer transaction', () => {
|
|
169
|
+
it('should build a signed sweep transaction', async () => {
|
|
170
|
+
builder
|
|
171
|
+
.sweep()
|
|
172
|
+
.to({ address: receiver.address })
|
|
173
|
+
.amount('90034235235322')
|
|
174
|
+
.sender({ address: sender.address })
|
|
175
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
176
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
177
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
|
|
178
|
+
.fee({ amount: 0, type: 'tip' })
|
|
179
|
+
.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
180
|
+
const tx = await builder.build();
|
|
181
|
+
const txJson = tx.toJson();
|
|
182
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
183
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
184
|
+
should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
185
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
186
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
187
|
+
should_1.default.deepEqual(txJson.nonce, 200);
|
|
188
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
189
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
190
|
+
should_1.default.deepEqual(txJson.chainName.toLowerCase(), resources_1.chainName);
|
|
191
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
192
|
+
const inputs = tx.inputs[0];
|
|
193
|
+
should_1.default.deepEqual(inputs.address, sender.address);
|
|
194
|
+
should_1.default.deepEqual(inputs.value, consolidationValue);
|
|
195
|
+
const outputs = tx.outputs[0];
|
|
196
|
+
should_1.default.deepEqual(outputs.address, receiver.address);
|
|
197
|
+
should_1.default.deepEqual(outputs.value, consolidationValue);
|
|
198
|
+
});
|
|
199
|
+
it('should build an unsigned sweep transaction', async () => {
|
|
200
|
+
builder
|
|
201
|
+
.sweep()
|
|
202
|
+
.to({ address: receiver.address })
|
|
203
|
+
.amount('90034235235322')
|
|
204
|
+
.sender({ address: sender.address })
|
|
205
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
206
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
207
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
|
|
208
|
+
.fee({ amount: 0, type: 'tip' });
|
|
209
|
+
const tx = await builder.build();
|
|
210
|
+
const txJson = tx.toJson();
|
|
211
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
212
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
213
|
+
should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
214
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
215
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
216
|
+
should_1.default.deepEqual(txJson.nonce, 200);
|
|
217
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
218
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
219
|
+
should_1.default.deepEqual(txJson.chainName.toLowerCase(), resources_1.chainName);
|
|
220
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
221
|
+
const inputs = tx.inputs[0];
|
|
222
|
+
should_1.default.deepEqual(inputs.address, sender.address);
|
|
223
|
+
should_1.default.deepEqual(inputs.value, consolidationValue);
|
|
224
|
+
const outputs = tx.outputs[0];
|
|
225
|
+
should_1.default.deepEqual(outputs.address, receiver.address);
|
|
226
|
+
should_1.default.deepEqual(outputs.value, consolidationValue);
|
|
227
|
+
});
|
|
228
|
+
it('should build an unsigned sweep transaction with keepAlive as false', async () => {
|
|
229
|
+
builder
|
|
230
|
+
.sweep(false)
|
|
231
|
+
.to({ address: receiver.address })
|
|
232
|
+
.amount('90034235235322')
|
|
233
|
+
.sender({ address: sender.address })
|
|
234
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
235
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
236
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
|
|
237
|
+
.fee({ amount: 0, type: 'tip' });
|
|
238
|
+
const tx = await builder.build();
|
|
239
|
+
const txJson = tx.toJson();
|
|
240
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
241
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
242
|
+
should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
243
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
244
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
245
|
+
should_1.default.deepEqual(txJson.nonce, 200);
|
|
246
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
247
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
248
|
+
should_1.default.deepEqual(txJson.chainName.toLowerCase(), resources_1.chainName);
|
|
249
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
250
|
+
const inputs = tx.inputs[0];
|
|
251
|
+
should_1.default.deepEqual(inputs.address, sender.address);
|
|
252
|
+
should_1.default.deepEqual(inputs.value, consolidationValue);
|
|
253
|
+
const outputs = tx.outputs[0];
|
|
254
|
+
should_1.default.deepEqual(outputs.address, receiver.address);
|
|
255
|
+
should_1.default.deepEqual(outputs.value, consolidationValue);
|
|
256
|
+
});
|
|
257
|
+
it('should build from raw signed sweep transaction', async () => {
|
|
258
|
+
builder.from(resources_1.rawTx.transferAll.signed);
|
|
259
|
+
builder
|
|
260
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
261
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
262
|
+
const tx = await builder.build();
|
|
263
|
+
const txJson = tx.toJson();
|
|
264
|
+
should_1.default.deepEqual(txJson.sender, '5H56KVtb3sSMxuhFsH51iFi1gei7tnBQjpVmj6hu9tK7CBDR');
|
|
265
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
266
|
+
should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
267
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
268
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
269
|
+
should_1.default.deepEqual(txJson.nonce, 17);
|
|
270
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
271
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
272
|
+
should_1.default.deepEqual(txJson.chainName.toLowerCase(), resources_1.chainName);
|
|
273
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
274
|
+
const inputs = tx.inputs[0];
|
|
275
|
+
should_1.default.deepEqual(inputs.address, '5H56KVtb3sSMxuhFsH51iFi1gei7tnBQjpVmj6hu9tK7CBDR');
|
|
276
|
+
should_1.default.deepEqual(inputs.value, consolidationValue);
|
|
277
|
+
const outputs = tx.outputs[0];
|
|
278
|
+
should_1.default.deepEqual(outputs.address, '5EQZSJmHuFH8asYYJruSRwpJmE5aqSdhdiX9oxRbxujKUkTe');
|
|
279
|
+
should_1.default.deepEqual(outputs.value, consolidationValue);
|
|
280
|
+
});
|
|
281
|
+
it('should build from an unsigned sweep transaction', async () => {
|
|
282
|
+
builder.from(resources_1.rawTx.transferAll.unsigned);
|
|
283
|
+
builder
|
|
284
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
285
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
286
|
+
.sender({ address: sender.address })
|
|
287
|
+
.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
288
|
+
const tx = await builder.build();
|
|
289
|
+
const txJson = tx.toJson();
|
|
290
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
291
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
292
|
+
should_1.default.deepEqual(txJson.referenceBlock, '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
293
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
294
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
295
|
+
should_1.default.deepEqual(txJson.nonce, 17);
|
|
296
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
297
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
298
|
+
should_1.default.deepEqual(txJson.chainName.toLowerCase(), resources_1.chainName);
|
|
299
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
300
|
+
const inputs = tx.inputs[0];
|
|
301
|
+
should_1.default.deepEqual(inputs.address, sender.address);
|
|
302
|
+
should_1.default.deepEqual(inputs.value, consolidationValue);
|
|
303
|
+
const outputs = tx.outputs[0];
|
|
304
|
+
should_1.default.deepEqual(outputs.address, '5EQZSJmHuFH8asYYJruSRwpJmE5aqSdhdiX9oxRbxujKUkTe');
|
|
305
|
+
should_1.default.deepEqual(outputs.value, consolidationValue);
|
|
306
|
+
});
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLGtEQUEwQjtBQUMxQiwwQ0FBbUQ7QUFDbkQsc0NBQXFDO0FBRXJDLCtDQUE0RjtBQUM1RixpQ0FBeUM7QUFDekMsc0RBQXlEO0FBRXpELFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7SUFDcEMsSUFBSSxPQUF3QixDQUFDO0lBRTdCLE1BQU0sTUFBTSxHQUFHLG9CQUFRLENBQUMsUUFBUSxDQUFDO0lBQ2pDLE1BQU0sUUFBUSxHQUFHLG9CQUFRLENBQUMsUUFBUSxDQUFDO0lBRW5DLHNEQUFzRDtJQUN0RCxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztJQUUvQixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsTUFBTSxNQUFNLEdBQUcsSUFBQSxzQkFBZSxHQUFFLENBQUM7UUFDakMsT0FBTyxHQUFHLElBQUkscUJBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFO1FBQ2pDLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7WUFDcEMsTUFBTSxHQUFHLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUNsRCxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQ3BDLENB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QUFDLENBQUM7WUFDNUIsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakQsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBRW5ELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxrREFBa0QsQ0FBQyxDQUFDO1lBQ3RGLGdCQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyB1dGlscyB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5cbmltcG9ydCB7IGFjY291bnRzLCByYXdUeCwgY2hhaW5OYW1lLCBnZW5lc2lzSGFzaCwgbW9ja1Rzc1NpZ25hdHVyZSB9IGZyb20gJy4uLy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBidWlsZFRlc3RDb25maWcgfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHsgdGVzdG5ldE1hdGVyaWFsIH0gZnJvbSAnLi4vLi4vLi4vc3JjL3Jlc291cmNlcyc7XG5cbmRlc2NyaWJlKCdUYW8gVHJhbnNmZXIgQnVpbGRlcicsICgpID0+IHtcbiAgbGV0IGJ1aWxkZXI6IFRyYW5zZmVyQnVpbGRlcjtcblxuICBjb25zdCBzZW5kZXIgPSBhY2NvdW50cy5hY2NvdW50MTtcbiAgY29uc3QgcmVjZWl2ZXIgPSBhY2NvdW50cy5hY2NvdW50MjtcblxuICAvLyBDb25zb2xpZGF0aW9uL3N3ZWVwIHR4J3MgZG8gbm90IGRlc2VpYWxpemUgYW1vdW50cy5cbiAgY29uc3QgY29uc29saWRhdGlvblZhbHVlID0gJzAnO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGJ1aWxkVGVzdENvbmZpZygpO1xuICAgIGJ1aWxkZXIgPSBuZXcgVHJhbnNmZXJCdWlsZGVyKGNvbmZpZykubWF0ZXJpYWwodXRpbHMuZ2V0TWF0ZXJpYWwoY29uZmlnLm5ldHdvcmsudHlwZSkpO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2V0dGVyIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB0byBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3B5ID0gc2lub24uc3B5KGJ1aWxkZXIsICd2YWxpZGF0ZUFkZHJlc3MnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJ1aWxkZXIudG8oeyBhZGRyZXNzOiAnYXNkJyB9KSxcbiAgICAgICAgKGU6IEVycm9yKSA9PiBlLm1lc3NhZ2UgPT09IGBUaGUgYWRkcmVzcyAnYXNkJyBpcyBub3QgYSB3ZWxsLWZvcm1lZCBkb3QgYWRkcmVzc2BcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIudG8oeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KSk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkVHdpY2Uoc3B5KTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHRyYW5zZmVyIGFtb3VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNweSA9IHNpbm9uLnNweShidWlsZGVyLCAndmFsaWRhdGVWYWx1ZScpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYnVpbGRlci5hbW91bnQoJy0xJyksXG4gICAgICAgIChlOiBFcnJvcikgPT4gZS5tZXNzYWdlID09PSAnVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJ1xuICAgICAgKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci5hbW91bnQoJzEwMDAnKSk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkVHdpY2Uoc3B5KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2J1aWxkIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFtb3VudCgnOTAwMzQyMzUyMzUzMjInKVxuICAgICAgICAudG8oeyBhZGRyZXNzOiByZWNlaXZlci5hZGRyZXNzIH0pXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAyMDAgfSlcbiAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG4gICAgICBidWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1Yjogc2VuZGVyLnB1YmxpY0tleSB9LCBCdWZmZXIuZnJvbShtb2NrVHNzU2lnbmF0dXJlLCAnaGV4JykpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmFtb3VudCwgJzkwMDM0MjM1MjM1MzIyJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50bywgcmVjZWl2ZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCAzOTMzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCAnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIE51bWJlcih0ZXN0bmV0TWF0ZXJpYWwuc3BlY1ZlcnNpb24pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAyMDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgTnVtYmVyKHRlc3RuZXRNYXRlcmlhbC50eFZlcnNpb24pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZSwgdGVzdG5ldE1hdGVyaWFsLmNoYWluTmFtZSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgY29uc3QgaW5wdXRzID0gdHguaW5wdXRzWzBdO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChpbnB1dHMuYWRkcmVzcywgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChpbnB1dHMudmFsdWUsICc5MDAzNDIzNTIzNTMyMicpO1xuXG4gICAgICBjb25zdCBvdXRwdXRzID0gdHgub3V0cHV0c1swXTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy5hZGRyZXNzLCByZWNlaXZlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy52YWx1ZSwgJzkwMDM0MjM1MjM1MzIyJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgdHJhbnNhY3Rpb24gd2l0aCB6ZXJvIG1heER1cmF0aW9uIChpbW1vcnRhbCknLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5hbW91bnQoJzkwMDM0MjM1MjM1MzIyJylcbiAgICAgICAgLnRvKHsgYWRkcmVzczogcmVjZWl2ZXIuYWRkcmVzcyB9KVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDAgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAyMDAgfSlcbiAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG4gICAgICBidWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1Yjogc2VuZGVyLnB1YmxpY0tleSB9LCBCdWZmZXIuZnJvbShtb2NrVHNzU2lnbmF0dXJlLCAnaGV4JykpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmFtb3VudCwgJzkwMDM0MjM1MjM1MzIyJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50bywgcmVjZWl2ZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCAzOTMzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCAnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIE51bWJlcih0ZXN0bmV0TWF0ZXJpYWwuc3BlY1ZlcnNpb24pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAyMDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgTnVtYmVyKHRlc3RuZXRNYXRlcmlhbC50eFZlcnNpb24pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZS50b0xvd2VyQ2FzZSgpLCBjaGFpbk5hbWUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCAwKTtcblxuICAgICAgY29uc3QgaW5wdXRzID0gdHguaW5wdXRzWzBdO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChpbnB1dHMuYWRkcmVzcywgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChpbnB1dHMudmFsdWUsICc5MDAzNDIzNTIzNTMyMicpO1xuXG4gICAgICBjb25zdCBvdXRwdXRzID0gdHgub3V0cHV0c1swXTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy5hZGRyZXNzLCByZWNlaXZlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy52YWx1ZSwgJzkwMDM0MjM1MjM1MzIyJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuIHVuc2lnbmVkIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYW1vdW50KCc5MDAzNDIzNTIzNTMyMicpXG4gICAgICAgIC50byh7IGFkZHJlc3M6IHJlY2VpdmVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDIwMCB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5hbW91bnQsICc5MDAzNDIzNTIzNTMyMicpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udG8sIHJlY2VpdmVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgMzkzMyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBOdW1iZXIodGVzdG5ldE1hdGVyaWFsLnNwZWNWZXJzaW9uKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMjAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRpcCwgMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIE51bWJlcih0ZXN0bmV0TWF0ZXJpYWwudHhWZXJzaW9uKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUudG9Mb3dlckNhc2UoKSwgY2hhaW5OYW1lKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBmcm9tIHJhdyBzaWduZWQgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyLmZyb20ocmF3VHgudHJhbnNmZXIuc2lnbmVkKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYW1vdW50LCAnMicpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udG8sICc1RVFaU0ptSHVGSDhhc1lZSnJ1U1J3cEptRTVhcVNkaGRpWDlveFJieHVqS1VrVGUnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgJzVINTZLVnRiM3NTTXh1aEZzSDUxaUZpMWdlaTd0bkJRanBWbWo2aHU5dEs3Q0JEUicpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmxvY2tOdW1iZXIsIDM5MzMpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucmVmZXJlbmNlQmxvY2ssICcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgTnVtYmVyKHRlc3RuZXRNYXRlcmlhbC5zcGVjVmVyc2lvbikpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDE3KTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRpcCwgMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIE51bWJlcih0ZXN0bmV0TWF0ZXJpYWwudHhWZXJzaW9uKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUudG9Mb3dlckNhc2UoKSwgY2hhaW5OYW1lKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBmcm9tIHJhdyB1bnNpZ25lZCB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC50cmFuc2Zlci51bnNpZ25lZCk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5hbW91bnQsICcyJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50bywgJzVFUVpTSm1IdUZIOGFzWVlKcnVTUndwSm1FNWFxU2RoZGlYOW94UmJ4dWpLVWtUZScpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgMzkzMyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBOdW1iZXIodGVzdG5ldE1hdGVyaWFsLnNwZWNWZXJzaW9uKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMTcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCA2NCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCBOdW1iZXIodGVzdG5ldE1hdGVyaWFsLnR4VmVyc2lvbikpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uY2hhaW5OYW1lLnRvTG93ZXJDYXNlKCksIGNoYWluTmFtZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZCBzd2VlcCB0cmFuc2ZlciB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlclxuICAgICAgICAuc3dlZXAoKVxuICAgICAgICAudG8oeyBhZGRyZXNzOiByZWNlaXZlci5hZGRyZXNzIH0pXG4gICAgICAgIC5hbW91bnQoJzkwMDM0MjM1MjM1MzIyJylcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDIwMCB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KVxuICAgICAgICAuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgMzkzMyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBOdW1iZXIodGVzdG5ldE1hdGVyaWFsLnNwZWNWZXJzaW9uKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMjAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRpcCwgMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIE51bWJlcih0ZXN0bmV0TWF0ZXJpYWwudHhWZXJzaW9uKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUudG9Mb3dlckNhc2UoKSwgY2hhaW5OYW1lKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuXG4gICAgICBjb25zdCBpbnB1dHMgPSB0eC5pbnB1dHNbMF07XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGlucHV0cy5hZGRyZXNzLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGlucHV0cy52YWx1ZSwgY29uc29saWRhdGlvblZhbHVlKTtcblxuICAgICAgY29uc3Qgb3V0cHV0cyA9IHR4Lm91dHB1dHNbMF07XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG91dHB1dHMuYWRkcmVzcywgcmVjZWl2ZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG91dHB1dHMudmFsdWUsIGNvbnNvbGlkYXRpb25WYWx1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlclxuICAgICAgICAuc3dlZXAoKVxuICAgICAgICAudG8oeyBhZGRyZXNzOiByZWNlaXZlci5hZGRyZXNzIH0pXG4gICAgICAgIC5hbW91bnQoJzkwMDM0MjM1MjM1MzIyJylcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDIwMCB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCAzOTMzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCAnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIE51bWJlcih0ZXN0bmV0TWF0ZXJpYWwuc3BlY1ZlcnNpb24pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAyMDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgTnVtYmVyKHRlc3RuZXRNYXRlcmlhbC50eFZlcnNpb24pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZS50b0xvd2VyQ2FzZSgpLCBjaGFpbk5hbWUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCA2NCk7XG5cbiAgICAgIGNvbnN0IGlucHV0cyA9IHR4LmlucHV0c1swXTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoaW5wdXRzLmFkZHJlc3MsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoaW5wdXRzLnZhbHVlLCBjb25zb2xpZGF0aW9uVmFsdWUpO1xuXG4gICAgICBjb25zdCBvdXRwdXRzID0gdHgub3V0cHV0c1swXTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy5hZGRyZXNzLCByZWNlaXZlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy52YWx1ZSwgY29uc29saWRhdGlvblZhbHVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gdW5zaWduZWQgc3dlZXAgdHJhbnNhY3Rpb24gd2l0aCBrZWVwQWxpdmUgYXMgZmFsc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5zd2VlcChmYWxzZSlcbiAgICAgICAgLnRvKHsgYWRkcmVzczogcmVjZWl2ZXIuYWRkcmVzcyB9KVxuICAgICAgICAuYW1vdW50KCc5MDAzNDIzNTIzNTMyMicpXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAyMDAgfSlcbiAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgMzkzMyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBOdW1iZXIodGVzdG5ldE1hdGVyaWFsLnNwZWNWZXJzaW9uKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMjAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRpcCwgMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIE51bWJlcih0ZXN0bmV0TWF0ZXJpYWwudHhWZXJzaW9uKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5jaGFpbk5hbWUudG9Mb3dlckNhc2UoKSwgY2hhaW5OYW1lKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmVyYVBlcmlvZCwgNjQpO1xuXG4gICAgICBjb25zdCBpbnB1dHMgPSB0eC5pbnB1dHNbMF07XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGlucHV0cy5hZGRyZXNzLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGlucHV0cy52YWx1ZSwgY29uc29saWRhdGlvblZhbHVlKTtcblxuICAgICAgY29uc3Qgb3V0cHV0cyA9IHR4Lm91dHB1dHNbMF07XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG91dHB1dHMuYWRkcmVzcywgcmVjZWl2ZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG91dHB1dHMudmFsdWUsIGNvbnNvbGlkYXRpb25WYWx1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGZyb20gcmF3IHNpZ25lZCBzd2VlcCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC50cmFuc2ZlckFsbC5zaWduZWQpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsICc1SDU2S1Z0YjNzU014dWhGc0g1MWlGaTFnZWk3dG5CUWpwVm1qNmh1OXRLN0NCRFInKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCAzOTMzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCAnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIE51bWJlcih0ZXN0bmV0TWF0ZXJpYWwuc3BlY1ZlcnNpb24pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAxNyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCBOdW1iZXIodGVzdG5ldE1hdGVyaWFsLnR4VmVyc2lvbikpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uY2hhaW5OYW1lLnRvTG93ZXJDYXNlKCksIGNoYWluTmFtZSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcblxuICAgICAgY29uc3QgaW5wdXRzID0gdHguaW5wdXRzWzBdO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChpbnB1dHMuYWRkcmVzcywgJzVINTZLVnRiM3NTTXh1aEZzSDUxaUZpMWdlaTd0bkJRanBWbWo2aHU5dEs3Q0JEUicpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChpbnB1dHMudmFsdWUsIGNvbnNvbGlkYXRpb25WYWx1ZSk7XG5cbiAgICAgIGNvbnN0IG91dHB1dHMgPSB0eC5vdXRwdXRzWzBdO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChvdXRwdXRzLmFkZHJlc3MsICc1RVFaU0ptSHVGSDhhc1lZSnJ1U1J3cEptRTVhcVNkaGRpWDlveFJieHVqS1VrVGUnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy52YWx1ZSwgY29uc29saWRhdGlvblZhbHVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgZnJvbSBhbiB1bnNpZ25lZCBzd2VlcCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC50cmFuc2ZlckFsbC51bnNpZ25lZCk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VuZGVyLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ibG9ja051bWJlciwgMzkzMyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5yZWZlcmVuY2VCbG9jaywgJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gsIGdlbmVzaXNIYXNoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCBOdW1iZXIodGVzdG5ldE1hdGVyaWFsLnNwZWNWZXJzaW9uKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMTcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgTnVtYmVyKHRlc3RuZXRNYXRlcmlhbC50eFZlcnNpb24pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZS50b0xvd2VyQ2FzZSgpLCBjaGFpbk5hbWUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCA2NCk7XG5cbiAgICAgIGNvbnN0IGlucHV0cyA9IHR4LmlucHV0c1swXTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoaW5wdXRzLmFkZHJlc3MsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoaW5wdXRzLnZhbHVlLCBjb25zb2xpZGF0aW9uVmFsdWUpO1xuXG4gICAgICBjb25zdCBvdXRwdXRzID0gdHgub3V0cHV0c1swXTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwob3V0cHV0cy5hZGRyZXNzLCAnNUVRWlNKbUh1Rkg4YXNZWUpydVNSd3BKbUU1YXFTZGhkaVg5b3hSYnh1aktVa1RlJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG91dHB1dHMudmFsdWUsIGNvbnNvbGlkYXRpb25WYWx1ZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unstakeBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/unstakeBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,112 @@
|
|
|
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 sinon_1 = require("sinon");
|
|
9
|
+
const unstakeBuilder_1 = require("../../../src/lib/unstakeBuilder");
|
|
10
|
+
const resources_1 = require("../../resources");
|
|
11
|
+
const base_1 = require("./base");
|
|
12
|
+
const utils_1 = __importDefault(require("../../../src/lib/utils"));
|
|
13
|
+
const resources_2 = require("../../../src/resources");
|
|
14
|
+
describe('Tao Unstake Builder', function () {
|
|
15
|
+
const referenceBlock = '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d';
|
|
16
|
+
let builder;
|
|
17
|
+
const sender = resources_1.accounts.account1;
|
|
18
|
+
beforeEach(function () {
|
|
19
|
+
const config = (0, base_1.buildTestConfig)();
|
|
20
|
+
const material = utils_1.default.getMaterial(config.network.type);
|
|
21
|
+
builder = new unstakeBuilder_1.UnstakeBuilder(config).material(material);
|
|
22
|
+
});
|
|
23
|
+
describe('setter validation', function () {
|
|
24
|
+
it('should validate stake amount', function () {
|
|
25
|
+
const spyValidateValue = (0, sinon_1.spy)(builder, 'validateValue');
|
|
26
|
+
assert_1.default.throws(() => builder.amount('-1'), (e) => e.message === 'Value cannot be less than zero');
|
|
27
|
+
should_1.default.doesNotThrow(() => builder.amount('1000'));
|
|
28
|
+
sinon_1.assert.calledTwice(spyValidateValue);
|
|
29
|
+
});
|
|
30
|
+
it('should validate hotkey address', function () {
|
|
31
|
+
const spyValidateAddress = (0, sinon_1.spy)(builder, 'validateAddress');
|
|
32
|
+
assert_1.default.throws(() => builder.hotkey({ address: 'abc' }), (e) => e.message === `The address 'abc' is not a well-formed dot address`);
|
|
33
|
+
should_1.default.doesNotThrow(() => builder.hotkey({ address: '5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT' }));
|
|
34
|
+
sinon_1.assert.calledTwice(spyValidateAddress);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('build unstake transaction', function () {
|
|
38
|
+
it('should build a unstake transaction', async function () {
|
|
39
|
+
builder
|
|
40
|
+
.amount('50000000000000')
|
|
41
|
+
.hotkey({ address: '5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT' })
|
|
42
|
+
.netuid('0')
|
|
43
|
+
.sender({ address: sender.address })
|
|
44
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
45
|
+
.referenceBlock(referenceBlock)
|
|
46
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
|
|
47
|
+
.fee({ amount: 0, type: 'tip' })
|
|
48
|
+
.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
49
|
+
const tx = await builder.build();
|
|
50
|
+
const txJson = tx.toJson();
|
|
51
|
+
should_1.default.deepEqual(txJson.amount, '50000000000000');
|
|
52
|
+
should_1.default.deepEqual(txJson.to, '5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT');
|
|
53
|
+
should_1.default.deepEqual(txJson.netuid, '0');
|
|
54
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
55
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
56
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
57
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
58
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
59
|
+
should_1.default.deepEqual(txJson.nonce, 200);
|
|
60
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
61
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
62
|
+
should_1.default.deepEqual(txJson.chainName.toLowerCase(), resources_1.chainName);
|
|
63
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
64
|
+
});
|
|
65
|
+
it('should build an unsigned unstake transaction', async function () {
|
|
66
|
+
builder
|
|
67
|
+
.amount('50000000000000')
|
|
68
|
+
.hotkey({ address: '5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT' })
|
|
69
|
+
.netuid('0')
|
|
70
|
+
.sender({ address: sender.address })
|
|
71
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
72
|
+
.referenceBlock(referenceBlock)
|
|
73
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
|
|
74
|
+
.fee({ amount: 0, type: 'tip' });
|
|
75
|
+
const tx = await builder.build();
|
|
76
|
+
const txJson = tx.toJson();
|
|
77
|
+
should_1.default.deepEqual(txJson.amount, '50000000000000');
|
|
78
|
+
should_1.default.deepEqual(txJson.to, '5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT');
|
|
79
|
+
should_1.default.deepEqual(txJson.netuid, '0');
|
|
80
|
+
should_1.default.deepEqual(txJson.sender, sender.address);
|
|
81
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
82
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
83
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
84
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
85
|
+
should_1.default.deepEqual(txJson.nonce, 200);
|
|
86
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
87
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
88
|
+
should_1.default.deepEqual(txJson.chainName.toLowerCase(), resources_1.chainName);
|
|
89
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
90
|
+
});
|
|
91
|
+
it('should build from raw signed tx', async function () {
|
|
92
|
+
builder.from(resources_1.rawTx.unstake.signed);
|
|
93
|
+
builder.validity({ firstValid: 3933, maxDuration: 64 }).referenceBlock(referenceBlock);
|
|
94
|
+
const tx = await builder.build();
|
|
95
|
+
const txJson = tx.toJson();
|
|
96
|
+
should_1.default.deepEqual(txJson.amount, '100000000');
|
|
97
|
+
should_1.default.deepEqual(txJson.to, '5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT');
|
|
98
|
+
should_1.default.deepEqual(txJson.netuid, '0');
|
|
99
|
+
should_1.default.deepEqual(txJson.sender, '5FvSWbV4hGC7GvXQKKtiVmmHSH3JELK8R3JS8Z5adnACFBwh');
|
|
100
|
+
should_1.default.deepEqual(txJson.blockNumber, 3933);
|
|
101
|
+
should_1.default.deepEqual(txJson.referenceBlock, referenceBlock);
|
|
102
|
+
should_1.default.deepEqual(txJson.genesisHash, resources_1.genesisHash);
|
|
103
|
+
should_1.default.deepEqual(txJson.specVersion, Number(resources_2.testnetMaterial.specVersion));
|
|
104
|
+
should_1.default.deepEqual(txJson.nonce, 361);
|
|
105
|
+
should_1.default.deepEqual(txJson.tip, 0);
|
|
106
|
+
should_1.default.deepEqual(txJson.transactionVersion, Number(resources_2.testnetMaterial.txVersion));
|
|
107
|
+
should_1.default.deepEqual(txJson.chainName.toLowerCase(), resources_1.chainName);
|
|
108
|
+
should_1.default.deepEqual(txJson.eraPeriod, 64);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zdGFrZUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3Vuc3Rha2VCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1QixpQ0FBbUQ7QUFDbkQsb0VBQWlFO0FBQ2pFLCtDQUE0RjtBQUM1RixpQ0FBeUM7QUFDekMsbUVBQTJDO0FBQzNDLHNEQUF5RDtBQUV6RCxRQUFRLENBQUMscUJBQXFCLEVBQUU7SUFDOUIsTUFBTSxjQUFjLEdBQUcsb0VBQW9FLENBQUM7SUFDNUYsSUFBSSxPQUF1QixDQUFDO0lBQzVCLE1BQU0sTUFBTSxHQUFHLG9CQUFRLENBQUMsUUFBUSxDQUFDO0lBRWpDLFVBQVUsQ0FBQztRQUNULE1BQU0sTUFBTSxHQUFHLElBQUEsc0JBQWUsR0FBRSxDQUFDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLGVBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxPQUFPLEdBQUcsSUFBSSwrQkFBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtRQUM1QixFQUFFLENBQUMsOEJBQThCLEVBQUU7WUFDakMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLFdBQUcsRUFBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDdkQsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFDMUIsQ0FBQyxDQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssZ0NBQWdDLENBQzdELENBQUM7WUFDRixnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFH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QUM7WUFDcEMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLDJCQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMvRSxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFLHFCQUFTLENBQUMsQ0FBQztZQUM1RCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IHNweSwgYXNzZXJ0IGFzIFNpbm9uQXNzZXJ0IH0gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgVW5zdGFrZUJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3Vuc3Rha2VCdWlsZGVyJztcbmltcG9ydCB7IGFjY291bnRzLCBtb2NrVHNzU2lnbmF0dXJlLCBnZW5lc2lzSGFzaCwgY2hhaW5OYW1lLCByYXdUeCB9IGZyb20gJy4uLy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBidWlsZFRlc3RDb25maWcgfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgdGVzdG5ldE1hdGVyaWFsIH0gZnJvbSAnLi4vLi4vLi4vc3JjL3Jlc291cmNlcyc7XG5cbmRlc2NyaWJlKCdUYW8gVW5zdGFrZSBCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCByZWZlcmVuY2VCbG9jayA9ICcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnO1xuICBsZXQgYnVpbGRlcjogVW5zdGFrZUJ1aWxkZXI7XG4gIGNvbnN0IHNlbmRlciA9IGFjY291bnRzLmFjY291bnQxO1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGJ1aWxkVGVzdENvbmZpZygpO1xuICAgIGNvbnN0IG1hdGVyaWFsID0gdXRpbHMuZ2V0TWF0ZXJpYWwoY29uZmlnLm5ldHdvcmsudHlwZSk7XG4gICAgYnVpbGRlciA9IG5ldyBVbnN0YWtlQnVpbGRlcihjb25maWcpLm1hdGVyaWFsKG1hdGVyaWFsKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NldHRlciB2YWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgc3Rha2UgYW1vdW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc3B5VmFsaWRhdGVWYWx1ZSA9IHNweShidWlsZGVyLCAndmFsaWRhdGVWYWx1ZScpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYnVpbGRlci5hbW91bnQoJy0xJyksXG4gICAgICAgIChlOiBFcnJvcikgPT4gZS5tZXNzYWdlID09PSAnVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJ1xuICAgICAgKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci5hbW91bnQoJzEwMDAnKSk7XG4gICAgICBTaW5vbkFzc2VydC5jYWxsZWRUd2ljZShzcHlWYWxpZGF0ZVZhbHVlKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGhvdGtleSBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc3B5VmFsaWRhdGVBZGRyZXNzID0gc3B5KGJ1aWxkZXIsICd2YWxpZGF0ZUFkZHJlc3MnKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJ1aWxkZXIuaG90a2V5KHsgYWRkcmVzczogJ2FiYycgfSksXG4gICAgICAgIChlOiBFcnJvcikgPT4gZS5tZXNzYWdlID09PSBgVGhlIGFkZHJlc3MgJ2FiYycgaXMgbm90IGEgd2VsbC1mb3JtZWQgZG90IGFkZHJlc3NgXG4gICAgICApO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLmhvdGtleSh7IGFkZHJlc3M6ICc1RkNQVG5qZXZHcUF1VHR0ZXRCeTRhMjRFajNwSDlmaVE4Zm12UDFaa3JWc0xVb1QnIH0pKTtcbiAgICAgIFNpbm9uQXNzZXJ0LmNhbGxlZFR3aWNlKHNweVZhbGlkYXRlQWRkcmVzcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZCB1bnN0YWtlIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB1bnN0YWtlIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYW1vdW50KCc1MDAwMDAwMDAwMDAwMCcpXG4gICAgICAgIC5ob3RrZXkoeyBhZGRyZXNzOiAnNUZDUFRuamV2R3FBdVR0dGV0Qnk0YTI0RWozcEg5ZmlROGZtdlAxWmtyVnNMVW9UJyB9KVxuICAgICAgICAubmV0dWlkKCcwJylcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDIwMCB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KVxuICAgICAgICAuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5hbW91bnQsICc1MDAwMDAwMDAwMDAwMCcpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udG8sICc1RkNQVG5qZXZHcUF1VHR0ZXRCeTRhMjRFajNwSDlmaVE4Zm12UDFaa3JWc0xVb1QnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5ldHVpZCwgJzAnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbmRlciwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYmxvY2tOdW1iZXIsIDM5MzMpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucmVmZXJlbmNlQmxvY2ssIHJlZmVyZW5jZUJsb2NrKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLCBnZW5lc2lzSGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgTnVtYmVyKHRlc3RuZXRNYXRlcmlhbC5zcGVjVmVyc2lvbikpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDIwMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50aXAsIDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCBOdW1iZXIodGVzdG5ldE1hdGVyaWFsLnR4VmVyc2lvbikpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uY2hhaW5OYW1lLnRvTG93ZXJDYXNlKCksIGNoYWluTmFtZSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5lcmFQZXJpb2QsIDY0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYW4gdW5zaWduZWQgdW5zdGFrZSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFtb3VudCgnNTAwMDAwMDAwMDAwMDAnKVxuICAgICAgICAuaG90a2V5KHsgYWRkcmVzczogJzVGQ1BUbmpldkdxQXVUdHRldEJ5NGEyNEVqM3BIOWZpUThmbXZQMVprclZzTFVvVCcgfSlcbiAgICAgICAgLm5ldHVpZCgnMCcpXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAyMDAgfSlcbiAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYW1vdW50LCAnNTAwMDAwMDAwMDAwMDAnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRvLCAnNUZDUFRuamV2R3FBdVR0dGV0Qnk0YTI0RWozcEg5ZmlROGZtdlAxWmtyVnNMVW9UJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5uZXR1aWQsICcwJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCAzOTMzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCByZWZlcmVuY2VCbG9jayk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIE51bWJlcih0ZXN0bmV0TWF0ZXJpYWwuc3BlY1ZlcnNpb24pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAyMDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgTnVtYmVyKHRlc3RuZXRNYXRlcmlhbC50eFZlcnNpb24pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZS50b0xvd2VyQ2FzZSgpLCBjaGFpbk5hbWUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCA2NCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGZyb20gcmF3IHNpZ25lZCB0eCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC51bnN0YWtlLnNpZ25lZCk7XG4gICAgICBidWlsZGVyLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5hbW91bnQsICcxMDAwMDAwMDAnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRvLCAnNUZDUFRuamV2R3FBdVR0dGV0Qnk0YTI0RWozcEg5ZmlROGZtdlAxWmtyVnNMVW9UJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5uZXR1aWQsICcwJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsICc1RnZTV2JWNGhHQzdHdlhRS0t0aVZtbUhTSDNKRUxLOFIzSlM4WjVhZG5BQ0ZCd2gnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmJsb2NrTnVtYmVyLCAzOTMzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnJlZmVyZW5jZUJsb2NrLCByZWZlcmVuY2VCbG9jayk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaCwgZ2VuZXNpc0hhc2gpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIE51bWJlcih0ZXN0bmV0TWF0ZXJpYWwuc3BlY1ZlcnNpb24pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAzNjEpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udGlwLCAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgTnVtYmVyKHRlc3RuZXRNYXRlcmlhbC50eFZlcnNpb24pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmNoYWluTmFtZS50b0xvd2VyQ2FzZSgpLCBjaGFpbk5hbWUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZXJhUGVyaW9kLCA2NCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../test/unit/util.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
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 utils_1 = __importDefault(require("../../src/lib/utils"));
|
|
7
|
+
describe('Tao utils', function () {
|
|
8
|
+
describe('getTaoTokenBySubnetId', function () {
|
|
9
|
+
it('should succeed for valid string subnetId', function () {
|
|
10
|
+
const token = utils_1.default.getTaoTokenBySubnetId('1');
|
|
11
|
+
token.name.should.equal('ttao:apex');
|
|
12
|
+
});
|
|
13
|
+
it('should succeed for valid number subnetId', function () {
|
|
14
|
+
const token = utils_1.default.getTaoTokenBySubnetId(1);
|
|
15
|
+
token.name.should.equal('ttao:apex');
|
|
16
|
+
});
|
|
17
|
+
it('should fail for invalid subnetId', function () {
|
|
18
|
+
(() => utils_1.default.getTaoTokenBySubnetId('invalid')).should.throw('No Tao token found for subnetId: invalid');
|
|
19
|
+
});
|
|
20
|
+
it('should fail for non-existent subnetId', function () {
|
|
21
|
+
(() => utils_1.default.getTaoTokenBySubnetId(999)).should.throw('No Tao token found for subnetId: 999');
|
|
22
|
+
});
|
|
23
|
+
it('should fail for undefined subnetId', function () {
|
|
24
|
+
// @ts-expect-error testing failure case
|
|
25
|
+
(() => utils_1.default.getTaoTokenBySubnetId(undefined)).should.throw('No Tao token found for subnetId: undefined');
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0VBQXdDO0FBRXhDLFFBQVEsQ0FBQyxXQUFXLEVBQUU7SUFDcEIsUUFBUSxDQUFDLHVCQUF1QixFQUFFO1FBQ2hDLEVBQUUsQ0FBQywwQ0FBMEMsRUFBRTtZQUM3QyxNQUFNLEtBQUssR0FBRyxlQUFLLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0MsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsRUFBRSxDQUFDLDBDQUEwQyxFQUFFO1lBQzdDLE1BQU0sS0FBSyxHQUFHLGVBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsa0NBQWtDLEVBQUU7WUFDckMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFLLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDMUcsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsdUNBQXVDLEVBQUU7WUFDMUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFLLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDaEcsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsb0NBQW9DLEVBQUU7WUFDdkMsd0NBQXdDO1lBQ3hDLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBSyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQzVHLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcblxuZGVzY3JpYmUoJ1RhbyB1dGlscycsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2dldFRhb1Rva2VuQnlTdWJuZXRJZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgZm9yIHZhbGlkIHN0cmluZyBzdWJuZXRJZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gdXRpbHMuZ2V0VGFvVG9rZW5CeVN1Ym5ldElkKCcxJyk7XG4gICAgICB0b2tlbi5uYW1lLnNob3VsZC5lcXVhbCgndHRhbzphcGV4Jyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIGZvciB2YWxpZCBudW1iZXIgc3VibmV0SWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHV0aWxzLmdldFRhb1Rva2VuQnlTdWJuZXRJZCgxKTtcbiAgICAgIHRva2VuLm5hbWUuc2hvdWxkLmVxdWFsKCd0dGFvOmFwZXgnKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIGludmFsaWQgc3VibmV0SWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gdXRpbHMuZ2V0VGFvVG9rZW5CeVN1Ym5ldElkKCdpbnZhbGlkJykpLnNob3VsZC50aHJvdygnTm8gVGFvIHRva2VuIGZvdW5kIGZvciBzdWJuZXRJZDogaW52YWxpZCcpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCBmb3Igbm9uLWV4aXN0ZW50IHN1Ym5ldElkJywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+IHV0aWxzLmdldFRhb1Rva2VuQnlTdWJuZXRJZCg5OTkpKS5zaG91bGQudGhyb3coJ05vIFRhbyB0b2tlbiBmb3VuZCBmb3Igc3VibmV0SWQ6IDk5OScpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCBmb3IgdW5kZWZpbmVkIHN1Ym5ldElkJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0ZXN0aW5nIGZhaWx1cmUgY2FzZVxuICAgICAgKCgpID0+IHV0aWxzLmdldFRhb1Rva2VuQnlTdWJuZXRJZCh1bmRlZmluZWQpKS5zaG91bGQudGhyb3coJ05vIFRhbyB0b2tlbiBmb3VuZCBmb3Igc3VibmV0SWQ6IHVuZGVmaW5lZCcpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|