@swapkit/helpers 1.0.0-rc.3 → 1.0.0-rc.30

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.
@@ -8,37 +8,40 @@ describe('SwapKitNumber', () => {
8
8
  const skNumber1 = new SwapKitNumber(1);
9
9
  expect(skNumber1.getValue('string')).toBe('1');
10
10
  expect(skNumber1.getValue('number')).toBe(1);
11
- expect(skNumber1.getValue('bigint')).toBe(100000000n);
11
+ expect(skNumber1.getBaseValue('bigint')).toBe(100000000n);
12
12
 
13
13
  const skNumber2 = new SwapKitNumber('1');
14
14
  expect(skNumber2.getValue('string')).toBe('1');
15
- expect(skNumber2.getValue('bigint')).toBe(100000000n);
15
+ expect(skNumber2.getBaseValue('bigint')).toBe(100000000n);
16
16
 
17
+ /**
18
+ * because by default we have 8 decimals - it will be rounded to 0 on base value
19
+ */
17
20
  const skNumber3 = new SwapKitNumber('0.0000000001');
18
21
  expect(skNumber3.getValue('string')).toBe('0.0000000001');
19
- expect(skNumber3.getValue('bigint')).toBe(1n);
22
+ expect(skNumber3.getBaseValue('bigint')).toBe(0n);
20
23
 
21
- const skNumber4 = new SwapKitNumber(0.000000001);
22
- expect(skNumber4.getValue('string')).toBe('0.000000001');
23
- expect(skNumber4.getValue('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);
24
27
 
25
- const skNumber6 = new SwapKitNumber({ value: 0.1005, decimal: 3 });
26
- expect(skNumber6.getValue('string')).toBe('0.101');
27
- expect(skNumber6.getValue('bigint')).toBe(10050000n);
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);
28
31
 
29
- const skNumber7 = new SwapKitNumber({ value: -0.1005, decimal: 3 });
30
- expect(skNumber7.getValue('string')).toBe('-0.101');
31
- expect(skNumber7.getValue('bigint')).toBe(-10050000n);
32
- expect(skNumber7.decimal).toBe(3);
33
- expect(skNumber7.getValue('number')).toBe(-0.101);
34
- expect(skNumber7.decimalMultiplier).toBe(100000000n);
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
43
  expect(skNumber.getValue('string')).toBe('12.345678901234');
41
- expect(skNumber.getValue('bigint')).toBe(12345678901234n);
44
+ expect(skNumber.getBaseValue('bigint')).toBe(12345678901234n);
42
45
  });
43
46
  });
44
47
 
@@ -46,22 +49,22 @@ describe('SwapKitNumber', () => {
46
49
  test('shifts up and bumps number', () => {
47
50
  const skNumber = new SwapKitNumber(1);
48
51
  expect(skNumber.getValue('string')).toBe('1');
49
- expect(skNumber.getValue('bigint')).toBe(100000000n);
52
+ expect(skNumber.getBaseValue('bigint')).toBe(100000000n);
50
53
 
51
54
  const shiftedSkNumber = SwapKitNumber.shiftDecimals({
52
55
  value: skNumber,
53
- from: 6,
54
- to: 8,
56
+ from: 8,
57
+ to: 6,
55
58
  });
56
59
 
57
- expect(shiftedSkNumber.getValue('string')).toBe('100');
58
- expect(shiftedSkNumber.getValue('bigint')).toBe(10000000000n);
60
+ expect(shiftedSkNumber.getValue('string')).toBe('1');
61
+ expect(shiftedSkNumber.getBaseValue('bigint')).toBe(1000000n);
59
62
  });
60
63
 
61
64
  test('shifts down and rounds down number', () => {
62
65
  const skNumber = new SwapKitNumber(2.12345678);
63
66
  expect(skNumber.getValue('string')).toBe('2.12345678');
64
- expect(skNumber.getValue('bigint')).toBe(212345678n);
67
+ expect(skNumber.getBaseValue('bigint')).toBe(212345678n);
65
68
 
66
69
  const shiftedSkNumber = SwapKitNumber.shiftDecimals({
67
70
  value: skNumber,
@@ -70,7 +73,20 @@ describe('SwapKitNumber', () => {
70
73
  });
71
74
 
72
75
  expect(shiftedSkNumber.getValue('string')).toBe('2.123456');
73
- expect(shiftedSkNumber.getValue('bigint')).toBe(212345600n);
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);
74
90
  });
75
91
  });
76
92
 
@@ -102,7 +118,7 @@ describe('SwapKitNumber', () => {
102
118
  describe('bigint', () => {
103
119
  test('returns bigint value', () => {
104
120
  const skNumber = new SwapKitNumber(1);
105
- expect(skNumber.getValue('bigint')).toBe(100000000n);
121
+ expect(skNumber.getBaseValue('bigint')).toBe(100000000n);
106
122
  });
107
123
  });
108
124
  });
@@ -150,6 +166,76 @@ describe('SwapKitNumber', () => {
150
166
  });
151
167
  });
