@swapkit/helpers 1.0.0-rc.1 → 1.0.0-rc.11

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.
@@ -6,47 +6,50 @@ describe('SwapKitNumber', () => {
6
6
  describe('constructors', () => {
7
7
  test('creates numbers correctly', () => {
8
8
  const skNumber1 = new SwapKitNumber(1);
9
- expect(skNumber1.value).toBe('1');
10
- expect(skNumber1.bigIntValue).toBe(100000000n);
9
+ expect(skNumber1.getValue('string')).toBe('1');
10
+ expect(skNumber1.getValue('number')).toBe(1);
11
+ expect(skNumber1.getBaseValue('bigint')).toBe(100000000n);
11
12
 
12
13
  const skNumber2 = new SwapKitNumber('1');
13
- expect(skNumber2.value).toBe('1');
14
- expect(skNumber2.bigIntValue).toBe(100000000n);
14
+ expect(skNumber2.getValue('string')).toBe('1');
15
+ expect(skNumber2.getBaseValue('bigint')).toBe(100000000n);
15
16
 
17
+ /**
18
+ * because by default we have 8 decimals - it will be rounded to 0 on base value
19
+ */
16
20
  const skNumber3 = new SwapKitNumber('0.0000000001');
17
- expect(skNumber3.value).toBe('0.0000000001');
18
- expect(skNumber3.bigIntValue).toBe(1n);
19
-
20
- const skNumber4 = new SwapKitNumber(0.000000001);
21
- expect(skNumber4.value).toBe('0.000000001');
22
- expect(skNumber4.bigIntValue).toBe(1n);
23
-
24
- const skNumber6 = new SwapKitNumber({ value: 0.1005, decimal: 3 });
25
- expect(skNumber6.value).toBe('0.101');
26
- expect(skNumber6.bigIntValue).toBe(10050000n);
27
-
28
- const skNumber7 = new SwapKitNumber({ value: -0.1005, decimal: 3 });
29
- expect(skNumber7.value).toBe('-0.101');
30
- expect(skNumber7.bigIntValue).toBe(-10050000n);
31
- expect(skNumber7.decimal).toBe(3);
32
- expect(skNumber7.unsafeNumber).toBe(0);
33
- expect(skNumber7.decimalMultiplier).toBe(100000000n);
34
- expect(skNumber7.toString()).toBe('-0.101');
21
+ expect(skNumber3.getValue('string')).toBe('0.0000000001');
22
+ expect(skNumber3.getBaseValue('bigint')).toBe(0n);
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);
27
+
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);
31
+
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);
35
+ expect(skNumber6.decimal).toBe(3);
36
+ expect(skNumber6.getValue('number')).toBe(-0.101);
37
+ expect(skNumber6.decimalMultiplier).toBe(100000000n);
35
38
  });
36
39
 
37
40
  test('creates SwapKitInstance from BigInt: (12.345678901234, decimals: 12)', () => {
38
41
  const skNumber = SwapKitNumber.fromBigInt(12345678901234n, 12);
39
42
 
40
- expect(skNumber.value).toBe('12.345678901234');
41
- expect(skNumber.bigIntValue).toBe(12345678901234n);
43
+ expect(skNumber.getValue('string')).toBe('12.345678901234');
44
+ expect(skNumber.getBaseValue('bigint')).toBe(12345678901234n);
42
45
  });
43
46
  });
44
47
 
