@subwallet/extension-base 1.3.6-0 → 1.3.7-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 +13 -0
- package/cjs/constants/blocked-actions.js +108 -0
- package/cjs/constants/index.js +4 -4
- package/cjs/core/substrate/xcm-parser.js +4 -3
- package/cjs/koni/api/nft/config.js +6 -4
- package/cjs/koni/api/nft/index.js +9 -0
- package/cjs/koni/api/nft/story_odyssey_nft/index.js +126 -0
- package/cjs/koni/background/handlers/Extension.js +22 -1
- package/cjs/koni/background/handlers/State.js +12 -0
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +2 -1
- package/cjs/services/chain-service/constants.js +2 -1
- package/cjs/services/earning-service/handlers/native-staking/para-chain.js +20 -17
- package/cjs/services/environment-service/stores/Environment.js +19 -0
- package/cjs/services/setting-service/SettingService.js +13 -0
- package/cjs/services/transaction-service/index.js +12 -6
- package/cjs/services/transaction-service/utils.js +3 -0
- package/cjs/stores/EnvironmentStore.js +18 -0
- package/cjs/stores/index.js +8 -1
- package/cjs/utils/environment.js +15 -1
- package/cjs/utils/staticData/index.js +7 -2
- package/constants/blocked-actions.d.ts +29 -0
- package/constants/blocked-actions.js +96 -0
- package/constants/index.d.ts +1 -1
- package/constants/index.js +1 -1
- package/core/substrate/xcm-parser.d.ts +1 -1
- package/core/substrate/xcm-parser.js +4 -3
- package/koni/api/nft/config.d.ts +1 -1
- package/koni/api/nft/config.js +5 -2
- package/koni/api/nft/index.js +9 -0
- package/koni/api/nft/story_odyssey_nft/index.d.ts +40 -0
- package/koni/api/nft/story_odyssey_nft/index.js +119 -0
- package/koni/background/handlers/Extension.d.ts +3 -0
- package/koni/background/handlers/Extension.js +22 -1
- package/koni/background/handlers/State.d.ts +3 -0
- package/koni/background/handlers/State.js +12 -0
- package/package.json +26 -10
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/substrate/index.js +2 -1
- package/services/chain-service/constants.d.ts +1 -0
- package/services/chain-service/constants.js +2 -1
- package/services/earning-service/handlers/native-staking/para-chain.js +20 -17
- package/services/environment-service/stores/Environment.d.ts +10 -0
- package/services/environment-service/stores/Environment.js +12 -0
- package/services/setting-service/SettingService.d.ts +5 -0
- package/services/setting-service/SettingService.js +13 -0
- package/services/transaction-service/index.js +13 -7
- package/services/transaction-service/utils.js +3 -0
- package/stores/EnvironmentStore.d.ts +5 -0
- package/stores/EnvironmentStore.js +10 -0
- package/stores/index.d.ts +1 -0
- package/stores/index.js +2 -1
- package/utils/environment.d.ts +6 -0
- package/utils/environment.js +8 -0
- package/utils/staticData/blockedActions.json +1 -0
- package/utils/staticData/index.d.ts +7 -3
- package/utils/staticData/index.js +5 -1
- package/cjs/constants/blocked-actions-list.js +0 -14
- package/constants/blocked-actions-list.d.ts +0 -7
- package/constants/blocked-actions-list.js +0 -7
|
@@ -2,6 +2,7 @@ import { _AssetRef, _AssetType, _ChainAsset, _ChainInfo, _FundStatus, _MultiChai
|
|
|
2
2
|
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
3
3
|
import { Resolver } from '@subwallet/extension-base/background/handlers/State';
|
|
4
4
|
import { AccountAuthType, AuthorizeRequest, ConfirmationRequestBase, RequestAccountList, RequestAccountSubscribe, RequestAccountUnsubscribe, RequestAuthorizeCancel, RequestAuthorizeReject, RequestAuthorizeSubscribe, RequestAuthorizeTab, RequestCurrentAccountAddress, ResponseAuthorizeList } from '@subwallet/extension-base/background/types';
|
|
5
|
+
import { AppConfig, BrowserConfig, OSConfig } from '@subwallet/extension-base/constants';
|
|
5
6
|
import { RequestOptimalTransferProcess } from '@subwallet/extension-base/services/balance-service/helpers';
|
|
6
7
|
import { TonTransactionConfig } from '@subwallet/extension-base/services/balance-service/transfer/ton-transfer';
|
|
7
8
|
import { _CHAIN_VALIDATION_ERROR } from '@subwallet/extension-base/services/chain-service/handler/types';
|
|
@@ -335,6 +336,15 @@ export declare type RequestChangeShowBalance = {
|
|
|
335
336
|
enable: boolean;
|
|
336
337
|
};
|
|
337
338
|
export declare type DetectBalanceCache = Record<string, number>;
|
|
339
|
+
export declare type RequestSaveAppConfig = {
|
|
340
|
+
appConfig: AppConfig;
|
|
341
|
+
};
|
|
342
|
+
export declare type RequestSaveBrowserConfig = {
|
|
343
|
+
browserConfig: BrowserConfig;
|
|
344
|
+
};
|
|
345
|
+
export declare type RequestSaveOSConfig = {
|
|
346
|
+
osConfig: OSConfig;
|
|
347
|
+
};
|
|
338
348
|
export interface RandomTestRequest {
|
|
339
349
|
start: number;
|
|
340
350
|
end: number;
|
|
@@ -1553,6 +1563,9 @@ export interface KoniRequestSignatures {
|
|
|
1553
1563
|
'pri(settings.saveShowBalance)': [RequestChangeShowBalance, boolean];
|
|
1554
1564
|
'pri(settings.logo.assets.subscribe)': [null, Record<string, string>, Record<string, string>];
|
|
1555
1565
|
'pri(settings.logo.chains.subscribe)': [null, Record<string, string>, Record<string, string>];
|
|
1566
|
+
'pri(settings.saveAppConfig)': [RequestSaveAppConfig, boolean];
|
|
1567
|
+
'pri(settings.saveBrowserConfig)': [RequestSaveBrowserConfig, boolean];
|
|
1568
|
+
'pri(settings.saveOSConfig)': [RequestSaveOSConfig, boolean];
|
|
1556
1569
|
'pri(yield.subscribePoolInfo)': [null, YieldPoolInfo[], YieldPoolInfo[]];
|
|
1557
1570
|
'pri(yield.subscribeYieldPosition)': [null, YieldPositionInfo[], YieldPositionInfo[]];
|
|
1558
1571
|
'pri(yield.subscribeYieldReward)': [null, EarningRewardJson, EarningRewardJson];
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.APP_VER = exports.APP_ENV = void 0;
|
|
7
|
+
exports.fetchBlockedConfigObjects = fetchBlockedConfigObjects;
|
|
8
|
+
exports.fetchLastestBlockedActionsAndFeatures = fetchLastestBlockedActionsAndFeatures;
|
|
9
|
+
exports.getPassConfigId = getPassConfigId;
|
|
10
|
+
var _extensionBase = require("@subwallet/extension-base");
|
|
11
|
+
var _utils = require("@subwallet/extension-base/utils");
|
|
12
|
+
var _staticData = require("@subwallet/extension-base/utils/staticData");
|
|
13
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
14
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
15
|
+
|
|
16
|
+
const APP_ENV = process.env.TARGET_ENV;
|
|
17
|
+
exports.APP_ENV = APP_ENV;
|
|
18
|
+
const APP_VER = _extensionBase.packageInfo.version;
|
|
19
|
+
exports.APP_VER = APP_VER;
|
|
20
|
+
const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
|
|
21
|
+
const branchName = process.env.BRANCH_NAME || 'koni-dev';
|
|
22
|
+
const targetFolder = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'list' : 'preview';
|
|
23
|
+
async function fetchBlockedConfigObjects() {
|
|
24
|
+
const targetFile = `${targetFolder}/envConfig.json`;
|
|
25
|
+
return await (0, _utils.fetchStaticData)('blocked-actions', targetFile);
|
|
26
|
+
}
|
|
27
|
+
function getPassConfigId(currentConfig, blockedConfigObjects) {
|
|
28
|
+
const passList = [];
|
|
29
|
+
Object.entries(blockedConfigObjects).forEach(_ref => {
|
|
30
|
+
let [key, appliedConfig] = _ref;
|
|
31
|
+
let passAppConfig = false;
|
|
32
|
+
let passBrowserConfig = false;
|
|
33
|
+
let passOSConfig = false;
|
|
34
|
+
if (!appliedConfig.appConfig || !currentConfig.appConfig) {
|
|
35
|
+
passAppConfig = true;
|
|
36
|
+
} else {
|
|
37
|
+
const isPassEnv = currentConfig.appConfig.environment === appliedConfig.appConfig.environment;
|
|
38
|
+
const isPassVer = isPassVersion(currentConfig.appConfig.version, appliedConfig.appConfig.version);
|
|
39
|
+
passAppConfig = isPassEnv && isPassVer;
|
|
40
|
+
}
|
|
41
|
+
if (!appliedConfig.browserConfig || !currentConfig.browserConfig) {
|
|
42
|
+
passBrowserConfig = true;
|
|
43
|
+
} else {
|
|
44
|
+
const isPassType = currentConfig.browserConfig.type === appliedConfig.browserConfig.type;
|
|
45
|
+
const isPassVer = isPassVersion(currentConfig.browserConfig.version, appliedConfig.browserConfig.version);
|
|
46
|
+
passBrowserConfig = isPassType && isPassVer;
|
|
47
|
+
}
|
|
48
|
+
if (!appliedConfig.osConfig || !currentConfig.osConfig) {
|
|
49
|
+
passOSConfig = true;
|
|
50
|
+
} else {
|
|
51
|
+
const isPassType = currentConfig.osConfig.type === appliedConfig.osConfig.type;
|
|
52
|
+
const isPassVer = isPassVersion(currentConfig.osConfig.version, appliedConfig.osConfig.version);
|
|
53
|
+
passOSConfig = isPassType && isPassVer;
|
|
54
|
+
}
|
|
55
|
+
if (passAppConfig && passBrowserConfig && passOSConfig) {
|
|
56
|
+
passList.push(key);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
return passList;
|
|
60
|
+
}
|
|
61
|
+
function isPassVersion(versionStr, versionCondition) {
|
|
62
|
+
// todo: check if has case versionStr = undefined?
|
|
63
|
+
const versionArr = versionStr.split('.');
|
|
64
|
+
if (!versionCondition) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
if (versionCondition.includes('>=')) {
|
|
68
|
+
const versionConditionStr = versionCondition.replace('>=', '').trim();
|
|
69
|
+
const versionConditionArr = versionConditionStr.split('.'); // todo: map(Number) instead of parseInt later
|
|
70
|
+
|
|
71
|
+
if (versionConditionStr === versionStr) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
for (let i = 0; i < versionArr.length; i++) {
|
|
75
|
+
if (parseInt(versionArr[i]) < parseInt(versionConditionArr[i])) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
if (parseInt(versionArr[i]) > parseInt(versionConditionArr[i])) {
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
if (versionCondition.includes('>')) {
|
|
85
|
+
const versionConditionArr = versionCondition.replace('>', '').trim().split('.');
|
|
86
|
+
for (let i = 0; i < versionArr.length; i++) {
|
|
87
|
+
if (parseInt(versionArr[i]) < parseInt(versionConditionArr[i])) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
if (parseInt(versionArr[i]) > parseInt(versionConditionArr[i])) {
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// todo: also handle less use cases: <, <=
|
|
98
|
+
|
|
99
|
+
const versionConditionStr = versionCondition.trim();
|
|
100
|
+
return versionStr === versionConditionStr;
|
|
101
|
+
}
|
|
102
|
+
async function fetchLastestBlockedActionsAndFeatures(ids) {
|
|
103
|
+
if (ids.length === 0) {
|
|
104
|
+
return [_staticData.staticData[_staticData.StaticKey.BLOCKED_ACTIONS_FEATURES]];
|
|
105
|
+
}
|
|
106
|
+
const targetFiles = ids.map(id => `${targetFolder}/${id}.json`);
|
|
107
|
+
return await Promise.all(targetFiles.map(targetFile => (0, _utils.fetchStaticData)('blocked-actions', targetFile)));
|
|
108
|
+
}
|
package/cjs/constants/index.js
CHANGED
|
@@ -42,15 +42,15 @@ var _exportNames = {
|
|
|
42
42
|
PERMISSIONS_TO_REVOKE: true
|
|
43
43
|
};
|
|
44
44
|
exports.XCM_MIN_AMOUNT_RATIO = exports.XCM_FEE_RATIO = exports.SUB_TOKEN_REFRESH_BALANCE_INTERVAL = exports.PERMISSIONS_TO_REVOKE = exports.ORDINAL_METHODS = exports.ORDINAL_COLLECTION = exports.NETWORK_MULTI_GAS_FEE = exports.MANTA_PAY_BALANCE_INTERVAL = exports.IGNORE_QR_SIGNER = exports.IGNORE_GET_SUBSTRATE_FEATURES_LIST = exports.GAS_PRICE_RATIO = exports.CRON_SYNC_MANTA_PAY = exports.CRON_REFRESH_STAKING_REWARD_INTERVAL = exports.CRON_REFRESH_STAKING_REWARD_FAST_INTERVAL = exports.CRON_REFRESH_PRICE_INTERVAL = exports.CRON_REFRESH_NFT_INTERVAL = exports.CRON_REFRESH_MKT_CAMPAIGN_INTERVAL = exports.CRON_REFRESH_HISTORY_INTERVAL = exports.CRON_REFRESH_EARNING_REWARD_HISTORY_INTERVAL = exports.CRON_REFRESH_CHAIN_STAKING_METADATA = exports.CRON_REFRESH_CHAIN_NOMINATOR_METADATA = exports.CRON_RECOVER_HISTORY_INTERVAL = exports.CRON_LISTEN_AVAIL_BRIDGE_CLAIM = exports.CRON_GET_API_MAP_STATUS = exports.CRON_AUTO_RECOVER_WEB3_INTERVAL = exports.CRON_AUTO_RECOVER_DOTSAMA_INTERVAL = exports.BITTENSOR_REFRESH_STAKE_INFO = exports.BITTENSOR_REFRESH_STAKE_APY = exports.BASE_SECOND_INTERVAL = exports.BASE_MINUTE_INTERVAL = exports.ASTAR_REFRESH_BALANCE_INTERVAL = exports.ALL_NETWORK_KEY = exports.ALL_GENESIS_HASH = exports.ALL_ACCOUNT_KEY = exports.ALL_ACCOUNT_AUTH_TYPES = exports.ACALA_REFRESH_CROWDLOAN_INTERVAL = void 0;
|
|
45
|
-
var
|
|
46
|
-
Object.keys(
|
|
45
|
+
var _blockedActions = require("./blocked-actions");
|
|
46
|
+
Object.keys(_blockedActions).forEach(function (key) {
|
|
47
47
|
if (key === "default" || key === "__esModule") return;
|
|
48
48
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
49
|
-
if (key in exports && exports[key] ===
|
|
49
|
+
if (key in exports && exports[key] === _blockedActions[key]) return;
|
|
50
50
|
Object.defineProperty(exports, key, {
|
|
51
51
|
enumerable: true,
|
|
52
52
|
get: function () {
|
|
53
|
-
return
|
|
53
|
+
return _blockedActions[key];
|
|
54
54
|
}
|
|
55
55
|
});
|
|
56
56
|
});
|
|
@@ -231,17 +231,18 @@ function _getAssetIdentifier(tokenInfo, version) {
|
|
|
231
231
|
throw new Error('Asset must have multilocation');
|
|
232
232
|
}
|
|
233
233
|
const assetIdentifier = ['statemint-LOCAL-KSM', 'statemine-LOCAL-DOT'].includes(tokenInfo.slug) // todo: hotfix for ksm statemint recheck all chain
|
|
234
|
-
? _assetIdentifier : _adaptX1Interior(
|
|
234
|
+
? _assetIdentifier : _adaptX1Interior(_assetIdentifier, version);
|
|
235
235
|
return version >= 4 // from V4, Concrete is removed
|
|
236
236
|
? assetIdentifier : {
|
|
237
237
|
Concrete: assetIdentifier
|
|
238
238
|
};
|
|
239
239
|
}
|
|
240
|
-
function _adaptX1Interior(
|
|
240
|
+
function _adaptX1Interior(_assetIdentifier, version) {
|
|
241
|
+
const assetIdentifier = structuredClone(_assetIdentifier);
|
|
241
242
|
const interior = assetIdentifier.interior;
|
|
242
243
|
const isInteriorObj = typeof interior === 'object' && interior !== null;
|
|
243
244
|
const isX1 = isInteriorObj && 'X1' in interior;
|
|
244
|
-
const needModifyX1 = version
|
|
245
|
+
const needModifyX1 = version < 4 && Array.isArray(interior.X1);
|
|
245
246
|
if (isInteriorObj && isX1 && needModifyX1) {
|
|
246
247
|
// X1 is an object for version < 4. From V4, it's an array
|
|
247
248
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.W3S_IPFS = exports.VARA_SCAN_ENDPOINT = exports.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.UNIQUE_SCAN_ENDPOINT = exports.UNIQUE_IPFS_GATEWAY = exports.TRANSFER_CHAIN_ID = exports.TERNOA_MAINNET_GATEWAY = exports.TERNOA_MAINNET_CLIENT_NFT = exports.TERNOA_ALPHANET_GATEWAY = exports.TERNOA_ALPHANET_CLIENT_NFT = exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN = exports.SUPPORTED_NFT_NETWORKS = exports.SUBWALLET_IPFS = exports.SINGULAR_V2_ENDPOINT = exports.SINGULAR_V2_COLLECTION_ENDPOINT = exports.SINGULAR_V1_ENDPOINT = exports.SINGULAR_V1_COLLECTION_ENDPOINT = exports.RMRK_PINATA_SERVER = exports.QUARTZ_SCAN_ENDPOINT = exports.
|
|
6
|
+
exports.W3S_IPFS = exports.VARA_SCAN_ENDPOINT = exports.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.UNIQUE_SCAN_ENDPOINT = exports.UNIQUE_IPFS_GATEWAY = exports.TRANSFER_CHAIN_ID = exports.TERNOA_MAINNET_GATEWAY = exports.TERNOA_MAINNET_CLIENT_NFT = exports.TERNOA_ALPHANET_GATEWAY = exports.TERNOA_ALPHANET_CLIENT_NFT = exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN = exports.SUPPORTED_NFT_NETWORKS = exports.SUBWALLET_IPFS = exports.SINGULAR_V2_ENDPOINT = exports.SINGULAR_V2_COLLECTION_ENDPOINT = exports.SINGULAR_V1_ENDPOINT = exports.SINGULAR_V1_COLLECTION_ENDPOINT = exports.RMRK_PINATA_SERVER = exports.QUARTZ_SCAN_ENDPOINT = exports.OPAL_SCAN_ENDPOINT = exports.ODYSSEY_ENDPOINT = exports.NFT_STORAGE_GATEWAY = exports.KANARIA_EXTERNAL_SERVER = exports.KANARIA_ENDPOINT = exports.IPFS_W3S_LINK = exports.IPFS_IO = exports.IPFS_GATEWAY_4EVERLAND = exports.IPFS_FLEEK = exports.IPFS_ETH_ARAGON = exports.IPFS2_RMRK = exports.GATEWAY_IPFS_IO = exports.DWEB_LINK = exports.CLOUDFLARE_PINATA_SERVER = exports.CF_IPFS_GATEWAY = exports.BIT_COUNTRY_THUMBNAIL_RESOLVER = exports.BIT_COUNTRY_LAND_ESTATE_METADATA_API = exports.BIT_COUNTRY_IPFS_SERVER = exports.BIT_AVATAR_API = exports.AVAIL_LIGHT_CLIENT_NFT = void 0;
|
|
7
7
|
exports.getRandomIpfsGateway = getRandomIpfsGateway;
|
|
8
8
|
var _environment = require("@subwallet/extension-base/utils/environment");
|
|
9
9
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
@@ -41,12 +41,12 @@ const CF_IPFS_GATEWAY = 'https://cf-ipfs.com/ipfs/';
|
|
|
41
41
|
|
|
42
42
|
// XOrigin
|
|
43
43
|
exports.CF_IPFS_GATEWAY = CF_IPFS_GATEWAY;
|
|
44
|
-
const
|
|
44
|
+
const ODYSSEY_ENDPOINT = 'https://indexer-v2.dev.aurascan.io/api/v2/graphql';
|
|
45
45
|
|
|
46
46
|
// deprecated
|
|
47
47
|
// export const UNIQUE_SCAN_ENDPOINT = 'https://explorer-api.unique.network/v1/graphql';
|
|
48
48
|
// export const QUARTZ_SCAN_ENDPOINT = 'https://hasura-quartz.unique.network/v1/graphql';
|
|
49
|
-
exports.
|
|
49
|
+
exports.ODYSSEY_ENDPOINT = ODYSSEY_ENDPOINT;
|
|
50
50
|
const VARA_SCAN_ENDPOINT = 'https://nft-explorer.vara-network.io/graphql';
|
|
51
51
|
exports.VARA_SCAN_ENDPOINT = VARA_SCAN_ENDPOINT;
|
|
52
52
|
const AVAIL_LIGHT_CLIENT_NFT = 'https://indexer.availspace.app/graphql'; // 'https://indexer-nft.availspace.app/graphql';
|
|
@@ -87,6 +87,8 @@ exports.TERNOA_ALPHANET_CLIENT_NFT = TERNOA_ALPHANET_CLIENT_NFT;
|
|
|
87
87
|
const TERNOA_MAINNET_GATEWAY = 'https://ipfs-mainnet.trnnfr.com/ipfs/';
|
|
88
88
|
exports.TERNOA_MAINNET_GATEWAY = TERNOA_MAINNET_GATEWAY;
|
|
89
89
|
const TERNOA_ALPHANET_GATEWAY = 'https://ipfs-dev.trnnfr.com/ipfs/';
|
|
90
|
+
|
|
91
|
+
// XOrigin
|
|
90
92
|
exports.TERNOA_ALPHANET_GATEWAY = TERNOA_ALPHANET_GATEWAY;
|
|
91
93
|
const IPFS_GATEWAY_4EVERLAND = 'https://4everland.io/ipfs/';
|
|
92
94
|
exports.IPFS_GATEWAY_4EVERLAND = IPFS_GATEWAY_4EVERLAND;
|
|
@@ -124,7 +126,7 @@ exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = SUPPORTED_TRANSFER_EVM_CHAIN_NAME;
|
|
|
124
126
|
})(SUPPORTED_TRANSFER_EVM_CHAIN_NAME || (exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = SUPPORTED_TRANSFER_EVM_CHAIN_NAME = {}));
|
|
125
127
|
const SUPPORTED_TRANSFER_EVM_CHAIN = [SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbase, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbeam, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonriver, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.astarEvm, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.shiden, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.shibuya];
|
|
126
128
|
exports.SUPPORTED_TRANSFER_EVM_CHAIN = SUPPORTED_TRANSFER_EVM_CHAIN;
|
|
127
|
-
const UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = ['unique_evm', 'rari'];
|
|
129
|
+
const UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = ['unique_evm', 'rari', 'storyOdyssey_testnet'];
|
|
128
130
|
exports.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME;
|
|
129
131
|
const TRANSFER_CHAIN_ID = {
|
|
130
132
|
[SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbase]: 1287,
|
|
@@ -21,6 +21,7 @@ var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
|
21
21
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
22
22
|
var _assethub_nft = _interopRequireDefault(require("./assethub_nft"));
|
|
23
23
|
var _rari = require("./rari");
|
|
24
|
+
var _story_odyssey_nft = require("./story_odyssey_nft");
|
|
24
25
|
var _ternoa_nft = require("./ternoa_nft");
|
|
25
26
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
26
27
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -56,6 +57,8 @@ function createSubstrateNftApi(chain, substrateApi, addresses) {
|
|
|
56
57
|
return [new _ternoa_nft.TernoaNftApi(substrateApi, substrateAddresses, chain)];
|
|
57
58
|
} else if (_constants._NFT_CHAIN_GROUP.rari.includes(chain)) {
|
|
58
59
|
return [new _rari.RariNftApi(chain, evmAddresses)];
|
|
60
|
+
} else if (_constants._NFT_CHAIN_GROUP.story_odyssey.includes(chain)) {
|
|
61
|
+
return [new _story_odyssey_nft.OdysseyNftApi(chain, evmAddresses)];
|
|
59
62
|
}
|
|
60
63
|
return null;
|
|
61
64
|
}
|
|
@@ -166,6 +169,12 @@ class NftHandler {
|
|
|
166
169
|
this.handlers.push(...handlers);
|
|
167
170
|
}
|
|
168
171
|
}
|
|
172
|
+
if (chain === 'storyOdyssey_testnet') {
|
|
173
|
+
const handlers = createSubstrateNftApi(chain, null, evmAddresses);
|
|
174
|
+
if (handlers && !!handlers.length) {
|
|
175
|
+
this.handlers.push(...handlers);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
169
178
|
if ((0, _utils._isChainSupportWasmNft)(chainInfo)) {
|
|
170
179
|
if (this.substrateApiMap[chain]) {
|
|
171
180
|
const handler = createWasmNftApi(chain, this.substrateApiMap[chain], substrateAddresses);
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.OdysseyNftApi = void 0;
|
|
7
|
+
var _config = require("../config");
|
|
8
|
+
var _nft = require("../nft");
|
|
9
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
10
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
11
|
+
|
|
12
|
+
class OdysseyNftApi extends _nft.BaseNftApi {
|
|
13
|
+
constructor(chain, addresses) {
|
|
14
|
+
super(chain, undefined, addresses);
|
|
15
|
+
}
|
|
16
|
+
endpoint = _config.ODYSSEY_ENDPOINT;
|
|
17
|
+
static parseNftRequest(address) {
|
|
18
|
+
const lowerCaseAddress = address.toLowerCase();
|
|
19
|
+
return `
|
|
20
|
+
query MyQuery {
|
|
21
|
+
odyssey {
|
|
22
|
+
erc721_token(
|
|
23
|
+
where: {owner: {_eq: "${lowerCaseAddress}"}}
|
|
24
|
+
) {
|
|
25
|
+
media_info
|
|
26
|
+
owner
|
|
27
|
+
token_id
|
|
28
|
+
erc721_contract_address
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
`;
|
|
33
|
+
}
|
|
34
|
+
async fetchNftData(query) {
|
|
35
|
+
try {
|
|
36
|
+
const response = await fetch(this.endpoint, {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: {
|
|
39
|
+
'Content-Type': 'application/json'
|
|
40
|
+
},
|
|
41
|
+
body: JSON.stringify({
|
|
42
|
+
operationName: 'MyQuery',
|
|
43
|
+
variables: {},
|
|
44
|
+
query
|
|
45
|
+
})
|
|
46
|
+
});
|
|
47
|
+
const result = await response.json();
|
|
48
|
+
return result.data.odyssey.erc721_token;
|
|
49
|
+
} catch (err) {
|
|
50
|
+
console.error('Error:', err);
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async fetchUrlMetadata(url) {
|
|
55
|
+
try {
|
|
56
|
+
const response = await fetch(url);
|
|
57
|
+
return await response.json();
|
|
58
|
+
} catch (err) {
|
|
59
|
+
console.error('Error:', err);
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
parseUrlIfIpfs(url) {
|
|
64
|
+
if (url.startsWith('ipfs://')) {
|
|
65
|
+
return this.parseUrl(url);
|
|
66
|
+
}
|
|
67
|
+
if (url.includes('github.com')) {
|
|
68
|
+
return `${url}?raw=true`;
|
|
69
|
+
}
|
|
70
|
+
return url;
|
|
71
|
+
}
|
|
72
|
+
parseNftItem(nft, metadata, address) {
|
|
73
|
+
var _metadata$media, _metadata$media$;
|
|
74
|
+
const urlMetadataImage = this.parseUrlIfIpfs((metadata === null || metadata === void 0 ? void 0 : metadata.image) || '');
|
|
75
|
+
return {
|
|
76
|
+
id: nft.token_id,
|
|
77
|
+
name: (metadata === null || metadata === void 0 ? void 0 : metadata.name) || (metadata === null || metadata === void 0 ? void 0 : metadata.title),
|
|
78
|
+
description: metadata === null || metadata === void 0 ? void 0 : metadata.description,
|
|
79
|
+
image: urlMetadataImage || (metadata === null || metadata === void 0 ? void 0 : (_metadata$media = metadata.media) === null || _metadata$media === void 0 ? void 0 : (_metadata$media$ = _metadata$media[0]) === null || _metadata$media$ === void 0 ? void 0 : _metadata$media$.url),
|
|
80
|
+
collectionId: nft.erc721_contract_address,
|
|
81
|
+
chain: this.chain,
|
|
82
|
+
owner: address
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
parseNftCollection(nft) {
|
|
86
|
+
const image = this.parseUrlIfIpfs(nft.media_info.onchain.metadata.image || '');
|
|
87
|
+
return {
|
|
88
|
+
collectionId: nft.erc721_contract_address,
|
|
89
|
+
chain: this.chain,
|
|
90
|
+
collectionName: nft.media_info.onchain.metadata.name,
|
|
91
|
+
image: image || undefined
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
async processNftItem(nft, address, params) {
|
|
95
|
+
const tokenUri = this.parseUrlIfIpfs(nft.media_info.onchain.token_uri) || '';
|
|
96
|
+
const urlMetadata = await this.fetchUrlMetadata(tokenUri);
|
|
97
|
+
const parsedNft = this.parseNftItem(nft, urlMetadata, address);
|
|
98
|
+
params.updateItem(this.chain, parsedNft, address);
|
|
99
|
+
const parsedCollection = this.parseNftCollection(nft);
|
|
100
|
+
params.updateCollection(this.chain, parsedCollection);
|
|
101
|
+
}
|
|
102
|
+
async handleNfts(params) {
|
|
103
|
+
await Promise.all(this.addresses.map(async address => {
|
|
104
|
+
const nftDetails = await this.fetchNftsWithDetail(address);
|
|
105
|
+
if (!nftDetails || nftDetails.length === 0) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
await Promise.all(nftDetails.map(async nft => {
|
|
109
|
+
await this.processNftItem(nft, address, params);
|
|
110
|
+
}));
|
|
111
|
+
}));
|
|
112
|
+
}
|
|
113
|
+
async fetchNftsWithDetail(address) {
|
|
114
|
+
const query = OdysseyNftApi.parseNftRequest(address);
|
|
115
|
+
return await this.fetchNftData(query);
|
|
116
|
+
}
|
|
117
|
+
async fetchNfts(params) {
|
|
118
|
+
try {
|
|
119
|
+
await this.handleNfts(params);
|
|
120
|
+
} catch (e) {
|
|
121
|
+
return 0;
|
|
122
|
+
}
|
|
123
|
+
return 1;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.OdysseyNftApi = OdysseyNftApi;
|
|
@@ -2578,7 +2578,6 @@ class KoniExtension {
|
|
|
2578
2578
|
}
|
|
2579
2579
|
|
|
2580
2580
|
// Phishing detect
|
|
2581
|
-
|
|
2582
2581
|
async passPhishingPage(_ref46) {
|
|
2583
2582
|
let {
|
|
2584
2583
|
url
|
|
@@ -2586,6 +2585,20 @@ class KoniExtension {
|
|
|
2586
2585
|
return await this.#koniState.approvePassPhishingPage(url);
|
|
2587
2586
|
}
|
|
2588
2587
|
|
|
2588
|
+
// Set environment config
|
|
2589
|
+
saveAppConfig(request) {
|
|
2590
|
+
this.#koniState.saveEnvConfig('appConfig', request.appConfig);
|
|
2591
|
+
return true;
|
|
2592
|
+
}
|
|
2593
|
+
saveBrowserConfig(request) {
|
|
2594
|
+
this.#koniState.saveEnvConfig('browserConfig', request.browserConfig);
|
|
2595
|
+
return true;
|
|
2596
|
+
}
|
|
2597
|
+
saveOSConfig(request) {
|
|
2598
|
+
this.#koniState.saveEnvConfig('osConfig', request.osConfig);
|
|
2599
|
+
return true;
|
|
2600
|
+
}
|
|
2601
|
+
|
|
2589
2602
|
/// Wallet connect
|
|
2590
2603
|
|
|
2591
2604
|
// Connect
|
|
@@ -3875,6 +3888,14 @@ class KoniExtension {
|
|
|
3875
3888
|
case 'pri(phishing.pass)':
|
|
3876
3889
|
return await this.passPhishingPage(request);
|
|
3877
3890
|
|
|
3891
|
+
// Set Environment config
|
|
3892
|
+
case 'pri(settings.saveAppConfig)':
|
|
3893
|
+
return this.saveAppConfig(request);
|
|
3894
|
+
case 'pri(settings.saveBrowserConfig)':
|
|
3895
|
+
return this.saveBrowserConfig(request);
|
|
3896
|
+
case 'pri(settings.saveOSConfig)':
|
|
3897
|
+
return this.saveOSConfig(request);
|
|
3898
|
+
|
|
3878
3899
|
/// Keyring state
|
|
3879
3900
|
case 'pri(keyring.subscribe)':
|
|
3880
3901
|
return this.keyringStateSubscribe(id, port);
|
|
@@ -1322,6 +1322,18 @@ class KoniState {
|
|
|
1322
1322
|
});
|
|
1323
1323
|
});
|
|
1324
1324
|
}
|
|
1325
|
+
saveEnvConfig(key, value) {
|
|
1326
|
+
this.settingService.getEnvironmentList(config => {
|
|
1327
|
+
const newSettings = {
|
|
1328
|
+
...config,
|
|
1329
|
+
[key]: value
|
|
1330
|
+
};
|
|
1331
|
+
this.settingService.setEnvironment(newSettings);
|
|
1332
|
+
});
|
|
1333
|
+
}
|
|
1334
|
+
initEnvConfig(envConfig) {
|
|
1335
|
+
this.settingService.setEnvironment(envConfig);
|
|
1336
|
+
}
|
|
1325
1337
|
async resetWallet(resetAll) {
|
|
1326
1338
|
await this.keyringService.resetWallet(resetAll);
|
|
1327
1339
|
await this.earningService.resetYieldPosition();
|
package/cjs/packageInfo.js
CHANGED
|
@@ -202,11 +202,12 @@ const subscribeForeignAssetBalance = async _ref2 => {
|
|
|
202
202
|
const unsubList = await Promise.all(Object.values(tokenMap).map(tokenInfo => {
|
|
203
203
|
try {
|
|
204
204
|
if ((0, _utils2._isBridgedToken)(tokenInfo)) {
|
|
205
|
+
const version = ['statemint', 'statemine'].includes(chainInfo.slug) ? 4 : 3;
|
|
205
206
|
const params = [{
|
|
206
207
|
section: 'query',
|
|
207
208
|
module: foreignAssetsAccountKey.split('_')[1],
|
|
208
209
|
method: foreignAssetsAccountKey.split('_')[2],
|
|
209
|
-
args: addresses.map(address => [(0, _utils2._getTokenOnChainInfo)(tokenInfo) || (0, _xcmParser._adaptX1Interior)((0, _utils2._getXcmAssetMultilocation)(tokenInfo),
|
|
210
|
+
args: addresses.map(address => [(0, _utils2._getTokenOnChainInfo)(tokenInfo) || (0, _xcmParser._adaptX1Interior)((0, _utils2._getXcmAssetMultilocation)(tokenInfo), version), address])
|
|
210
211
|
}];
|
|
211
212
|
return substrateApi.subscribeDataWithMulti(params, rs => {
|
|
212
213
|
const balances = rs[foreignAssetsAccountKey];
|
|
@@ -66,7 +66,8 @@ const _NFT_CHAIN_GROUP = {
|
|
|
66
66
|
vara: ['vara_network'],
|
|
67
67
|
avail: ['avail_mainnet'],
|
|
68
68
|
ternoa: ['ternoa', 'ternoa_alphanet'],
|
|
69
|
-
rari: ['rari']
|
|
69
|
+
rari: ['rari'],
|
|
70
|
+
story_odyssey: ['storyOdyssey', 'storyOdyssey_testnet']
|
|
70
71
|
};
|
|
71
72
|
|
|
72
73
|
// Staking--------------------------------------------------------------------------------------------------------------
|
|
@@ -308,7 +308,7 @@ class ParaNativeStakingPoolHandler extends _basePara.default {
|
|
|
308
308
|
for (const collator of _allCollators) {
|
|
309
309
|
const _collatorAddress = collator[0].toHuman();
|
|
310
310
|
const collatorAddress = _collatorAddress[0];
|
|
311
|
-
if (
|
|
311
|
+
if (selectedCollators.includes(collatorAddress)) {
|
|
312
312
|
const collatorInfo = collator[1].toPrimitive();
|
|
313
313
|
const bnTotalStake = new _util.BN(collatorInfo.totalCounted);
|
|
314
314
|
const bnOwnStake = new _util.BN(collatorInfo.bond);
|
|
@@ -331,7 +331,7 @@ class ParaNativeStakingPoolHandler extends _basePara.default {
|
|
|
331
331
|
}
|
|
332
332
|
}
|
|
333
333
|
await Promise.all(allCollators.map(async collator => {
|
|
334
|
-
if (
|
|
334
|
+
if (selectedCollators.includes(collator.address)) {
|
|
335
335
|
// noted: number of blocks = total points / points per block
|
|
336
336
|
const _collatorPoints = await apiProps.api.query.parachainStaking.awardedPts(parseInt(round.current) - 1, collator.address);
|
|
337
337
|
const collatorPoints = _collatorPoints.toPrimitive();
|
|
@@ -362,10 +362,11 @@ class ParaNativeStakingPoolHandler extends _basePara.default {
|
|
|
362
362
|
async getParachainPoolTargets() {
|
|
363
363
|
const apiProps = await this.substrateApi.isReady;
|
|
364
364
|
const allCollators = [];
|
|
365
|
-
const [_allCollators, _collatorCommission] = await Promise.all([apiProps.api.query.parachainStaking.candidateInfo.entries(), apiProps.api.query.parachainStaking.collatorCommission()]);
|
|
365
|
+
const [_allCollators, _collatorCommission, _selectedCandidates] = await Promise.all([apiProps.api.query.parachainStaking.candidateInfo.entries(), apiProps.api.query.parachainStaking.collatorCommission(), apiProps.api.query.parachainStaking.selectedCandidates()]);
|
|
366
366
|
const maxDelegationPerCollator = apiProps.api.consts.parachainStaking.maxTopDelegationsPerCandidate.toString();
|
|
367
367
|
const rawCollatorCommission = _collatorCommission.toHuman();
|
|
368
368
|
const collatorCommission = parseFloat(rawCollatorCommission.split('%')[0]);
|
|
369
|
+
const selectedCollators = _selectedCandidates.toPrimitive();
|
|
369
370
|
for (const collator of _allCollators) {
|
|
370
371
|
const _collatorAddress = collator[0].toHuman();
|
|
371
372
|
const collatorAddress = _collatorAddress[0];
|
|
@@ -375,20 +376,22 @@ class ParaNativeStakingPoolHandler extends _basePara.default {
|
|
|
375
376
|
const bnOtherStake = bnTotalStake.sub(bnOwnStake);
|
|
376
377
|
const bnMinBond = new _util.BN(collatorInfo.lowestTopDelegationAmount);
|
|
377
378
|
const maxNominatorRewarded = parseInt(maxDelegationPerCollator);
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
379
|
+
if (selectedCollators.includes(collatorAddress)) {
|
|
380
|
+
allCollators.push({
|
|
381
|
+
commission: 0,
|
|
382
|
+
expectedReturn: 0,
|
|
383
|
+
address: collatorAddress,
|
|
384
|
+
totalStake: bnTotalStake.toString(),
|
|
385
|
+
ownStake: bnOwnStake.toString(),
|
|
386
|
+
otherStake: bnOtherStake.toString(),
|
|
387
|
+
nominatorCount: collatorInfo.delegationCount,
|
|
388
|
+
blocked: false,
|
|
389
|
+
isVerified: false,
|
|
390
|
+
minBond: bnMinBond.toString(),
|
|
391
|
+
chain: this.chain,
|
|
392
|
+
isCrowded: collatorInfo.delegationCount ? collatorInfo.delegationCount >= maxNominatorRewarded : false
|
|
393
|
+
});
|
|
394
|
+
}
|
|
392
395
|
}
|
|
393
396
|
const extraInfoMap = {};
|
|
394
397
|
await Promise.all(allCollators.map(async collator => {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.EnvironmentStoreSubject = void 0;
|
|
7
|
+
var _Base = require("@subwallet/extension-base/services/keyring-service/context/stores/Base");
|
|
8
|
+
var _stores = require("@subwallet/extension-base/stores");
|
|
9
|
+
var _rxjs = require("rxjs");
|
|
10
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
11
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
12
|
+
|
|
13
|
+
class EnvironmentStoreSubject extends _Base.StoreSubject {
|
|
14
|
+
store = new _stores.EnvironmentStore();
|
|
15
|
+
subject = new _rxjs.BehaviorSubject({});
|
|
16
|
+
key = 'Environment';
|
|
17
|
+
defaultValue = {};
|
|
18
|
+
}
|
|
19
|
+
exports.EnvironmentStoreSubject = EnvironmentStoreSubject;
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _constants = require("@subwallet/extension-base/constants");
|
|
9
|
+
var _Environment = require("@subwallet/extension-base/services/environment-service/stores/Environment");
|
|
9
10
|
var _storage = require("@subwallet/extension-base/storage");
|
|
10
11
|
var _PassPhishingStore = _interopRequireDefault(require("@subwallet/extension-base/stores/PassPhishingStore"));
|
|
11
12
|
var _Settings = _interopRequireDefault(require("@subwallet/extension-base/stores/Settings"));
|
|
@@ -17,6 +18,7 @@ var _constants2 = require("./constants");
|
|
|
17
18
|
class SettingService {
|
|
18
19
|
settingsStore = new _Settings.default();
|
|
19
20
|
passPhishingStore = new _PassPhishingStore.default();
|
|
21
|
+
environmentStore = new _Environment.EnvironmentStoreSubject();
|
|
20
22
|
constructor() {
|
|
21
23
|
this.initSetting().catch(console.error);
|
|
22
24
|
}
|
|
@@ -69,6 +71,17 @@ class SettingService {
|
|
|
69
71
|
setPassPhishing(data, callback) {
|
|
70
72
|
this.passPhishingStore.set('PassPhishing', data, callback);
|
|
71
73
|
}
|
|
74
|
+
getEnvironmentSetting() {
|
|
75
|
+
return this.environmentStore.subject.value;
|
|
76
|
+
}
|
|
77
|
+
getEnvironmentList(update) {
|
|
78
|
+
this.environmentStore.store.get('Environment', value => {
|
|
79
|
+
update(value || {});
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
setEnvironment(data) {
|
|
83
|
+
this.environmentStore.upsertData(data);
|
|
84
|
+
}
|
|
72
85
|
|
|
73
86
|
// Use for mobile only
|
|
74
87
|
get isAlwaysRequired() {
|
|
@@ -77,12 +77,18 @@ class TransactionService {
|
|
|
77
77
|
extrinsicType
|
|
78
78
|
} = validationResponse;
|
|
79
79
|
const chainInfo = this.state.chainService.getChainInfoByKey(chain);
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
80
|
+
const blockedConfigObjects = await (0, _constants.fetchBlockedConfigObjects)();
|
|
81
|
+
const currentConfig = this.state.settingService.getEnvironmentSetting();
|
|
82
|
+
const passBlockedConfigId = (0, _constants.getPassConfigId)(currentConfig, blockedConfigObjects);
|
|
83
|
+
const blockedActionsFeaturesMaps = await (0, _constants.fetchLastestBlockedActionsAndFeatures)(passBlockedConfigId);
|
|
84
|
+
for (const blockedActionsFeaturesMap of blockedActionsFeaturesMaps) {
|
|
85
|
+
const {
|
|
86
|
+
blockedActionsMap,
|
|
87
|
+
blockedFeaturesList
|
|
88
|
+
} = blockedActionsFeaturesMap;
|
|
89
|
+
(0, _transfer.checkSupportForFeature)(validationResponse, blockedFeaturesList, chainInfo);
|
|
90
|
+
(0, _transfer.checkSupportForAction)(validationResponse, blockedActionsMap);
|
|
91
|
+
}
|
|
86
92
|
const transaction = transactionInput.transaction;
|
|
87
93
|
|
|
88
94
|
// Check duplicated transaction
|
|
@@ -42,6 +42,9 @@ function getBlockExplorerAccountRoute(explorerLink) {
|
|
|
42
42
|
if (explorerLink.includes('explorer.zkverify.io')) {
|
|
43
43
|
return 'account';
|
|
44
44
|
}
|
|
45
|
+
if (explorerLink.includes('astral.autonomys')) {
|
|
46
|
+
return 'accounts';
|
|
47
|
+
}
|
|
45
48
|
return 'address';
|
|
46
49
|
}
|
|
47
50
|
function getBlockExplorerTxRoute(chainInfo) {
|