@subwallet/extension-base 1.2.14-0 → 1.2.16-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 +6 -1
- package/cjs/core/substrate/nominationpools-pallet.js +2 -1
- package/cjs/koni/api/nft/config.js +9 -5
- package/cjs/koni/api/nft/index.js +9 -1
- package/cjs/koni/api/nft/unique_network_nft/index.js +12 -20
- package/cjs/koni/background/handlers/Extension.js +45 -7
- package/cjs/koni/background/handlers/State.js +11 -1
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/index.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/substrate/gear.js +135 -0
- package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +9 -62
- package/cjs/services/balance-service/transfer/token.js +4 -3
- package/cjs/services/chain-service/constants.js +1 -0
- package/cjs/services/chain-service/handler/SubstrateApi.js +3 -1
- package/cjs/services/chain-service/handler/SubstrateChainHandler.js +21 -26
- package/cjs/services/chain-service/health-check/constants/index.js +4 -4
- package/cjs/services/chain-service/health-check/utils/asset-info.js +23 -6
- package/cjs/services/chain-service/health-check/utils/chain-info.js +25 -2
- package/cjs/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +160 -0
- package/cjs/services/chain-service/health-check/utils/new-utils/asset-validate.js +45 -0
- package/cjs/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +73 -0
- package/cjs/services/chain-service/health-check/utils/new-utils/chain-validate.js +34 -0
- package/cjs/services/chain-service/index.js +77 -3
- package/cjs/services/chain-service/types.js +1 -1
- package/cjs/services/chain-service/utils/index.js +18 -12
- package/cjs/services/earning-service/handlers/liquid-staking/acala.js +49 -19
- package/cjs/services/earning-service/service.js +3 -0
- package/cjs/services/migration-service/scripts/databases/ClearMetadataDatabase.js +16 -0
- package/cjs/services/migration-service/scripts/index.js +7 -7
- package/cjs/services/price-service/coingecko.js +57 -32
- package/cjs/services/price-service/index.js +30 -11
- package/cjs/services/transaction-service/index.js +12 -7
- package/cjs/utils/gear/combine.js +28 -0
- package/cjs/utils/gear/grc20.js +56 -49
- package/cjs/utils/gear/index.js +22 -0
- package/cjs/utils/gear/vft.js +173 -0
- package/cjs/utils/metadata.js +45 -34
- package/core/substrate/nominationpools-pallet.js +2 -1
- package/koni/api/nft/config.d.ts +1 -0
- package/koni/api/nft/config.js +3 -1
- package/koni/api/nft/index.js +9 -1
- package/koni/api/nft/unique_network_nft/index.js +12 -20
- package/koni/background/handlers/Extension.d.ts +2 -0
- package/koni/background/handlers/Extension.js +37 -1
- package/koni/background/handlers/State.d.ts +2 -0
- package/koni/background/handlers/State.js +11 -1
- package/package.json +44 -8
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/index.js +1 -1
- package/services/balance-service/helpers/subscribe/substrate/gear.d.ts +4 -0
- package/services/balance-service/helpers/subscribe/substrate/gear.js +123 -0
- package/services/balance-service/helpers/subscribe/substrate/index.js +10 -61
- package/services/balance-service/transfer/token.js +5 -4
- package/services/chain-service/constants.d.ts +1 -0
- package/services/chain-service/constants.js +1 -0
- package/services/chain-service/handler/SubstrateApi.d.ts +1 -1
- package/services/chain-service/handler/SubstrateApi.js +3 -1
- package/services/chain-service/handler/SubstrateChainHandler.d.ts +1 -0
- package/services/chain-service/handler/SubstrateChainHandler.js +22 -27
- package/services/chain-service/health-check/constants/index.js +4 -4
- package/services/chain-service/health-check/utils/asset-info.d.ts +1 -0
- package/services/chain-service/health-check/utils/asset-info.js +20 -4
- package/services/chain-service/health-check/utils/chain-info.d.ts +4 -2
- package/services/chain-service/health-check/utils/chain-info.js +20 -0
- package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.d.ts +10 -0
- package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +146 -0
- package/services/chain-service/health-check/utils/new-utils/asset-validate.d.ts +3 -0
- package/services/chain-service/health-check/utils/new-utils/asset-validate.js +38 -0
- package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.d.ts +5 -0
- package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +64 -0
- package/services/chain-service/health-check/utils/new-utils/chain-validate.d.ts +4 -0
- package/services/chain-service/health-check/utils/new-utils/chain-validate.js +26 -0
- package/services/chain-service/index.d.ts +4 -0
- package/services/chain-service/index.js +78 -4
- package/services/chain-service/types.d.ts +6 -0
- package/services/chain-service/types.js +1 -1
- package/services/chain-service/utils/index.d.ts +1 -0
- package/services/chain-service/utils/index.js +16 -12
- package/services/earning-service/handlers/liquid-staking/acala.js +46 -17
- package/services/earning-service/service.js +3 -0
- package/services/migration-service/scripts/databases/ClearMetadataDatabase.js +16 -0
- package/services/migration-service/scripts/index.js +7 -7
- package/services/price-service/coingecko.js +54 -32
- package/services/price-service/index.js +29 -11
- package/services/transaction-service/index.js +13 -8
- package/types/metadata.d.ts +9 -2
- package/utils/gear/combine.d.ts +10 -0
- package/utils/gear/combine.js +18 -0
- package/utils/gear/grc20.d.ts +18 -20
- package/utils/gear/grc20.js +53 -45
- package/utils/gear/index.d.ts +2 -0
- package/utils/gear/index.js +3 -1
- package/utils/gear/vft.d.ts +36 -0
- package/utils/gear/vft.js +162 -0
- package/utils/metadata.d.ts +7 -2
- package/utils/metadata.js +41 -31
|
@@ -38,6 +38,7 @@ var _exportNames = {
|
|
|
38
38
|
_isChainSupportEvmERC20: true,
|
|
39
39
|
_isChainSupportWasmPSP22: true,
|
|
40
40
|
_isChainSupportGRC20: true,
|
|
41
|
+
_isChainSupportVFT: true,
|
|
41
42
|
_isSupportOrdinal: true,
|
|
42
43
|
_getNftTypesSupportedByChain: true,
|
|
43
44
|
_getTokenTypesSupportedByChain: true,
|
|
@@ -131,6 +132,7 @@ exports._isChainSupportEvmNft = _isChainSupportEvmNft;
|
|
|
131
132
|
exports._isChainSupportGRC20 = _isChainSupportGRC20;
|
|
132
133
|
exports._isChainSupportNativeNft = _isChainSupportNativeNft;
|
|
133
134
|
exports._isChainSupportSubstrateStaking = _isChainSupportSubstrateStaking;
|
|
135
|
+
exports._isChainSupportVFT = _isChainSupportVFT;
|
|
134
136
|
exports._isChainSupportWasmNft = _isChainSupportWasmNft;
|
|
135
137
|
exports._isChainSupportWasmPSP22 = _isChainSupportWasmPSP22;
|
|
136
138
|
exports._isChainTestNet = _isChainTestNet;
|
|
@@ -357,6 +359,10 @@ function _isChainSupportGRC20(chainInfo) {
|
|
|
357
359
|
var _chainInfo$substrateI12, _chainInfo$substrateI13;
|
|
358
360
|
return ((_chainInfo$substrateI12 = chainInfo.substrateInfo) === null || _chainInfo$substrateI12 === void 0 ? void 0 : (_chainInfo$substrateI13 = _chainInfo$substrateI12.supportSmartContract) === null || _chainInfo$substrateI13 === void 0 ? void 0 : _chainInfo$substrateI13.includes(_types._AssetType.GRC20)) || false;
|
|
359
361
|
}
|
|
362
|
+
function _isChainSupportVFT(chainInfo) {
|
|
363
|
+
var _chainInfo$substrateI14, _chainInfo$substrateI15;
|
|
364
|
+
return ((_chainInfo$substrateI14 = chainInfo.substrateInfo) === null || _chainInfo$substrateI14 === void 0 ? void 0 : (_chainInfo$substrateI15 = _chainInfo$substrateI14.supportSmartContract) === null || _chainInfo$substrateI15 === void 0 ? void 0 : _chainInfo$substrateI15.includes(_types._AssetType.VFT)) || false;
|
|
365
|
+
}
|
|
360
366
|
const _isSupportOrdinal = chain => {
|
|
361
367
|
const chains = ['polkadot', 'astar', 'bifrost_dot', 'moonbeam'];
|
|
362
368
|
return chains.includes(chain);
|
|
@@ -384,7 +390,7 @@ function _getTokenTypesSupportedByChain(chainInfo) {
|
|
|
384
390
|
const result = [];
|
|
385
391
|
if (chainInfo.substrateInfo && chainInfo.substrateInfo.supportSmartContract) {
|
|
386
392
|
chainInfo.substrateInfo.supportSmartContract.forEach(assetType => {
|
|
387
|
-
if ([_types._AssetType.PSP22, _types._AssetType.GRC20].includes(assetType)) {
|
|
393
|
+
if ([_types._AssetType.PSP22, _types._AssetType.GRC20, _types._AssetType.VFT].includes(assetType)) {
|
|
388
394
|
result.push(assetType);
|
|
389
395
|
}
|
|
390
396
|
});
|
|
@@ -441,7 +447,7 @@ function _isAssetSmartContractNft(assetInfo) {
|
|
|
441
447
|
return [_types._AssetType.PSP34, _types._AssetType.ERC721].includes(assetInfo.assetType);
|
|
442
448
|
}
|
|
443
449
|
function _isTokenGearSmartContract(tokenInfo) {
|
|
444
|
-
return [_types._AssetType.GRC20, _types._AssetType.GRC721].includes(tokenInfo.assetType);
|
|
450
|
+
return [_types._AssetType.GRC20, _types._AssetType.GRC721, _types._AssetType.VFT].includes(tokenInfo.assetType);
|
|
445
451
|
}
|
|
446
452
|
function _parseAssetRefKey(originTokenSlug, destinationTokenSlug) {
|
|
447
453
|
return `${originTokenSlug}___${destinationTokenSlug}`;
|
|
@@ -473,12 +479,12 @@ function _isRelayChain(chainInfo) {
|
|
|
473
479
|
return _isSubstrateRelayChain(chainInfo) || _isPureEvmChain(chainInfo);
|
|
474
480
|
}
|
|
475
481
|
function _isSubstrateRelayChain(chainInfo) {
|
|
476
|
-
var _chainInfo$
|
|
477
|
-
return ((_chainInfo$
|
|
482
|
+
var _chainInfo$substrateI16;
|
|
483
|
+
return ((_chainInfo$substrateI16 = chainInfo.substrateInfo) === null || _chainInfo$substrateI16 === void 0 ? void 0 : _chainInfo$substrateI16.chainType) === _types._SubstrateChainType.RELAYCHAIN;
|
|
478
484
|
}
|
|
479
485
|
function _isSubstrateParaChain(chainInfo) {
|
|
480
|
-
var _chainInfo$
|
|
481
|
-
return chainInfo.substrateInfo !== null && chainInfo.substrateInfo.paraId !== null && ((_chainInfo$
|
|
486
|
+
var _chainInfo$substrateI17;
|
|
487
|
+
return chainInfo.substrateInfo !== null && chainInfo.substrateInfo.paraId !== null && ((_chainInfo$substrateI17 = chainInfo.substrateInfo) === null || _chainInfo$substrateI17 === void 0 ? void 0 : _chainInfo$substrateI17.chainType) === _types._SubstrateChainType.PARACHAIN;
|
|
482
488
|
}
|
|
483
489
|
function _getEvmAbiExplorer(chainInfo) {
|
|
484
490
|
var _chainInfo$evmInfo4;
|
|
@@ -523,8 +529,8 @@ function _getBlockExplorerFromChain(chainInfo) {
|
|
|
523
529
|
var _chainInfo$evmInfo5;
|
|
524
530
|
blockExplorer = chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$evmInfo5 = chainInfo.evmInfo) === null || _chainInfo$evmInfo5 === void 0 ? void 0 : _chainInfo$evmInfo5.blockExplorer;
|
|
525
531
|
} else {
|
|
526
|
-
var _chainInfo$
|
|
527
|
-
blockExplorer = chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$
|
|
532
|
+
var _chainInfo$substrateI18;
|
|
533
|
+
blockExplorer = chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI18 = chainInfo.substrateInfo) === null || _chainInfo$substrateI18 === void 0 ? void 0 : _chainInfo$substrateI18.blockExplorer;
|
|
528
534
|
}
|
|
529
535
|
if (!blockExplorer) {
|
|
530
536
|
return undefined;
|
|
@@ -551,8 +557,8 @@ const _isAssetAutoEnable = chainAsset => {
|
|
|
551
557
|
};
|
|
552
558
|
exports._isAssetAutoEnable = _isAssetAutoEnable;
|
|
553
559
|
function _getCrowdloanUrlFromChain(chainInfo) {
|
|
554
|
-
var _chainInfo$
|
|
555
|
-
return (chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$
|
|
560
|
+
var _chainInfo$substrateI19;
|
|
561
|
+
return (chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI19 = chainInfo.substrateInfo) === null || _chainInfo$substrateI19 === void 0 ? void 0 : _chainInfo$substrateI19.crowdloanUrl) || '';
|
|
556
562
|
}
|
|
557
563
|
function _isCustomProvider(providerKey) {
|
|
558
564
|
return providerKey.startsWith(_types2._CUSTOM_PREFIX);
|
|
@@ -590,8 +596,8 @@ function _isMantaZkAsset(chainAsset) {
|
|
|
590
596
|
return _constants._MANTA_ZK_CHAIN_GROUP.includes(chainAsset.originChain) && chainAsset.symbol.startsWith(_constants._ZK_ASSET_PREFIX);
|
|
591
597
|
}
|
|
592
598
|
function _getChainExistentialDeposit(chainInfo) {
|
|
593
|
-
var _chainInfo$
|
|
594
|
-
return (chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$
|
|
599
|
+
var _chainInfo$substrateI20;
|
|
600
|
+
return (chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI20 = chainInfo.substrateInfo) === null || _chainInfo$substrateI20 === void 0 ? void 0 : _chainInfo$substrateI20.existentialDeposit) || '0';
|
|
595
601
|
}
|
|
596
602
|
function randomizeProvider(providers, excludedKeys) {
|
|
597
603
|
if (Object.keys(providers).length === 0) {
|
|
@@ -6,8 +6,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
9
|
+
var _constants = require("@subwallet/extension-base/services/chain-service/constants");
|
|
9
10
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
10
|
-
var
|
|
11
|
+
var _constants2 = require("@subwallet/extension-base/services/earning-service/constants");
|
|
11
12
|
var _types = require("@subwallet/extension-base/types");
|
|
12
13
|
var _util = require("@polkadot/util");
|
|
13
14
|
var _base = _interopRequireDefault(require("./base"));
|
|
@@ -16,6 +17,9 @@ var _base = _interopRequireDefault(require("./base"));
|
|
|
16
17
|
|
|
17
18
|
const GRAPHQL_API = 'https://api.polkawallet.io/acala-liquid-staking-subql';
|
|
18
19
|
const EXCHANGE_RATE_REQUEST = 'query { dailySummaries(first:30, orderBy:TIMESTAMP_DESC) {nodes { exchangeRate timestamp }}}';
|
|
20
|
+
function convertDerivativeToken(amount, exchangeRate, decimals) {
|
|
21
|
+
return amount.mul(new _util.BN(exchangeRate)).div(_util.BN_TEN.pow(new _util.BN(decimals)));
|
|
22
|
+
}
|
|
19
23
|
class AcalaLiquidStakingPoolHandler extends _base.default {
|
|
20
24
|
altInputAsset = 'polkadot-NATIVE-DOT';
|
|
21
25
|
derivativeAssets = ['acala-LOCAL-LDOT'];
|
|
@@ -29,8 +33,7 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
|
|
|
29
33
|
defaultUnstake: true,
|
|
30
34
|
fastUnstake: true,
|
|
31
35
|
cancelUnstake: false,
|
|
32
|
-
withdraw:
|
|
33
|
-
// TODO: Change after verify unstake info
|
|
36
|
+
withdraw: true,
|
|
34
37
|
claimReward: false
|
|
35
38
|
};
|
|
36
39
|
constructor(state, chain) {
|
|
@@ -118,30 +121,56 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
|
|
|
118
121
|
return;
|
|
119
122
|
}
|
|
120
123
|
const balances = _balances;
|
|
121
|
-
const redeemRequests = await substrateApi.api.query.homa.redeemRequests.multi(useAddresses);
|
|
122
|
-
|
|
123
|
-
const exchangeRate = await this.getExchangeRate();
|
|
124
|
-
const decimals = _util.BN_TEN.pow(new _util.BN(this.rateDecimals));
|
|
124
|
+
const [redeemRequests, exchangeRate, _currentEra] = await Promise.all([substrateApi.api.query.homa.redeemRequests.multi(useAddresses), this.getExchangeRate(), substrateApi.api.query.homa.relayChainCurrentEra()]);
|
|
125
|
+
const currentEra = _currentEra.toPrimitive();
|
|
125
126
|
for (let i = 0; i < balances.length; i++) {
|
|
126
127
|
const balanceItem = balances[i];
|
|
127
128
|
const address = useAddresses[i];
|
|
128
129
|
const activeTotalBalance = balanceItem.free || _util.BN_ZERO;
|
|
129
|
-
let totalBalance = activeTotalBalance
|
|
130
|
+
let totalBalance = convertDerivativeToken(activeTotalBalance, exchangeRate, this.rateDecimals);
|
|
130
131
|
let unlockingBalance = _util.BN_ZERO;
|
|
131
132
|
const unstakings = [];
|
|
133
|
+
|
|
134
|
+
// Handle redeem request
|
|
132
135
|
const redeemRequest = redeemRequests[i].toPrimitive();
|
|
133
136
|
if (redeemRequest) {
|
|
134
|
-
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
const amount = new _util.BN(redeemAmount).mul(new _util.BN(exchangeRate)).div(decimals);
|
|
139
|
-
totalBalance = totalBalance.add(amount);
|
|
140
|
-
unlockingBalance = unlockingBalance.add(amount);
|
|
137
|
+
const [derivativeRedeemAmount, _] = redeemRequest;
|
|
138
|
+
const redeemAmount = convertDerivativeToken(new _util.BN(derivativeRedeemAmount), exchangeRate, this.rateDecimals);
|
|
139
|
+
totalBalance = totalBalance.add(redeemAmount);
|
|
140
|
+
unlockingBalance = unlockingBalance.add(redeemAmount);
|
|
141
141
|
unstakings.push({
|
|
142
142
|
chain: this.chain,
|
|
143
|
-
status:
|
|
144
|
-
claimable:
|
|
143
|
+
status: _types.UnstakingStatus.UNLOCKING,
|
|
144
|
+
claimable: redeemAmount.toString(),
|
|
145
|
+
waitingTime: 28 * _constants._STAKING_ERA_LENGTH_MAP.polkadot // up to 29 day (in case non-fast-match
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Handle unbondings
|
|
150
|
+
const unbondings = await substrateApi.api.query.homa.unbondings.entries(address);
|
|
151
|
+
if (unbondings.length > 0) {
|
|
152
|
+
unbondings.forEach(_ref => {
|
|
153
|
+
let [unbondingInfo, unbondingValue] = _ref;
|
|
154
|
+
// @ts-ignore
|
|
155
|
+
const _targetEra = unbondingInfo.toHuman()[1];
|
|
156
|
+
const targetEra = parseInt(_targetEra.replaceAll(',', ''));
|
|
157
|
+
const amount = new _util.BN(unbondingValue.toPrimitive());
|
|
158
|
+
totalBalance = totalBalance.add(amount);
|
|
159
|
+
unlockingBalance = unlockingBalance.add(amount);
|
|
160
|
+
if (targetEra > currentEra) {
|
|
161
|
+
unstakings.push({
|
|
162
|
+
chain: this.chain,
|
|
163
|
+
status: _types.UnstakingStatus.UNLOCKING,
|
|
164
|
+
claimable: amount.toString(),
|
|
165
|
+
waitingTime: (targetEra - currentEra) * _constants._STAKING_ERA_LENGTH_MAP.polkadot // Todo: Handle exact timestamp?
|
|
166
|
+
});
|
|
167
|
+
} else {
|
|
168
|
+
unstakings.push({
|
|
169
|
+
chain: this.chain,
|
|
170
|
+
status: _types.UnstakingStatus.CLAIMABLE,
|
|
171
|
+
claimable: amount.toString()
|
|
172
|
+
});
|
|
173
|
+
}
|
|
145
174
|
});
|
|
146
175
|
}
|
|
147
176
|
const result = {
|
|
@@ -181,7 +210,7 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
|
|
|
181
210
|
const poolOriginSubstrateApi = await this.substrateApi.isReady;
|
|
182
211
|
const defaultFeeTokenSlug = this.feeAssets[0];
|
|
183
212
|
if (new _util.BN(params.amount).gt(_util.BN_ZERO)) {
|
|
184
|
-
const _mintFeeInfo = await poolOriginSubstrateApi.api.tx.homa.mint(params.amount).paymentInfo(
|
|
213
|
+
const _mintFeeInfo = await poolOriginSubstrateApi.api.tx.homa.mint(params.amount).paymentInfo(_constants2.fakeAddress);
|
|
185
214
|
const mintFeeInfo = _mintFeeInfo.toPrimitive();
|
|
186
215
|
return {
|
|
187
216
|
amount: mintFeeInfo.partialFee.toString(),
|
|
@@ -232,7 +261,8 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
|
|
|
232
261
|
}
|
|
233
262
|
async handleYieldUnstake(amount, address, selectedTarget) {
|
|
234
263
|
const chainApi = await this.substrateApi.isReady;
|
|
235
|
-
const extrinsic = chainApi.api.tx.homa.requestRedeem(amount,
|
|
264
|
+
const extrinsic = chainApi.api.tx.homa.requestRedeem(amount, true); // set true to allow fast match
|
|
265
|
+
|
|
236
266
|
return [_KoniTypes.ExtrinsicType.UNSTAKE_LDOT, extrinsic];
|
|
237
267
|
}
|
|
238
268
|
async handleYieldWithdraw(address, unstakingInfo) {
|
|
@@ -144,6 +144,9 @@ class EarningService {
|
|
|
144
144
|
if (event.type === 'account.remove') {
|
|
145
145
|
removedAddresses.push(event.data[0]);
|
|
146
146
|
}
|
|
147
|
+
if (event.type === 'account.add') {
|
|
148
|
+
delayReload = true;
|
|
149
|
+
}
|
|
147
150
|
if (event.type === 'chain.updateState') {
|
|
148
151
|
const chainState = this.state.getChainStateByKey(event.data[0]);
|
|
149
152
|
if (chainState && !(0, _utils._isChainEnabled)(chainState)) {
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
|
|
9
|
+
var _utils = require("@subwallet/extension-base/utils");
|
|
9
10
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
10
11
|
// SPDX-License-Identifier: Apache-2.0
|
|
11
12
|
|
|
@@ -13,6 +14,21 @@ class ClearMetadataDatabase extends _Base.default {
|
|
|
13
14
|
async run() {
|
|
14
15
|
// Clear all old metadata data
|
|
15
16
|
await this.state.dbService.stores.metadata.clear();
|
|
17
|
+
const activeChains = this.state.chainService.getActiveChains();
|
|
18
|
+
const chainInfoMap = this.state.chainService.getChainInfoMap();
|
|
19
|
+
const reloadChains = activeChains.filter(chain => {
|
|
20
|
+
var _chainInfoMap$chain$s;
|
|
21
|
+
return !!((_chainInfoMap$chain$s = chainInfoMap[chain].substrateInfo) !== null && _chainInfoMap$chain$s !== void 0 && _chainInfoMap$chain$s.genesisHash);
|
|
22
|
+
});
|
|
23
|
+
for (const chain of reloadChains) {
|
|
24
|
+
const substrateApi = this.state.chainService.getSubstrateApi(chain);
|
|
25
|
+
const callback = substrateApi => {
|
|
26
|
+
(0, _utils.cacheMetadata)(chain, substrateApi, this.state.chainService);
|
|
27
|
+
};
|
|
28
|
+
Promise.race([substrateApi.isReady, (0, _utils.waitTimeout)(2000)]).finally(() => {
|
|
29
|
+
substrateApi === null || substrateApi === void 0 ? void 0 : substrateApi.connect(callback);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
16
32
|
return Promise.resolve();
|
|
17
33
|
}
|
|
18
34
|
}
|
|
@@ -5,14 +5,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = exports.EVERYTIME = void 0;
|
|
8
|
-
var _AutoEnableSomeTokens = _interopRequireDefault(require("
|
|
9
|
-
var _ReloadMetadata = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/databases/ReloadMetadata"));
|
|
10
|
-
var _DeleteEarningData = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/DeleteEarningData"));
|
|
11
|
-
var _MigrateRemoveGenesisHash = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateRemoveGenesisHash"));
|
|
12
|
-
var _MigrateTransactionHistoryBySymbol = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateTransactionHistoryBySymbol"));
|
|
8
|
+
var _AutoEnableSomeTokens = _interopRequireDefault(require("./databases/AutoEnableSomeTokens"));
|
|
13
9
|
var _ClearMetadataDatabase = _interopRequireDefault(require("./databases/ClearMetadataDatabase"));
|
|
14
10
|
var _MigrateAssetSetting = _interopRequireDefault(require("./databases/MigrateAssetSetting"));
|
|
15
11
|
var _MigrateEarningVersion = _interopRequireDefault(require("./databases/MigrateEarningVersion"));
|
|
12
|
+
var _ReloadMetadata = _interopRequireDefault(require("./databases/ReloadMetadata"));
|
|
16
13
|
var _MigrateEthProvider = _interopRequireDefault(require("./providers/MigrateEthProvider"));
|
|
17
14
|
var _MigratePioneerProvider = _interopRequireDefault(require("./providers/MigratePioneerProvider"));
|
|
18
15
|
var _MigrateProvidersV1M1P = _interopRequireDefault(require("./providers/MigrateProvidersV1M1P24"));
|
|
@@ -20,6 +17,7 @@ var _MigratePolygonUSDCProvider = _interopRequireDefault(require("./tokens/Migra
|
|
|
20
17
|
var _AutoEnableChainsTokens = _interopRequireDefault(require("./AutoEnableChainsTokens"));
|
|
21
18
|
var _DeleteChain = _interopRequireDefault(require("./DeleteChain"));
|
|
22
19
|
var _DeleteChainStaking = _interopRequireDefault(require("./DeleteChainStaking"));
|
|
20
|
+
var _DeleteEarningData = _interopRequireDefault(require("./DeleteEarningData"));
|
|
23
21
|
var _EnableVaraChain = _interopRequireDefault(require("./EnableVaraChain"));
|
|
24
22
|
var _MigrateAuthUrls = _interopRequireDefault(require("./MigrateAuthUrls"));
|
|
25
23
|
var _MigrateAutoLock = _interopRequireDefault(require("./MigrateAutoLock"));
|
|
@@ -28,9 +26,11 @@ var _MigrateImportedToken = _interopRequireDefault(require("./MigrateImportedTok
|
|
|
28
26
|
var _MigrateLedgerAccount = _interopRequireDefault(require("./MigrateLedgerAccount"));
|
|
29
27
|
var _MigrateLedgerAccountV = _interopRequireDefault(require("./MigrateLedgerAccountV2"));
|
|
30
28
|
var _MigrateNetworkSettings = _interopRequireDefault(require("./MigrateNetworkSettings"));
|
|
29
|
+
var _MigrateRemoveGenesisHash = _interopRequireDefault(require("./MigrateRemoveGenesisHash"));
|
|
31
30
|
var _MigrateSettings = _interopRequireDefault(require("./MigrateSettings"));
|
|
32
31
|
var _MigrateTokenDecimals = _interopRequireDefault(require("./MigrateTokenDecimals"));
|
|
33
32
|
var _MigrateTransactionHistory = _interopRequireDefault(require("./MigrateTransactionHistory"));
|
|
33
|
+
var _MigrateTransactionHistoryBySymbol = _interopRequireDefault(require("./MigrateTransactionHistoryBySymbol"));
|
|
34
34
|
var _MigrateWalletReference = _interopRequireDefault(require("./MigrateWalletReference"));
|
|
35
35
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
36
36
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -64,8 +64,8 @@ var _default = {
|
|
|
64
64
|
'1.1.69-03': _MigrateAssetSetting.default,
|
|
65
65
|
'1.1.69-02': _MigrateTransactionHistoryBySymbol.default,
|
|
66
66
|
'1.2.69-01': _MigrateRemoveGenesisHash.default,
|
|
67
|
-
'1.2.
|
|
68
|
-
'1.2.
|
|
67
|
+
'1.2.13-01': _ReloadMetadata.default,
|
|
68
|
+
'1.2.14-01': _ClearMetadataDatabase.default
|
|
69
69
|
// [`${EVERYTIME}-1.1.42-02`]: MigrateTransactionHistoryBySymbol
|
|
70
70
|
// [`${EVERYTIME}-1`]: AutoEnableChainsTokens
|
|
71
71
|
};
|
|
@@ -5,15 +5,25 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.getPriceMap = exports.getExchangeRateMap = void 0;
|
|
7
7
|
var _staticData = require("@subwallet/extension-base/utils/staticData");
|
|
8
|
+
var _util = require("@polkadot/util");
|
|
8
9
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
9
10
|
// SPDX-License-Identifier: Apache-2.0
|
|
10
11
|
|
|
11
12
|
const DEFAULT_CURRENCY = 'USD';
|
|
12
13
|
let useBackupApi = false;
|
|
13
14
|
const getExchangeRateMap = async () => {
|
|
15
|
+
let response;
|
|
14
16
|
try {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
var _response, _response2;
|
|
18
|
+
try {
|
|
19
|
+
response = await fetch('https://api-cache.subwallet.app/exchange-rate');
|
|
20
|
+
} catch (e) {}
|
|
21
|
+
if (((_response = response) === null || _response === void 0 ? void 0 : _response.status) !== 200) {
|
|
22
|
+
try {
|
|
23
|
+
response = await fetch('https://static-cache.subwallet.app/exchange-rate/data.json');
|
|
24
|
+
} catch (e) {}
|
|
25
|
+
}
|
|
26
|
+
const responseDataExchangeRate = (await ((_response2 = response) === null || _response2 === void 0 ? void 0 : _response2.json())) || {};
|
|
17
27
|
const exchangeRateMap = Object.keys(responseDataExchangeRate.conversion_rates).reduce((map, exchangeKey) => {
|
|
18
28
|
if (!_staticData.staticData[_staticData.StaticKey.CURRENCY_SYMBOL][exchangeKey]) {
|
|
19
29
|
return map;
|
|
@@ -26,45 +36,60 @@ const getExchangeRateMap = async () => {
|
|
|
26
36
|
}, {});
|
|
27
37
|
return exchangeRateMap;
|
|
28
38
|
} catch (e) {
|
|
29
|
-
console.warn('Failed to get exchange rate');
|
|
30
39
|
return {};
|
|
31
40
|
}
|
|
32
41
|
};
|
|
33
42
|
exports.getExchangeRateMap = getExchangeRateMap;
|
|
34
43
|
const getPriceMap = async function (priceIds) {
|
|
35
|
-
var _rs, _rs2;
|
|
36
44
|
let currency = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'USD';
|
|
37
45
|
const idStr = Array.from(priceIds).join(',');
|
|
38
|
-
let
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
46
|
+
let response;
|
|
47
|
+
try {
|
|
48
|
+
var _response3, _response5;
|
|
49
|
+
if (!useBackupApi) {
|
|
50
|
+
try {
|
|
51
|
+
response = await fetch(`https://api.coingecko.com/api/v3/coins/markets?vs_currency=${currency.toLowerCase()}&per_page=250&ids=${idStr}`);
|
|
52
|
+
} catch (err) {
|
|
53
|
+
useBackupApi = true;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (useBackupApi || ((_response3 = response) === null || _response3 === void 0 ? void 0 : _response3.status) !== 200) {
|
|
57
|
+
var _response4;
|
|
43
58
|
useBackupApi = true;
|
|
59
|
+
try {
|
|
60
|
+
response = await fetch(`https://api-cache.subwallet.app/api/price/get?ids=${idStr}`);
|
|
61
|
+
} catch (e) {}
|
|
62
|
+
if (((_response4 = response) === null || _response4 === void 0 ? void 0 : _response4.status) !== 200) {
|
|
63
|
+
try {
|
|
64
|
+
response = await fetch('https://static-cache.subwallet.app/price/data.json');
|
|
65
|
+
} catch (e) {}
|
|
66
|
+
}
|
|
44
67
|
}
|
|
68
|
+
const generateDataPriceRaw = (await ((_response5 = response) === null || _response5 === void 0 ? void 0 : _response5.json())) || [];
|
|
69
|
+
const responseDataPrice = (0, _util.isArray)(generateDataPriceRaw) ? generateDataPriceRaw : Object.entries(generateDataPriceRaw).map(_ref => {
|
|
70
|
+
let [id, value] = _ref;
|
|
71
|
+
return {
|
|
72
|
+
...value,
|
|
73
|
+
id
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
const currencyData = _staticData.staticData[_staticData.StaticKey.CURRENCY_SYMBOL][currency || DEFAULT_CURRENCY];
|
|
77
|
+
const priceMap = {};
|
|
78
|
+
const price24hMap = {};
|
|
79
|
+
responseDataPrice.forEach(val => {
|
|
80
|
+
const currentPrice = val.current_price || 0;
|
|
81
|
+
const price24h = currentPrice - (val.price_change_24h || 0);
|
|
82
|
+
priceMap[val.id] = currentPrice;
|
|
83
|
+
price24hMap[val.id] = price24h;
|
|
84
|
+
});
|
|
85
|
+
return {
|
|
86
|
+
currency,
|
|
87
|
+
currencyData,
|
|
88
|
+
priceMap,
|
|
89
|
+
price24hMap
|
|
90
|
+
};
|
|
91
|
+
} catch (e) {
|
|
92
|
+
return {};
|
|
45
93
|
}
|
|
46
|
-
if (useBackupApi || ((_rs = rs) === null || _rs === void 0 ? void 0 : _rs.status) !== 200) {
|
|
47
|
-
useBackupApi = true;
|
|
48
|
-
rs = await fetch(`https://chain-data.subwallet.app/api/price/get?ids=${idStr}`);
|
|
49
|
-
}
|
|
50
|
-
if (((_rs2 = rs) === null || _rs2 === void 0 ? void 0 : _rs2.status) !== 200) {
|
|
51
|
-
console.warn('Failed to get token price');
|
|
52
|
-
}
|
|
53
|
-
const responseDataPrice = (await rs.json()) || [];
|
|
54
|
-
const currencyData = _staticData.staticData[_staticData.StaticKey.CURRENCY_SYMBOL][currency || DEFAULT_CURRENCY];
|
|
55
|
-
const priceMap = {};
|
|
56
|
-
const price24hMap = {};
|
|
57
|
-
responseDataPrice.forEach(val => {
|
|
58
|
-
const currentPrice = val.current_price || 0;
|
|
59
|
-
const price24h = currentPrice - (val.price_change_24h || 0);
|
|
60
|
-
priceMap[val.id] = currentPrice;
|
|
61
|
-
price24hMap[val.id] = price24h;
|
|
62
|
-
});
|
|
63
|
-
return {
|
|
64
|
-
currency,
|
|
65
|
-
currencyData,
|
|
66
|
-
priceMap,
|
|
67
|
-
price24hMap
|
|
68
|
-
};
|
|
69
94
|
};
|
|
70
95
|
exports.getPriceMap = getPriceMap;
|
|
@@ -9,6 +9,7 @@ var _types = require("@subwallet/extension-base/services/base/types");
|
|
|
9
9
|
var _coingecko = require("@subwallet/extension-base/services/price-service/coingecko");
|
|
10
10
|
var _storage = require("@subwallet/extension-base/storage");
|
|
11
11
|
var _stores = require("@subwallet/extension-base/stores");
|
|
12
|
+
var _utils = require("@subwallet/extension-base/utils");
|
|
12
13
|
var _promise = require("@subwallet/extension-base/utils/promise");
|
|
13
14
|
var _staticData = require("@subwallet/extension-base/utils/staticData");
|
|
14
15
|
var _rxjs = require("rxjs");
|
|
@@ -28,6 +29,9 @@ const DEFAULT_PRICE_SUBJECT = {
|
|
|
28
29
|
price24hMap: {},
|
|
29
30
|
exchangeRateMap: {}
|
|
30
31
|
};
|
|
32
|
+
const checkFetchSuccess = (obj1, obj2) => {
|
|
33
|
+
return Object.keys(obj1).length > 0 && Object.keys(obj2).length > 0;
|
|
34
|
+
};
|
|
31
35
|
class PriceService {
|
|
32
36
|
priceIds = new Set();
|
|
33
37
|
currency = new _stores.CurrentCurrencyStore();
|
|
@@ -49,11 +53,16 @@ class PriceService {
|
|
|
49
53
|
this.init().then(() => this.getCurrentCurrency(updateCurrency)).catch(console.error);
|
|
50
54
|
}
|
|
51
55
|
async getTokenPrice(priceIds, currency, resolve, reject) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
const getPriceData = async () => {
|
|
57
|
+
await Promise.all([(0, _coingecko.getExchangeRateMap)(), (0, _coingecko.getPriceMap)(priceIds, currency)]).then(_ref => {
|
|
58
|
+
let [exchangeRateMap, priceMap] = _ref;
|
|
59
|
+
if (checkFetchSuccess(priceMap, exchangeRateMap)) {
|
|
60
|
+
this.rawExchangeRateMap.next(exchangeRateMap);
|
|
61
|
+
this.rawPriceSubject.next(priceMap);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
await Promise.race([getPriceData(), (0, _utils.wait)(10 * 1000)]);
|
|
57
66
|
}
|
|
58
67
|
getCurrentCurrencySubject() {
|
|
59
68
|
return this.currency.getSubject();
|
|
@@ -89,17 +98,27 @@ class PriceService {
|
|
|
89
98
|
})();
|
|
90
99
|
}
|
|
91
100
|
async calculatePriceMap(currency) {
|
|
92
|
-
|
|
101
|
+
let {
|
|
93
102
|
price24hMap,
|
|
94
103
|
priceMap
|
|
95
104
|
} = this.rawPriceSubject.value;
|
|
96
|
-
|
|
105
|
+
let exchangeRateData = this.rawExchangeRateMap.value;
|
|
106
|
+
const priceStored = await this.dbService.getPriceStore(currency);
|
|
97
107
|
const currencyKey = currency || DEFAULT_CURRENCY;
|
|
98
108
|
if (Object.keys(this.rawPriceSubject.value).length === 0) {
|
|
99
|
-
|
|
109
|
+
if (priceStored !== null && priceStored !== void 0 && priceStored.exchangeRateMap) {
|
|
110
|
+
exchangeRateData = priceStored.exchangeRateMap;
|
|
111
|
+
}
|
|
100
112
|
}
|
|
101
113
|
if (Object.keys(exchangeRateData).length === 0) {
|
|
102
|
-
|
|
114
|
+
if (priceStored !== null && priceStored !== void 0 && priceStored.price24hMap) {
|
|
115
|
+
price24hMap = {
|
|
116
|
+
...priceStored.price24hMap
|
|
117
|
+
};
|
|
118
|
+
priceMap = {
|
|
119
|
+
...priceStored.priceMap
|
|
120
|
+
};
|
|
121
|
+
}
|
|
103
122
|
}
|
|
104
123
|
const finalPriceMap = {
|
|
105
124
|
priceMap: {
|
|
@@ -165,8 +184,8 @@ class PriceService {
|
|
|
165
184
|
this.refreshPriceMapByAction();
|
|
166
185
|
}
|
|
167
186
|
};
|
|
168
|
-
this.getCurrentCurrencySubject().subscribe(
|
|
169
|
-
|
|
187
|
+
(0, _rxjs.combineLatest)([this.getCurrentCurrencySubject(), this.rawPriceSubject, this.rawExchangeRateMap]).subscribe(_ref2 => {
|
|
188
|
+
let [currency] = _ref2;
|
|
170
189
|
this.calculatePriceMap(currency).then(data => {
|
|
171
190
|
if (data) {
|
|
172
191
|
this.priceSubject.next(data);
|
|
@@ -1047,20 +1047,25 @@ class TransactionService {
|
|
|
1047
1047
|
const signerOption = {
|
|
1048
1048
|
signer: {
|
|
1049
1049
|
signPayload: async payload => {
|
|
1050
|
-
const
|
|
1050
|
+
const {
|
|
1051
|
+
signature,
|
|
1052
|
+
signedTransaction
|
|
1053
|
+
} = await this.state.requestService.signInternalTransaction(id, address, url || _constants2.EXTENSION_REQUEST_URL, payload);
|
|
1051
1054
|
return {
|
|
1052
1055
|
id: new Date().getTime(),
|
|
1053
|
-
signature
|
|
1056
|
+
signature,
|
|
1057
|
+
signedTransaction
|
|
1054
1058
|
};
|
|
1055
1059
|
}
|
|
1056
|
-
}
|
|
1060
|
+
},
|
|
1061
|
+
withSignedTransaction: true
|
|
1057
1062
|
};
|
|
1058
1063
|
if ((0, _utils3._isRuntimeUpdated)(signedExtensions)) {
|
|
1059
|
-
|
|
1060
|
-
|
|
1064
|
+
const metadataHash = await this.state.chainService.calculateMetadataHash(chain);
|
|
1065
|
+
if (metadataHash) {
|
|
1061
1066
|
signerOption.mode = 1;
|
|
1062
|
-
signerOption.metadataHash =
|
|
1063
|
-
}
|
|
1067
|
+
signerOption.metadataHash = metadataHash;
|
|
1068
|
+
}
|
|
1064
1069
|
}
|
|
1065
1070
|
extrinsic.signAsync(address, signerOption).then(async rs => {
|
|
1066
1071
|
// Emit signed event
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.GEAR_DEFAULT_ADDRESS = exports.DEFAULT_GEAR_ADDRESS = void 0;
|
|
7
|
+
exports.getGRC20ContractPromise = getGRC20ContractPromise;
|
|
8
|
+
exports.getVFTContractPromise = getVFTContractPromise;
|
|
9
|
+
var _grc = require("./grc20");
|
|
10
|
+
var _vft = require("./vft");
|
|
11
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
12
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
13
|
+
|
|
14
|
+
const DEFAULT_GEAR_ADDRESS = {
|
|
15
|
+
ALICE: '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY',
|
|
16
|
+
BOB: '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty'
|
|
17
|
+
};
|
|
18
|
+
exports.DEFAULT_GEAR_ADDRESS = DEFAULT_GEAR_ADDRESS;
|
|
19
|
+
const GEAR_DEFAULT_ADDRESS = '5EYCAe5ijiYfAXEth5DGRKiKuVjTXQKr877tUPz6eLz2t9aG';
|
|
20
|
+
exports.GEAR_DEFAULT_ADDRESS = GEAR_DEFAULT_ADDRESS;
|
|
21
|
+
function getGRC20ContractPromise(apiPromise, contractAddress) {
|
|
22
|
+
const gearApi = apiPromise;
|
|
23
|
+
return new _grc.GRC20(gearApi, contractAddress);
|
|
24
|
+
}
|
|
25
|
+
function getVFTContractPromise(apiPromise, contractAddress) {
|
|
26
|
+
const gearApi = apiPromise;
|
|
27
|
+
return new _vft.VFT(gearApi, contractAddress);
|
|
28
|
+
}
|