152
168
 
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
+
153
239
  describe('add', () => {
154
240
  test('adds same type numbers correctly', () => {
155
241
  const skNumber1 = new SwapKitNumber(10);
@@ -158,7 +244,7 @@ describe('SwapKitNumber', () => {
158
244
  const result = skNumber1.add(skNumber2, skNumber3);
159
245
 
160
246
  expect(result.getValue('string')).toBe('15.5');
161
- expect(result.getValue('bigint')).toBe(1550000000n);
247
+ expect(result.getBaseValue('bigint')).toBe(1550000000n);
162
248
  });
163
249
 
164
250
  test('adds different type numbers correctly', () => {
@@ -166,14 +252,14 @@ describe('SwapKitNumber', () => {
166
252
  const result = skNumber1.add(6, '0.5');
167
253
 
168
254
  expect(result.getValue('string')).toBe('16.5');
169
- expect(result.getValue('bigint')).toBe(1650000000n);
255
+ expect(result.getBaseValue('bigint')).toBe(1650000000n);
170
256
  });
171
257
 
172
258
  test('adds large decimal numbers correctly', () => {
173
259
  const skNumber1 = new SwapKitNumber(0.0000000001);
174
260
  const result = skNumber1.add(6.000000000001, '0.0000000000000005');
175
261
  expect(result.getValue('string')).toBe('6.0000000001010005');
176
- expect(result.getValue('bigint')).toBe(60000000001010005n);
262
+ expect(result.getBaseValue('bigint')).toBe(600000000n);
177
263
  });
178
264
  });
179
265
 
@@ -185,7 +271,7 @@ describe('SwapKitNumber', () => {
185
271
  const result = skNumber1.sub(skNumber2, skNumber3);
186
272
 
187
273
  expect(result.getValue('string')).toBe('4.5');
188
- expect(result.getValue('bigint')).toBe(450000000n);
274
+ expect(result.getBaseValue('bigint')).toBe(450000000n);
189
275
  });
190
276
 
191
277
  test('subtracts different type numbers correctly', () => {
@@ -193,7 +279,7 @@ describe('SwapKitNumber', () => {
193
279
  const result = skNumber1.sub(6, '0.5');
194
280
 
195
281
  expect(result.getValue('string')).toBe('3.5');
196
- expect(result.getValue('bigint')).toBe(350000000n);
282
+ expect(result.getBaseValue('bigint')).toBe(350000000n);
197
283
  });
198
284
 
199
285
  test('can process negative results', () => {
@@ -203,8 +289,8 @@ describe('SwapKitNumber', () => {
203
289
 
204
290
  expect(result0.getValue('string')).toBe('0');
205
291
  expect(resultMinus.getValue('string')).toBe('-10');
206
- expect(result0.getValue('bigint')).toBe(0n);
207
- expect(resultMinus.getValue('bigint')).toBe(-1000000000n);
292
+ expect(result0.getBaseValue('bigint')).toBe(0n);
293
+ expect(resultMinus.getBaseValue('bigint')).toBe(-1000000000n);
208
294
  });
209
295
  });
210
296
 
@@ -216,7 +302,7 @@ describe('SwapKitNumber', () => {
216
302
  const result = skNumber1.mul(skNumber2, skNumber3);
217
303
 
218
304
  expect(result.getValue('string')).toBe('25');
219
- expect(result.getValue('bigint')).toBe(2500000000n);
305
+ expect(result.getBaseValue('bigint')).toBe(2500000000n);
220
306
  });
221
307
 
222
308
  test('multiplies different type numbers correctly', () => {
@@ -224,7 +310,7 @@ describe('SwapKitNumber', () => {
224
310
  const result = skNumber1.mul(6, '0.5');
225
311
 
226
312
  expect(result.getValue('string')).toBe('30');
227
- expect(result.getValue('bigint')).toBe(3000000000n);
313
+ expect(result.getBaseValue('bigint')).toBe(3000000000n);
228
314
  });
229
315
 
230
316
  test('multiplies numbers correctly if decimals of SKN is lower than number multiplied with', () => {
@@ -232,19 +318,19 @@ describe('SwapKitNumber', () => {
232
318
  const result = skNumber1.mul('0.00001');
233
319
 
234
320
  expect(result.getValue('string')).toBe('10');
235
- expect(result.getValue('bigint')).toBe(1000000000n);
321
+ expect(result.getBaseValue('bigint')).toBe(100000n);
236
322
  });
237
323
 
238
324
  test('should correctly round the result of multiplication', () => {
239
- const skNumber1 = new SwapKitNumber({ decimal: 2, value: 1.23 });
325
+ const skNumber1 = new SwapKitNumber({ decimal: 3, value: 1.23 });
240
326
  const skNumber2 = new SwapKitNumber({ decimal: 4, value: 4.56 });
241
327
 
242
328
  const result = skNumber1.mul(skNumber2);
243
329
 
244
330
  // The exact result of 1.23 * 4.56 is 5.6088
245
331
  // If we round it to 2 decimal places, we should get 5.61
246
- expect(result.getValue('string')).toBe('5.61');
247
- expect(result.getValue('bigint')).toBe(560880000n);
332
+ expect(result.getValue('string')).toBe('5.609');
333
+ expect(result.getBaseValue('bigint')).toBe(5608n);
248
334
 
249
335
  const skNumber3 = new SwapKitNumber({ decimal: 2, value: 1.23 });
250
336
  const skNumber4 = new SwapKitNumber(-1.234567891);
@@ -254,7 +340,7 @@ describe('SwapKitNumber', () => {
254
340
  // The exact result of 1.23 * -1.234567891 is -1,518518505
255
341
  // If we round it to 2 decimal places, we should get 5.61
256
342
  expect(result2.getValue('string')).toBe('-1.52');
257
- expect(result2.getValue('bigint')).toBe(-1518518505n);
343
+ expect(result2.getBaseValue('bigint')).toBe(-151n);
258
344
  });
259
345
  });
260
346
 
@@ -266,13 +352,13 @@ describe('SwapKitNumber', () => {
266
352
  const result = skNumber1.div(skNumber2, skNumber3);
267
353
 
268
354
  expect(result.getValue('string')).toBe('4');
269
- expect(result.getValue('bigint')).toBe(400000000n);
355
+ expect(result.getBaseValue('bigint')).toBe(400000000n);
270
356
 
271
357
  const skNumber4 = new SwapKitNumber(10.12);
272
358
  const result2 = skNumber4.div(0.0001);
273
359
 
274
360
  expect(result2.getValue('string')).toBe('101200');
275
- expect(result2.getValue('bigint')).toBe(10120000000000n);
361
+ expect(result2.getBaseValue('bigint')).toBe(10120000000000n);
276
362
  });
277
363
 
278
364
  test('divides different type numbers correctly', () => {
@@ -280,7 +366,7 @@ describe('SwapKitNumber', () => {
280
366
  const result = skNumber1.div(5, '0.5');
281
367
 
282
368
  expect(result.getValue('string')).toBe('8');
283
- expect(result.getValue('bigint')).toBe(800000000n);
369
+ expect(result.getBaseValue('bigint')).toBe(800000000n);
284
370
  });
285
371
 
286
372
  test('divides different type numbers correctly when decimal is set', () => {
@@ -288,7 +374,7 @@ describe('SwapKitNumber', () => {
288
374
  const result = skNumber1.div(0.001);
289
375
 
290
376
  expect(result.getValue('string')).toBe('1200');
291
- expect(result.getValue('bigint')).toBe(120000000000n);
377
+ expect(result.getBaseValue('bigint')).toBe(120000n);
292
378
  });
293
379
 
294
380
  test('divides smaller number by larger number', () => {
@@ -296,7 +382,7 @@ describe('SwapKitNumber', () => {
296
382
  const result = skNumber1.div(2);
297
383
 
298
384
  expect(result.getValue('string')).toBe('0.5');
299
- expect(result.getValue('bigint')).toBe(50000000n);
385
+ expect(result.getBaseValue('bigint')).toBe(50000000n);
300
386
  });
301
387
 
302
388
  test('divides a number with 18 decimals by a negative number with less decimals', () => {
@@ -307,7 +393,7 @@ describe('SwapKitNumber', () => {
307
393
 
308
394
  // The exact result of 1.000000000000000010 / -2 is -0.500000000000000005
309
395
  expect(result.getValue('string')).toBe('-0.500000000000000005');
310
- expect(result.getValue('bigint')).toBe(-500000000000000005n);
396
+ expect(result.getBaseValue('bigint')).toBe(-500000000000000005n);
311
397
  });
312
398
 
313
399
  test('divides a number with 2 decimals by a negative number with more decimals', () => {
@@ -318,7 +404,7 @@ describe('SwapKitNumber', () => {
318
404
 
319
405
  // The exact result of 2 / -0.000005 is -400000
320
406
  expect(result.getValue('string')).toBe('-400000');
321
- expect(result.getValue('bigint')).toBe(-40000000000000n);
407
+ expect(result.getBaseValue('bigint')).toBe(-40000000n);
322
408
  });
323
409
  });
324
410
 
@@ -329,7 +415,7 @@ describe('SwapKitNumber', () => {
329
415
 
330
416
  const result = skNumber1.mul(skNumber2);
331
417
  expect(result.getValue('string')).toBe('987654321000000987654321000');
332
- expect(result.getValue('bigint')).toBe(987654321000000987654321000000000000000000000n);
418
+ expect(result.getBaseValue('bigint')).toBe(987654321000000987654321000000000000000000000n);
333
419
  });
334
420
 
335
421
  test('divide huge numbers', () => {
@@ -338,7 +424,7 @@ describe('SwapKitNumber', () => {
338
424
 
339
425
  const result = skNumber1.div(skNumber2);
340
426
  expect(result.getValue('string')).toBe('1012.4999999873447625');
341
- expect(result.getValue('bigint')).toBe(1012499999987344762500n);
427
+ expect(result.getBaseValue('bigint')).toBe(1012499999987344762500n);
342
428
  });
343
429
  });
344
430
 
@@ -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,33 +57,27 @@ 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
- address?: string;
63
- chain: Chain;
64
- isSynthetic = false;
65
- isGasAsset = false;
66
- symbol: string;
67
- ticker: string;
68
- type: ReturnType<typeof getAssetType>;
69
-
70
70
  constructor(params: AssetValueParams) {
71
+ const identifier =
72
+ 'identifier' in params ? params.identifier : `${params.chain}.${params.symbol}`;
73
+
71
74
  super(
72
75
  params.value instanceof BigIntArithmetics
73
76
  ? params.value
74
77
  : { decimal: params.decimal, value: params.value },
75
78
  );
76
79
 
77
- const identifier =
78
- 'identifier' in params ? params.identifier : `${params.chain}.${params.symbol}`;
79
80
  const assetInfo = getAssetInfo(identifier);
80
-
81
81
  this.type = getAssetType(assetInfo);
82
82
  this.chain = assetInfo.chain;
83
83
  this.ticker = assetInfo.ticker;
@@ -87,67 +87,68 @@ export class AssetValue extends BigIntArithmetics {
87
87
  this.isGasAsset = assetInfo.isGasAsset;
88
88
  }
89
89
 
90
- get assetValue() {
91
- return `${this.getValue('string')} ${this.ticker}`;
92
- }
90
+ address?: string;
91
+ isSynthetic = false;
92
+ isGasAsset = false;
93
+ chain: Chain;
94
+ symbol: string;
95
+ ticker: string;
96
+ type: ReturnType<typeof getAssetType>;
97
+
98
+ toString(short = false) {
99
+ // THOR.RUNE | ETH/ETH
100
+ const shortFormat = this.isSynthetic ? this.symbol.split('-')[0] : this.ticker;
93
101
 
94
- toString() {
95
- return `${this.chain}.${this.symbol}`;
102
+ return short
103
+ ? shortFormat
104
+ : // THOR.ETH/ETH | ETH.USDT-0x1234567890
105
+ `${this.chain}.${this.symbol}`;
96
106
  }
97
107
 
98
108
  eq({ chain, symbol }: { chain: Chain; symbol: string }) {
99
109
  return this.chain === chain && this.symbol === symbol;
100
110
  }
101
111
 
102
- static async fromString(assetString: string, value: number | string = 0) {
112
+ static async fromString(assetString: string, value: NumberPrimitives = 0) {
103
113
  return createAssetValue(assetString, value);
104
114
  }
105
115
 
106
- static fromStringSync(assetString: string, value: number | string = 0) {
116
+ static fromStringSync(assetString: string, value: NumberPrimitives = 0) {
117
+ const { isSynthetic } = getAssetInfo(assetString);
107
118
  const { decimal, identifier: tokenIdentifier } = getStaticToken(
108
119
  assetString as unknown as TokenNames,
109
120
  );
110
121
 
111
- return tokenIdentifier
112
- ? new AssetValue({ decimal, identifier: tokenIdentifier, value })
122
+ const parsedValue = safeValue(value, decimal);
123
+
124
+ const asset = tokenIdentifier
125
+ ? new AssetValue({ decimal, identifier: tokenIdentifier, value: parsedValue })
126
+ : isSynthetic
127
+ ? new AssetValue({ decimal: 8, identifier: assetString, value: parsedValue })
113
128
  : undefined;
129
+
130
+ return asset;
114
131
  }
115
132
 
116
133
  static async fromIdentifier(
117
134
  assetString: `${Chain}.${string}` | `${Chain}/${string}` | `${Chain}.${string}-${string}`,
118
- value: number | string = 0,
135
+ value: NumberPrimitives = 0,
119
136
  ) {
120
137
  return createAssetValue(assetString, value);
121
138
  }
122
139
 
123
- static fromIdentifierSync(identifier: TokenNames, value: number | string = 0) {
140
+ static fromIdentifierSync(identifier: TokenNames, value: NumberPrimitives = 0) {
124
141
  const { decimal, identifier: tokenIdentifier } = getStaticToken(identifier);
142
+ const parsedValue = safeValue(value, decimal);
125
143
 
126
- return new AssetValue({ decimal, identifier: tokenIdentifier, value });
144
+ return new AssetValue({ decimal, identifier: tokenIdentifier, value: parsedValue });
127
145
  }
128
146
 
129
- static fromChainOrSignature(assetString: CommonAssetString, value: number | string = 0) {
147
+ static fromChainOrSignature(assetString: CommonAssetString, value: NumberPrimitives = 0) {
130
148
  const { decimal, identifier } = getCommonAssetInfo(assetString);
149
+ const parsedValue = safeValue(value, decimal);
131
150
 
132
- return new AssetValue({ value, decimal, identifier });
133
- }
134
-
135
- static async fromTCQuote(identifier: TCTokenNames, value: number | string = 0) {
136
- const decimal = await getDecimal(getAssetInfo(identifier));
137
- const shiftedValue = this.shiftDecimals({ value, from: BaseDecimal.THOR, to: decimal });
138
-
139
- return new AssetValue({ value: shiftedValue, identifier, decimal });
140
- }
141
-
142
- static fromTCQuoteStatic(identifier: TCTokenNames, value: number | string = 0) {
143
- const tokenInfo = getStaticToken(identifier);
144
- const shiftedValue = this.shiftDecimals({
145
- value,
146
- from: BaseDecimal.THOR,
147
- to: tokenInfo.decimal,
148
- });
149
-
150
- return new AssetValue({ ...tokenInfo, value: shiftedValue });
151
+ return new AssetValue({ value: parsedValue, decimal, identifier });
151
152
  }
152
153
 
153
154
  static async loadStaticAssets() {
@@ -198,39 +199,41 @@ export const getMinAmountByChain = (chain: Chain) => {
198
199
  case Chain.Bitcoin:
199
200
  case Chain.Litecoin:
200
201
  case Chain.BitcoinCash:
201
- return asset.add(10001);
202
+ return asset.set(0.00010001);
202
203
 
203
204
  case Chain.Dogecoin:
204
- return asset.add(100000001);
205
+ return asset.set(1.00000001);
205
206
 
206
207
  case Chain.Avalanche:
207
208
  case Chain.Ethereum:
208
- return asset.add(10 * 10 ** 9);
209
+ return asset.set(0.00000001);
209
210
 
210
211
  case Chain.THORChain:
211
212
  case Chain.Maya:
212
- return asset.add(0);
213
+ return asset.set(0);
213
214
 
214
215
  default:
215
- return asset.add(1);
216
+ return asset.set(0.00000001);
216
217
  }
217
218
  };
218
219
 
219
220
  const getAssetInfo = (identifier: string) => {
220
221
  const isSynthetic = identifier.slice(0, 14).includes('/');
221
- const adjustedIdentifier = identifier.includes('.')
222
- ? identifier
223
- : `${Chain.THORChain}.${identifier}`;
222
+ const [synthChain, synthSymbol] = identifier.split('.').pop()!.split('/');
223
+ const adjustedIdentifier =
224
+ identifier.includes('.') && !isSynthetic ? identifier : `${Chain.THORChain}.${synthSymbol}`;
224
225
 
225
226
  const [chain, symbol] = adjustedIdentifier.split('.') as [Chain, string];
226
- const [ticker, address] = symbol.split('-') as [string, string?];
227
+ const [ticker, address] = (isSynthetic ? synthSymbol : symbol).split('-') as [string, string?];
227
228
 
228
229
  return {
229
230
  address: address?.toLowerCase(),
230
231
  chain,
231
232
  isGasAsset: isGasAsset({ chain, symbol }),
232
233
  isSynthetic,
233
- symbol: address ? `${ticker}-${address?.toLowerCase() ?? ''}` : symbol,
234
- ticker: isSynthetic ? symbol : ticker,
234
+ symbol:
235
+ (isSynthetic ? `${synthChain}/` : '') +
236
+ (address ? `${ticker}-${address?.toLowerCase() ?? ''}` : symbol),
237
+ ticker: ticker,
235
238
  };
236
239
  };