45
48
  describe('shiftDecimals', () => {
46
49
  test('shifts up and bumps number', () => {
47
50
  const skNumber = new SwapKitNumber(1);
48
- expect(skNumber.value).toBe('1');
49
- expect(skNumber.bigIntValue).toBe(100000000n);
51
+ expect(skNumber.getValue('string')).toBe('1');
52
+ expect(skNumber.getBaseValue('bigint')).toBe(100000000n);
50
53
 
51
54
  const shiftedSkNumber = SwapKitNumber.shiftDecimals({
52
55
  value: skNumber,
@@ -54,14 +57,14 @@ describe('SwapKitNumber', () => {
54
57
  to: 8,
55
58
  });
56
59
 
57
- expect(shiftedSkNumber.value).toBe('100');
58
- expect(shiftedSkNumber.bigIntValue).toBe(10000000000n);
60
+ expect(shiftedSkNumber.getValue('string')).toBe('100');
61
+ expect(shiftedSkNumber.getBaseValue('bigint')).toBe(10000000000n);
59
62
  });
60
63
 
61
- test.skip('shifts down and rounds down number', () => {
64
+ test('shifts down and rounds down number', () => {
62
65
  const skNumber = new SwapKitNumber(2.12345678);
63
- expect(skNumber.value).toBe('2.12345678');
64
- expect(skNumber.bigIntValue).toBe(212345678n);
66
+ expect(skNumber.getValue('string')).toBe('2.12345678');
67
+ expect(skNumber.getBaseValue('bigint')).toBe(212345678n);
65
68
 
66
69
  const shiftedSkNumber = SwapKitNumber.shiftDecimals({
67
70
  value: skNumber,
@@ -69,8 +72,84 @@ describe('SwapKitNumber', () => {
69
72
  to: 6,
70
73
  });
71
74
 
72
- expect(shiftedSkNumber.value).toBe('2.123456');
73
- expect(shiftedSkNumber.bigIntValue).toBe(2123456n);
75
+ expect(shiftedSkNumber.getValue('string')).toBe('2.123456');
76
+ expect(shiftedSkNumber.getBaseValue('bigint')).toBe(2123456n);
77
+ });
78
+ });
79
+
80
+ describe('getValue', () => {
81
+ describe('string', () => {
82
+ test('returns string value', () => {
83
+ const skNumber = new SwapKitNumber(1);
84
+ expect(skNumber.getValue('string')).toBe('1');
85
+ });
86
+
87
+ test('returns string value with decimals', () => {
88
+ const skNumber = new SwapKitNumber(0.01);
89
+ expect(skNumber.getValue('string')).toBe('0.01');
90
+ });
91
+ });
92
+
93
+ describe('number', () => {
94
+ test('returns number value', () => {
95
+ const skNumber = new SwapKitNumber(1);
96
+ expect(skNumber.getValue('number')).toBe(1);
97
+ });
98
+
99
+ test('returns number value with decimals', () => {
100
+ const skNumber = new SwapKitNumber(0.01);
101
+ expect(skNumber.getValue('number')).toBe(0.01);
102
+ });
103
+ });
104
+
105
+ describe('bigint', () => {
106
+ test('returns bigint value', () => {
107
+ const skNumber = new SwapKitNumber(1);
108
+ expect(skNumber.getBaseValue('bigint')).toBe(100000000n);
109
+ });
110
+ });
111
+ });
112
+
113
+ describe('toSignificant', () => {
114
+ describe('normal cases', () => {
115
+ test('returns first significant number of digits', () => {
116
+ 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');
124
+
125
+ 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');
131
+ });
132
+ });
133
+
134
+ describe('custom decimals', () => {
135
+ test('returns first significant number of digits', () => {
136
+ 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');
144
+
145
+ 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');
152
+ });
74
153
  });
75
154
  });
76
155
 
@@ -81,23 +160,23 @@ describe('SwapKitNumber', () => {
81
160
  const skNumber3 = new SwapKitNumber('0.5');
82
161
  const result = skNumber1.add(skNumber2, skNumber3);
83
162
 
84
- expect(result.value).toBe('15.5');
85
- expect(result.bigIntValue).toBe(1550000000n);
163
+ expect(result.getValue('string')).toBe('15.5');
164
+ expect(result.getBaseValue('bigint')).toBe(1550000000n);
86
165
  });
87
166
 
88
167
  test('adds different type numbers correctly', () => {
89
168
  const skNumber1 = new SwapKitNumber(10);
90
169
  const result = skNumber1.add(6, '0.5');
91
170
 
92
- expect(result.value).toBe('16.5');
93
- expect(result.bigIntValue).toBe(1650000000n);
171
+ expect(result.getValue('string')).toBe('16.5');
172
+ expect(result.getBaseValue('bigint')).toBe(1650000000n);
94
173
  });
95
174
 
96
175
  test('adds large decimal numbers correctly', () => {
97
176
  const skNumber1 = new SwapKitNumber(0.0000000001);
98
177
  const result = skNumber1.add(6.000000000001, '0.0000000000000005');
99
- expect(result.value).toBe('6.0000000001010005');
100
- expect(result.bigIntValue).toBe(60000000001010005n);
178
+ expect(result.getValue('string')).toBe('6.0000000001010005');
179
+ expect(result.getBaseValue('bigint')).toBe(600000000n);
101
180
  });
102
181
  });
103
182
 
@@ -108,16 +187,16 @@ describe('SwapKitNumber', () => {
108
187
  const skNumber3 = new SwapKitNumber(0.5);
109
188
  const result = skNumber1.sub(skNumber2, skNumber3);
110
189
 
111
- expect(result.value).toBe('4.5');
112
- expect(result.bigIntValue).toBe(450000000n);
190
+ expect(result.getValue('string')).toBe('4.5');
191
+ expect(result.getBaseValue('bigint')).toBe(450000000n);
113
192
  });
114
193
 
115
194
  test('subtracts different type numbers correctly', () => {
116
195
  const skNumber1 = new SwapKitNumber(10);
117
196
  const result = skNumber1.sub(6, '0.5');
118
197
 
119
- expect(result.value).toBe('3.5');
120
- expect(result.bigIntValue).toBe(350000000n);
198
+ expect(result.getValue('string')).toBe('3.5');
199
+ expect(result.getBaseValue('bigint')).toBe(350000000n);
121
200
  });
122
201
 
123
202
  test('can process negative results', () => {
@@ -125,10 +204,10 @@ describe('SwapKitNumber', () => {
125
204
  const result0 = skNumber1.sub(10);
126
205
  const resultMinus = result0.sub('10');
127
206
 
128
- expect(result0.value).toBe('0');
129
- expect(resultMinus.value).toBe('-10');
130
- expect(result0.bigIntValue).toBe(0n);
131
- expect(resultMinus.bigIntValue).toBe(-1000000000n);
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);
132
211
  });
133
212
  });
134
213
 
@@ -139,36 +218,36 @@ describe('SwapKitNumber', () => {
139
218
  const skNumber3 = new SwapKitNumber(0.5);
140
219
  const result = skNumber1.mul(skNumber2, skNumber3);
141
220
 
142
- expect(result.value).toBe('25');
143
- expect(result.bigIntValue).toBe(2500000000n);
221
+ expect(result.getValue('string')).toBe('25');
222
+ expect(result.getBaseValue('bigint')).toBe(2500000000n);
144
223
  });
145
224
 
146
225
  test('multiplies different type numbers correctly', () => {
147
226
  const skNumber1 = new SwapKitNumber(10);
148
227
  const result = skNumber1.mul(6, '0.5');
149
228
 
150
- expect(result.value).toBe('30');
151
- expect(result.bigIntValue).toBe(3000000000n);
229
+ expect(result.getValue('string')).toBe('30');
230
+ expect(result.getBaseValue('bigint')).toBe(3000000000n);
152
231
  });
153
232
 
154
233
  test('multiplies numbers correctly if decimals of SKN is lower than number multiplied with', () => {
155
234
  const skNumber1 = new SwapKitNumber({ value: 1000000, decimal: 4 });
156
235
  const result = skNumber1.mul('0.00001');
157
236
 
158
- expect(result.value).toBe('10');
159
- expect(result.bigIntValue).toBe(1000000000n);
237
+ expect(result.getValue('string')).toBe('10');
238
+ expect(result.getBaseValue('bigint')).toBe(100000n);
160
239
  });
161
240
 
162
241
  test('should correctly round the result of multiplication', () => {
163
- const skNumber1 = new SwapKitNumber({ decimal: 2, value: 1.23 });
242
+ const skNumber1 = new SwapKitNumber({ decimal: 3, value: 1.23 });
164
243
  const skNumber2 = new SwapKitNumber({ decimal: 4, value: 4.56 });
165
244
 
166
245
  const result = skNumber1.mul(skNumber2);
167
246
 
168
247
  // The exact result of 1.23 * 4.56 is 5.6088
169
248
  // If we round it to 2 decimal places, we should get 5.61
170
- expect(result.value).toBe('5.61');
171
- expect(result.bigIntValue).toBe(560880000n);
249
+ expect(result.getValue('string')).toBe('5.609');
250
+ expect(result.getBaseValue('bigint')).toBe(5608n);
172
251
 
173
252
  const skNumber3 = new SwapKitNumber({ decimal: 2, value: 1.23 });
174
253
  const skNumber4 = new SwapKitNumber(-1.234567891);
@@ -177,8 +256,8 @@ describe('SwapKitNumber', () => {
177
256
 
178
257
  // The exact result of 1.23 * -1.234567891 is -1,518518505
179
258
  // If we round it to 2 decimal places, we should get 5.61
180
- expect(result2.value).toBe('-1.52');
181
- expect(result2.bigIntValue).toBe(-1518518505n);
259
+ expect(result2.getValue('string')).toBe('-1.52');
260
+ expect(result2.getBaseValue('bigint')).toBe(-151n);
182
261
  });
183
262
  });
184
263
 
@@ -189,38 +268,38 @@ describe('SwapKitNumber', () => {
189
268
  const skNumber3 = new SwapKitNumber(0.5);
190
269
  const result = skNumber1.div(skNumber2, skNumber3);
191
270
 
192
- expect(result.value).toBe('4');
193
- expect(result.bigIntValue).toBe(400000000n);
271
+ expect(result.getValue('string')).toBe('4');
272
+ expect(result.getBaseValue('bigint')).toBe(400000000n);
194
273
 
195
274
  const skNumber4 = new SwapKitNumber(10.12);
196
275
  const result2 = skNumber4.div(0.0001);
197
276
 
198
- expect(result2.value).toBe('101200');
199
- expect(result2.bigIntValue).toBe(10120000000000n);
277
+ expect(result2.getValue('string')).toBe('101200');
278
+ expect(result2.getBaseValue('bigint')).toBe(10120000000000n);
200
279
  });
201
280
 
202
281
  test('divides different type numbers correctly', () => {
203
282
  const skNumber1 = new SwapKitNumber(20);
204
283
  const result = skNumber1.div(5, '0.5');
205
284
 
206
- expect(result.value).toBe('8');
207
- expect(result.bigIntValue).toBe(800000000n);
285
+ expect(result.getValue('string')).toBe('8');
286
+ expect(result.getBaseValue('bigint')).toBe(800000000n);
208
287
  });
209
288
 
210
289
  test('divides different type numbers correctly when decimal is set', () => {
211
290
  const skNumber1 = new SwapKitNumber({ value: '1.2', decimal: 2 });
212
291
  const result = skNumber1.div(0.001);
213
292
 
214
- expect(result.value).toBe('1200');
215
- expect(result.bigIntValue).toBe(120000000000n);
293
+ expect(result.getValue('string')).toBe('1200');
294
+ expect(result.getBaseValue('bigint')).toBe(120000n);
216
295
  });
217
296
 
218
297
  test('divides smaller number by larger number', () => {
219
298
  const skNumber1 = new SwapKitNumber(1);
220
299
  const result = skNumber1.div(2);
221
300
 
222
- expect(result.value).toBe('0.5');
223
- expect(result.bigIntValue).toBe(50000000n);
301
+ expect(result.getValue('string')).toBe('0.5');
302
+ expect(result.getBaseValue('bigint')).toBe(50000000n);
224
303
  });
225
304
 
226
305
  test('divides a number with 18 decimals by a negative number with less decimals', () => {
@@ -230,8 +309,8 @@ describe('SwapKitNumber', () => {
230
309
  const result = skNumber1.div(skNumber2);
231
310
 
232
311
  // The exact result of 1.000000000000000010 / -2 is -0.500000000000000005
233
- expect(result.value).toBe('-0.500000000000000005');
234
- expect(result.bigIntValue).toBe(-500000000000000005n);
312
+ expect(result.getValue('string')).toBe('-0.500000000000000005');
313
+ expect(result.getBaseValue('bigint')).toBe(-500000000000000005n);
235
314
  });
236
315
 
237
316
  test('divides a number with 2 decimals by a negative number with more decimals', () => {
@@ -241,8 +320,8 @@ describe('SwapKitNumber', () => {
241
320
  const result = skNumber1.div(skNumber2);
242
321
 
243
322
  // The exact result of 2 / -0.000005 is -400000
244
- expect(result.value).toBe('-400000');
245
- expect(result.bigIntValue).toBe(-40000000000000n);
323
+ expect(result.getValue('string')).toBe('-400000');
324
+ expect(result.getBaseValue('bigint')).toBe(-40000000n);
246
325
  });
247
326
  });
248
327
 
@@ -252,8 +331,8 @@ describe('SwapKitNumber', () => {
252
331
  const skNumber2 = new SwapKitNumber({ value: 987_654_321_000, decimal: 18 });
253
332
 
254
333
  const result = skNumber1.mul(skNumber2);
255
- expect(result.value).toBe('987654321000000987654321000');
256
- expect(result.bigIntValue).toBe(987654321000000987654321000000000000000000000n);
334
+ expect(result.getValue('string')).toBe('987654321000000987654321000');
335
+ expect(result.getBaseValue('bigint')).toBe(987654321000000987654321000000000000000000000n);
257
336
  });
258
337
 
259
338
  test('divide huge numbers', () => {
@@ -261,8 +340,8 @@ describe('SwapKitNumber', () => {
261
340
  const skNumber2 = new SwapKitNumber({ value: 987_654_321_000, decimal: 18 });
262
341
 
263
342
  const result = skNumber1.div(skNumber2);
264
- expect(result.value).toBe('1012.4999999873447625');
265
- expect(result.bigIntValue).toBe(1012499999987344762500n);
343
+ expect(result.getValue('string')).toBe('1012.4999999873447625');
344
+ expect(result.getBaseValue('bigint')).toBe(1012499999987344762500n);
266
345
  });
267
346
  });
268
347
 
@@ -17,9 +17,15 @@ import type { CommonAssetString } from '../helpers/asset.ts';
17
17
  import { getAssetType, getCommonAssetInfo, getDecimal, isGasAsset } from '../helpers/asset.ts';
18
18
  import { validateIdentifier } from '../helpers/validators.ts';
19
19
 
20
- import { BigIntArithmetics } from './bigIntArithmetics.ts';
20
+ import type { NumberPrimitives } from './bigIntArithmetics.ts';
21
+ import { BigIntArithmetics, formatBigIntToSafeValue } from './bigIntArithmetics.ts';
21
22
  import type { SwapKitValueType } from './swapKitNumber.ts';
22
23
 
24
+ const safeValue = (value: NumberPrimitives, decimal: number) =>
25
+ typeof value === 'bigint'
26
+ ? formatBigIntToSafeValue({ value, bigIntDecimal: decimal, decimal })
27
+ : value;
28
+
23
29
  type AssetValueParams = { decimal: number; value: SwapKitValueType } & (
24
30
  | { chain: Chain; symbol: string }
25
31
  | { identifier: string }
@@ -51,55 +57,107 @@ const getStaticToken = (identifier: TokenNames) => {
51
57
  return tokenInfo || { decimal: BaseDecimal.THOR, identifier: '' };
52
58
  };
53
59
 
54
- const createAssetValue = async (assetString: string, value: number | string = 0) => {
60
+ const createAssetValue = async (assetString: string, value: NumberPrimitives = 0) => {
55
61
  validateIdentifier(assetString);
56
62
 
57
63
  const decimal = await getDecimal(getAssetInfo(assetString));
58
- return new AssetValue({ decimal, value, identifier: assetString });
64
+ const parsedValue = safeValue(value, decimal);
65
+
66
+ return new AssetValue({ decimal, value: parsedValue, identifier: assetString });
59
67
  };
60
68
 
61
69
  export class AssetValue extends BigIntArithmetics {
62
- static async fromString(assetString: string, value: number | string = 0) {
70
+ address?: string;
71
+ chain: Chain;
72
+ isSynthetic = false;
73
+ isGasAsset = false;
74
+ symbol: string;
75
+ ticker: string;
76
+ type: ReturnType<typeof getAssetType>;
77
+
78
+ constructor(params: AssetValueParams) {
79
+ super(
80
+ params.value instanceof BigIntArithmetics
81
+ ? params.value
82
+ : { decimal: params.decimal, value: params.value },
83
+ );
84
+
85
+ const identifier =
86
+ 'identifier' in params ? params.identifier : `${params.chain}.${params.symbol}`;
87
+ const assetInfo = getAssetInfo(identifier);
88
+
89
+ this.type = getAssetType(assetInfo);
90
+ this.chain = assetInfo.chain;
91
+ this.ticker = assetInfo.ticker;
92
+ this.symbol = assetInfo.symbol;
93
+ this.address = assetInfo.address;
94
+ this.isSynthetic = assetInfo.isSynthetic;
95
+ this.isGasAsset = assetInfo.isGasAsset;
96
+ }
97
+
98
+ get assetValue() {
99
+ return `${this.getValue('string')} ${this.ticker}`;
100
+ }
101
+
102
+ toString(short = false) {
103
+ // THOR.RUNE | ETH/ETH
104
+ const shortFormat = this.isSynthetic ? this.ticker : `${this.chain}.${this.ticker}`;
105
+
106
+ return short
107
+ ? shortFormat
108
+ : // THOR.ETH/ETH | ETH.USDT-0x1234567890
109
+ `${this.chain}.${this.symbol}`;
110
+ }
111
+
112
+ eq({ chain, symbol }: { chain: Chain; symbol: string }) {
113
+ return this.chain === chain && this.symbol === symbol;
114
+ }
115
+
116
+ static async fromString(assetString: string, value: NumberPrimitives = 0) {
63
117
  return createAssetValue(assetString, value);
64
118
  }
65
119
 
66
- static fromStringSync(assetString: string, value: number | string = 0) {
120
+ static fromStringSync(assetString: string, value: NumberPrimitives = 0) {
67
121
  const { decimal, identifier: tokenIdentifier } = getStaticToken(
68
122
  assetString as unknown as TokenNames,
69
123
  );
70
124
 
125
+ const parsedValue = safeValue(value, decimal);
126
+
71
127
  return tokenIdentifier
72
- ? new AssetValue({ decimal, identifier: tokenIdentifier, value })
128
+ ? new AssetValue({ decimal, identifier: tokenIdentifier, value: parsedValue })
73
129
  : undefined;
74
130
  }
75
131
 
76
132
  static async fromIdentifier(
77
133
  assetString: `${Chain}.${string}` | `${Chain}/${string}` | `${Chain}.${string}-${string}`,
78
- value: number | string = 0,
134
+ value: NumberPrimitives = 0,
79
135
  ) {
80
136
  return createAssetValue(assetString, value);
81
137
  }
82
138
 
83
- static fromIdentifierSync(identifier: TokenNames, value: number | string = 0) {
139
+ static fromIdentifierSync(identifier: TokenNames, value: NumberPrimitives = 0) {
84
140
  const { decimal, identifier: tokenIdentifier } = getStaticToken(identifier);
141
+ const parsedValue = safeValue(value, decimal);
85
142
 
86
- return new AssetValue({ decimal, identifier: tokenIdentifier, value });
143
+ return new AssetValue({ decimal, identifier: tokenIdentifier, value: parsedValue });
87
144
  }
88
145
 
89
- static fromChainOrSignature(assetString: CommonAssetString, value: number | string = 0) {
146
+ static fromChainOrSignature(assetString: CommonAssetString, value: NumberPrimitives = 0) {
90
147
  const { decimal, identifier } = getCommonAssetInfo(assetString);
148
+ const parsedValue = safeValue(value, decimal);
91
149
 
92
- return new AssetValue({ value, decimal, identifier });
150
+ return new AssetValue({ value: parsedValue, decimal, identifier });
93
151
  }
94
152
 
95
- static async fromTCQuote(identifier: TCTokenNames, value: number | string = 0) {
153
+ static async fromTCQuote(identifier: TCTokenNames, value: NumberPrimitives = 0) {
96
154
  const decimal = await getDecimal(getAssetInfo(identifier));
97
155
  const shiftedValue = this.shiftDecimals({ value, from: BaseDecimal.THOR, to: decimal });
98
156
 
99
157
  return new AssetValue({ value: shiftedValue, identifier, decimal });
100
158
  }
101
159
 
102
- static fromTCQuoteStatic(identifier: TCTokenNames, value: number | string = 0) {
160
+ static fromTCQuoteStatic(identifier: TCTokenNames, value: NumberPrimitives = 0) {
103
161
  const tokenInfo = getStaticToken(identifier);
104
162
  const shiftedValue = this.shiftDecimals({
105
163
  value,
@@ -149,46 +207,6 @@ export class AssetValue extends BigIntArithmetics {
149
207
  },
150
208
  );
151
209
  }
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
210
  }
193
211
 
194
212
  export const getMinAmountByChain = (chain: Chain) => {