@swapkit/helpers 1.0.0-rc.2 → 1.0.0-rc.4
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/index.cjs +1 -1
- package/dist/index.d.ts +50 -40
- package/dist/index.es.js +298 -262
- package/package.json +5 -5
- package/src/helpers/others.ts +34 -25
- package/src/index.ts +4 -4
- package/src/modules/__tests__/swapKitNumber.test.ts +143 -67
- package/src/modules/assetValue.ts +40 -40
- package/src/modules/bigIntArithmetics.ts +176 -98
- package/src/modules/swapKitNumber.ts +0 -4
- package/src/helpers/number.ts +0 -40
package/package.json
CHANGED
|
@@ -6,15 +6,15 @@
|
|
|
6
6
|
"vite": "4.4.9",
|
|
7
7
|
"vitest": "0.34.4",
|
|
8
8
|
"@internal/config": "0.0.0-internal.0",
|
|
9
|
-
"@swapkit/tokens": "1.0.0-rc.
|
|
10
|
-
"@swapkit/types": "1.0.0-rc.
|
|
9
|
+
"@swapkit/tokens": "1.0.0-rc.3",
|
|
10
|
+
"@swapkit/types": "1.0.0-rc.3"
|
|
11
11
|
},
|
|
12
12
|
"eslintConfig": {
|
|
13
13
|
"extends": "../../../internal/eslint-config"
|
|
14
14
|
},
|
|
15
15
|
"peerDependencies": {
|
|
16
|
-
"@swapkit/tokens": "1.0.0-rc.
|
|
17
|
-
"@swapkit/types": "1.0.0-rc.
|
|
16
|
+
"@swapkit/tokens": "1.0.0-rc.3",
|
|
17
|
+
"@swapkit/types": "1.0.0-rc.3"
|
|
18
18
|
},
|
|
19
19
|
"exports": {
|
|
20
20
|
".": {
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"repository": "https://github.com/thorswap/SwapKit.git",
|
|
40
40
|
"type": "module",
|
|
41
41
|
"types": "./dist/index.d.ts",
|
|
42
|
-
"version": "1.0.0-rc.
|
|
42
|
+
"version": "1.0.0-rc.4",
|
|
43
43
|
"scripts": {
|
|
44
44
|
"build": "vite build",
|
|
45
45
|
"clean": "rm -rf dist vite.config.ts.* .turbo node_modules",
|
package/src/helpers/others.ts
CHANGED
|
@@ -23,23 +23,28 @@ export const getRequest = async <T>(
|
|
|
23
23
|
url: string,
|
|
24
24
|
params?: { [key in string]?: any },
|
|
25
25
|
): Promise<T> => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
26
|
+
try {
|
|
27
|
+
const queryParams = Object.entries(params || {}).reduce(
|
|
28
|
+
(acc, [key, value]) => {
|
|
29
|
+
if (value) {
|
|
30
|
+
acc[key] = value;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return acc;
|
|
34
|
+
},
|
|
35
|
+
{} as { [key in string]: any },
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
const response = await fetch(
|
|
39
|
+
`${url}${params ? `?${new URLSearchParams(queryParams).toString()}` : ''}`,
|
|
40
|
+
{ method: 'GET', mode: 'cors', credentials: 'omit', referrer: 'https://sk.thorswap.net' },
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
return response.json();
|
|
44
|
+
} catch (error) {
|
|
45
|
+
console.error(error);
|
|
46
|
+
return {} as T;
|
|
47
|
+
}
|
|
43
48
|
};
|
|
44
49
|
|
|
45
50
|
export const postRequest = async <T>(
|
|
@@ -48,12 +53,16 @@ export const postRequest = async <T>(
|
|
|
48
53
|
headers?: Record<string, string>,
|
|
49
54
|
parseAsString = false,
|
|
50
55
|
): Promise<T> => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
try {
|
|
57
|
+
const response = await fetch(`${url}`, {
|
|
58
|
+
body,
|
|
59
|
+
headers,
|
|
60
|
+
method: 'POST',
|
|
61
|
+
referrer: 'https://sk.thorswap.net',
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
return parseAsString ? response.text() : response.json();
|
|
65
|
+
} catch (error) {
|
|
66
|
+
return {} as T;
|
|
67
|
+
}
|
|
59
68
|
};
|
package/src/index.ts
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
export * from './helpers/asset.ts';
|
|
5
5
|
export * from './helpers/liquidity.ts';
|
|
6
6
|
export * from './helpers/memo.ts';
|
|
7
|
-
export * from './helpers/number.ts';
|
|
8
7
|
export * from './helpers/others.ts';
|
|
9
8
|
|
|
10
9
|
/**
|
|
11
10
|
* Modules
|
|
12
11
|
*/
|
|
13
|
-
export
|
|
14
|
-
export
|
|
15
|
-
export
|
|
12
|
+
export * from './modules/assetValue.ts';
|
|
13
|
+
export * from './modules/bigIntArithmetics.ts';
|
|
14
|
+
export * from './modules/swapKitError.ts';
|
|
15
|
+
export * from './modules/swapKitNumber.ts';
|
|
@@ -6,47 +6,47 @@ describe('SwapKitNumber', () => {
|
|
|
6
6
|
describe('constructors', () => {
|
|
7
7
|
test('creates numbers correctly', () => {
|
|
8
8
|
const skNumber1 = new SwapKitNumber(1);
|
|
9
|
-
expect(skNumber1.
|
|
10
|
-
expect(skNumber1.
|
|
9
|
+
expect(skNumber1.getValue('string')).toBe('1');
|
|
10
|
+
expect(skNumber1.getValue('number')).toBe(1);
|
|
11
|
+
expect(skNumber1.getValue('bigint')).toBe(100000000n);
|
|
11
12
|
|
|
12
13
|
const skNumber2 = new SwapKitNumber('1');
|
|
13
|
-
expect(skNumber2.
|
|
14
|
-
expect(skNumber2.
|
|
14
|
+
expect(skNumber2.getValue('string')).toBe('1');
|
|
15
|
+
expect(skNumber2.getValue('bigint')).toBe(100000000n);
|
|
15
16
|
|
|
16
17
|
const skNumber3 = new SwapKitNumber('0.0000000001');
|
|
17
|
-
expect(skNumber3.
|
|
18
|
-
expect(skNumber3.
|
|
18
|
+
expect(skNumber3.getValue('string')).toBe('0.0000000001');
|
|
19
|
+
expect(skNumber3.getValue('bigint')).toBe(1n);
|
|
19
20
|
|
|
20
21
|
const skNumber4 = new SwapKitNumber(0.000000001);
|
|
21
|
-
expect(skNumber4.
|
|
22
|
-
expect(skNumber4.
|
|
22
|
+
expect(skNumber4.getValue('string')).toBe('0.000000001');
|
|
23
|
+
expect(skNumber4.getValue('bigint')).toBe(1n);
|
|
23
24
|
|
|
24
25
|
const skNumber6 = new SwapKitNumber({ value: 0.1005, decimal: 3 });
|
|
25
|
-
expect(skNumber6.
|
|
26
|
-
expect(skNumber6.
|
|
26
|
+
expect(skNumber6.getValue('string')).toBe('0.101');
|
|
27
|
+
expect(skNumber6.getValue('bigint')).toBe(10050000n);
|
|
27
28
|
|
|
28
29
|
const skNumber7 = new SwapKitNumber({ value: -0.1005, decimal: 3 });
|
|
29
|
-
expect(skNumber7.
|
|
30
|
-
expect(skNumber7.
|
|
30
|
+
expect(skNumber7.getValue('string')).toBe('-0.101');
|
|
31
|
+
expect(skNumber7.getValue('bigint')).toBe(-10050000n);
|
|
31
32
|
expect(skNumber7.decimal).toBe(3);
|
|
32
|
-
expect(skNumber7.
|
|
33
|
+
expect(skNumber7.getValue('number')).toBe(-0.101);
|
|
33
34
|
expect(skNumber7.decimalMultiplier).toBe(100000000n);
|
|
34
|
-
expect(skNumber7.toString()).toBe('-0.101');
|
|
35
35
|
});
|
|
36
36
|
|
|
37
37
|
test('creates SwapKitInstance from BigInt: (12.345678901234, decimals: 12)', () => {
|
|
38
38
|
const skNumber = SwapKitNumber.fromBigInt(12345678901234n, 12);
|
|
39
39
|
|
|
40
|
-
expect(skNumber.
|
|
41
|
-
expect(skNumber.
|
|
40
|
+
expect(skNumber.getValue('string')).toBe('12.345678901234');
|
|
41
|
+
expect(skNumber.getValue('bigint')).toBe(12345678901234n);
|
|
42
42
|
});
|
|
43
43
|
});
|
|
44
44
|
|
|
45
45
|
describe('shiftDecimals', () => {
|
|
46
46
|
test('shifts up and bumps number', () => {
|
|
47
47
|
const skNumber = new SwapKitNumber(1);
|
|
48
|
-
expect(skNumber.
|
|
49
|
-
expect(skNumber.
|
|
48
|
+
expect(skNumber.getValue('string')).toBe('1');
|
|
49
|
+
expect(skNumber.getValue('bigint')).toBe(100000000n);
|
|
50
50
|
|
|
51
51
|
const shiftedSkNumber = SwapKitNumber.shiftDecimals({
|
|
52
52
|
value: skNumber,
|
|
@@ -54,14 +54,14 @@ describe('SwapKitNumber', () => {
|
|
|
54
54
|
to: 8,
|
|
55
55
|
});
|
|
56
56
|
|
|
57
|
-
expect(shiftedSkNumber.
|
|
58
|
-
expect(shiftedSkNumber.
|
|
57
|
+
expect(shiftedSkNumber.getValue('string')).toBe('100');
|
|
58
|
+
expect(shiftedSkNumber.getValue('bigint')).toBe(10000000000n);
|
|
59
59
|
});
|
|
60
60
|
|
|
61
|
-
test
|
|
61
|
+
test('shifts down and rounds down number', () => {
|
|
62
62
|
const skNumber = new SwapKitNumber(2.12345678);
|
|
63
|
-
expect(skNumber.
|
|
64
|
-
expect(skNumber.
|
|
63
|
+
expect(skNumber.getValue('string')).toBe('2.12345678');
|
|
64
|
+
expect(skNumber.getValue('bigint')).toBe(212345678n);
|
|
65
65
|
|
|
66
66
|
const shiftedSkNumber = SwapKitNumber.shiftDecimals({
|
|
67
67
|
value: skNumber,
|
|
@@ -69,8 +69,84 @@ describe('SwapKitNumber', () => {
|
|
|
69
69
|
to: 6,
|
|
70
70
|
});
|
|
71
71
|
|
|
72
|
-
expect(shiftedSkNumber.
|
|
73
|
-
expect(shiftedSkNumber.
|
|
72
|
+
expect(shiftedSkNumber.getValue('string')).toBe('2.123456');
|
|
73
|
+
expect(shiftedSkNumber.getValue('bigint')).toBe(212345600n);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
describe('getValue', () => {
|
|
78
|
+
describe('string', () => {
|
|
79
|
+
test('returns string value', () => {
|
|
80
|
+
const skNumber = new SwapKitNumber(1);
|
|
81
|
+
expect(skNumber.getValue('string')).toBe('1');
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
test('returns string value with decimals', () => {
|
|
85
|
+
const skNumber = new SwapKitNumber(0.01);
|
|
86
|
+
expect(skNumber.getValue('string')).toBe('0.01');
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
describe('number', () => {
|
|
91
|
+
test('returns number value', () => {
|
|
92
|
+
const skNumber = new SwapKitNumber(1);
|
|
93
|
+
expect(skNumber.getValue('number')).toBe(1);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
test('returns number value with decimals', () => {
|
|
97
|
+
const skNumber = new SwapKitNumber(0.01);
|
|
98
|
+
expect(skNumber.getValue('number')).toBe(0.01);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
describe('bigint', () => {
|
|
103
|
+
test('returns bigint value', () => {
|
|
104
|
+
const skNumber = new SwapKitNumber(1);
|
|
105
|
+
expect(skNumber.getValue('bigint')).toBe(100000000n);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
describe('toSignificant', () => {
|
|
111
|
+
describe('normal cases', () => {
|
|
112
|
+
test('returns first significant number of digits', () => {
|
|
113
|
+
const usdLikeNumber = new SwapKitNumber(1234.5678);
|
|
114
|
+
expect(usdLikeNumber.toSignificant(2)).toBe('1200');
|
|
115
|
+
expect(usdLikeNumber.toSignificant(3)).toBe('1230');
|
|
116
|
+
expect(usdLikeNumber.toSignificant(4)).toBe('1234');
|
|
117
|
+
expect(usdLikeNumber.toSignificant(5)).toBe('1234.5');
|
|
118
|
+
expect(usdLikeNumber.toSignificant(6)).toBe('1234.56');
|
|
119
|
+
expect(usdLikeNumber.toSignificant(7)).toBe('1234.567');
|
|
120
|
+
expect(usdLikeNumber.toSignificant(8)).toBe('1234.5678');
|
|
121
|
+
|
|
122
|
+
const btcLikeNumber = new SwapKitNumber(0.00005678);
|
|
123
|
+
expect(btcLikeNumber.toSignificant(2)).toBe('0.000056');
|
|
124
|
+
expect(btcLikeNumber.toSignificant(3)).toBe('0.0000567');
|
|
125
|
+
expect(btcLikeNumber.toSignificant(4)).toBe('0.00005678');
|
|
126
|
+
expect(btcLikeNumber.toSignificant(5)).toBe('0.00005678');
|
|
127
|
+
expect(btcLikeNumber.toSignificant(8)).toBe('0.00005678');
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
describe('custom decimals', () => {
|
|
132
|
+
test('returns first significant number of digits', () => {
|
|
133
|
+
const usdLikeNumber = new SwapKitNumber({ value: 1234.5678, decimal: 2 });
|
|
134
|
+
expect(usdLikeNumber.toSignificant(2)).toBe('1200');
|
|
135
|
+
expect(usdLikeNumber.toSignificant(3)).toBe('1230');
|
|
136
|
+
expect(usdLikeNumber.toSignificant(4)).toBe('1234');
|
|
137
|
+
expect(usdLikeNumber.toSignificant(5)).toBe('1234.5');
|
|
138
|
+
expect(usdLikeNumber.toSignificant(6)).toBe('1234.57');
|
|
139
|
+
expect(usdLikeNumber.toSignificant(7)).toBe('1234.57');
|
|
140
|
+
expect(usdLikeNumber.toSignificant(8)).toBe('1234.57');
|
|
141
|
+
|
|
142
|
+
const ethLikeNumber = new SwapKitNumber({ value: 0.00005678, decimal: 18 });
|
|
143
|
+
expect(ethLikeNumber.toSignificant(2)).toBe('0.000056');
|
|
144
|
+
expect(ethLikeNumber.toSignificant(3)).toBe('0.0000567');
|
|
145
|
+
expect(ethLikeNumber.toSignificant(4)).toBe('0.00005678');
|
|
146
|
+
expect(ethLikeNumber.toSignificant(5)).toBe('0.00005678');
|
|
147
|
+
expect(ethLikeNumber.toSignificant(8)).toBe('0.00005678');
|
|
148
|
+
expect(ethLikeNumber.toSignificant(18)).toBe('0.00005678');
|
|
149
|
+
});
|
|
74
150
|
});
|
|
75
151
|
});
|
|
76
152
|
|
|
@@ -81,23 +157,23 @@ describe('SwapKitNumber', () => {
|
|
|
81
157
|
const skNumber3 = new SwapKitNumber('0.5');
|
|
82
158
|
const result = skNumber1.add(skNumber2, skNumber3);
|
|
83
159
|
|
|
84
|
-
expect(result.
|
|
85
|
-
expect(result.
|
|
160
|
+
expect(result.getValue('string')).toBe('15.5');
|
|
161
|
+
expect(result.getValue('bigint')).toBe(1550000000n);
|
|
86
162
|
});
|
|
87
163
|
|
|
88
164
|
test('adds different type numbers correctly', () => {
|
|
89
165
|
const skNumber1 = new SwapKitNumber(10);
|
|
90
166
|
const result = skNumber1.add(6, '0.5');
|
|
91
167
|
|
|
92
|
-
expect(result.
|
|
93
|
-
expect(result.
|
|
168
|
+
expect(result.getValue('string')).toBe('16.5');
|
|
169
|
+
expect(result.getValue('bigint')).toBe(1650000000n);
|
|
94
170
|
});
|
|
95
171
|
|
|
96
172
|
test('adds large decimal numbers correctly', () => {
|
|
97
173
|
const skNumber1 = new SwapKitNumber(0.0000000001);
|
|
98
174
|
const result = skNumber1.add(6.000000000001, '0.0000000000000005');
|
|
99
|
-
expect(result.
|
|
100
|
-
expect(result.
|
|
175
|
+
expect(result.getValue('string')).toBe('6.0000000001010005');
|
|
176
|
+
expect(result.getValue('bigint')).toBe(60000000001010005n);
|
|
101
177
|
});
|
|
102
178
|
});
|
|
103
179
|
|
|
@@ -108,16 +184,16 @@ describe('SwapKitNumber', () => {
|
|
|
108
184
|
const skNumber3 = new SwapKitNumber(0.5);
|
|
109
185
|
const result = skNumber1.sub(skNumber2, skNumber3);
|
|
110
186
|
|
|
111
|
-
expect(result.
|
|
112
|
-
expect(result.
|
|
187
|
+
expect(result.getValue('string')).toBe('4.5');
|
|
188
|
+
expect(result.getValue('bigint')).toBe(450000000n);
|
|
113
189
|
});
|
|
114
190
|
|
|
115
191
|
test('subtracts different type numbers correctly', () => {
|
|
116
192
|
const skNumber1 = new SwapKitNumber(10);
|
|
117
193
|
const result = skNumber1.sub(6, '0.5');
|
|
118
194
|
|
|
119
|
-
expect(result.
|
|
120
|
-
expect(result.
|
|
195
|
+
expect(result.getValue('string')).toBe('3.5');
|
|
196
|
+
expect(result.getValue('bigint')).toBe(350000000n);
|
|
121
197
|
});
|
|
122
198
|
|
|
123
199
|
test('can process negative results', () => {
|
|
@@ -125,10 +201,10 @@ describe('SwapKitNumber', () => {
|
|
|
125
201
|
const result0 = skNumber1.sub(10);
|
|
126
202
|
const resultMinus = result0.sub('10');
|
|
127
203
|
|
|
128
|
-
expect(result0.
|
|
129
|
-
expect(resultMinus.
|
|
130
|
-
expect(result0.
|
|
131
|
-
expect(resultMinus.
|
|
204
|
+
expect(result0.getValue('string')).toBe('0');
|
|
205
|
+
expect(resultMinus.getValue('string')).toBe('-10');
|
|
206
|
+
expect(result0.getValue('bigint')).toBe(0n);
|
|
207
|
+
expect(resultMinus.getValue('bigint')).toBe(-1000000000n);
|
|
132
208
|
});
|
|
133
209
|
});
|
|
134
210
|
|
|
@@ -139,24 +215,24 @@ describe('SwapKitNumber', () => {
|
|
|
139
215
|
const skNumber3 = new SwapKitNumber(0.5);
|
|
140
216
|
const result = skNumber1.mul(skNumber2, skNumber3);
|
|
141
217
|
|
|
142
|
-
expect(result.
|
|
143
|
-
expect(result.
|
|
218
|
+
expect(result.getValue('string')).toBe('25');
|
|
219
|
+
expect(result.getValue('bigint')).toBe(2500000000n);
|
|
144
220
|
});
|
|
145
221
|
|
|
146
222
|
test('multiplies different type numbers correctly', () => {
|
|
147
223
|
const skNumber1 = new SwapKitNumber(10);
|
|
148
224
|
const result = skNumber1.mul(6, '0.5');
|
|
149
225
|
|
|
150
|
-
expect(result.
|
|
151
|
-
expect(result.
|
|
226
|
+
expect(result.getValue('string')).toBe('30');
|
|
227
|
+
expect(result.getValue('bigint')).toBe(3000000000n);
|
|
152
228
|
});
|
|
153
229
|
|
|
154
230
|
test('multiplies numbers correctly if decimals of SKN is lower than number multiplied with', () => {
|
|
155
231
|
const skNumber1 = new SwapKitNumber({ value: 1000000, decimal: 4 });
|
|
156
232
|
const result = skNumber1.mul('0.00001');
|
|
157
233
|
|
|
158
|
-
expect(result.
|
|
159
|
-
expect(result.
|
|
234
|
+
expect(result.getValue('string')).toBe('10');
|
|
235
|
+
expect(result.getValue('bigint')).toBe(1000000000n);
|
|
160
236
|
});
|
|
161
237
|
|
|
162
238
|
test('should correctly round the result of multiplication', () => {
|
|
@@ -167,8 +243,8 @@ describe('SwapKitNumber', () => {
|
|
|
167
243
|
|
|
168
244
|
// The exact result of 1.23 * 4.56 is 5.6088
|
|
169
245
|
// If we round it to 2 decimal places, we should get 5.61
|
|
170
|
-
expect(result.
|
|
171
|
-
expect(result.
|
|
246
|
+
expect(result.getValue('string')).toBe('5.61');
|
|
247
|
+
expect(result.getValue('bigint')).toBe(560880000n);
|
|
172
248
|
|
|
173
249
|
const skNumber3 = new SwapKitNumber({ decimal: 2, value: 1.23 });
|
|
174
250
|
const skNumber4 = new SwapKitNumber(-1.234567891);
|
|
@@ -177,8 +253,8 @@ describe('SwapKitNumber', () => {
|
|
|
177
253
|
|
|
178
254
|
// The exact result of 1.23 * -1.234567891 is -1,518518505
|
|
179
255
|
// If we round it to 2 decimal places, we should get 5.61
|
|
180
|
-
expect(result2.
|
|
181
|
-
expect(result2.
|
|
256
|
+
expect(result2.getValue('string')).toBe('-1.52');
|
|
257
|
+
expect(result2.getValue('bigint')).toBe(-1518518505n);
|
|
182
258
|
});
|
|
183
259
|
});
|
|
184
260
|
|
|
@@ -189,38 +265,38 @@ describe('SwapKitNumber', () => {
|
|
|
189
265
|
const skNumber3 = new SwapKitNumber(0.5);
|
|
190
266
|
const result = skNumber1.div(skNumber2, skNumber3);
|
|
191
267
|
|
|
192
|
-
expect(result.
|
|
193
|
-
expect(result.
|
|
268
|
+
expect(result.getValue('string')).toBe('4');
|
|
269
|
+
expect(result.getValue('bigint')).toBe(400000000n);
|
|
194
270
|
|
|
195
271
|
const skNumber4 = new SwapKitNumber(10.12);
|
|
196
272
|
const result2 = skNumber4.div(0.0001);
|
|
197
273
|
|
|
198
|
-
expect(result2.
|
|
199
|
-
expect(result2.
|
|
274
|
+
expect(result2.getValue('string')).toBe('101200');
|
|
275
|
+
expect(result2.getValue('bigint')).toBe(10120000000000n);
|
|
200
276
|
});
|
|
201
277
|
|
|
202
278
|
test('divides different type numbers correctly', () => {
|
|
203
279
|
const skNumber1 = new SwapKitNumber(20);
|
|
204
280
|
const result = skNumber1.div(5, '0.5');
|
|
205
281
|
|
|
206
|
-
expect(result.
|
|
207
|
-
expect(result.
|
|
282
|
+
expect(result.getValue('string')).toBe('8');
|
|
283
|
+
expect(result.getValue('bigint')).toBe(800000000n);
|
|
208
284
|
});
|
|
209
285
|
|
|
210
286
|
test('divides different type numbers correctly when decimal is set', () => {
|
|
211
287
|
const skNumber1 = new SwapKitNumber({ value: '1.2', decimal: 2 });
|
|
212
288
|
const result = skNumber1.div(0.001);
|
|
213
289
|
|
|
214
|
-
expect(result.
|
|
215
|
-
expect(result.
|
|
290
|
+
expect(result.getValue('string')).toBe('1200');
|
|
291
|
+
expect(result.getValue('bigint')).toBe(120000000000n);
|
|
216
292
|
});
|
|
217
293
|
|
|
218
294
|
test('divides smaller number by larger number', () => {
|
|
219
295
|
const skNumber1 = new SwapKitNumber(1);
|
|
220
296
|
const result = skNumber1.div(2);
|
|
221
297
|
|
|
222
|
-
expect(result.
|
|
223
|
-
expect(result.
|
|
298
|
+
expect(result.getValue('string')).toBe('0.5');
|
|
299
|
+
expect(result.getValue('bigint')).toBe(50000000n);
|
|
224
300
|
});
|
|
225
301
|
|
|
226
302
|
test('divides a number with 18 decimals by a negative number with less decimals', () => {
|
|
@@ -230,8 +306,8 @@ describe('SwapKitNumber', () => {
|
|
|
230
306
|
const result = skNumber1.div(skNumber2);
|
|
231
307
|
|
|
232
308
|
// The exact result of 1.000000000000000010 / -2 is -0.500000000000000005
|
|
233
|
-
expect(result.
|
|
234
|
-
expect(result.
|
|
309
|
+
expect(result.getValue('string')).toBe('-0.500000000000000005');
|
|
310
|
+
expect(result.getValue('bigint')).toBe(-500000000000000005n);
|
|
235
311
|
});
|
|
236
312
|
|
|
237
313
|
test('divides a number with 2 decimals by a negative number with more decimals', () => {
|
|
@@ -241,8 +317,8 @@ describe('SwapKitNumber', () => {
|
|
|
241
317
|
const result = skNumber1.div(skNumber2);
|
|
242
318
|
|
|
243
319
|
// The exact result of 2 / -0.000005 is -400000
|
|
244
|
-
expect(result.
|
|
245
|
-
expect(result.
|
|
320
|
+
expect(result.getValue('string')).toBe('-400000');
|
|
321
|
+
expect(result.getValue('bigint')).toBe(-40000000000000n);
|
|
246
322
|
});
|
|
247
323
|
});
|
|
248
324
|
|
|
@@ -252,8 +328,8 @@ describe('SwapKitNumber', () => {
|
|
|
252
328
|
const skNumber2 = new SwapKitNumber({ value: 987_654_321_000, decimal: 18 });
|
|
253
329
|
|
|
254
330
|
const result = skNumber1.mul(skNumber2);
|
|
255
|
-
expect(result.
|
|
256
|
-
expect(result.
|
|
331
|
+
expect(result.getValue('string')).toBe('987654321000000987654321000');
|
|
332
|
+
expect(result.getValue('bigint')).toBe(987654321000000987654321000000000000000000000n);
|
|
257
333
|
});
|
|
258
334
|
|
|
259
335
|
test('divide huge numbers', () => {
|
|
@@ -261,8 +337,8 @@ describe('SwapKitNumber', () => {
|
|
|
261
337
|
const skNumber2 = new SwapKitNumber({ value: 987_654_321_000, decimal: 18 });
|
|
262
338
|
|
|
263
339
|
const result = skNumber1.div(skNumber2);
|
|
264
|
-
expect(result.
|
|
265
|
-
expect(result.
|
|
340
|
+
expect(result.getValue('string')).toBe('1012.4999999873447625');
|
|
341
|
+
expect(result.getValue('bigint')).toBe(1012499999987344762500n);
|
|
266
342
|
});
|
|
267
343
|
});
|
|
268
344
|
|
|
@@ -59,6 +59,46 @@ const createAssetValue = async (assetString: string, value: number | string = 0)
|
|
|
59
59
|
};
|
|
60
60
|
|
|
61
61
|
export class AssetValue extends BigIntArithmetics {
|
|
62
|
+
address?: string;
|
|
63
|
+
chain: Chain;
|
|
64
|
+
isSynthetic = false;
|
|
65
|
+
isGasAsset = false;
|
|
66
|
+
symbol: string;
|
|
67
|
+
ticker: string;
|
|
68
|
+
type: ReturnType<typeof getAssetType>;
|
|
69
|
+
|
|
70
|
+
constructor(params: AssetValueParams) {
|
|
71
|
+
super(
|
|
72
|
+
params.value instanceof BigIntArithmetics
|
|
73
|
+
? params.value
|
|
74
|
+
: { decimal: params.decimal, value: params.value },
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
const identifier =
|
|
78
|
+
'identifier' in params ? params.identifier : `${params.chain}.${params.symbol}`;
|
|
79
|
+
const assetInfo = getAssetInfo(identifier);
|
|
80
|
+
|
|
81
|
+
this.type = getAssetType(assetInfo);
|
|
82
|
+
this.chain = assetInfo.chain;
|
|
83
|
+
this.ticker = assetInfo.ticker;
|
|
84
|
+
this.symbol = assetInfo.symbol;
|
|
85
|
+
this.address = assetInfo.address;
|
|
86
|
+
this.isSynthetic = assetInfo.isSynthetic;
|
|
87
|
+
this.isGasAsset = assetInfo.isGasAsset;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
get assetValue() {
|
|
91
|
+
return `${this.getValue('string')} ${this.ticker}`;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
toString() {
|
|
95
|
+
return `${this.chain}.${this.symbol}`;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
eq({ chain, symbol }: { chain: Chain; symbol: string }) {
|
|
99
|
+
return this.chain === chain && this.symbol === symbol;
|
|
100
|
+
}
|
|
101
|
+
|
|
62
102
|
static async fromString(assetString: string, value: number | string = 0) {
|
|
63
103
|
return createAssetValue(assetString, value);
|
|
64
104
|
}
|
|
@@ -149,46 +189,6 @@ export class AssetValue extends BigIntArithmetics {
|
|
|
149
189
|
},
|
|
150
190
|
);
|
|
151
191
|
}
|
|
152
|
-
|
|
153
|
-
address?: string;
|
|
154
|
-
chain: Chain;
|
|
155
|
-
isSynthetic = false;
|
|
156
|
-
isGasAsset = false;
|
|
157
|
-
symbol: string;
|
|
158
|
-
ticker: string;
|
|
159
|
-
type: ReturnType<typeof getAssetType>;
|
|
160
|
-
|
|
161
|
-
constructor(params: AssetValueParams) {
|
|
162
|
-
super(
|
|
163
|
-
params.value instanceof BigIntArithmetics
|
|
164
|
-
? params.value
|
|
165
|
-
: { decimal: params.decimal, value: params.value },
|
|
166
|
-
);
|
|
167
|
-
|
|
168
|
-
const identifier =
|
|
169
|
-
'identifier' in params ? params.identifier : `${params.chain}.${params.symbol}`;
|
|
170
|
-
const assetInfo = getAssetInfo(identifier);
|
|
171
|
-
|
|
172
|
-
this.type = getAssetType(assetInfo);
|
|
173
|
-
this.chain = assetInfo.chain;
|
|
174
|
-
this.ticker = assetInfo.ticker;
|
|
175
|
-
this.symbol = assetInfo.symbol;
|
|
176
|
-
this.address = assetInfo.address;
|
|
177
|
-
this.isSynthetic = assetInfo.isSynthetic;
|
|
178
|
-
this.isGasAsset = assetInfo.isGasAsset;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
get assetValue() {
|
|
182
|
-
return `${this.value} ${this.ticker}`;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
toString() {
|
|
186
|
-
return `${this.chain}.${this.symbol}`;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
eq({ chain, symbol }: { chain: Chain; symbol: string }) {
|
|
190
|
-
return this.chain === chain && this.symbol === symbol;
|
|
191
|
-
}
|
|
192
192
|
}
|
|
193
193
|
|
|
194
194
|
export const getMinAmountByChain = (chain: Chain) => {
|