@swapkit/helpers 1.0.0-rc.9 → 1.0.0-rc.90

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.
Files changed (38) hide show
  1. package/dist/index.js +2065 -0
  2. package/dist/index.js.map +28 -0
  3. package/package.json +24 -37
  4. package/src/helpers/__tests__/asset.test.ts +126 -108
  5. package/src/helpers/__tests__/memo.test.ts +52 -40
  6. package/src/helpers/__tests__/others.test.ts +42 -37
  7. package/src/helpers/__tests__/validators.test.ts +24 -0
  8. package/src/helpers/asset.ts +119 -87
  9. package/src/helpers/liquidity.ts +50 -43
  10. package/src/helpers/memo.ts +31 -28
  11. package/src/helpers/others.ts +29 -12
  12. package/src/helpers/validators.ts +15 -6
  13. package/src/helpers/web3wallets.ts +178 -0
  14. package/src/index.ts +13 -9
  15. package/src/modules/__tests__/assetValue.test.ts +325 -116
  16. package/src/modules/__tests__/bigIntArithmetics.test.ts +30 -0
  17. package/src/modules/__tests__/swapKitNumber.test.ts +306 -183
  18. package/src/modules/assetValue.ts +216 -152
  19. package/src/modules/bigIntArithmetics.ts +214 -147
  20. package/src/modules/requestClient.ts +29 -0
  21. package/src/modules/swapKitError.ts +32 -5
  22. package/src/modules/swapKitNumber.ts +8 -1
  23. package/src/types/abis/erc20.ts +99 -0
  24. package/src/types/abis/tcEthVault.ts +496 -0
  25. package/src/types/chains.ts +220 -0
  26. package/src/types/commonTypes.ts +119 -0
  27. package/src/types/derivationPath.ts +56 -0
  28. package/src/types/index.ts +10 -0
  29. package/src/types/network.ts +43 -0
  30. package/src/types/sdk.ts +11 -0
  31. package/src/types/tokens.ts +30 -0
  32. package/src/types/transactions.ts +45 -0
  33. package/src/types/wallet.ts +39 -0
  34. package/LICENSE +0 -201
  35. package/dist/index.cjs +0 -1
  36. package/dist/index.d.ts +0 -354
  37. package/dist/index.es.js +0 -1054
  38. package/src/helpers/request.ts +0 -16
@@ -1,70 +1,70 @@
1
- import { describe, expect, test } from 'vitest';
1
+ import { describe, expect, test } from "bun:test";
2
2
 
3
- import { SwapKitNumber } from '../swapKitNumber.ts';
3
+ import { SwapKitNumber } from "../swapKitNumber.ts";
4
4
 
