@subwallet/extension-base 1.2.28-0 → 1.2.29-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/core/substrate/xcm-parser.js +15 -6
- package/cjs/koni/background/handlers/Extension.js +3 -3
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/index.js +19 -13
- package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +14 -2
- package/cjs/services/balance-service/transfer/xcm/index.js +8 -13
- package/cjs/services/chain-service/constants.js +2 -1
- package/cjs/services/earning-service/handlers/lending/interlay.js +0 -2
- package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +1 -12
- package/cjs/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.js +2 -2
- package/cjs/services/migration-service/scripts/databases/MigrateAssetSetting.js +2 -2
- package/cjs/services/migration-service/scripts/index.js +2 -2
- package/cjs/services/swap-service/handler/hydradx-handler.js +1 -1
- package/core/substrate/xcm-parser.d.ts +3 -2
- package/core/substrate/xcm-parser.js +14 -6
- package/koni/background/handlers/Extension.js +3 -3
- package/package.json +7 -7
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/index.js +19 -13
- package/services/balance-service/helpers/subscribe/substrate/index.js +14 -2
- package/services/balance-service/transfer/xcm/index.js +8 -13
- package/services/chain-service/constants.d.ts +1 -0
- package/services/chain-service/constants.js +2 -1
- package/services/earning-service/handlers/lending/interlay.js +0 -2
- package/services/earning-service/handlers/liquid-staking/parallel.js +1 -12
- package/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.js +2 -2
- package/services/migration-service/scripts/databases/MigrateAssetSetting.js +2 -2
- package/services/migration-service/scripts/index.js +2 -2
- package/services/swap-service/handler/hydradx-handler.js +1 -1
|
@@ -9,6 +9,7 @@ exports._getXcmDestWeight = _getXcmDestWeight;
|
|
|
9
9
|
exports._getXcmMultiAssets = _getXcmMultiAssets;
|
|
10
10
|
exports._getXcmMultiLocation = _getXcmMultiLocation;
|
|
11
11
|
exports._getXcmUnstableWarning = _getXcmUnstableWarning;
|
|
12
|
+
exports._isMythosFromHydrationToMythos = _isMythosFromHydrationToMythos;
|
|
12
13
|
exports._isSnowBridgeXcm = _isSnowBridgeXcm;
|
|
13
14
|
exports._isXcmTransferUnstable = _isXcmTransferUnstable;
|
|
14
15
|
exports._isXcmWithinSameConsensus = _isXcmWithinSameConsensus;
|
|
@@ -60,8 +61,8 @@ function _getXcmMultiLocation(originChainInfo, destChainInfo, version, recipient
|
|
|
60
61
|
}
|
|
61
62
|
};
|
|
62
63
|
}
|
|
63
|
-
function _isXcmTransferUnstable(originChainInfo, destChainInfo) {
|
|
64
|
-
return !_isXcmWithinSameConsensus(originChainInfo, destChainInfo);
|
|
64
|
+
function _isXcmTransferUnstable(originChainInfo, destChainInfo, assetSlug) {
|
|
65
|
+
return !_isXcmWithinSameConsensus(originChainInfo, destChainInfo) || _isMythosFromHydrationToMythos(originChainInfo, destChainInfo, assetSlug);
|
|
65
66
|
}
|
|
66
67
|
function getAssetHubBridgeUnstableWarning(originChainInfo) {
|
|
67
68
|
switch (originChainInfo.slug) {
|
|
@@ -76,16 +77,21 @@ function getAssetHubBridgeUnstableWarning(originChainInfo) {
|
|
|
76
77
|
function getSnowBridgeUnstableWarning(originChainInfo) {
|
|
77
78
|
switch (originChainInfo.slug) {
|
|
78
79
|
case _chainList.COMMON_CHAIN_SLUGS.POLKADOT_ASSET_HUB:
|
|
79
|
-
return 'Cross-chain transfer of this token is not recommended as it is in beta, incurs a fee of 70
|
|
80
|
+
return 'Cross-chain transfer of this token is not recommended as it is in beta, incurs a fee of $70 and takes up to 1 hour to complete. Continue at your own risk';
|
|
80
81
|
case _chainList.COMMON_CHAIN_SLUGS.ETHEREUM:
|
|
81
|
-
return 'Cross-chain transfer of this token is not recommended as it is in beta, incurs a fee of 5
|
|
82
|
+
return 'Cross-chain transfer of this token is not recommended as it is in beta, incurs a fee of $5 and takes up to 1 hour to complete. Continue at your own risk';
|
|
82
83
|
default:
|
|
83
84
|
return 'Cross-chain transfer of this token is not recommended as it is in beta, incurs a high fee and takes up to 1 hour to complete. Continue at your own risk';
|
|
84
85
|
}
|
|
85
86
|
}
|
|
86
|
-
function
|
|
87
|
+
function getMythosFromHydrationToMythosWarning() {
|
|
88
|
+
return 'Cross-chain transfer of this token requires a high transaction fee. Do you want to continue?';
|
|
89
|
+
}
|
|
90
|
+
function _getXcmUnstableWarning(originChainInfo, destChainInfo, assetSlug) {
|
|
87
91
|
if (_isSnowBridgeXcm(originChainInfo, destChainInfo)) {
|
|
88
92
|
return getSnowBridgeUnstableWarning(originChainInfo);
|
|
93
|
+
} else if (_isMythosFromHydrationToMythos(originChainInfo, destChainInfo, assetSlug)) {
|
|
94
|
+
return getMythosFromHydrationToMythosWarning();
|
|
89
95
|
} else {
|
|
90
96
|
return getAssetHubBridgeUnstableWarning(originChainInfo);
|
|
91
97
|
}
|
|
@@ -96,6 +102,9 @@ function _isXcmWithinSameConsensus(originChainInfo, destChainInfo) {
|
|
|
96
102
|
function _isSnowBridgeXcm(originChainInfo, destChainInfo) {
|
|
97
103
|
return !_isXcmWithinSameConsensus(originChainInfo, destChainInfo) && ((0, _utils._isPureEvmChain)(originChainInfo) || (0, _utils._isPureEvmChain)(destChainInfo));
|
|
98
104
|
}
|
|
105
|
+
function _isMythosFromHydrationToMythos(originChainInfo, destChainInfo, assetSlug) {
|
|
106
|
+
return originChainInfo.slug === 'hydradx_main' && destChainInfo.slug === 'mythos' && assetSlug === 'hydradx_main-LOCAL-MYTH';
|
|
107
|
+
}
|
|
99
108
|
|
|
100
109
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
101
110
|
|
|
@@ -209,7 +218,7 @@ function _getAssetIdentifier(tokenInfo, version) {
|
|
|
209
218
|
if (!_assetIdentifier) {
|
|
210
219
|
throw new Error('Asset must have multilocation');
|
|
211
220
|
}
|
|
212
|
-
const assetIdentifier = ['statemint-LOCAL-KSM'].includes(tokenInfo.slug) // todo: hotfix for ksm statemint recheck all chain
|
|
221
|
+
const assetIdentifier = ['statemint-LOCAL-KSM', 'statemine-LOCAL-DOT'].includes(tokenInfo.slug) // todo: hotfix for ksm statemint recheck all chain
|
|
213
222
|
? _assetIdentifier : _adaptX1Interior(structuredClone(_assetIdentifier), version);
|
|
214
223
|
return version >= 4 // from V4, Concrete is removed
|
|
215
224
|
? assetIdentifier : {
|
|
@@ -1770,11 +1770,11 @@ class KoniExtension {
|
|
|
1770
1770
|
return this.#koniState.transactionService.generateBeforeHandleResponseErrors(errors);
|
|
1771
1771
|
}
|
|
1772
1772
|
const chainInfoMap = this.#koniState.getChainInfoMap();
|
|
1773
|
-
const
|
|
1773
|
+
const isSnowBridgeEvmTransfer = (0, _utils3._isPureEvmChain)(chainInfoMap[originNetworkKey]) && (0, _xcmParser._isSnowBridgeXcm)(chainInfoMap[originNetworkKey], chainInfoMap[destinationNetworkKey]);
|
|
1774
1774
|
let additionalValidator;
|
|
1775
1775
|
let eventsHandler;
|
|
1776
1776
|
if (fromKeyPair && destinationTokenInfo) {
|
|
1777
|
-
if (
|
|
1777
|
+
if (isSnowBridgeEvmTransfer) {
|
|
1778
1778
|
const evmApi = this.#koniState.getEvmApi(originNetworkKey);
|
|
1779
1779
|
extrinsic = await (0, _xcm.createSnowBridgeExtrinsic)({
|
|
1780
1780
|
destinationTokenInfo,
|
|
@@ -1844,7 +1844,7 @@ class KoniExtension {
|
|
|
1844
1844
|
transaction: extrinsic,
|
|
1845
1845
|
data: inputData,
|
|
1846
1846
|
extrinsicType: _KoniTypes.ExtrinsicType.TRANSFER_XCM,
|
|
1847
|
-
chainType: !
|
|
1847
|
+
chainType: !isSnowBridgeEvmTransfer ? _KoniTypes.ChainType.SUBSTRATE : _KoniTypes.ChainType.EVM,
|
|
1848
1848
|
transferNativeAmount: (0, _utils3._isNativeToken)(originTokenInfo) ? value : '0',
|
|
1849
1849
|
ignoreWarnings: inputData.transferAll,
|
|
1850
1850
|
isTransferAll: inputData.transferAll,
|
package/cjs/packageInfo.js
CHANGED
|
@@ -78,6 +78,21 @@ const filterAddress = (addresses, chainInfo) => {
|
|
|
78
78
|
return [fetchList, [...unfetchList, ...evmAddresses]];
|
|
79
79
|
}
|
|
80
80
|
};
|
|
81
|
+
const handleUnsupportedOrPendingAddresses = (addresses, chainSlug, chainAssetMap, state, callback) => {
|
|
82
|
+
const tokens = (0, _utils2.filterAssetsByChainAndType)(chainAssetMap, chainSlug, [_types._AssetType.NATIVE, _types._AssetType.ERC20, _types._AssetType.PSP22, _types._AssetType.LOCAL, _types._AssetType.GRC20, _types._AssetType.VFT]);
|
|
83
|
+
const now = new Date().getTime();
|
|
84
|
+
Object.values(tokens).forEach(token => {
|
|
85
|
+
const items = addresses.map(address => ({
|
|
86
|
+
address,
|
|
87
|
+
tokenSlug: token.slug,
|
|
88
|
+
free: '0',
|
|
89
|
+
locked: '0',
|
|
90
|
+
state,
|
|
91
|
+
timestamp: now
|
|
92
|
+
}));
|
|
93
|
+
callback(items);
|
|
94
|
+
});
|
|
95
|
+
};
|
|
81
96
|
|
|
82
97
|
// main subscription, use for multiple chains, multiple addresses and multiple tokens
|
|
83
98
|
function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoMap, substrateApiMap, evmApiMap, callback, extrinsicType) {
|
|
@@ -96,19 +111,7 @@ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoM
|
|
|
96
111
|
const chainSlug = chainInfo.slug;
|
|
97
112
|
const [useAddresses, notSupportAddresses] = filterAddress(addresses, chainInfo);
|
|
98
113
|
if (notSupportAddresses.length) {
|
|
99
|
-
|
|
100
|
-
const now = new Date().getTime();
|
|
101
|
-
Object.values(tokens).forEach(token => {
|
|
102
|
-
const items = notSupportAddresses.map(address => ({
|
|
103
|
-
address,
|
|
104
|
-
tokenSlug: token.slug,
|
|
105
|
-
free: '0',
|
|
106
|
-
locked: '0',
|
|
107
|
-
state: _KoniTypes.APIItemState.NOT_SUPPORT,
|
|
108
|
-
timestamp: now
|
|
109
|
-
}));
|
|
110
|
-
callback(items);
|
|
111
|
-
});
|
|
114
|
+
handleUnsupportedOrPendingAddresses(notSupportAddresses, chainSlug, chainAssetMap, _KoniTypes.APIItemState.NOT_SUPPORT, callback);
|
|
112
115
|
}
|
|
113
116
|
const evmApi = evmApiMap[chainSlug];
|
|
114
117
|
if ((0, _utils._isPureEvmChain)(chainInfo)) {
|
|
@@ -120,6 +123,9 @@ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoM
|
|
|
120
123
|
evmApi
|
|
121
124
|
});
|
|
122
125
|
}
|
|
126
|
+
if (!substrateApiMap[chainSlug].isApiReady) {
|
|
127
|
+
handleUnsupportedOrPendingAddresses(useAddresses, chainSlug, chainAssetMap, _KoniTypes.APIItemState.PENDING, callback);
|
|
128
|
+
}
|
|
123
129
|
const substrateApi = await substrateApiMap[chainSlug].isReady;
|
|
124
130
|
return (0, _substrate.subscribeSubstrateBalance)(useAddresses, chainInfo, chainAssetMap, substrateApi, evmApi, callback, extrinsicType);
|
|
125
131
|
});
|
|
@@ -114,7 +114,6 @@ const subscribeSubstrateBalance = async (addresses, chainInfo, assetMap, substra
|
|
|
114
114
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
115
115
|
exports.subscribeSubstrateBalance = subscribeSubstrateBalance;
|
|
116
116
|
const subscribeWithSystemAccountPallet = async _ref => {
|
|
117
|
-
var _substrateApi$api$tx, _substrateApi$api$tx$;
|
|
118
117
|
let {
|
|
119
118
|
addresses,
|
|
120
119
|
callback,
|
|
@@ -124,7 +123,7 @@ const subscribeWithSystemAccountPallet = async _ref => {
|
|
|
124
123
|
} = _ref;
|
|
125
124
|
const systemAccountKey = 'query_system_account';
|
|
126
125
|
const poolMembersKey = 'query_nominationPools_poolMembers';
|
|
127
|
-
const isNominationPoolMigrated =
|
|
126
|
+
const isNominationPoolMigrated = await checkNominationPoolCompleteMigrated(substrateApi);
|
|
128
127
|
const params = [{
|
|
129
128
|
section: 'query',
|
|
130
129
|
module: systemAccountKey.split('_')[1],
|
|
@@ -167,6 +166,19 @@ const subscribeWithSystemAccountPallet = async _ref => {
|
|
|
167
166
|
subscription.unsubscribe();
|
|
168
167
|
};
|
|
169
168
|
};
|
|
169
|
+
const checkNominationPoolCompleteMigrated = async substrateApi => {
|
|
170
|
+
if (!substrateApi.api.tx.nominationPools || !substrateApi.api.query.staking) {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
const isNominationPoolMigrated = !!substrateApi.api.tx.nominationPools.migrateDelegation && !!substrateApi.api.query.staking.counterForVirtualStakers && !!substrateApi.api.query.staking.virtualStakers;
|
|
174
|
+
if (!isNominationPoolMigrated) {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
const [nominationPoolCounterRaw, nominationPoolInfoRaw] = await Promise.all([substrateApi.api.query.staking.counterForVirtualStakers(), substrateApi.api.query.staking.virtualStakers.entries()]);
|
|
178
|
+
const nominationPoolCounter = nominationPoolCounterRaw.toPrimitive();
|
|
179
|
+
const nominationPoolInfoLength = nominationPoolInfoRaw.length;
|
|
180
|
+
return nominationPoolCounter !== 0 && nominationPoolInfoLength !== 0;
|
|
181
|
+
};
|
|
170
182
|
const subscribeForeignAssetBalance = async _ref2 => {
|
|
171
183
|
let {
|
|
172
184
|
addresses,
|
|
@@ -49,19 +49,14 @@ const createXcmExtrinsic = async _ref2 => {
|
|
|
49
49
|
const destinationChainInfo = chainInfoMap[destinationTokenInfo.originChain];
|
|
50
50
|
const chainApi = await substrateApi.isReady;
|
|
51
51
|
const api = chainApi.api;
|
|
52
|
-
|
|
53
|
-
if (_constants._XCM_CHAIN_GROUP.polkadotXcm.includes(originTokenInfo.originChain)) {
|
|
54
|
-
|
|
55
|
-
extrinsic = (0, _xTokens.getExtrinsicByXtokensPallet)(originTokenInfo, originChainInfo, destinationChainInfo, recipient, sendingValue, api);
|
|
56
|
-
} else {
|
|
57
|
-
extrinsic = (0, _polkadotXcm.getExtrinsicByPolkadotXcmPallet)(originTokenInfo, originChainInfo, destinationChainInfo, recipient, sendingValue, api);
|
|
58
|
-
}
|
|
59
|
-
} else if (_constants._XCM_CHAIN_GROUP.xcmPallet.includes(originTokenInfo.originChain)) {
|
|
60
|
-
extrinsic = (0, _xcmPallet.getExtrinsicByXcmPalletPallet)(originTokenInfo, originChainInfo, destinationChainInfo, recipient, sendingValue, api);
|
|
61
|
-
} else {
|
|
62
|
-
extrinsic = (0, _xTokens.getExtrinsicByXtokensPallet)(originTokenInfo, originChainInfo, destinationChainInfo, recipient, sendingValue, api);
|
|
52
|
+
const polkadotXcmSpecialCases = _constants._XCM_CHAIN_GROUP.polkadotXcmSpecialCases.includes(originChainInfo.slug) && (0, _utils._isNativeToken)(originTokenInfo);
|
|
53
|
+
if (_constants._XCM_CHAIN_GROUP.polkadotXcm.includes(originTokenInfo.originChain) || polkadotXcmSpecialCases) {
|
|
54
|
+
return (0, _polkadotXcm.getExtrinsicByPolkadotXcmPallet)(originTokenInfo, originChainInfo, destinationChainInfo, recipient, sendingValue, api);
|
|
63
55
|
}
|
|
64
|
-
|
|
56
|
+
if (_constants._XCM_CHAIN_GROUP.xcmPallet.includes(originTokenInfo.originChain)) {
|
|
57
|
+
return (0, _xcmPallet.getExtrinsicByXcmPalletPallet)(originTokenInfo, originChainInfo, destinationChainInfo, recipient, sendingValue, api);
|
|
58
|
+
}
|
|
59
|
+
return (0, _xTokens.getExtrinsicByXtokensPallet)(originTokenInfo, originChainInfo, destinationChainInfo, recipient, sendingValue, api);
|
|
65
60
|
};
|
|
66
61
|
exports.createXcmExtrinsic = createXcmExtrinsic;
|
|
67
62
|
const getXcmMockTxFee = async (substrateApi, chainInfoMap, originTokenInfo, destinationTokenInfo) => {
|
|
@@ -69,7 +64,7 @@ const getXcmMockTxFee = async (substrateApi, chainInfoMap, originTokenInfo, dest
|
|
|
69
64
|
var _paymentInfo$partialF;
|
|
70
65
|
const destChainInfo = chainInfoMap[destinationTokenInfo.originChain];
|
|
71
66
|
const originChainInfo = chainInfoMap[originTokenInfo.originChain];
|
|
72
|
-
const address = '5DRewsYzhJqZXU3SRaWy1FSt5iDr875ao91aw5fjrJmDG4Ap';
|
|
67
|
+
const address = '5DRewsYzhJqZXU3SRaWy1FSt5iDr875ao91aw5fjrJmDG4Ap'; // todo: move this
|
|
73
68
|
|
|
74
69
|
// mock receiving account from sender
|
|
75
70
|
const recipient = !(0, _utilCrypto.isEthereumAddress)(address) && (0, _utils._isChainEvmCompatible)(destChainInfo) && !(0, _utils._isChainEvmCompatible)(originChainInfo) ? (0, _util.u8aToHex)((0, _utilCrypto.addressToEvm)(address)) : address;
|
|
@@ -283,7 +283,8 @@ const _DEFAULT_MANTA_ZK_CHAIN = 'calamari';
|
|
|
283
283
|
// XCM------------------------------------------------------------------------------------------------------------------
|
|
284
284
|
exports._DEFAULT_MANTA_ZK_CHAIN = _DEFAULT_MANTA_ZK_CHAIN;
|
|
285
285
|
const _XCM_CHAIN_GROUP = {
|
|
286
|
-
polkadotXcm: ['
|
|
286
|
+
polkadotXcm: ['statemine', 'statemint', 'equilibrium_parachain', 'rococo_assethub', 'mythos'],
|
|
287
|
+
polkadotXcmSpecialCases: ['astar', 'shiden'],
|
|
287
288
|
xcmPallet: ['polkadot', 'kusama', 'rococo']
|
|
288
289
|
// default is xTokens pallet
|
|
289
290
|
};
|
|
@@ -61,7 +61,6 @@ class InterlayLendingPoolHandler extends _base.default {
|
|
|
61
61
|
statistic: {
|
|
62
62
|
assetEarning: [{
|
|
63
63
|
slug: this.rewardAssets[0],
|
|
64
|
-
apr: 1.29,
|
|
65
64
|
exchangeRate: exchangeRate / decimals
|
|
66
65
|
}],
|
|
67
66
|
maxCandidatePerFarmer: 1,
|
|
@@ -71,7 +70,6 @@ class InterlayLendingPoolHandler extends _base.default {
|
|
|
71
70
|
defaultUnstake: '0',
|
|
72
71
|
fastUnstake: '0'
|
|
73
72
|
},
|
|
74
|
-
totalApr: 1.29,
|
|
75
73
|
tvl: '291890000000000'
|
|
76
74
|
}
|
|
77
75
|
};
|
|
@@ -46,7 +46,7 @@ class ParallelLiquidStakingPoolHandler extends _base.default {
|
|
|
46
46
|
|
|
47
47
|
async getPoolStat() {
|
|
48
48
|
const substrateApi = await this.substrateApi.isReady;
|
|
49
|
-
const [_exchangeRate,
|
|
49
|
+
const [_exchangeRate, _stakingLedgers] = await Promise.all([substrateApi.api.query.liquidStaking.exchangeRate(), substrateApi.api.query.liquidStaking.stakingLedgers.entries()]);
|
|
50
50
|
let tvl = _util.BN_ZERO;
|
|
51
51
|
for (const _stakingLedger of _stakingLedgers) {
|
|
52
52
|
const _ledger = _stakingLedger[1];
|
|
@@ -54,16 +54,7 @@ class ParallelLiquidStakingPoolHandler extends _base.default {
|
|
|
54
54
|
tvl = tvl.add(new _util.BN(ledger.total.toString()));
|
|
55
55
|
}
|
|
56
56
|
const exchangeRate = _exchangeRate.toPrimitive();
|
|
57
|
-
const currentBlockHeader = _currentBlockHeader.toPrimitive();
|
|
58
|
-
const currentTimestamp = _currentTimestamp.toPrimitive();
|
|
59
|
-
const beginBlock = currentBlockHeader.number - 24 * 60 * 60 / 6 * 14;
|
|
60
|
-
const _beginBlockHash = await substrateApi.api.rpc.chain.getBlockHash(beginBlock);
|
|
61
|
-
const beginBlockHash = _beginBlockHash.toString();
|
|
62
|
-
const [_beginTimestamp, _beginExchangeRate] = await Promise.all([substrateApi.api.query.timestamp.now.at(beginBlockHash), substrateApi.api.query.liquidStaking.exchangeRate.at(beginBlockHash)]);
|
|
63
|
-
const beginTimestamp = _beginTimestamp.toPrimitive();
|
|
64
|
-
const beginExchangeRate = _beginExchangeRate.toPrimitive();
|
|
65
57
|
const decimals = 10 ** this.rateDecimals;
|
|
66
|
-
const apy = (exchangeRate / beginExchangeRate) ** (365 * 24 * 60 * 60000 / (currentTimestamp - beginTimestamp)) - 1;
|
|
67
58
|
const minStake = substrateApi.api.consts.liquidStaking.minStake.toString();
|
|
68
59
|
const minUnstake = substrateApi.api.consts.liquidStaking.minUnstake.toString();
|
|
69
60
|
this.updateExchangeRate(exchangeRate);
|
|
@@ -77,7 +68,6 @@ class ParallelLiquidStakingPoolHandler extends _base.default {
|
|
|
77
68
|
statistic: {
|
|
78
69
|
assetEarning: [{
|
|
79
70
|
slug: this.rewardAssets[0],
|
|
80
|
-
apy: apy * 100,
|
|
81
71
|
exchangeRate: exchangeRate / decimals
|
|
82
72
|
}],
|
|
83
73
|
unstakingPeriod: 24 * 28,
|
|
@@ -88,7 +78,6 @@ class ParallelLiquidStakingPoolHandler extends _base.default {
|
|
|
88
78
|
defaultUnstake: minUnstake,
|
|
89
79
|
fastUnstake: '0'
|
|
90
80
|
},
|
|
91
|
-
totalApy: apy * 100,
|
|
92
81
|
tvl: tvl.toString()
|
|
93
82
|
}
|
|
94
83
|
};
|
|
@@ -14,8 +14,8 @@ class MigrateTransactionHistoryBySymbol extends _Base.default {
|
|
|
14
14
|
const state = this.state;
|
|
15
15
|
try {
|
|
16
16
|
const changeSlugsMap = {
|
|
17
|
-
'
|
|
18
|
-
'
|
|
17
|
+
'polygon-NATIVE-MATIC': 'polygon-NATIVE-POL',
|
|
18
|
+
'5irechain_mainnet-NATIVE-5IRE': '5irechain_mainnet-NATIVE-5ire'
|
|
19
19
|
};
|
|
20
20
|
const allTxs = [];
|
|
21
21
|
await Promise.all(Object.entries(changeSlugsMap).map(async (_ref, i) => {
|
|
@@ -13,8 +13,8 @@ class MigrateAssetSetting extends _Base.default {
|
|
|
13
13
|
async run() {
|
|
14
14
|
try {
|
|
15
15
|
const changeSlugsMap = {
|
|
16
|
-
'
|
|
17
|
-
'
|
|
16
|
+
'polygon-NATIVE-MATIC': 'polygon-NATIVE-POL',
|
|
17
|
+
'5irechain_mainnet-NATIVE-5IRE': '5irechain_mainnet-NATIVE-5ire'
|
|
18
18
|
};
|
|
19
19
|
const assetSetting = await this.state.chainService.getAssetSettings();
|
|
20
20
|
const migratedAssetSetting = {};
|
|
@@ -61,8 +61,8 @@ var _default = {
|
|
|
61
61
|
'1.1.33-01': _MigrateLedgerAccountV.default,
|
|
62
62
|
'1.1.41-01': _DeleteChainStaking.default,
|
|
63
63
|
'1.1.46-01': _AutoEnableSomeTokens.default,
|
|
64
|
-
'1.
|
|
65
|
-
'1.
|
|
64
|
+
'1.2.28-01': _MigrateAssetSetting.default,
|
|
65
|
+
'1.2.28-02': _MigrateTransactionHistoryBySymbol.default,
|
|
66
66
|
'1.2.69-01': _MigrateRemoveGenesisHash.default,
|
|
67
67
|
'1.2.13-01': _ReloadMetadata.default,
|
|
68
68
|
'1.2.14-01': _ClearMetadataDatabase.default
|
|
@@ -256,7 +256,7 @@ class HydradxHandler {
|
|
|
256
256
|
|
|
257
257
|
switch (defaultError) {
|
|
258
258
|
case _sdk.PoolError.InsufficientTradingAmount:
|
|
259
|
-
return new _SwapError.SwapError(_swap2.SwapErrorType.
|
|
259
|
+
return new _SwapError.SwapError(_swap2.SwapErrorType.NOT_MEET_MIN_SWAP);
|
|
260
260
|
case _sdk.PoolError.TradeNotAllowed:
|
|
261
261
|
return new _SwapError.SwapError(_swap2.SwapErrorType.ERROR_FETCHING_QUOTE);
|
|
262
262
|
case _sdk.PoolError.MaxInRatioExceeded:
|
|
@@ -47,8 +47,9 @@ export declare function _getXcmMultiLocation(originChainInfo: _ChainInfo, destCh
|
|
|
47
47
|
interior: unknown;
|
|
48
48
|
};
|
|
49
49
|
};
|
|
50
|
-
export declare function _isXcmTransferUnstable(originChainInfo: _ChainInfo, destChainInfo: _ChainInfo): boolean;
|
|
51
|
-
export declare function _getXcmUnstableWarning(originChainInfo: _ChainInfo, destChainInfo: _ChainInfo): string;
|
|
50
|
+
export declare function _isXcmTransferUnstable(originChainInfo: _ChainInfo, destChainInfo: _ChainInfo, assetSlug: string): boolean;
|
|
51
|
+
export declare function _getXcmUnstableWarning(originChainInfo: _ChainInfo, destChainInfo: _ChainInfo, assetSlug: string): string;
|
|
52
52
|
export declare function _isXcmWithinSameConsensus(originChainInfo: _ChainInfo, destChainInfo: _ChainInfo): boolean;
|
|
53
53
|
export declare function _isSnowBridgeXcm(originChainInfo: _ChainInfo, destChainInfo: _ChainInfo): boolean;
|
|
54
|
+
export declare function _isMythosFromHydrationToMythos(originChainInfo: _ChainInfo, destChainInfo: _ChainInfo, assetSlug: string): boolean;
|
|
54
55
|
export declare function _adaptX1Interior(assetIdentifier: Record<string, any>, version: number): Record<string, any>;
|
|
@@ -46,8 +46,8 @@ export function _getXcmMultiLocation(originChainInfo, destChainInfo, version, re
|
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
48
|
}
|
|
49
|
-
export function _isXcmTransferUnstable(originChainInfo, destChainInfo) {
|
|
50
|
-
return !_isXcmWithinSameConsensus(originChainInfo, destChainInfo);
|
|
49
|
+
export function _isXcmTransferUnstable(originChainInfo, destChainInfo, assetSlug) {
|
|
50
|
+
return !_isXcmWithinSameConsensus(originChainInfo, destChainInfo) || _isMythosFromHydrationToMythos(originChainInfo, destChainInfo, assetSlug);
|
|
51
51
|
}
|
|
52
52
|
function getAssetHubBridgeUnstableWarning(originChainInfo) {
|
|
53
53
|
switch (originChainInfo.slug) {
|
|
@@ -62,16 +62,21 @@ function getAssetHubBridgeUnstableWarning(originChainInfo) {
|
|
|
62
62
|
function getSnowBridgeUnstableWarning(originChainInfo) {
|
|
63
63
|
switch (originChainInfo.slug) {
|
|
64
64
|
case COMMON_CHAIN_SLUGS.POLKADOT_ASSET_HUB:
|
|
65
|
-
return 'Cross-chain transfer of this token is not recommended as it is in beta, incurs a fee of 70
|
|
65
|
+
return 'Cross-chain transfer of this token is not recommended as it is in beta, incurs a fee of $70 and takes up to 1 hour to complete. Continue at your own risk';
|
|
66
66
|
case COMMON_CHAIN_SLUGS.ETHEREUM:
|
|
67
|
-
return 'Cross-chain transfer of this token is not recommended as it is in beta, incurs a fee of 5
|
|
67
|
+
return 'Cross-chain transfer of this token is not recommended as it is in beta, incurs a fee of $5 and takes up to 1 hour to complete. Continue at your own risk';
|
|
68
68
|
default:
|
|
69
69
|
return 'Cross-chain transfer of this token is not recommended as it is in beta, incurs a high fee and takes up to 1 hour to complete. Continue at your own risk';
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
|
|
72
|
+
function getMythosFromHydrationToMythosWarning() {
|
|
73
|
+
return 'Cross-chain transfer of this token requires a high transaction fee. Do you want to continue?';
|
|
74
|
+
}
|
|
75
|
+
export function _getXcmUnstableWarning(originChainInfo, destChainInfo, assetSlug) {
|
|
73
76
|
if (_isSnowBridgeXcm(originChainInfo, destChainInfo)) {
|
|
74
77
|
return getSnowBridgeUnstableWarning(originChainInfo);
|
|
78
|
+
} else if (_isMythosFromHydrationToMythos(originChainInfo, destChainInfo, assetSlug)) {
|
|
79
|
+
return getMythosFromHydrationToMythosWarning();
|
|
75
80
|
} else {
|
|
76
81
|
return getAssetHubBridgeUnstableWarning(originChainInfo);
|
|
77
82
|
}
|
|
@@ -82,6 +87,9 @@ export function _isXcmWithinSameConsensus(originChainInfo, destChainInfo) {
|
|
|
82
87
|
export function _isSnowBridgeXcm(originChainInfo, destChainInfo) {
|
|
83
88
|
return !_isXcmWithinSameConsensus(originChainInfo, destChainInfo) && (_isPureEvmChain(originChainInfo) || _isPureEvmChain(destChainInfo));
|
|
84
89
|
}
|
|
90
|
+
export function _isMythosFromHydrationToMythos(originChainInfo, destChainInfo, assetSlug) {
|
|
91
|
+
return originChainInfo.slug === 'hydradx_main' && destChainInfo.slug === 'mythos' && assetSlug === 'hydradx_main-LOCAL-MYTH';
|
|
92
|
+
}
|
|
85
93
|
|
|
86
94
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
87
95
|
|
|
@@ -195,7 +203,7 @@ function _getAssetIdentifier(tokenInfo, version) {
|
|
|
195
203
|
if (!_assetIdentifier) {
|
|
196
204
|
throw new Error('Asset must have multilocation');
|
|
197
205
|
}
|
|
198
|
-
const assetIdentifier = ['statemint-LOCAL-KSM'].includes(tokenInfo.slug) // todo: hotfix for ksm statemint recheck all chain
|
|
206
|
+
const assetIdentifier = ['statemint-LOCAL-KSM', 'statemine-LOCAL-DOT'].includes(tokenInfo.slug) // todo: hotfix for ksm statemint recheck all chain
|
|
199
207
|
? _assetIdentifier : _adaptX1Interior(structuredClone(_assetIdentifier), version);
|
|
200
208
|
return version >= 4 // from V4, Concrete is removed
|
|
201
209
|
? assetIdentifier : {
|
|
@@ -1711,11 +1711,11 @@ export default class KoniExtension {
|
|
|
1711
1711
|
return this.#koniState.transactionService.generateBeforeHandleResponseErrors(errors);
|
|
1712
1712
|
}
|
|
1713
1713
|
const chainInfoMap = this.#koniState.getChainInfoMap();
|
|
1714
|
-
const
|
|
1714
|
+
const isSnowBridgeEvmTransfer = _isPureEvmChain(chainInfoMap[originNetworkKey]) && _isSnowBridgeXcm(chainInfoMap[originNetworkKey], chainInfoMap[destinationNetworkKey]);
|
|
1715
1715
|
let additionalValidator;
|
|
1716
1716
|
let eventsHandler;
|
|
1717
1717
|
if (fromKeyPair && destinationTokenInfo) {
|
|
1718
|
-
if (
|
|
1718
|
+
if (isSnowBridgeEvmTransfer) {
|
|
1719
1719
|
const evmApi = this.#koniState.getEvmApi(originNetworkKey);
|
|
1720
1720
|
extrinsic = await createSnowBridgeExtrinsic({
|
|
1721
1721
|
destinationTokenInfo,
|
|
@@ -1785,7 +1785,7 @@ export default class KoniExtension {
|
|
|
1785
1785
|
transaction: extrinsic,
|
|
1786
1786
|
data: inputData,
|
|
1787
1787
|
extrinsicType: ExtrinsicType.TRANSFER_XCM,
|
|
1788
|
-
chainType: !
|
|
1788
|
+
chainType: !isSnowBridgeEvmTransfer ? ChainType.SUBSTRATE : ChainType.EVM,
|
|
1789
1789
|
transferNativeAmount: _isNativeToken(originTokenInfo) ? value : '0',
|
|
1790
1790
|
ignoreWarnings: inputData.transferAll,
|
|
1791
1791
|
isTransferAll: inputData.transferAll,
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"./cjs/detectPackage.js"
|
|
18
18
|
],
|
|
19
19
|
"type": "module",
|
|
20
|
-
"version": "1.2.
|
|
20
|
+
"version": "1.2.29-0",
|
|
21
21
|
"main": "./cjs/index.js",
|
|
22
22
|
"module": "./index.js",
|
|
23
23
|
"types": "./index.d.ts",
|
|
@@ -2043,7 +2043,7 @@
|
|
|
2043
2043
|
"@ethereumjs/common": "^4.1.0",
|
|
2044
2044
|
"@ethereumjs/tx": "^5.1.0",
|
|
2045
2045
|
"@ethersproject/abi": "^5.7.0",
|
|
2046
|
-
"@galacticcouncil/sdk": "^2.
|
|
2046
|
+
"@galacticcouncil/sdk": "^4.2.0",
|
|
2047
2047
|
"@gear-js/api": "^0.38.1",
|
|
2048
2048
|
"@json-rpc-tools/utils": "^1.7.6",
|
|
2049
2049
|
"@metamask/eth-sig-util": "^7.0.3",
|
|
@@ -2070,11 +2070,11 @@
|
|
|
2070
2070
|
"@reduxjs/toolkit": "^1.9.1",
|
|
2071
2071
|
"@sora-substrate/type-definitions": "^1.17.7",
|
|
2072
2072
|
"@substrate/connect": "^0.8.9",
|
|
2073
|
-
"@subwallet/chain-list": "0.2.
|
|
2074
|
-
"@subwallet/extension-base": "^1.2.
|
|
2075
|
-
"@subwallet/extension-chains": "^1.2.
|
|
2076
|
-
"@subwallet/extension-dapp": "^1.2.
|
|
2077
|
-
"@subwallet/extension-inject": "^1.2.
|
|
2073
|
+
"@subwallet/chain-list": "0.2.86",
|
|
2074
|
+
"@subwallet/extension-base": "^1.2.29-0",
|
|
2075
|
+
"@subwallet/extension-chains": "^1.2.29-0",
|
|
2076
|
+
"@subwallet/extension-dapp": "^1.2.29-0",
|
|
2077
|
+
"@subwallet/extension-inject": "^1.2.29-0",
|
|
2078
2078
|
"@subwallet/keyring": "^0.1.6",
|
|
2079
2079
|
"@subwallet/ui-keyring": "^0.1.6",
|
|
2080
2080
|
"@walletconnect/keyvaluestorage": "^1.1.1",
|
package/packageInfo.js
CHANGED
|
@@ -7,5 +7,5 @@ export const packageInfo = {
|
|
|
7
7
|
name: '@subwallet/extension-base',
|
|
8
8
|
path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
|
|
9
9
|
type: 'esm',
|
|
10
|
-
version: '1.2.
|
|
10
|
+
version: '1.2.29-0'
|
|
11
11
|
};
|
|
@@ -70,6 +70,21 @@ const filterAddress = (addresses, chainInfo) => {
|
|
|
70
70
|
return [fetchList, [...unfetchList, ...evmAddresses]];
|
|
71
71
|
}
|
|
72
72
|
};
|
|
73
|
+
const handleUnsupportedOrPendingAddresses = (addresses, chainSlug, chainAssetMap, state, callback) => {
|
|
74
|
+
const tokens = filterAssetsByChainAndType(chainAssetMap, chainSlug, [_AssetType.NATIVE, _AssetType.ERC20, _AssetType.PSP22, _AssetType.LOCAL, _AssetType.GRC20, _AssetType.VFT]);
|
|
75
|
+
const now = new Date().getTime();
|
|
76
|
+
Object.values(tokens).forEach(token => {
|
|
77
|
+
const items = addresses.map(address => ({
|
|
78
|
+
address,
|
|
79
|
+
tokenSlug: token.slug,
|
|
80
|
+
free: '0',
|
|
81
|
+
locked: '0',
|
|
82
|
+
state,
|
|
83
|
+
timestamp: now
|
|
84
|
+
}));
|
|
85
|
+
callback(items);
|
|
86
|
+
});
|
|
87
|
+
};
|
|
73
88
|
|
|
74
89
|
// main subscription, use for multiple chains, multiple addresses and multiple tokens
|
|
75
90
|
export function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoMap, substrateApiMap, evmApiMap, callback, extrinsicType) {
|
|
@@ -82,19 +97,7 @@ export function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _cha
|
|
|
82
97
|
const chainSlug = chainInfo.slug;
|
|
83
98
|
const [useAddresses, notSupportAddresses] = filterAddress(addresses, chainInfo);
|
|
84
99
|
if (notSupportAddresses.length) {
|
|
85
|
-
|
|
86
|
-
const now = new Date().getTime();
|
|
87
|
-
Object.values(tokens).forEach(token => {
|
|
88
|
-
const items = notSupportAddresses.map(address => ({
|
|
89
|
-
address,
|
|
90
|
-
tokenSlug: token.slug,
|
|
91
|
-
free: '0',
|
|
92
|
-
locked: '0',
|
|
93
|
-
state: APIItemState.NOT_SUPPORT,
|
|
94
|
-
timestamp: now
|
|
95
|
-
}));
|
|
96
|
-
callback(items);
|
|
97
|
-
});
|
|
100
|
+
handleUnsupportedOrPendingAddresses(notSupportAddresses, chainSlug, chainAssetMap, APIItemState.NOT_SUPPORT, callback);
|
|
98
101
|
}
|
|
99
102
|
const evmApi = evmApiMap[chainSlug];
|
|
100
103
|
if (_isPureEvmChain(chainInfo)) {
|
|
@@ -106,6 +109,9 @@ export function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _cha
|
|
|
106
109
|
evmApi
|
|
107
110
|
});
|
|
108
111
|
}
|
|
112
|
+
if (!substrateApiMap[chainSlug].isApiReady) {
|
|
113
|
+
handleUnsupportedOrPendingAddresses(useAddresses, chainSlug, chainAssetMap, APIItemState.PENDING, callback);
|
|
114
|
+
}
|
|
109
115
|
const substrateApi = await substrateApiMap[chainSlug].isReady;
|
|
110
116
|
return subscribeSubstrateBalance(useAddresses, chainInfo, chainAssetMap, substrateApi, evmApi, callback, extrinsicType);
|
|
111
117
|
});
|
|
@@ -112,10 +112,9 @@ const subscribeWithSystemAccountPallet = async ({
|
|
|
112
112
|
extrinsicType,
|
|
113
113
|
substrateApi
|
|
114
114
|
}) => {
|
|
115
|
-
var _substrateApi$api$tx, _substrateApi$api$tx$;
|
|
116
115
|
const systemAccountKey = 'query_system_account';
|
|
117
116
|
const poolMembersKey = 'query_nominationPools_poolMembers';
|
|
118
|
-
const isNominationPoolMigrated =
|
|
117
|
+
const isNominationPoolMigrated = await checkNominationPoolCompleteMigrated(substrateApi);
|
|
119
118
|
const params = [{
|
|
120
119
|
section: 'query',
|
|
121
120
|
module: systemAccountKey.split('_')[1],
|
|
@@ -158,6 +157,19 @@ const subscribeWithSystemAccountPallet = async ({
|
|
|
158
157
|
subscription.unsubscribe();
|
|
159
158
|
};
|
|
160
159
|
};
|
|
160
|
+
const checkNominationPoolCompleteMigrated = async substrateApi => {
|
|
161
|
+
if (!substrateApi.api.tx.nominationPools || !substrateApi.api.query.staking) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
const isNominationPoolMigrated = !!substrateApi.api.tx.nominationPools.migrateDelegation && !!substrateApi.api.query.staking.counterForVirtualStakers && !!substrateApi.api.query.staking.virtualStakers;
|
|
165
|
+
if (!isNominationPoolMigrated) {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
const [nominationPoolCounterRaw, nominationPoolInfoRaw] = await Promise.all([substrateApi.api.query.staking.counterForVirtualStakers(), substrateApi.api.query.staking.virtualStakers.entries()]);
|
|
169
|
+
const nominationPoolCounter = nominationPoolCounterRaw.toPrimitive();
|
|
170
|
+
const nominationPoolInfoLength = nominationPoolInfoRaw.length;
|
|
171
|
+
return nominationPoolCounter !== 0 && nominationPoolInfoLength !== 0;
|
|
172
|
+
};
|
|
161
173
|
const subscribeForeignAssetBalance = async ({
|
|
162
174
|
addresses,
|
|
163
175
|
assetMap,
|
|
@@ -39,26 +39,21 @@ export const createXcmExtrinsic = async ({
|
|
|
39
39
|
const destinationChainInfo = chainInfoMap[destinationTokenInfo.originChain];
|
|
40
40
|
const chainApi = await substrateApi.isReady;
|
|
41
41
|
const api = chainApi.api;
|
|
42
|
-
|
|
43
|
-
if (_XCM_CHAIN_GROUP.polkadotXcm.includes(originTokenInfo.originChain)) {
|
|
44
|
-
|
|
45
|
-
extrinsic = getExtrinsicByXtokensPallet(originTokenInfo, originChainInfo, destinationChainInfo, recipient, sendingValue, api);
|
|
46
|
-
} else {
|
|
47
|
-
extrinsic = getExtrinsicByPolkadotXcmPallet(originTokenInfo, originChainInfo, destinationChainInfo, recipient, sendingValue, api);
|
|
48
|
-
}
|
|
49
|
-
} else if (_XCM_CHAIN_GROUP.xcmPallet.includes(originTokenInfo.originChain)) {
|
|
50
|
-
extrinsic = getExtrinsicByXcmPalletPallet(originTokenInfo, originChainInfo, destinationChainInfo, recipient, sendingValue, api);
|
|
51
|
-
} else {
|
|
52
|
-
extrinsic = getExtrinsicByXtokensPallet(originTokenInfo, originChainInfo, destinationChainInfo, recipient, sendingValue, api);
|
|
42
|
+
const polkadotXcmSpecialCases = _XCM_CHAIN_GROUP.polkadotXcmSpecialCases.includes(originChainInfo.slug) && _isNativeToken(originTokenInfo);
|
|
43
|
+
if (_XCM_CHAIN_GROUP.polkadotXcm.includes(originTokenInfo.originChain) || polkadotXcmSpecialCases) {
|
|
44
|
+
return getExtrinsicByPolkadotXcmPallet(originTokenInfo, originChainInfo, destinationChainInfo, recipient, sendingValue, api);
|
|
53
45
|
}
|
|
54
|
-
|
|
46
|
+
if (_XCM_CHAIN_GROUP.xcmPallet.includes(originTokenInfo.originChain)) {
|
|
47
|
+
return getExtrinsicByXcmPalletPallet(originTokenInfo, originChainInfo, destinationChainInfo, recipient, sendingValue, api);
|
|
48
|
+
}
|
|
49
|
+
return getExtrinsicByXtokensPallet(originTokenInfo, originChainInfo, destinationChainInfo, recipient, sendingValue, api);
|
|
55
50
|
};
|
|
56
51
|
export const getXcmMockTxFee = async (substrateApi, chainInfoMap, originTokenInfo, destinationTokenInfo) => {
|
|
57
52
|
try {
|
|
58
53
|
var _paymentInfo$partialF;
|
|
59
54
|
const destChainInfo = chainInfoMap[destinationTokenInfo.originChain];
|
|
60
55
|
const originChainInfo = chainInfoMap[originTokenInfo.originChain];
|
|
61
|
-
const address = '5DRewsYzhJqZXU3SRaWy1FSt5iDr875ao91aw5fjrJmDG4Ap';
|
|
56
|
+
const address = '5DRewsYzhJqZXU3SRaWy1FSt5iDr875ao91aw5fjrJmDG4Ap'; // todo: move this
|
|
62
57
|
|
|
63
58
|
// mock receiving account from sender
|
|
64
59
|
const recipient = !isEthereumAddress(address) && _isChainEvmCompatible(destChainInfo) && !_isChainEvmCompatible(originChainInfo) ? u8aToHex(addressToEvm(address)) : address;
|
|
@@ -76,6 +76,7 @@ export declare const _ZK_ASSET_PREFIX = "zk";
|
|
|
76
76
|
export declare const _DEFAULT_MANTA_ZK_CHAIN = "calamari";
|
|
77
77
|
export declare const _XCM_CHAIN_GROUP: {
|
|
78
78
|
polkadotXcm: string[];
|
|
79
|
+
polkadotXcmSpecialCases: string[];
|
|
79
80
|
xcmPallet: string[];
|
|
80
81
|
};
|
|
81
82
|
export declare const _XCM_TYPE: {
|
|
@@ -261,7 +261,8 @@ export const _DEFAULT_MANTA_ZK_CHAIN = 'calamari';
|
|
|
261
261
|
// XCM------------------------------------------------------------------------------------------------------------------
|
|
262
262
|
|
|
263
263
|
export const _XCM_CHAIN_GROUP = {
|
|
264
|
-
polkadotXcm: ['
|
|
264
|
+
polkadotXcm: ['statemine', 'statemint', 'equilibrium_parachain', 'rococo_assethub', 'mythos'],
|
|
265
|
+
polkadotXcmSpecialCases: ['astar', 'shiden'],
|
|
265
266
|
xcmPallet: ['polkadot', 'kusama', 'rococo']
|
|
266
267
|
// default is xTokens pallet
|
|
267
268
|
};
|
|
@@ -54,7 +54,6 @@ export default class InterlayLendingPoolHandler extends BaseLendingPoolHandler {
|
|
|
54
54
|
statistic: {
|
|
55
55
|
assetEarning: [{
|
|
56
56
|
slug: this.rewardAssets[0],
|
|
57
|
-
apr: 1.29,
|
|
58
57
|
exchangeRate: exchangeRate / decimals
|
|
59
58
|
}],
|
|
60
59
|
maxCandidatePerFarmer: 1,
|
|
@@ -64,7 +63,6 @@ export default class InterlayLendingPoolHandler extends BaseLendingPoolHandler {
|
|
|
64
63
|
defaultUnstake: '0',
|
|
65
64
|
fastUnstake: '0'
|
|
66
65
|
},
|
|
67
|
-
totalApr: 1.29,
|
|
68
66
|
tvl: '291890000000000'
|
|
69
67
|
}
|
|
70
68
|
};
|
|
@@ -39,7 +39,7 @@ export default class ParallelLiquidStakingPoolHandler extends BaseLiquidStakingP
|
|
|
39
39
|
|
|
40
40
|
async getPoolStat() {
|
|
41
41
|
const substrateApi = await this.substrateApi.isReady;
|
|
42
|
-
const [_exchangeRate,
|
|
42
|
+
const [_exchangeRate, _stakingLedgers] = await Promise.all([substrateApi.api.query.liquidStaking.exchangeRate(), substrateApi.api.query.liquidStaking.stakingLedgers.entries()]);
|
|
43
43
|
let tvl = BN_ZERO;
|
|
44
44
|
for (const _stakingLedger of _stakingLedgers) {
|
|
45
45
|
const _ledger = _stakingLedger[1];
|
|
@@ -47,16 +47,7 @@ export default class ParallelLiquidStakingPoolHandler extends BaseLiquidStakingP
|
|
|
47
47
|
tvl = tvl.add(new BN(ledger.total.toString()));
|
|
48
48
|
}
|
|
49
49
|
const exchangeRate = _exchangeRate.toPrimitive();
|
|
50
|
-
const currentBlockHeader = _currentBlockHeader.toPrimitive();
|
|
51
|
-
const currentTimestamp = _currentTimestamp.toPrimitive();
|
|
52
|
-
const beginBlock = currentBlockHeader.number - 24 * 60 * 60 / 6 * 14;
|
|
53
|
-
const _beginBlockHash = await substrateApi.api.rpc.chain.getBlockHash(beginBlock);
|
|
54
|
-
const beginBlockHash = _beginBlockHash.toString();
|
|
55
|
-
const [_beginTimestamp, _beginExchangeRate] = await Promise.all([substrateApi.api.query.timestamp.now.at(beginBlockHash), substrateApi.api.query.liquidStaking.exchangeRate.at(beginBlockHash)]);
|
|
56
|
-
const beginTimestamp = _beginTimestamp.toPrimitive();
|
|
57
|
-
const beginExchangeRate = _beginExchangeRate.toPrimitive();
|
|
58
50
|
const decimals = 10 ** this.rateDecimals;
|
|
59
|
-
const apy = (exchangeRate / beginExchangeRate) ** (365 * 24 * 60 * 60000 / (currentTimestamp - beginTimestamp)) - 1;
|
|
60
51
|
const minStake = substrateApi.api.consts.liquidStaking.minStake.toString();
|
|
61
52
|
const minUnstake = substrateApi.api.consts.liquidStaking.minUnstake.toString();
|
|
62
53
|
this.updateExchangeRate(exchangeRate);
|
|
@@ -70,7 +61,6 @@ export default class ParallelLiquidStakingPoolHandler extends BaseLiquidStakingP
|
|
|
70
61
|
statistic: {
|
|
71
62
|
assetEarning: [{
|
|
72
63
|
slug: this.rewardAssets[0],
|
|
73
|
-
apy: apy * 100,
|
|
74
64
|
exchangeRate: exchangeRate / decimals
|
|
75
65
|
}],
|
|
76
66
|
unstakingPeriod: 24 * 28,
|
|
@@ -81,7 +71,6 @@ export default class ParallelLiquidStakingPoolHandler extends BaseLiquidStakingP
|
|
|
81
71
|
defaultUnstake: minUnstake,
|
|
82
72
|
fastUnstake: '0'
|
|
83
73
|
},
|
|
84
|
-
totalApy: apy * 100,
|
|
85
74
|
tvl: tvl.toString()
|
|
86
75
|
}
|
|
87
76
|
};
|
|
@@ -7,8 +7,8 @@ export default class MigrateTransactionHistoryBySymbol extends BaseMigrationJob
|
|
|
7
7
|
const state = this.state;
|
|
8
8
|
try {
|
|
9
9
|
const changeSlugsMap = {
|
|
10
|
-
'
|
|
11
|
-
'
|
|
10
|
+
'polygon-NATIVE-MATIC': 'polygon-NATIVE-POL',
|
|
11
|
+
'5irechain_mainnet-NATIVE-5IRE': '5irechain_mainnet-NATIVE-5ire'
|
|
12
12
|
};
|
|
13
13
|
const allTxs = [];
|
|
14
14
|
await Promise.all(Object.entries(changeSlugsMap).map(async ([oldSlug, newSlug], i) => {
|
|
@@ -6,8 +6,8 @@ export default class MigrateAssetSetting extends BaseMigrationJob {
|
|
|
6
6
|
async run() {
|
|
7
7
|
try {
|
|
8
8
|
const changeSlugsMap = {
|
|
9
|
-
'
|
|
10
|
-
'
|
|
9
|
+
'polygon-NATIVE-MATIC': 'polygon-NATIVE-POL',
|
|
10
|
+
'5irechain_mainnet-NATIVE-5IRE': '5irechain_mainnet-NATIVE-5ire'
|
|
11
11
|
};
|
|
12
12
|
const assetSetting = await this.state.chainService.getAssetSettings();
|
|
13
13
|
const migratedAssetSetting = {};
|
|
@@ -53,8 +53,8 @@ export default {
|
|
|
53
53
|
'1.1.33-01': MigrateLedgerAccountV2,
|
|
54
54
|
'1.1.41-01': DeleteChainStaking,
|
|
55
55
|
'1.1.46-01': AutoEnableSomeTokens,
|
|
56
|
-
'1.
|
|
57
|
-
'1.
|
|
56
|
+
'1.2.28-01': MigrateAssetSetting,
|
|
57
|
+
'1.2.28-02': MigrateTransactionHistoryBySymbol,
|
|
58
58
|
'1.2.69-01': MigrateRemoveGenesisHash,
|
|
59
59
|
'1.2.13-01': ReloadMetadata,
|
|
60
60
|
'1.2.14-01': ClearMetadataDatabase
|
|
@@ -248,7 +248,7 @@ export class HydradxHandler {
|
|
|
248
248
|
|
|
249
249
|
switch (defaultError) {
|
|
250
250
|
case PoolError.InsufficientTradingAmount:
|
|
251
|
-
return new SwapError(SwapErrorType.
|
|
251
|
+
return new SwapError(SwapErrorType.NOT_MEET_MIN_SWAP);
|
|
252
252
|
case PoolError.TradeNotAllowed:
|
|
253
253
|
return new SwapError(SwapErrorType.ERROR_FETCHING_QUOTE);
|
|
254
254
|
case PoolError.MaxInRatioExceeded:
|