@subwallet/extension-base 1.0.7-2 → 1.0.9-0
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/background/KoniTypes.d.ts +3 -1
- package/background/KoniTypes.js +1 -0
- package/background/errors/TransactionError.js +5 -1
- package/cjs/background/KoniTypes.js +1 -0
- package/cjs/background/errors/TransactionError.js +4 -0
- package/cjs/constants/index.js +6 -3
- package/cjs/koni/api/dotsama/balance.js +5 -2
- package/cjs/koni/api/dotsama/crowdloan.js +1 -1
- package/cjs/koni/api/dotsama/transfer.js +19 -5
- package/cjs/koni/api/tokens/wasm/index.js +7 -0
- package/cjs/koni/api/xcm/polkadotXcm.js +18 -37
- package/cjs/koni/api/xcm/utils.js +78 -11
- package/cjs/koni/api/xcm/xTokens.js +4 -33
- package/cjs/koni/api/xcm/xcmPallet.js +4 -36
- package/cjs/koni/background/handlers/Extension.js +83 -25
- package/cjs/koni/background/handlers/State.js +1 -1
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/chain-service/constants.js +9 -7
- package/cjs/services/chain-service/index.js +19 -15
- package/cjs/services/chain-service/utils.js +1 -5
- package/cjs/services/history-service/constants/index.js +13 -0
- package/cjs/services/history-service/subsquid-multi-chain-history.js +38 -3
- package/cjs/services/transaction-service/helpers/index.js +45 -2
- package/cjs/services/transaction-service/index.js +58 -24
- package/cjs/utils/eth/parseTransaction/index.js +69 -59
- package/cjs/utils/number.js +112 -0
- package/constants/index.d.ts +1 -0
- package/constants/index.js +1 -0
- package/koni/api/dotsama/balance.js +4 -2
- package/koni/api/dotsama/crowdloan.js +2 -2
- package/koni/api/dotsama/transfer.js +19 -5
- package/koni/api/tokens/wasm/index.js +7 -0
- package/koni/api/xcm/polkadotXcm.js +20 -39
- package/koni/api/xcm/utils.d.ts +36 -3
- package/koni/api/xcm/utils.js +72 -11
- package/koni/api/xcm/xTokens.js +6 -35
- package/koni/api/xcm/xcmPallet.js +5 -35
- package/koni/background/handlers/Extension.js +82 -24
- package/koni/background/handlers/State.js +2 -2
- package/package.json +18 -8
- package/packageInfo.js +1 -1
- package/services/chain-service/constants.d.ts +2 -0
- package/services/chain-service/constants.js +9 -7
- package/services/chain-service/index.js +13 -8
- package/services/chain-service/utils.d.ts +0 -1
- package/services/chain-service/utils.js +1 -4
- package/services/history-service/constants/index.d.ts +2 -0
- package/services/history-service/constants/index.js +5 -0
- package/services/history-service/subsquid-multi-chain-history.d.ts +1 -1
- package/services/history-service/subsquid-multi-chain-history.js +36 -3
- package/services/transaction-service/helpers/index.d.ts +2 -0
- package/services/transaction-service/helpers/index.js +42 -0
- package/services/transaction-service/index.js +54 -20
- package/services/transaction-service/types.d.ts +2 -2
- package/utils/eth/parseTransaction/index.js +69 -59
- package/utils/number.d.ts +9 -0
- package/utils/number.js +100 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
|
2
|
+
export declare const BN_TEN: BigNumber;
|
|
3
|
+
export interface NumberFormatter {
|
|
4
|
+
(input: string, metadata?: Record<string, number>): string;
|
|
5
|
+
}
|
|
6
|
+
export declare const balanceFormatter: NumberFormatter;
|
|
7
|
+
export declare const PREDEFINED_FORMATTER: Record<string, NumberFormatter>;
|
|
8
|
+
export declare const toBNString: (input: string | number | BigNumber, decimal: number) => string;
|
|
9
|
+
export declare const formatNumber: (input: string | number | BigNumber, decimal: number, formatter: NumberFormatter, metadata?: Record<string, number>) => string;
|
package/utils/number.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import BigNumber from 'bignumber.js';
|
|
5
|
+
export const BN_TEN = new BigNumber(10);
|
|
6
|
+
// Clear zero from end, use with decimal only
|
|
7
|
+
const clearZero = result => {
|
|
8
|
+
let index = result.length - 1;
|
|
9
|
+
while (result[index] === '0') {
|
|
10
|
+
result = result.slice(0, index);
|
|
11
|
+
index--;
|
|
12
|
+
}
|
|
13
|
+
return result;
|
|
14
|
+
};
|
|
15
|
+
const NUM_1T = new BigNumber(1e12);
|
|
16
|
+
const TLIM = new BigNumber(1e17);
|
|
17
|
+
const NUM_1B = new BigNumber(1e9);
|
|
18
|
+
const BLIM = new BigNumber(1e14);
|
|
19
|
+
const NUM_1M = new BigNumber(1e6);
|
|
20
|
+
const NUM_100M = new BigNumber(1e8);
|
|
21
|
+
export const balanceFormatter = (input, metadata) => {
|
|
22
|
+
const absGteOne = new BigNumber(input).abs().gte(1);
|
|
23
|
+
const minNumberFormat = (metadata === null || metadata === void 0 ? void 0 : metadata.minNumberFormat) || 2;
|
|
24
|
+
const maxNumberFormat = (metadata === null || metadata === void 0 ? void 0 : metadata.maxNumberFormat) || 6;
|
|
25
|
+
const [int, decimal = '0'] = input.split('.');
|
|
26
|
+
let _decimal = '';
|
|
27
|
+
if (absGteOne) {
|
|
28
|
+
const intNumber = new BigNumber(int);
|
|
29
|
+
const max = BN_TEN.pow(maxNumberFormat);
|
|
30
|
+
|
|
31
|
+
// If count of number in integer part greater or equal maxNumberFormat, do not show decimal
|
|
32
|
+
if (intNumber.gte(max)) {
|
|
33
|
+
if (intNumber.gte(NUM_100M)) {
|
|
34
|
+
if (intNumber.gte(BLIM)) {
|
|
35
|
+
if (intNumber.gte(TLIM)) {
|
|
36
|
+
return `${intNumber.dividedBy(NUM_1T).toFixed(2)} T`;
|
|
37
|
+
}
|
|
38
|
+
return `${intNumber.dividedBy(NUM_1B).toFixed(2)} B`;
|
|
39
|
+
}
|
|
40
|
+
return `${intNumber.dividedBy(NUM_1M).toFixed(2)} M`;
|
|
41
|
+
}
|
|
42
|
+
return int;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Get only minNumberFormat number at decimal
|
|
46
|
+
if (decimal.length <= minNumberFormat) {
|
|
47
|
+
_decimal = decimal;
|
|
48
|
+
} else {
|
|
49
|
+
_decimal = decimal.slice(0, minNumberFormat);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Clear zero number for decimal
|
|
53
|
+
_decimal = clearZero(_decimal);
|
|
54
|
+
} else {
|
|
55
|
+
// Index of cursor
|
|
56
|
+
let index = 0;
|
|
57
|
+
|
|
58
|
+
// Count of not zero number in decimal
|
|
59
|
+
let current = 0;
|
|
60
|
+
|
|
61
|
+
// Find a not zero number in decimal
|
|
62
|
+
let metNotZero = false;
|
|
63
|
+
|
|
64
|
+
// Get at least minNumberFormat number not 0 from index 0
|
|
65
|
+
// If count of 0 number at prefix greater or equal maxNumberFormat should stop and return 0
|
|
66
|
+
|
|
67
|
+
// current === minNumberFormat: get enough number
|
|
68
|
+
// index === decimal.length: end of decimal
|
|
69
|
+
// index === maxNumberFormat: reach limit of 0 number at prefix
|
|
70
|
+
while (current < minNumberFormat && index < decimal.length && (index < maxNumberFormat || metNotZero)) {
|
|
71
|
+
const _char = decimal[index];
|
|
72
|
+
_decimal += _char;
|
|
73
|
+
index++;
|
|
74
|
+
if (_char !== '0') {
|
|
75
|
+
metNotZero = true;
|
|
76
|
+
}
|
|
77
|
+
if (metNotZero) {
|
|
78
|
+
current++;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Clear zero number for decimal
|
|
83
|
+
_decimal = clearZero(_decimal);
|
|
84
|
+
}
|
|
85
|
+
if (_decimal) {
|
|
86
|
+
return `${int}.${_decimal}`;
|
|
87
|
+
}
|
|
88
|
+
return int;
|
|
89
|
+
};
|
|
90
|
+
export const PREDEFINED_FORMATTER = {
|
|
91
|
+
balance: balanceFormatter
|
|
92
|
+
};
|
|
93
|
+
export const toBNString = (input, decimal) => {
|
|
94
|
+
const raw = new BigNumber(input);
|
|
95
|
+
return raw.multipliedBy(BN_TEN.pow(decimal)).toFixed();
|
|
96
|
+
};
|
|
97
|
+
export const formatNumber = (input, decimal, formatter, metadata) => {
|
|
98
|
+
const raw = new BigNumber(input).dividedBy(BN_TEN.pow(decimal)).toFixed();
|
|
99
|
+
return formatter(raw, metadata);
|
|
100
|
+
};
|