5
- describe('SwapKitNumber', () => {
6
- describe('constructors', () => {
7
- test('creates numbers correctly', () => {
5
+ describe("SwapKitNumber", () => {
6
+ describe("constructors", () => {
7
+ test("creates numbers correctly", () => {
8
8
  const skNumber1 = new SwapKitNumber(1);
9
- expect(skNumber1.getValue('string')).toBe('1');
10
- expect(skNumber1.getValue('number')).toBe(1);
11
- expect(skNumber1.getBaseValue('bigint')).toBe(100000000n);
9
+ expect(skNumber1.getValue("string")).toBe("1");
10
+ expect(skNumber1.getValue("number")).toBe(1);
11
+ expect(skNumber1.getBaseValue("bigint")).toBe(100000000n);
12
12
 
13
- const skNumber2 = new SwapKitNumber('1');
14
- expect(skNumber2.getValue('string')).toBe('1');
15
- expect(skNumber2.getBaseValue('bigint')).toBe(100000000n);
13
+ const skNumber2 = new SwapKitNumber("1");
14
+ expect(skNumber2.getValue("string")).toBe("1");
15
+ expect(skNumber2.getBaseValue("bigint")).toBe(100000000n);
16
16
 
17
17
  /**
18
18
  * because by default we have 8 decimals - it will be rounded to 0 on base value
19
19
  */
20
- const skNumber3 = new SwapKitNumber('0.0000000001');
21
- expect(skNumber3.getValue('string')).toBe('0.0000000001');
22
- expect(skNumber3.getBaseValue('bigint')).toBe(0n);
20
+ const skNumber3 = new SwapKitNumber("0.0000000001");
21
+ expect(skNumber3.getValue("string")).toBe("0.0000000001");
22
+ expect(skNumber3.getBaseValue("bigint")).toBe(0n);
23
23
 
24
- const skNumber4 = new SwapKitNumber({ value: '0.0000000001', decimal: 10 });
25
- expect(skNumber4.getValue('string')).toBe('0.0000000001');
26
- expect(skNumber4.getBaseValue('bigint')).toBe(1n);
24
+ const skNumber4 = new SwapKitNumber({ value: "0.0000000001", decimal: 10 });
25
+ expect(skNumber4.getValue("string")).toBe("0.0000000001");
26
+ expect(skNumber4.getBaseValue("bigint")).toBe(1n);
27
27
 
28
28
  const skNumber5 = new SwapKitNumber({ value: 0.1005, decimal: 3 });
29
- expect(skNumber5.getValue('string')).toBe('0.101');
30
- expect(skNumber5.getBaseValue('bigint')).toBe(100n);
29
+ expect(skNumber5.getValue("string")).toBe("0.101");
30
+ expect(skNumber5.getBaseValue("bigint")).toBe(100n);
31
31
 
32
32
  const skNumber6 = new SwapKitNumber({ value: -0.1005, decimal: 3 });
33
- expect(skNumber6.getValue('string')).toBe('-0.101');
34
- expect(skNumber6.getBaseValue('bigint')).toBe(-100n);
33
+ expect(skNumber6.getValue("string")).toBe("-0.101");
34
+ expect(skNumber6.getBaseValue("bigint")).toBe(-100n);
35
35
  expect(skNumber6.decimal).toBe(3);
36
- expect(skNumber6.getValue('number')).toBe(-0.101);
36
+ expect(skNumber6.getValue("number")).toBe(-0.101);
37
37
  expect(skNumber6.decimalMultiplier).toBe(100000000n);
38
38
  });
39
39
 
40
- test('creates SwapKitInstance from BigInt: (12.345678901234, decimals: 12)', () => {
40
+ test("creates SwapKitInstance from BigInt: (12.345678901234, decimals: 12)", () => {
41
41
  const skNumber = SwapKitNumber.fromBigInt(12345678901234n, 12);
42
42
 
43
- expect(skNumber.getValue('string')).toBe('12.345678901234');
44
- expect(skNumber.getBaseValue('bigint')).toBe(12345678901234n);
43
+ expect(skNumber.getValue("string")).toBe("12.345678901234");
44
+ expect(skNumber.getBaseValue("bigint")).toBe(12345678901234n);
45
45
  });
46
46
  });
47
47
 
48
- describe('shiftDecimals', () => {
49
- test('shifts up and bumps number', () => {
48
+ describe("shiftDecimals", () => {
49
+ test("shifts up and bumps number", () => {
50
50
  const skNumber = new SwapKitNumber(1);
51
- expect(skNumber.getValue('string')).toBe('1');
52
- expect(skNumber.getBaseValue('bigint')).toBe(100000000n);
51
+ expect(skNumber.getValue("string")).toBe("1");
52
+ expect(skNumber.getBaseValue("bigint")).toBe(100000000n);
53
53
 
54
54
  const shiftedSkNumber = SwapKitNumber.shiftDecimals({
55
55
  value: skNumber,
56
- from: 6,
57
- to: 8,
56
+ from: 8,
57
+ to: 6,
58
58
  });
59
59
 
60
- expect(shiftedSkNumber.getValue('string')).toBe('100');
61
- expect(shiftedSkNumber.getBaseValue('bigint')).toBe(10000000000n);
60
+ expect(shiftedSkNumber.getValue("string")).toBe("1");
61
+ expect(shiftedSkNumber.getBaseValue("bigint")).toBe(1000000n);
62
62
  });
63
63
 
64
- test('shifts down and rounds down number', () => {
64
+ test("shifts down and rounds down number", () => {
65
65
  const skNumber = new SwapKitNumber(2.12345678);
66
- expect(skNumber.getValue('string')).toBe('2.12345678');
67
- expect(skNumber.getBaseValue('bigint')).toBe(212345678n);
66
+ expect(skNumber.getValue("string")).toBe("2.12345678");
67
+ expect(skNumber.getBaseValue("bigint")).toBe(212345678n);
68
68
 
69
69
  const shiftedSkNumber = SwapKitNumber.shiftDecimals({
70
70
  value: skNumber,
@@ -72,182 +72,264 @@ describe('SwapKitNumber', () => {
72
72
  to: 6,
73
73
  });
74
74
 
75
- expect(shiftedSkNumber.getValue('string')).toBe('2.123456');
76
- expect(shiftedSkNumber.getBaseValue('bigint')).toBe(2123456n);
75
+ expect(shiftedSkNumber.getValue("string")).toBe("2.123456");
76
+ expect(shiftedSkNumber.getBaseValue("bigint")).toBe(2123456n);
77
+ });
78
+
79
+ test("shift eth from 18 to 8", () => {
80
+ const skNumber = new SwapKitNumber({ value: "0.2", decimal: 18 });
81
+
82
+ const shiftedSkNumber = SwapKitNumber.shiftDecimals({
83
+ value: skNumber,
84
+ from: 18,
85
+ to: 8,
86
+ });
87
+
88
+ expect(shiftedSkNumber.getValue("string")).toBe("0.2");
89
+ expect(shiftedSkNumber.getBaseValue("bigint")).toBe(20000000n);
77
90
  });
78
91
  });
79
92
 
80
- describe('getValue', () => {
81
- describe('string', () => {
82
- test('returns string value', () => {
93
+ describe("getValue", () => {
94
+ describe("string", () => {
95
+ test("returns string value", () => {
83
96
  const skNumber = new SwapKitNumber(1);
84
- expect(skNumber.getValue('string')).toBe('1');
97
+ expect(skNumber.getValue("string")).toBe("1");
85
98
  });
86
99
 
87
- test('returns string value with decimals', () => {
100
+ test("returns string value with decimals", () => {
88
101
  const skNumber = new SwapKitNumber(0.01);
89
- expect(skNumber.getValue('string')).toBe('0.01');
102
+ expect(skNumber.getValue("string")).toBe("0.01");
90
103
  });
91
104
  });
92
105
 
93
- describe('number', () => {
94
- test('returns number value', () => {
106
+ describe("number", () => {
107
+ test("returns number value", () => {
95
108
  const skNumber = new SwapKitNumber(1);
96
- expect(skNumber.getValue('number')).toBe(1);
109
+ expect(skNumber.getValue("number")).toBe(1);
97
110
  });
98
111
 
99
- test('returns number value with decimals', () => {
112
+ test("returns number value with decimals", () => {
100
113
  const skNumber = new SwapKitNumber(0.01);
101
- expect(skNumber.getValue('number')).toBe(0.01);
114
+ expect(skNumber.getValue("number")).toBe(0.01);
102
115
  });
103
116
  });
104
117
 
105
- describe('bigint', () => {
106
- test('returns bigint value', () => {
118
+ describe("bigint", () => {
119
+ test("returns bigint value", () => {
107
120
  const skNumber = new SwapKitNumber(1);
108
- expect(skNumber.getBaseValue('bigint')).toBe(100000000n);
121
+ expect(skNumber.getBaseValue("bigint")).toBe(100000000n);
109
122
  });
110
123
  });
111
124
  });
112
125
 
113
- describe('toSignificant', () => {
114
- describe('normal cases', () => {
115
- test('returns first significant number of digits', () => {
126
+ describe("toSignificant", () => {
127
+ describe("normal cases", () => {
128
+ test("returns first significant number of digits", () => {
116
129
  const usdLikeNumber = new SwapKitNumber(1234.5678);
117
- expect(usdLikeNumber.toSignificant(2)).toBe('1200');
118
- expect(usdLikeNumber.toSignificant(3)).toBe('1230');
119
- expect(usdLikeNumber.toSignificant(4)).toBe('1234');
120
- expect(usdLikeNumber.toSignificant(5)).toBe('1234.5');
121
- expect(usdLikeNumber.toSignificant(6)).toBe('1234.56');
122
- expect(usdLikeNumber.toSignificant(7)).toBe('1234.567');
123
- expect(usdLikeNumber.toSignificant(8)).toBe('1234.5678');
130
+ expect(usdLikeNumber.toSignificant(2)).toBe("1200");
131
+ expect(usdLikeNumber.toSignificant(3)).toBe("1230");
132
+ expect(usdLikeNumber.toSignificant(4)).toBe("1234");
133
+ expect(usdLikeNumber.toSignificant(5)).toBe("1234.5");
134
+ expect(usdLikeNumber.toSignificant(6)).toBe("1234.56");
135
+ expect(usdLikeNumber.toSignificant(7)).toBe("1234.567");
136
+ expect(usdLikeNumber.toSignificant(8)).toBe("1234.5678");
124
137
 
125
138
  const btcLikeNumber = new SwapKitNumber(0.00005678);
126
- expect(btcLikeNumber.toSignificant(2)).toBe('0.000056');
127
- expect(btcLikeNumber.toSignificant(3)).toBe('0.0000567');
128
- expect(btcLikeNumber.toSignificant(4)).toBe('0.00005678');
129
- expect(btcLikeNumber.toSignificant(5)).toBe('0.00005678');
130
- expect(btcLikeNumber.toSignificant(8)).toBe('0.00005678');
139
+ expect(btcLikeNumber.toSignificant(2)).toBe("0.000056");
140
+ expect(btcLikeNumber.toSignificant(3)).toBe("0.0000567");
141
+ expect(btcLikeNumber.toSignificant(4)).toBe("0.00005678");
142
+ expect(btcLikeNumber.toSignificant(5)).toBe("0.00005678");
143
+ expect(btcLikeNumber.toSignificant(8)).toBe("0.00005678");
131
144
  });
132
145
  });
133
146
 
134
- describe('custom decimals', () => {
135
- test('returns first significant number of digits', () => {
147
+ describe("custom decimals", () => {
148
+ test("returns first significant number of digits", () => {
136
149
  const usdLikeNumber = new SwapKitNumber({ value: 1234.5678, decimal: 2 });
137
- expect(usdLikeNumber.toSignificant(2)).toBe('1200');
138
- expect(usdLikeNumber.toSignificant(3)).toBe('1230');
139
- expect(usdLikeNumber.toSignificant(4)).toBe('1234');
140
- expect(usdLikeNumber.toSignificant(5)).toBe('1234.5');
141
- expect(usdLikeNumber.toSignificant(6)).toBe('1234.57');
142
- expect(usdLikeNumber.toSignificant(7)).toBe('1234.57');
143
- expect(usdLikeNumber.toSignificant(8)).toBe('1234.57');
150
+ expect(usdLikeNumber.toSignificant(2)).toBe("1200");
151
+ expect(usdLikeNumber.toSignificant(3)).toBe("1230");
152
+ expect(usdLikeNumber.toSignificant(4)).toBe("1234");
153
+ expect(usdLikeNumber.toSignificant(5)).toBe("1234.5");
154
+ expect(usdLikeNumber.toSignificant(6)).toBe("1234.57");
155
+ expect(usdLikeNumber.toSignificant(7)).toBe("1234.57");
156
+ expect(usdLikeNumber.toSignificant(8)).toBe("1234.57");
144
157
 
145
158
  const ethLikeNumber = new SwapKitNumber({ value: 0.00005678, decimal: 18 });
146
- expect(ethLikeNumber.toSignificant(2)).toBe('0.000056');
147
- expect(ethLikeNumber.toSignificant(3)).toBe('0.0000567');
148
- expect(ethLikeNumber.toSignificant(4)).toBe('0.00005678');
149
- expect(ethLikeNumber.toSignificant(5)).toBe('0.00005678');
150
- expect(ethLikeNumber.toSignificant(8)).toBe('0.00005678');
151
- expect(ethLikeNumber.toSignificant(18)).toBe('0.00005678');
159
+ expect(ethLikeNumber.toSignificant(2)).toBe("0.000056");
160
+ expect(ethLikeNumber.toSignificant(3)).toBe("0.0000567");
161
+ expect(ethLikeNumber.toSignificant(4)).toBe("0.00005678");
162
+ expect(ethLikeNumber.toSignificant(5)).toBe("0.00005678");
163
+ expect(ethLikeNumber.toSignificant(8)).toBe("0.00005678");
164
+ expect(ethLikeNumber.toSignificant(18)).toBe("0.00005678");
152
165
  });
153
166
  });
154
167
  });
155
168
 
156
- describe('add', () => {
157
- test('adds same type numbers correctly', () => {
169
+ describe("toAbbreviation", () => {
170
+ test("returns abbreviation with up to 3 integer digits", () => {
171
+ const skNumber = new SwapKitNumber(1234.5678);
172
+ expect(skNumber.toAbbreviation()).toBe("1.23K");
173
+
174
+ const skNumber2 = new SwapKitNumber(1234567.5678);
175
+ expect(skNumber2.toAbbreviation()).toBe("1.23M");
176
+
177
+ const skNumber3 = new SwapKitNumber(1234567890.5678);
178
+ expect(skNumber3.toAbbreviation()).toBe("1.23B");
179
+
180
+ const skNumber4 = new SwapKitNumber("1234567890123.5678");
181
+ expect(skNumber4.toAbbreviation()).toBe("1.23T");
182
+
183
+ const skNumber5 = new SwapKitNumber("1234567890123456.5678");
184
+ expect(skNumber5.toAbbreviation()).toBe("1.23Q");
185
+
186
+ const skNumber6 = new SwapKitNumber("1234567890123456789.5678");
187
+ expect(skNumber6.toAbbreviation()).toBe("1.23Qi");
188
+
189
+ const skNumber7 = new SwapKitNumber("1234567890123456789012.5678");
190
+ expect(skNumber7.toAbbreviation()).toBe("1.23S");
191
+
192
+ const skNumber8 = new SwapKitNumber(1234.5678);
193
+ expect(skNumber8.toAbbreviation(0)).toBe("1K");
194
+
195
+ const skNumber9 = new SwapKitNumber(1234.5678);
196
+ expect(skNumber9.toAbbreviation(1)).toBe("1.2K");
197
+
198
+ const skNumber10 = new SwapKitNumber(123456.78);
199
+ expect(skNumber10.toAbbreviation()).toBe("123.46K");
200
+ });
201
+ });
202
+
203
+ describe("toCurrency", () => {
204
+ test("returns abbreviation with up to 3 integer digits", () => {
205
+ const skNumber = new SwapKitNumber(1234.5678);
206
+ expect(skNumber.toCurrency()).toBe("$1,234.56");
207
+ expect(
208
+ skNumber.toCurrency("€", {
209
+ decimalSeparator: ",",
210
+ thousandSeparator: " ",
211
+ currencyPosition: "end",
212
+ }),
213
+ ).toBe("1 234,56€");
214
+
215
+ const skNumber2 = new SwapKitNumber(0.5678);
216
+ expect(skNumber2.toCurrency()).toBe("$0.5678");
217
+ expect(
218
+ skNumber2.toCurrency("€", {
219
+ decimalSeparator: ",",
220
+ currencyPosition: "end",
221
+ }),
222
+ ).toBe("0,5678€");
223
+
224
+ const skNumber3 = new SwapKitNumber(0.00005678);
225
+ expect(skNumber3.toCurrency()).toBe("$0.000057");
226
+ expect(
227
+ skNumber3.toCurrency("€", {
228
+ decimalSeparator: ",",
229
+ thousandSeparator: " ",
230
+ currencyPosition: "end",
231
+ }),
232
+ ).toBe("0,000057€");
233
+
234
+ const skNumber4 = new SwapKitNumber(12345);
235
+ expect(skNumber4.toCurrency()).toBe("$12,345");
236
+ });
237
+ });
238
+
239
+ describe("add", () => {
240
+ test("adds same type numbers correctly", () => {
158
241
  const skNumber1 = new SwapKitNumber(10);
159
- const skNumber2 = new SwapKitNumber('5');
160
- const skNumber3 = new SwapKitNumber('0.5');
242
+ const skNumber2 = new SwapKitNumber("5");
243
+ const skNumber3 = new SwapKitNumber("0.5");
161
244
  const result = skNumber1.add(skNumber2, skNumber3);
162
245
 
163
- expect(result.getValue('string')).toBe('15.5');
164
- expect(result.getBaseValue('bigint')).toBe(1550000000n);
246
+ expect(result.getValue("string")).toBe("15.5");
247
+ expect(result.getBaseValue("bigint")).toBe(1550000000n);
165
248
  });
166
249
 
167
- test('adds different type numbers correctly', () => {
250
+ test("adds different type numbers correctly", () => {
168
251
  const skNumber1 = new SwapKitNumber(10);
169
- const result = skNumber1.add(6, '0.5');
252
+ const result = skNumber1.add(6, "0.5");
170
253
 
171
- expect(result.getValue('string')).toBe('16.5');
172
- expect(result.getBaseValue('bigint')).toBe(1650000000n);
254
+ expect(result.getValue("string")).toBe("16.5");
255
+ expect(result.getBaseValue("bigint")).toBe(1650000000n);
173
256
  });
174
257
 
175
- test('adds large decimal numbers correctly', () => {
258
+ test("adds large decimal numbers correctly", () => {
176
259
  const skNumber1 = new SwapKitNumber(0.0000000001);
177
- const result = skNumber1.add(6.000000000001, '0.0000000000000005');
178
- expect(result.getValue('string')).toBe('6.0000000001010005');
179
- expect(result.getBaseValue('bigint')).toBe(600000000n);
260
+ const result = skNumber1.add(6.000000000001, "0.0000000000000005");
261
+ expect(result.getValue("string")).toBe("6.0000000001010005");
262
+ expect(result.getBaseValue("bigint")).toBe(600000000n);
180
263
  });
181
264
  });
182
265
 
183
- describe('sub', () => {
184
- test('subtracts same type numbers correctly', () => {
266
+ describe("sub", () => {
267
+ test("subtracts same type numbers correctly", () => {
185
268
  const skNumber1 = new SwapKitNumber(10);
186
- const skNumber2 = new SwapKitNumber('5');
269
+ const skNumber2 = new SwapKitNumber("5");
187
270
  const skNumber3 = new SwapKitNumber(0.5);
188
271
  const result = skNumber1.sub(skNumber2, skNumber3);
189
272
 
190
- expect(result.getValue('string')).toBe('4.5');
191
- expect(result.getBaseValue('bigint')).toBe(450000000n);
273
+ expect(result.getValue("string")).toBe("4.5");
274
+ expect(result.getBaseValue("bigint")).toBe(450000000n);
192
275
  });
193
276
 
194
- test('subtracts different type numbers correctly', () => {
277
+ test("subtracts different type numbers correctly", () => {
195
278
  const skNumber1 = new SwapKitNumber(10);
196
- const result = skNumber1.sub(6, '0.5');
279
+ const result = skNumber1.sub(6, "0.5");
197
280
 
198
- expect(result.getValue('string')).toBe('3.5');
199
- expect(result.getBaseValue('bigint')).toBe(350000000n);
281
+ expect(result.getValue("string")).toBe("3.5");
282
+ expect(result.getBaseValue("bigint")).toBe(350000000n);
200
283
  });
201
284
 
202
- test('can process negative results', () => {
285
+ test("can process negative results", () => {
203
286
  const skNumber1 = new SwapKitNumber(10);
204
287
  const result0 = skNumber1.sub(10);
205
- const resultMinus = result0.sub('10');
288
+ const resultMinus = result0.sub("10");
206
289
 
207
- expect(result0.getValue('string')).toBe('0');
208
- expect(resultMinus.getValue('string')).toBe('-10');
209
- expect(result0.getBaseValue('bigint')).toBe(0n);
210
- expect(resultMinus.getBaseValue('bigint')).toBe(-1000000000n);
290
+ expect(result0.getValue("string")).toBe("0");
291
+ expect(resultMinus.getValue("string")).toBe("-10");
292
+ expect(result0.getBaseValue("bigint")).toBe(0n);
293
+ expect(resultMinus.getBaseValue("bigint")).toBe(-1000000000n);
211
294
  });
212
295
  });
213
296
 
214
- describe('mul', () => {
215
- test('multiplies same type numbers correctly', () => {
297
+ describe("mul", () => {
298
+ test("multiplies same type numbers correctly", () => {
216
299
  const skNumber1 = new SwapKitNumber(10);
217
- const skNumber2 = new SwapKitNumber('5');
300
+ const skNumber2 = new SwapKitNumber("5");
218
301
  const skNumber3 = new SwapKitNumber(0.5);
219
302
  const result = skNumber1.mul(skNumber2, skNumber3);
220
303
 
221
- expect(result.getValue('string')).toBe('25');
222
- expect(result.getBaseValue('bigint')).toBe(2500000000n);
304
+ expect(result.getValue("string")).toBe("25");
305
+ expect(result.getBaseValue("bigint")).toBe(2500000000n);
223
306
  });
224
307
 
225
- test('multiplies different type numbers correctly', () => {
308
+ test("multiplies different type numbers correctly", () => {
226
309
  const skNumber1 = new SwapKitNumber(10);
227
- const result = skNumber1.mul(6, '0.5');
310
+ const result = skNumber1.mul(6, "0.5");
228
311
 
229
- expect(result.getValue('string')).toBe('30');
230
- expect(result.getBaseValue('bigint')).toBe(3000000000n);
312
+ expect(result.getValue("string")).toBe("30");
313
+ expect(result.getBaseValue("bigint")).toBe(3000000000n);
231
314
  });
232
315
 
233
- test('multiplies numbers correctly if decimals of SKN is lower than number multiplied with', () => {
316
+ test("multiplies numbers correctly if decimals of SKN is lower than number multiplied with", () => {
234
317
  const skNumber1 = new SwapKitNumber({ value: 1000000, decimal: 4 });
235
- const result = skNumber1.mul('0.00001');
318
+ const result = skNumber1.mul("0.00001");
236
319
 
237
- expect(result.getValue('string')).toBe('10');
238
- expect(result.getBaseValue('bigint')).toBe(100000n);
320
+ expect(result.getValue("string")).toBe("10");
321
+ expect(result.getBaseValue("bigint")).toBe(100000n);
239
322
  });
240
323
 
241
- test('should correctly round the result of multiplication', () => {
324
+ test("should correctly round the result of multiplication", () => {
242
325
  const skNumber1 = new SwapKitNumber({ decimal: 3, value: 1.23 });
243
326
  const skNumber2 = new SwapKitNumber({ decimal: 4, value: 4.56 });
244
327
 
245
328
  const result = skNumber1.mul(skNumber2);
246
329
 
247
330
  // The exact result of 1.23 * 4.56 is 5.6088
248
- // If we round it to 2 decimal places, we should get 5.61
249
- expect(result.getValue('string')).toBe('5.609');
250
- expect(result.getBaseValue('bigint')).toBe(5608n);
331
+ expect(result.getValue("string")).toBe("5.609");
332
+ expect(result.getBaseValue("bigint")).toBe(5608n);
251
333
 
252
334
  const skNumber3 = new SwapKitNumber({ decimal: 2, value: 1.23 });
253
335
  const skNumber4 = new SwapKitNumber(-1.234567891);
@@ -256,109 +338,137 @@ describe('SwapKitNumber', () => {
256
338
 
257
339
  // The exact result of 1.23 * -1.234567891 is -1,518518505
258
340
  // If we round it to 2 decimal places, we should get 5.61
259
- expect(result2.getValue('string')).toBe('-1.52');
260
- expect(result2.getBaseValue('bigint')).toBe(-151n);
341
+ expect(result2.getValue("string")).toBe("-1.52");
342
+ expect(result2.getBaseValue("bigint")).toBe(-151n);
261
343
  });
262
344
  });
263
345
 
264
- describe('div', () => {
265
- test('divides same type numbers correctly', () => {
346
+ describe("div", () => {
347
+ test("divides same type numbers correctly", () => {
266
348
  const skNumber1 = new SwapKitNumber(10);
267
- const skNumber2 = new SwapKitNumber('5');
349
+ const skNumber2 = new SwapKitNumber("5");
268
350
  const skNumber3 = new SwapKitNumber(0.5);
269
351
  const result = skNumber1.div(skNumber2, skNumber3);
270
352
 
271
- expect(result.getValue('string')).toBe('4');
272
- expect(result.getBaseValue('bigint')).toBe(400000000n);
353
+ expect(result.getValue("string")).toBe("4");
354
+ expect(result.getBaseValue("bigint")).toBe(400000000n);
273
355
 
274
356
  const skNumber4 = new SwapKitNumber(10.12);
275
357
  const result2 = skNumber4.div(0.0001);
276
358
 
277
- expect(result2.getValue('string')).toBe('101200');
278
- expect(result2.getBaseValue('bigint')).toBe(10120000000000n);
359
+ expect(result2.getValue("string")).toBe("101200");
360
+ expect(result2.getBaseValue("bigint")).toBe(10120000000000n);
279
361
  });
280
362
 
281
- test('divides different type numbers correctly', () => {
363
+ test("divides different type numbers correctly", () => {
282
364
  const skNumber1 = new SwapKitNumber(20);
283
- const result = skNumber1.div(5, '0.5');
365
+ const result = skNumber1.div(5, "0.5");
284
366
 
285
- expect(result.getValue('string')).toBe('8');
286
- expect(result.getBaseValue('bigint')).toBe(800000000n);
367
+ expect(result.getValue("string")).toBe("8");
368
+ expect(result.getBaseValue("bigint")).toBe(800000000n);
287
369
  });
288
370
 
289
- test('divides different type numbers correctly when decimal is set', () => {
290
- const skNumber1 = new SwapKitNumber({ value: '1.2', decimal: 2 });
371
+ test("divides different type numbers correctly when decimal is set", () => {
372
+ const skNumber1 = new SwapKitNumber({ value: "1.2", decimal: 2 });
291
373
  const result = skNumber1.div(0.001);
292
374
 
293
- expect(result.getValue('string')).toBe('1200');
294
- expect(result.getBaseValue('bigint')).toBe(120000n);
375
+ expect(result.getValue("string")).toBe("1200");
376
+ expect(result.getBaseValue("bigint")).toBe(120000n);
295
377
  });
296
378
 
297
- test('divides smaller number by larger number', () => {
379
+ test("divides smaller number by larger number", () => {
298
380
  const skNumber1 = new SwapKitNumber(1);
299
381
  const result = skNumber1.div(2);
300
382
 
301
- expect(result.getValue('string')).toBe('0.5');
302
- expect(result.getBaseValue('bigint')).toBe(50000000n);
383
+ expect(result.getValue("string")).toBe("0.5");
384
+ expect(result.getBaseValue("bigint")).toBe(50000000n);
303
385
  });
304
386
 
305
- test('divides a number with 18 decimals by a negative number with less decimals', () => {
306
- const skNumber1 = new SwapKitNumber({ value: '1.000000000000000010', decimal: 18 });
307
- const skNumber2 = new SwapKitNumber({ value: '-2', decimal: 1 });
387
+ test("divides a number with 18 decimals by a negative number with less decimals", () => {
388
+ const skNumber1 = new SwapKitNumber({ value: "1.000000000000000010", decimal: 18 });
389
+ const skNumber2 = new SwapKitNumber({ value: "-2", decimal: 1 });
308
390
 
309
391
  const result = skNumber1.div(skNumber2);
310
392
 
311
393
  // The exact result of 1.000000000000000010 / -2 is -0.500000000000000005
312
- expect(result.getValue('string')).toBe('-0.500000000000000005');
313
- expect(result.getBaseValue('bigint')).toBe(-500000000000000005n);
394
+ expect(result.getValue("string")).toBe("-0.500000000000000005");
395
+ expect(result.getBaseValue("bigint")).toBe(-500000000000000005n);
314
396
  });
315
397
 
316
- test('divides a number with 2 decimals by a negative number with more decimals', () => {
317
- const skNumber1 = new SwapKitNumber({ value: '2', decimal: 2 });
318
- const skNumber2 = new SwapKitNumber({ value: '-0.000005', decimal: 18 });
398
+ test("divides a number with 2 decimals by a negative number with more decimals", () => {
399
+ const skNumber1 = new SwapKitNumber({ value: "2", decimal: 2 });
400
+ const skNumber2 = new SwapKitNumber({ value: "-0.000005", decimal: 18 });
319
401
 
320
402
  const result = skNumber1.div(skNumber2);
321
403
 
322
404
  // The exact result of 2 / -0.000005 is -400000
323
- expect(result.getValue('string')).toBe('-400000');
324
- expect(result.getBaseValue('bigint')).toBe(-40000000n);
405
+ expect(result.getValue("string")).toBe("-400000");
406
+ expect(result.getBaseValue("bigint")).toBe(-40000000n);
325
407
  });
326
408
  });
327
409
 
328
- describe('shitcoin cases', () => {
329
- test('multiply huge numbers', () => {
410
+ describe("shitcoin cases", () => {
411
+ test("multiply huge numbers", () => {
330
412
  const skNumber1 = new SwapKitNumber({ value: 1_000_000_000_000_001, decimal: 18 });
331
413
  const skNumber2 = new SwapKitNumber({ value: 987_654_321_000, decimal: 18 });
332
414
 
333
415
  const result = skNumber1.mul(skNumber2);
334
- expect(result.getValue('string')).toBe('987654321000000987654321000');
335
- expect(result.getBaseValue('bigint')).toBe(987654321000000987654321000000000000000000000n);
416
+ expect(result.getValue("string")).toBe("987654321000000987654321000");
417
+ expect(result.getBaseValue("bigint")).toBe(987654321000000987654321000000000000000000000n);
336
418
  });
337
419
 
338
- test('divide huge numbers', () => {
420
+ test("divide huge numbers", () => {
339
421
  const skNumber1 = new SwapKitNumber({ value: 1_000_000_000_000_001, decimal: 18 });
340
422
  const skNumber2 = new SwapKitNumber({ value: 987_654_321_000, decimal: 18 });
341
423
 
342
424
  const result = skNumber1.div(skNumber2);
343
- expect(result.getValue('string')).toBe('1012.4999999873447625');
344
- expect(result.getBaseValue('bigint')).toBe(1012499999987344762500n);
425
+ expect(result.getValue("string")).toBe("1012.4999999873447625");
426
+ expect(result.getBaseValue("bigint")).toBe(1012499999987344762500n);
427
+ });
428
+ });
429
+
430
+ describe("extending multiplier without loosing precision", () => {
431
+ test("edge case 1", () => {
432
+ const asset1 = new SwapKitNumber({ value: 41.90963702, decimal: 8 });
433
+ const multiplier = 5.337952274462478;
434
+ const divider = 105.2562773915526;
435
+ const result = asset1.mul(multiplier).div(divider);
436
+
437
+ expect(result.getValue("string")).toBe("2.12539953");
438
+ });
439
+
440
+ test("edge case 2", () => {
441
+ const asset1 = new SwapKitNumber("41.90963702");
442
+ const multiplier = new SwapKitNumber("5.337952274462478");
443
+ const divider = new SwapKitNumber("105.2562773915526");
444
+ const result = asset1.mul(multiplier).div(divider);
445
+
446
+ expect(result.getValue("string")).toBe("2.125399527674726");
345
447
  });
346
448
  });
347
449
 
348
- describe('gt', () => {
349
- test('greater than', () => {
450
+ describe("gt", () => {
451
+ test("greater than", () => {
350
452
  const skNumber1 = new SwapKitNumber(10);
351
- const skNumber2 = new SwapKitNumber('5');
453
+ const skNumber2 = new SwapKitNumber("5");
352
454
 
353
455
  expect(skNumber1.gt(skNumber2)).toBe(true);
354
456
  expect(skNumber2.gt(skNumber1)).toBe(false);
355
457
  });
458
+
459
+ test("different decimals doesn't affect comparison", () => {
460
+ const skNumber1 = new SwapKitNumber({ value: 10, decimal: 18 });
461
+ const skNumber2 = new SwapKitNumber({ value: "50", decimal: 8 });
462
+
463
+ expect(skNumber1.lt(skNumber2)).toBe(true);
464
+ expect(skNumber2.gt(skNumber1)).toBe(true);
465
+ });
356
466
  });
357
467
 
358
- describe('gte', () => {
359
- test('greater than or equal', () => {
468
+ describe("gte", () => {
469
+ test("greater than or equal", () => {
360
470
  const skNumber1 = new SwapKitNumber(10);
361
- const skNumber2 = new SwapKitNumber('5');
471
+ const skNumber2 = new SwapKitNumber("5");
362
472
 
363
473
  expect(skNumber1.gte(skNumber2)).toBe(true);
364
474
  expect(skNumber1.gte(skNumber1)).toBe(true);
@@ -366,20 +476,20 @@ describe('SwapKitNumber', () => {
366
476
  });
367
477
  });
368
478
 
369
- describe('lt', () => {
370
- test('less than', () => {
479
+ describe("lt", () => {
480
+ test("less than", () => {
371
481
  const skNumber1 = new SwapKitNumber(10);
372
- const skNumber2 = new SwapKitNumber('5');
482
+ const skNumber2 = new SwapKitNumber("5");
373
483
 
374
484
  expect(skNumber1.lt(skNumber2)).toBe(false);
375
485
  expect(skNumber2.lt(skNumber1)).toBe(true);
376
486
  });
377
487
  });
378
488
 
379
- describe('lte', () => {
380
- test('less than or equal', () => {
489
+ describe("lte", () => {
490
+ test("less than or equal", () => {
381
491
  const skNumber1 = new SwapKitNumber(10);
382
- const skNumber2 = new SwapKitNumber('5');
492
+ const skNumber2 = new SwapKitNumber("5");
383
493
 
384
494
  expect(skNumber1.lte(skNumber2)).toBe(false);
385
495
  expect(skNumber1.lte(skNumber1)).toBe(true);
@@ -387,10 +497,10 @@ describe('SwapKitNumber', () => {
387
497
  });
388
498
  });
389
499
 
390
- describe('eq', () => {
391
- test('equal', () => {
500
+ describe("eq", () => {
501
+ test("equal", () => {
392
502
  const skNumber1 = new SwapKitNumber(10);
393
- const skNumber2 = new SwapKitNumber('5');
503
+ const skNumber2 = new SwapKitNumber("5");
394
504
 
395
505
  expect(skNumber1.eq(skNumber2)).toBe(false);
396
506
  expect(skNumber1.eq(skNumber1)).toBe(true);
@@ -398,10 +508,23 @@ describe('SwapKitNumber', () => {
398
508
  });
399
509
  });
400
510
 
401
- describe('Throws', () => {
402
- test('throws if division by zero', () => {
511
+ describe("comparison edge cases with decimals", () => {
512
+ test("compare on cut decimals", () => {
513
+ const skNumber1 = new SwapKitNumber({ value: 0.001, decimal: 3 });
514
+ const value = "0.0019";
515
+
516
+ expect(skNumber1.lt(value)).toBe(true);
517
+ expect(skNumber1.gt(value)).toBe(false);
518
+ expect(skNumber1.eq(value)).toBe(false);
519
+ expect(skNumber1.lte(value)).toBe(true);
520
+ expect(skNumber1.gte(value)).toBe(false);
521
+ });
522
+ });
523
+
524
+ describe("Throws", () => {
525
+ test("throws if division by zero", () => {
403
526
  const skNumber1 = new SwapKitNumber(10);
404
- const skNumber2 = new SwapKitNumber('0');
527
+ const skNumber2 = new SwapKitNumber("0");
405
528
 
406
529
  expect(() => skNumber1.div(skNumber2)).toThrow(RangeError);
407
530
  expect(() => skNumber1.div(0)).toThrow(RangeError);