@subwallet/extension-base 1.3.64-0 → 1.3.66-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/cjs/koni/background/handlers/State.js +1 -0
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/index.js +158 -16
- package/cjs/services/balance-service/transfer/xcm/acrossBridge/index.js +50 -4
- package/cjs/services/balance-service/transfer/xcm/index.js +7 -2
- package/cjs/services/chain-online-service/index.js +0 -3
- package/cjs/services/chain-service/index.js +6 -1
- package/cjs/services/chain-service/utils/patch.js +1 -1
- package/cjs/services/earning-service/constants/chains.js +0 -2
- package/cjs/services/earning-service/handlers/lending/interlay.js +1 -0
- package/cjs/services/earning-service/handlers/liquid-staking/acala.js +1 -1
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
- package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +1 -0
- package/cjs/services/earning-service/handlers/native-staking/tanssi.js +65 -9
- package/cjs/services/migration-service/scripts/DeleteEarningData20251105.js +21 -0
- package/cjs/services/migration-service/scripts/MigrateTransactionHistoryBySymbol20251107.js +51 -0
- package/cjs/services/migration-service/scripts/OptimizeEnableToken.js +19 -0
- package/cjs/services/migration-service/scripts/databases/MigrateAssetSetting20251107.js +37 -0
- package/cjs/services/migration-service/scripts/index.js +16 -8
- package/cjs/services/request-service/handler/EvmRequestHandler.js +1 -1
- package/cjs/services/transaction-service/index.js +1 -1
- package/cjs/utils/eth.js +2 -1
- package/cjs/utils/fee/transfer.js +1 -5
- package/koni/background/handlers/State.js +1 -0
- package/package.json +28 -8
- package/packageInfo.js +1 -1
- package/services/balance-service/index.d.ts +8 -0
- package/services/balance-service/index.js +158 -17
- package/services/balance-service/transfer/xcm/acrossBridge/index.d.ts +2 -0
- package/services/balance-service/transfer/xcm/acrossBridge/index.js +47 -2
- package/services/balance-service/transfer/xcm/index.js +7 -2
- package/services/chain-online-service/index.js +0 -3
- package/services/chain-service/index.d.ts +1 -0
- package/services/chain-service/index.js +6 -1
- package/services/chain-service/utils/patch.d.ts +1 -1
- package/services/chain-service/utils/patch.js +1 -1
- package/services/earning-service/constants/chains.js +0 -2
- package/services/earning-service/handlers/lending/interlay.js +2 -0
- package/services/earning-service/handlers/liquid-staking/acala.js +1 -1
- package/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
- package/services/earning-service/handlers/liquid-staking/parallel.js +2 -0
- package/services/earning-service/handlers/native-staking/tanssi.js +62 -6
- package/services/migration-service/scripts/DeleteEarningData20251105.d.ts +4 -0
- package/services/migration-service/scripts/DeleteEarningData20251105.js +13 -0
- package/services/migration-service/scripts/MigrateTransactionHistoryBySymbol20251107.d.ts +4 -0
- package/services/migration-service/scripts/MigrateTransactionHistoryBySymbol20251107.js +42 -0
- package/services/migration-service/scripts/OptimizeEnableToken.d.ts +4 -0
- package/services/migration-service/scripts/OptimizeEnableToken.js +11 -0
- package/services/migration-service/scripts/databases/MigrateAssetSetting20251107.d.ts +4 -0
- package/services/migration-service/scripts/databases/MigrateAssetSetting20251107.js +29 -0
- package/services/migration-service/scripts/index.js +9 -1
- package/services/request-service/handler/EvmRequestHandler.js +1 -1
- package/services/transaction-service/index.js +1 -1
- package/types/transaction/data.d.ts +1 -1
- package/utils/eth.js +2 -1
- package/utils/fee/transfer.js +2 -6
- package/utils/staticData/buyTokenConfigs.json +0 -46
|
@@ -1837,6 +1837,7 @@ class KoniState {
|
|
|
1837
1837
|
await this.priceService.setPriceCurrency(DEFAULT_CURRENCY);
|
|
1838
1838
|
this.settingService.resetWallet();
|
|
1839
1839
|
await this.priceService.setPriceCurrency(DEFAULT_CURRENCY);
|
|
1840
|
+
this.chainService.resetPopularTokenList();
|
|
1840
1841
|
}
|
|
1841
1842
|
this.chainService.resetWallet(resetAll);
|
|
1842
1843
|
await this.walletConnectService.resetWallet(resetAll);
|
package/cjs/packageInfo.js
CHANGED
|
@@ -38,13 +38,14 @@ class BalanceService {
|
|
|
38
38
|
stopPromiseHandler = (0, _utils2.createPromiseHandler)();
|
|
39
39
|
status = _types.ServiceStatus.NOT_INITIALIZED;
|
|
40
40
|
isReload = false;
|
|
41
|
+
requireOptimizeTokenList = false;
|
|
41
42
|
get isStarted() {
|
|
42
43
|
return this.status === _types.ServiceStatus.STARTED;
|
|
43
44
|
}
|
|
44
45
|
detectAccountBalanceStore = new _DetectAccountBalance.default();
|
|
45
46
|
balanceDetectSubject = new _rxjs.BehaviorSubject({});
|
|
46
|
-
intervalTime = 3 * 60 * 1000;
|
|
47
|
-
cacheTime = 15 * 60 * 1000;
|
|
47
|
+
intervalTime = 3 * 60 * 1000; // scan balance every 3 mins
|
|
48
|
+
cacheTime = 15 * 60 * 1000; // cache time 15 mins to run again
|
|
48
49
|
|
|
49
50
|
/**
|
|
50
51
|
* @constructor
|
|
@@ -96,6 +97,10 @@ class BalanceService {
|
|
|
96
97
|
this.stopPromiseHandler = (0, _utils2.createPromiseHandler)();
|
|
97
98
|
this.status = _types.ServiceStatus.STARTED;
|
|
98
99
|
this.startPromiseHandler.resolve();
|
|
100
|
+
if (this.requireOptimizeTokenList) {
|
|
101
|
+
await this.optimizeEnableTokens();
|
|
102
|
+
this.requireOptimizeTokenList = false;
|
|
103
|
+
}
|
|
99
104
|
}
|
|
100
105
|
|
|
101
106
|
/** Stop service */
|
|
@@ -456,18 +461,12 @@ class BalanceService {
|
|
|
456
461
|
const type = (0, _keyring.getKeypairTypeByAddress)(address);
|
|
457
462
|
const typeValid = [..._types2.EthereumKeypairTypes].includes(type);
|
|
458
463
|
if (typeValid) {
|
|
459
|
-
return
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
});
|
|
463
|
-
const balanceDetectionApi = _subwalletServicesSdk.default.balanceDetectionApi || Promise.resolve([]);
|
|
464
|
-
Promise.race([timeOutPromise, balanceDetectionApi.getEvmTokenBalanceSlug(address)]).then(result => resolve(result)).catch(error => {
|
|
465
|
-
console.error(error);
|
|
466
|
-
resolve(null);
|
|
467
|
-
});
|
|
464
|
+
return _subwalletServicesSdk.default.balanceDetectionApi.getSubWalletTokenBalance(address).catch(e => {
|
|
465
|
+
console.error(e);
|
|
466
|
+
return null;
|
|
468
467
|
});
|
|
469
468
|
} else {
|
|
470
|
-
return
|
|
469
|
+
return null;
|
|
471
470
|
}
|
|
472
471
|
});
|
|
473
472
|
const needEnableChains = [];
|
|
@@ -525,13 +524,13 @@ class BalanceService {
|
|
|
525
524
|
}
|
|
526
525
|
for (const balanceData of evmBalanceDataList) {
|
|
527
526
|
if (balanceData) {
|
|
528
|
-
for (const
|
|
527
|
+
for (const tokenSlug of balanceData) {
|
|
529
528
|
var _currentAssetSettings2;
|
|
530
|
-
const chainSlug =
|
|
529
|
+
const chainSlug = tokenSlug.split('-')[0];
|
|
531
530
|
const chainState = this.state.chainService.getChainStateByKey(chainSlug);
|
|
532
|
-
const existedKey = Object.keys(assetMap).find(v => v.toLowerCase() ===
|
|
531
|
+
const existedKey = Object.keys(assetMap).find(v => v.toLowerCase() === tokenSlug.toLowerCase());
|
|
533
532
|
|
|
534
|
-
// Cancel
|
|
533
|
+
// Cancel if chain is turned off by user
|
|
535
534
|
if (chainState && chainState.manualTurnOff) {
|
|
536
535
|
continue;
|
|
537
536
|
}
|
|
@@ -637,5 +636,148 @@ class BalanceService {
|
|
|
637
636
|
}
|
|
638
637
|
return (0, _process.getDefaultTransferProcess)();
|
|
639
638
|
}
|
|
639
|
+
|
|
640
|
+
// only evm addresses
|
|
641
|
+
async evmDetectBalanceToken(addresses) {
|
|
642
|
+
const assetMap = this.state.chainService.getAssetRegistry();
|
|
643
|
+
const evmPromiseList = addresses.map(address => {
|
|
644
|
+
return _subwalletServicesSdk.default.balanceDetectionApi.getSubWalletTokenBalance(address).catch(e => {
|
|
645
|
+
console.error(e);
|
|
646
|
+
return null;
|
|
647
|
+
});
|
|
648
|
+
});
|
|
649
|
+
const needActiveTokens = [];
|
|
650
|
+
const evmBalanceDataList = await Promise.all(evmPromiseList);
|
|
651
|
+
for (const balanceData of evmBalanceDataList) {
|
|
652
|
+
if (balanceData) {
|
|
653
|
+
for (const tokenSlug of balanceData) {
|
|
654
|
+
const chainSlug = tokenSlug.split('-')[0];
|
|
655
|
+
const chainState = this.state.chainService.getChainStateByKey(chainSlug);
|
|
656
|
+
const existedKey = Object.keys(assetMap).find(v => v.toLowerCase() === tokenSlug.toLowerCase());
|
|
657
|
+
|
|
658
|
+
// Cancel is chain is turned off by user
|
|
659
|
+
if (chainState && chainState.manualTurnOff) {
|
|
660
|
+
continue;
|
|
661
|
+
}
|
|
662
|
+
if (existedKey) {
|
|
663
|
+
needActiveTokens.push(existedKey);
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
return needActiveTokens;
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
// only for substrate addresses
|
|
672
|
+
async substrateDetectBalanceToken(addresses) {
|
|
673
|
+
const assetMap = this.state.chainService.getAssetRegistry();
|
|
674
|
+
const promiseList = addresses.map(address => {
|
|
675
|
+
return this.state.subscanService.getMultiChainBalance(address).catch(e => {
|
|
676
|
+
console.error(e);
|
|
677
|
+
return null;
|
|
678
|
+
});
|
|
679
|
+
});
|
|
680
|
+
const needActiveTokens = [];
|
|
681
|
+
const balanceDataList = await Promise.all(promiseList);
|
|
682
|
+
const chainInfoMap = this.state.chainService.getChainInfoMap();
|
|
683
|
+
const detectBalanceChainSlugMap = this.state.chainService.detectBalanceChainSlugMap;
|
|
684
|
+
for (const balanceData of balanceDataList) {
|
|
685
|
+
if (balanceData) {
|
|
686
|
+
for (const balanceDatum of balanceData) {
|
|
687
|
+
const {
|
|
688
|
+
balance,
|
|
689
|
+
bonded,
|
|
690
|
+
category,
|
|
691
|
+
locked,
|
|
692
|
+
network,
|
|
693
|
+
symbol
|
|
694
|
+
} = balanceDatum;
|
|
695
|
+
const chain = detectBalanceChainSlugMap[network];
|
|
696
|
+
const chainState = this.state.chainService.getChainStateByKey(chain);
|
|
697
|
+
const chainInfo = chain ? chainInfoMap[chain] : null;
|
|
698
|
+
const balanceIsEmpty = (!balance || balance === '0') && (!locked || locked === '0') && (!bonded || bonded === '0');
|
|
699
|
+
const tokenKey = `${chain}-${category === 'native' ? 'NATIVE' : 'LOCAL'}-${symbol.toUpperCase()}`;
|
|
700
|
+
const existedKey = Object.keys(assetMap).find(v => v.toLowerCase() === tokenKey.toLowerCase());
|
|
701
|
+
|
|
702
|
+
// Cancel if chain is not supported or is testnet
|
|
703
|
+
if (!chainInfo || chainInfo.isTestnet) {
|
|
704
|
+
continue;
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
// Cancel is balance is 0
|
|
708
|
+
if (balanceIsEmpty) {
|
|
709
|
+
continue;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
// Cancel is chain is turned off by user
|
|
713
|
+
if (chainState && chainState.manualTurnOff) {
|
|
714
|
+
continue;
|
|
715
|
+
}
|
|
716
|
+
if (existedKey) {
|
|
717
|
+
needActiveTokens.push(existedKey);
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
return needActiveTokens;
|
|
723
|
+
}
|
|
724
|
+
async evmDetectBalanceChain() {
|
|
725
|
+
const blockscoutChain = await _subwalletServicesSdk.default.balanceDetectionApi.getBlockscoutChainData();
|
|
726
|
+
const blockscoutChainId = Object.keys(blockscoutChain);
|
|
727
|
+
const evmDetectChain = Object.values(this.state.chainService.getChainInfoMap()).filter(info => {
|
|
728
|
+
var _info$evmInfo, _info$evmInfo2;
|
|
729
|
+
return !!((_info$evmInfo = info.evmInfo) !== null && _info$evmInfo !== void 0 && _info$evmInfo.evmChainId) && blockscoutChainId.includes((_info$evmInfo2 = info.evmInfo) === null || _info$evmInfo2 === void 0 ? void 0 : _info$evmInfo2.evmChainId.toString());
|
|
730
|
+
}).map(chainInfo => chainInfo.slug);
|
|
731
|
+
return evmDetectChain;
|
|
732
|
+
}
|
|
733
|
+
substrateDetectBalanceChain() {
|
|
734
|
+
const substrateDetectChain = Object.values(this.state.chainService.getChainInfoMap()).filter(info => {
|
|
735
|
+
var _info$extraInfo;
|
|
736
|
+
return !!info.substrateInfo && !!((_info$extraInfo = info.extraInfo) !== null && _info$extraInfo !== void 0 && _info$extraInfo.chainBalanceSlug);
|
|
737
|
+
}).map(chainInfo => chainInfo.slug);
|
|
738
|
+
return substrateDetectChain;
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
/** optimize token area **/
|
|
742
|
+
|
|
743
|
+
enableOptimizeTokenPromise() {
|
|
744
|
+
this.requireOptimizeTokenList = true;
|
|
745
|
+
}
|
|
746
|
+
async optimizeEnableTokens() {
|
|
747
|
+
try {
|
|
748
|
+
const assetSettings = await this.state.chainService.getAssetSettings();
|
|
749
|
+
const assetMap = this.state.chainService.getAssetRegistry();
|
|
750
|
+
const addresses = _uiKeyring.default.getPairs().map(account => account.address);
|
|
751
|
+
const evmAddresses = addresses.filter(address => [..._types2.EthereumKeypairTypes].includes((0, _keyring.getKeypairTypeByAddress)(address)));
|
|
752
|
+
const substrateAddresses = addresses.filter(address => [..._types2.SubstrateKeypairTypes].includes((0, _keyring.getKeypairTypeByAddress)(address)));
|
|
753
|
+
const [nonZeroBalanceEvmToken, nonZeroBalanceSubstrateToken] = await Promise.all([this.evmDetectBalanceToken(evmAddresses), this.substrateDetectBalanceToken(substrateAddresses)]);
|
|
754
|
+
const substrateDetectChain = this.substrateDetectBalanceChain();
|
|
755
|
+
const evmDetectChain = await this.evmDetectBalanceChain();
|
|
756
|
+
const updatedSettings = structuredClone(assetSettings);
|
|
757
|
+
Object.entries(assetSettings).forEach(_ref => {
|
|
758
|
+
let [tokenSlug, setting] = _ref;
|
|
759
|
+
const isNonZeroBalanceToken = nonZeroBalanceEvmToken.includes(tokenSlug) || nonZeroBalanceSubstrateToken.includes(tokenSlug);
|
|
760
|
+
const assetInfo = assetMap[tokenSlug];
|
|
761
|
+
const isEvmDetectChain = evmDetectChain.includes(assetInfo.originChain);
|
|
762
|
+
const isSubstrateDetectChain = substrateDetectChain.includes(assetInfo.originChain);
|
|
763
|
+
if (isNonZeroBalanceToken && !setting.visible) {
|
|
764
|
+
// enable non-zero balance tokens
|
|
765
|
+
updatedSettings[tokenSlug] = {
|
|
766
|
+
visible: true
|
|
767
|
+
};
|
|
768
|
+
} else if (!isNonZeroBalanceToken && setting.visible && !(0, _utils._isNativeToken)(assetInfo) && !(0, _utils._isCustomAsset)(tokenSlug) && (isEvmDetectChain || isSubstrateDetectChain)) {
|
|
769
|
+
// hide tokens with zero balance that aren't native or custom
|
|
770
|
+
updatedSettings[tokenSlug] = {
|
|
771
|
+
visible: false
|
|
772
|
+
};
|
|
773
|
+
}
|
|
774
|
+
});
|
|
775
|
+
this.state.chainService.setAssetSettings(updatedSettings);
|
|
776
|
+
} catch (e) {
|
|
777
|
+
console.error(e);
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
/** optimize token area **/
|
|
640
782
|
}
|
|
641
783
|
exports.BalanceService = BalanceService;
|
|
@@ -6,17 +6,21 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports._isAcrossChainBridge = _isAcrossChainBridge;
|
|
8
8
|
exports._isAcrossTestnetBridge = _isAcrossTestnetBridge;
|
|
9
|
-
exports.getAcrossQuote = void 0;
|
|
9
|
+
exports.getAcrossSendingValue = exports.getAcrossQuote = void 0;
|
|
10
10
|
var _chainList = require("@subwallet/chain-list");
|
|
11
|
+
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
11
12
|
var _xcmParser = require("@subwallet/extension-base/core/substrate/xcm-parser");
|
|
13
|
+
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
14
|
+
var _types = require("@subwallet/extension-base/types");
|
|
12
15
|
var _subwalletServicesSdk = _interopRequireDefault(require("@subwallet-monorepos/subwallet-services-sdk"));
|
|
16
|
+
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
13
17
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
14
18
|
// SPDX-License-Identifier: Apache-2.0
|
|
15
19
|
|
|
16
20
|
// Across Bridge
|
|
17
21
|
const acrossPairsMap = new Map([[_chainList.COMMON_CHAIN_SLUGS.ETHEREUM, new Set(['optimism', 'base_mainnet', 'arbitrum_one'])], ['optimism', new Set([_chainList.COMMON_CHAIN_SLUGS.ETHEREUM, 'base_mainnet', 'arbitrum_one'])], ['base_mainnet', new Set([_chainList.COMMON_CHAIN_SLUGS.ETHEREUM, 'optimism', 'arbitrum_one'])], ['arbitrum_one', new Set([_chainList.COMMON_CHAIN_SLUGS.ETHEREUM, 'optimism', 'base_mainnet'])], [_chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA, new Set(['base_sepolia', 'arbitrum_sepolia'])],
|
|
18
22
|
// TESTNET START HERE
|
|
19
|
-
['base_sepolia', new Set([_chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA])], ['arbitrum_sepolia', new Set([_chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA])]]);
|
|
23
|
+
['base_sepolia', new Set([_chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA, 'arbitrum_sepolia'])], ['arbitrum_sepolia', new Set([_chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA, 'base_sepolia'])]]);
|
|
20
24
|
function _isAcrossChainBridge(srcChain, destChain) {
|
|
21
25
|
var _acrossPairsMap$get$h, _acrossPairsMap$get;
|
|
22
26
|
return (_acrossPairsMap$get$h = (_acrossPairsMap$get = acrossPairsMap.get(srcChain)) === null || _acrossPairsMap$get === void 0 ? void 0 : _acrossPairsMap$get.has(destChain)) !== null && _acrossPairsMap$get$h !== void 0 ? _acrossPairsMap$get$h : false;
|
|
@@ -43,7 +47,7 @@ const getAcrossQuote = async _ref => {
|
|
|
43
47
|
throw new Error('Sender is required');
|
|
44
48
|
}
|
|
45
49
|
try {
|
|
46
|
-
const data = await _subwalletServicesSdk.default.
|
|
50
|
+
const data = await _subwalletServicesSdk.default.bridgeApi.fetchBridgeData({
|
|
47
51
|
address: sender,
|
|
48
52
|
from: originTokenInfo.slug,
|
|
49
53
|
to: destinationTokenInfo.slug,
|
|
@@ -61,4 +65,46 @@ const getAcrossQuote = async _ref => {
|
|
|
61
65
|
return Promise.reject(new Error((error === null || error === void 0 ? void 0 : error.message) || 'Unable to perform this transaction at the moment. Try again later'));
|
|
62
66
|
}
|
|
63
67
|
};
|
|
64
|
-
|
|
68
|
+
|
|
69
|
+
// TODO: update logic after add across metadata for chainlist
|
|
70
|
+
exports.getAcrossQuote = getAcrossQuote;
|
|
71
|
+
const acrossNativeTokenAddresses = {
|
|
72
|
+
mainnet: {
|
|
73
|
+
arbitrum_one: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',
|
|
74
|
+
base_mainnet: '0x4200000000000000000000000000000000000006',
|
|
75
|
+
ethereum: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
|
|
76
|
+
optimism: '0x4200000000000000000000000000000000000006'
|
|
77
|
+
},
|
|
78
|
+
testnet: {
|
|
79
|
+
arbitrum_sepolia: '0x980B62Da83eFf3D4576C647993b0c1D7faf17c73',
|
|
80
|
+
base_sepolia: '0x4200000000000000000000000000000000000006',
|
|
81
|
+
sepolia_ethereum: '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14'
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const getAcrossSendingValue = async (originChain, originTokenInfo, destinationChain, isTestnet) => {
|
|
85
|
+
try {
|
|
86
|
+
const originChainId = (0, _utils._getEvmChainId)(originChain);
|
|
87
|
+
const destinationChainId = (0, _utils._getEvmChainId)(destinationChain);
|
|
88
|
+
if (!originChainId || !destinationChainId) {
|
|
89
|
+
return Promise.reject(new _TransactionError.TransactionError(_types.BasicTxErrorType.INVALID_PARAMS));
|
|
90
|
+
}
|
|
91
|
+
const contracts = isTestnet ? acrossNativeTokenAddresses.testnet : acrossNativeTokenAddresses.mainnet;
|
|
92
|
+
const fromContract = (0, _utils._getContractAddressOfToken)(originTokenInfo) || contracts[originTokenInfo.originChain];
|
|
93
|
+
const acrossBridgeLimit = await _subwalletServicesSdk.default.bridgeApi.getAcrossBridgeLimit(originChainId, destinationChainId, fromContract, isTestnet);
|
|
94
|
+
if (!acrossBridgeLimit.minDeposit || !acrossBridgeLimit.maxDeposit) {
|
|
95
|
+
throw new Error('Invalid Across Bridge response');
|
|
96
|
+
}
|
|
97
|
+
const min = new _bignumber.default(acrossBridgeLimit.minDeposit);
|
|
98
|
+
const max = new _bignumber.default(acrossBridgeLimit.maxDeposit);
|
|
99
|
+
// Use the midpoint between minDeposit and maxDeposit as a balanced value used for estimating gas fee more accurately
|
|
100
|
+
const sendingValue = min.plus(max).div(2).toFixed(0);
|
|
101
|
+
return sendingValue;
|
|
102
|
+
} catch (error) {
|
|
103
|
+
console.error('Across Bridge error:', error);
|
|
104
|
+
|
|
105
|
+
// fallback in case fetch API fail
|
|
106
|
+
const defaultSendingAmount = isTestnet ? 0.0037 : 1;
|
|
107
|
+
return new _bignumber.default(defaultSendingAmount).shiftedBy((0, _utils._getAssetDecimals)(originTokenInfo)).toFixed(0, _bignumber.default.ROUND_FLOOR);
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
exports.getAcrossSendingValue = getAcrossSendingValue;
|
|
@@ -201,7 +201,7 @@ const createAcrossBridgeExtrinsic = async _ref6 => {
|
|
|
201
201
|
throw new Error('Sender is required');
|
|
202
202
|
}
|
|
203
203
|
try {
|
|
204
|
-
const data = await _subwalletServicesSdk.default.
|
|
204
|
+
const data = await _subwalletServicesSdk.default.bridgeApi.fetchBridgeData({
|
|
205
205
|
address: sender,
|
|
206
206
|
from: originTokenInfo.slug,
|
|
207
207
|
to: destinationTokenInfo.slug,
|
|
@@ -224,10 +224,15 @@ const createAcrossBridgeExtrinsic = async _ref6 => {
|
|
|
224
224
|
transactionConfig.gas = gasLimit.toString();
|
|
225
225
|
return transactionConfig;
|
|
226
226
|
} catch (error) {
|
|
227
|
+
var _message, _message$toLowerCase;
|
|
227
228
|
if (error instanceof SyntaxError) {
|
|
228
229
|
return Promise.reject(new Error('Unable to perform this transaction at the moment. Try again later'));
|
|
229
230
|
}
|
|
230
|
-
|
|
231
|
+
const message = (error === null || error === void 0 ? void 0 : (_message = error.message) === null || _message === void 0 ? void 0 : (_message$toLowerCase = _message.toLowerCase) === null || _message$toLowerCase === void 0 ? void 0 : _message$toLowerCase.call(_message)) || '';
|
|
232
|
+
if (!message.includes('amount')) {
|
|
233
|
+
return Promise.reject(new Error('Unable to perform this transaction at the moment. Try again later'));
|
|
234
|
+
}
|
|
235
|
+
return Promise.reject(new Error(error === null || error === void 0 ? void 0 : error.message));
|
|
231
236
|
}
|
|
232
237
|
};
|
|
233
238
|
exports.createAcrossBridgeExtrinsic = createAcrossBridgeExtrinsic;
|
|
@@ -274,9 +274,6 @@ class ChainOnlineService {
|
|
|
274
274
|
this.chainService.subscribeChainInfoMap().next(chainInfoMap);
|
|
275
275
|
this.chainService.setAssetRegistry(assetRegistry);
|
|
276
276
|
this.chainService.subscribeAssetRegistry().next(assetRegistry);
|
|
277
|
-
this.chainService.autoEnableTokens().then(() => {
|
|
278
|
-
this.eventService.emit('asset.updateState', '');
|
|
279
|
-
}).catch(console.error);
|
|
280
277
|
this.chainService.setChainStateMap(currentChainStateMap);
|
|
281
278
|
this.chainService.subscribeChainStateMap().next(currentChainStateMap);
|
|
282
279
|
this.chainService.subscribeChainStatusMap().next(currentChainStatusMap);
|
|
@@ -605,7 +605,6 @@ class ChainService {
|
|
|
605
605
|
this.xcmRefMapSubject.next(this.xcmRefMap);
|
|
606
606
|
await this.initApis();
|
|
607
607
|
this.initAssetSettings();
|
|
608
|
-
await this.autoEnableTokens();
|
|
609
608
|
}
|
|
610
609
|
initAssetRefMap() {
|
|
611
610
|
this.dataMap.assetRefMap = _chainList.AssetRefMap;
|
|
@@ -683,6 +682,12 @@ class ChainService {
|
|
|
683
682
|
}
|
|
684
683
|
}
|
|
685
684
|
}
|
|
685
|
+
resetPopularTokenList() {
|
|
686
|
+
this.priorityTokensSubject.next({
|
|
687
|
+
token: {},
|
|
688
|
+
tokenGroup: {}
|
|
689
|
+
});
|
|
690
|
+
}
|
|
686
691
|
async enablePopularTokens() {
|
|
687
692
|
const assetSettings = this.assetSettingSubject.value;
|
|
688
693
|
const chainStateMap = this.getChainStateMap();
|
|
@@ -12,7 +12,7 @@ const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
|
|
|
12
12
|
const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
|
|
13
13
|
const fetchDomain = process.env.PATCH_CHAIN_LIST_URL || (PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'https://chain-list-assets.subwallet.app' : 'https://dev.sw-chain-list-assets.pages.dev');
|
|
14
14
|
const fetchFile = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'list.json' : 'preview.json';
|
|
15
|
-
const ChainListVersion = '0.2.
|
|
15
|
+
const ChainListVersion = '0.2.121'; // update this when build chain-list
|
|
16
16
|
|
|
17
17
|
// todo: move this interface to chainlist
|
|
18
18
|
exports.ChainListVersion = ChainListVersion;
|
|
@@ -46,8 +46,6 @@ exports.MANTA_MIN_DELEGATION = MANTA_MIN_DELEGATION;
|
|
|
46
46
|
const CHANNEL_ID = 7;
|
|
47
47
|
exports.CHANNEL_ID = CHANNEL_ID;
|
|
48
48
|
const STAKING_IDENTITY_API_SLUG = {
|
|
49
|
-
// @TODO: Remove polkadot then migrate
|
|
50
|
-
polkadot: 'polkadot_people',
|
|
51
49
|
statemine: 'peopleKusama',
|
|
52
50
|
statemint: 'polkadot_people'
|
|
53
51
|
};
|
|
@@ -15,6 +15,7 @@ var _base = _interopRequireDefault(require("./base"));
|
|
|
15
15
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
16
16
|
// SPDX-License-Identifier: Apache-2.0
|
|
17
17
|
|
|
18
|
+
// TODO: disable earning and stake actions but keep showing existing earning positions (currently handle on UI)
|
|
18
19
|
class InterlayLendingPoolHandler extends _base.default {
|
|
19
20
|
altInputAsset = 'polkadot-NATIVE-DOT';
|
|
20
21
|
derivativeAssets = ['interlay-LOCAL-qDOT'];
|
|
@@ -21,7 +21,7 @@ function convertDerivativeToken(amount, exchangeRate, decimals) {
|
|
|
21
21
|
return amount.mul(new _util.BN(exchangeRate)).div(_util.BN_TEN.pow(new _util.BN(decimals)));
|
|
22
22
|
}
|
|
23
23
|
class AcalaLiquidStakingPoolHandler extends _base.default {
|
|
24
|
-
altInputAsset = '
|
|
24
|
+
altInputAsset = 'statemint-NATIVE-DOT';
|
|
25
25
|
derivativeAssets = ['acala-LOCAL-LDOT'];
|
|
26
26
|
inputAsset = 'acala-LOCAL-DOT';
|
|
27
27
|
rewardAssets = ['acala-LOCAL-DOT'];
|
|
@@ -21,7 +21,7 @@ const STATS_URL = 'https://dapi.bifrost.io/api/site';
|
|
|
21
21
|
const BIFROST_GRAPHQL_ENDPOINT = 'https://bifrost-subsql.liebi.com/v1/graphql';
|
|
22
22
|
const BIFROST_EXCHANGE_RATE_REQUEST = 'query MyQuery{slp_polkadot_ratio(limit:1 where:{key:{_eq:"0"}} order_by:{timestamp:desc_nulls_first}){ratio key timestamp total_issuance token_pool}}';
|
|
23
23
|
class BifrostLiquidStakingPoolHandler extends _base.default {
|
|
24
|
-
altInputAsset = '
|
|
24
|
+
altInputAsset = 'statemint-NATIVE-DOT';
|
|
25
25
|
derivativeAssets = ['bifrost_dot-LOCAL-vDOT'];
|
|
26
26
|
inputAsset = 'bifrost_dot-LOCAL-DOT';
|
|
27
27
|
rewardAssets = ['bifrost_dot-LOCAL-DOT'];
|
|
@@ -15,6 +15,7 @@ var _base = _interopRequireDefault(require("./base"));
|
|
|
15
15
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
16
16
|
// SPDX-License-Identifier: Apache-2.0
|
|
17
17
|
|
|
18
|
+
// TODO: disable earning and stake actions but keep showing existing earning positions (currently handle on UI)
|
|
18
19
|
class ParallelLiquidStakingPoolHandler extends _base.default {
|
|
19
20
|
altInputAsset = 'polkadot-NATIVE-DOT';
|
|
20
21
|
derivativeAssets = ['parallel-LOCAL-sDOT'];
|
|
@@ -7,13 +7,36 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
9
9
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
10
|
+
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
10
11
|
var _types = require("@subwallet/extension-base/types");
|
|
12
|
+
var _utils2 = require("@subwallet/extension-base/utils");
|
|
11
13
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
12
|
-
var
|
|
14
|
+
var _utils3 = require("../../utils");
|
|
13
15
|
var _basePara = _interopRequireDefault(require("./base-para"));
|
|
14
16
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
15
17
|
// SPDX-License-Identifier: Apache-2.0
|
|
16
18
|
|
|
19
|
+
// Constants
|
|
20
|
+
const sequencersPerAppchain = new _bignumber.default(5);
|
|
21
|
+
const rewardsForStakers = new _bignumber.default(0.8);
|
|
22
|
+
const blocksPerYear = new _bignumber.default(5256000); // 6 seconds block time hence 365 * 24 * 60 * 60 / 6 (5.256.000) blocks per year
|
|
23
|
+
|
|
24
|
+
function calculateCollatorApy(rewardsPerBlock, totalStake, nativeTokenDecimals) {
|
|
25
|
+
const rewardsPerChainPerYear = new _bignumber.default(rewardsPerBlock).times(blocksPerYear);
|
|
26
|
+
const rewardsPerSequencerPerYear = rewardsPerChainPerYear.div(sequencersPerAppchain);
|
|
27
|
+
const rewardsForStakersPerSequencerPerYear = rewardsPerSequencerPerYear.times(rewardsForStakers);
|
|
28
|
+
const formattedTotalStake = (0, _utils2.formatNumber)(totalStake.toString(), nativeTokenDecimals);
|
|
29
|
+
if (formattedTotalStake === '0') {
|
|
30
|
+
return new _bignumber.default(0);
|
|
31
|
+
}
|
|
32
|
+
return rewardsForStakersPerSequencerPerYear.times(100).div(formattedTotalStake);
|
|
33
|
+
}
|
|
34
|
+
async function getActiveCollators(api) {
|
|
35
|
+
const collatorAssignment = await api.query.tanssiCollatorAssignment.collatorContainerChain();
|
|
36
|
+
const activeCollatorContainerChain = collatorAssignment.toPrimitive();
|
|
37
|
+
const activeCollators = Object.values(activeCollatorContainerChain.containerChains || {}).flat().map(c => c.toString());
|
|
38
|
+
return activeCollators;
|
|
39
|
+
}
|
|
17
40
|
function perbillToPercentBn(perbill) {
|
|
18
41
|
const raw = new _bignumber.default((perbill === null || perbill === void 0 ? void 0 : perbill.toString()) || '0');
|
|
19
42
|
const bnPercent = raw.multipliedBy(new _bignumber.default(100)).div(new _bignumber.default(1000000000));
|
|
@@ -131,9 +154,18 @@ class TanssiNativeStakingPoolHandler extends _basePara.default {
|
|
|
131
154
|
async subscribePoolInfo(callback) {
|
|
132
155
|
let cancel = false;
|
|
133
156
|
const defaultCallback = async () => {
|
|
134
|
-
const
|
|
135
|
-
const activeConfig = (await
|
|
157
|
+
const chainApi = await this.substrateApi.isReady;
|
|
158
|
+
const activeConfig = (await chainApi.api.query.collatorConfiguration.activeConfig()).toPrimitive();
|
|
136
159
|
const maxCollators = activeConfig.maxCollators;
|
|
160
|
+
const chainsToRewardOpt = await chainApi.api.query.inflationRewards.chainsToReward();
|
|
161
|
+
const chainsToReward = chainsToRewardOpt.toPrimitive();
|
|
162
|
+
const rewardsPerBlock = chainsToReward.rewardsPerChain;
|
|
163
|
+
const formatRewardsPerBlock = (0, _utils2.formatNumber)(rewardsPerBlock, (0, _utils._getAssetDecimals)(this.nativeToken));
|
|
164
|
+
const candidates = await chainApi.api.query.pooledStaking.sortedEligibleCandidates();
|
|
165
|
+
const activeCollators = await getActiveCollators(chainApi.api);
|
|
166
|
+
const decimals = (0, _utils._getAssetDecimals)(this.nativeToken);
|
|
167
|
+
const apyList = candidates.filter(c => activeCollators.includes(c.candidate.toString())).map(c => calculateCollatorApy(formatRewardsPerBlock, new _bignumber.default(c.stake.toString()), decimals));
|
|
168
|
+
const totalApy = apyList.length ? _bignumber.default.max(...apyList).toNumber() : 0;
|
|
137
169
|
const data = {
|
|
138
170
|
...this.baseInfo,
|
|
139
171
|
type: this.type,
|
|
@@ -154,7 +186,8 @@ class TanssiNativeStakingPoolHandler extends _basePara.default {
|
|
|
154
186
|
},
|
|
155
187
|
era: 0,
|
|
156
188
|
eraTime: 6 / 3600,
|
|
157
|
-
unstakingPeriod: 12
|
|
189
|
+
unstakingPeriod: 12,
|
|
190
|
+
totalApy
|
|
158
191
|
}
|
|
159
192
|
};
|
|
160
193
|
if (!cancel) {
|
|
@@ -172,10 +205,10 @@ class TanssiNativeStakingPoolHandler extends _basePara.default {
|
|
|
172
205
|
/* Subscribe pool position */
|
|
173
206
|
|
|
174
207
|
async subscribePoolPosition(useAddresses, onUpdate) {
|
|
175
|
-
const substrateApi = this.substrateApi;
|
|
176
|
-
await substrateApi.isReady;
|
|
208
|
+
const substrateApi = await this.substrateApi.isReady;
|
|
177
209
|
let cancel = false;
|
|
178
210
|
const intervalIds = [];
|
|
211
|
+
const activeCollators = await getActiveCollators(substrateApi.api);
|
|
179
212
|
for (const delegator of useAddresses) {
|
|
180
213
|
const fetchAndUpdate = async () => {
|
|
181
214
|
if (cancel) {
|
|
@@ -229,7 +262,7 @@ class TanssiNativeStakingPoolHandler extends _basePara.default {
|
|
|
229
262
|
bnJoiningStake = bnJoiningStake.plus(joining);
|
|
230
263
|
bnCompoundingStake = bnCompoundingStake.plus(autoCompounding);
|
|
231
264
|
bnManualStake = bnManualStake.plus(manualRewards);
|
|
232
|
-
const [identity] = await (0,
|
|
265
|
+
const [identity] = await (0, _utils3.parseIdentity)(this.substrateIdentityApi, candidate);
|
|
233
266
|
nominations.push({
|
|
234
267
|
chain: this.chain,
|
|
235
268
|
status: _types.EarningStatus.EARNING_REWARD,
|
|
@@ -240,6 +273,19 @@ class TanssiNativeStakingPoolHandler extends _basePara.default {
|
|
|
240
273
|
validatorMinStake: '0'
|
|
241
274
|
});
|
|
242
275
|
}
|
|
276
|
+
let status;
|
|
277
|
+
if (nominations.length === 0) {
|
|
278
|
+
status = _types.EarningStatus.NOT_STAKING;
|
|
279
|
+
} else {
|
|
280
|
+
const activeCount = nominations.filter(n => activeCollators.includes(n.validatorAddress)).length;
|
|
281
|
+
if (activeCount === 0) {
|
|
282
|
+
status = _types.EarningStatus.WAITING;
|
|
283
|
+
} else if (activeCount < nominations.length) {
|
|
284
|
+
status = _types.EarningStatus.PARTIALLY_EARNING;
|
|
285
|
+
} else {
|
|
286
|
+
status = _types.EarningStatus.EARNING_REWARD;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
243
289
|
onUpdate({
|
|
244
290
|
...this.baseInfo,
|
|
245
291
|
type: this.type,
|
|
@@ -248,7 +294,7 @@ class TanssiNativeStakingPoolHandler extends _basePara.default {
|
|
|
248
294
|
totalStake: bnTotalStake.toString(),
|
|
249
295
|
activeStake: bnActiveStake.toString(),
|
|
250
296
|
unstakeBalance: bnUnstakeBalance.toString(),
|
|
251
|
-
status
|
|
297
|
+
status,
|
|
252
298
|
isBondedBefore: nominations.length > 0,
|
|
253
299
|
nominations,
|
|
254
300
|
unstakings: [],
|
|
@@ -300,6 +346,11 @@ class TanssiNativeStakingPoolHandler extends _basePara.default {
|
|
|
300
346
|
candidateSummariesMap[address] = summary.toJSON();
|
|
301
347
|
});
|
|
302
348
|
const candidateAddresses = candidates.map(c => c.candidate.toString());
|
|
349
|
+
const activeCollators = await getActiveCollators(chainApi.api);
|
|
350
|
+
const chainsToRewardOpt = await chainApi.api.query.inflationRewards.chainsToReward();
|
|
351
|
+
const chainsToReward = chainsToRewardOpt.toPrimitive();
|
|
352
|
+
const rewardsPerBlock = chainsToReward.rewardsPerChain;
|
|
353
|
+
const formatRewardsPerBlock = (0, _utils2.formatNumber)(rewardsPerBlock, (0, _utils._getAssetDecimals)(this.nativeToken));
|
|
303
354
|
const targets = await Promise.all(candidates.map(async c => {
|
|
304
355
|
const address = c.candidate.toString();
|
|
305
356
|
const totalStake = new _bignumber.default(c.stake.toString());
|
|
@@ -309,7 +360,11 @@ class TanssiNativeStakingPoolHandler extends _basePara.default {
|
|
|
309
360
|
const ownStakeInfo = ownStakesMap[address];
|
|
310
361
|
const ownStake = ownStakeInfo ? new _bignumber.default(ownStakeInfo.totalStake) : new _bignumber.default(0);
|
|
311
362
|
const otherStake = _bignumber.default.max(totalStake.minus(ownStake), 0);
|
|
312
|
-
const [identity, isReasonable] = await (0,
|
|
363
|
+
const [identity, isReasonable] = await (0, _utils3.parseIdentity)(this.substrateApi, address);
|
|
364
|
+
let apy = new _bignumber.default(0);
|
|
365
|
+
if (activeCollators.includes(address)) {
|
|
366
|
+
apy = calculateCollatorApy(formatRewardsPerBlock, totalStake, (0, _utils._getAssetDecimals)(this.nativeToken));
|
|
367
|
+
}
|
|
313
368
|
const validator = {
|
|
314
369
|
address,
|
|
315
370
|
chain: this.chain,
|
|
@@ -322,6 +377,7 @@ class TanssiNativeStakingPoolHandler extends _basePara.default {
|
|
|
322
377
|
blocked: false,
|
|
323
378
|
isVerified: isReasonable,
|
|
324
379
|
isCrowded: false,
|
|
380
|
+
expectedReturn: apy.toNumber(),
|
|
325
381
|
identity
|
|
326
382
|
};
|
|
327
383
|
return validator;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
|
|
9
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
10
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
11
|
+
|
|
12
|
+
class DeleteEarningData20251105 extends _Base.default {
|
|
13
|
+
async run() {
|
|
14
|
+
try {
|
|
15
|
+
await this.state.dbService.deleteYieldPoolInfo(['DOT___native_staking___polkadot', 'DOT___nomination_pool___polkadot']);
|
|
16
|
+
} catch (e) {
|
|
17
|
+
console.error(e);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.default = DeleteEarningData20251105;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
|
|
9
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
10
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
11
|
+
|
|
12
|
+
class MigrateTransactionHistoryBySymbol20251107 extends _Base.default {
|
|
13
|
+
async run() {
|
|
14
|
+
const state = this.state;
|
|
15
|
+
try {
|
|
16
|
+
const changeSlugsMap = {
|
|
17
|
+
'bittensor-LOCAL-ف': 'bittensor-LOCAL-ㄴ'
|
|
18
|
+
};
|
|
19
|
+
const allTxs = [];
|
|
20
|
+
await Promise.all(Object.entries(changeSlugsMap).map(async (_ref, i) => {
|
|
21
|
+
let [oldSlug, newSlug] = _ref;
|
|
22
|
+
const oldSlugSplit = oldSlug.split('-');
|
|
23
|
+
const oldChainSlug = oldSlugSplit[0];
|
|
24
|
+
const oldSymbolSlug = oldSlugSplit[2];
|
|
25
|
+
const newSlugSplit = newSlug.split('-');
|
|
26
|
+
const newSymbolSlug = newSlugSplit[2];
|
|
27
|
+
const filterTransactions = await state.dbService.stores.transaction.table.where({
|
|
28
|
+
chain: oldChainSlug
|
|
29
|
+
}).and(tx => {
|
|
30
|
+
var _tx$amount;
|
|
31
|
+
return ((_tx$amount = tx.amount) === null || _tx$amount === void 0 ? void 0 : _tx$amount.symbol) === oldSymbolSlug;
|
|
32
|
+
}).toArray();
|
|
33
|
+
if (filterTransactions.length > 0) {
|
|
34
|
+
for (const transaction of filterTransactions) {
|
|
35
|
+
if (transaction.amount && transaction.amount.symbol === oldSymbolSlug) {
|
|
36
|
+
transaction.amount.symbol = newSymbolSlug;
|
|
37
|
+
}
|
|
38
|
+
if (transaction.fee && transaction.fee.symbol === oldSymbolSlug) {
|
|
39
|
+
transaction.fee.symbol = newSymbolSlug;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
allTxs.push(...filterTransactions);
|
|
44
|
+
}));
|
|
45
|
+
await state.dbService.stores.transaction.table.bulkPut(allTxs);
|
|
46
|
+
} catch (e) {
|
|
47
|
+
this.logger.error(e);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.default = MigrateTransactionHistoryBySymbol20251107;
|