@subwallet/extension-base 1.3.6-1 → 1.3.8-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 +20 -5
- package/background/KoniTypes.js +1 -1
- package/cjs/background/KoniTypes.js +1 -1
- package/cjs/constants/blocked-actions.js +108 -0
- package/cjs/constants/index.js +4 -4
- package/cjs/core/substrate/xcm-parser.js +20 -5
- package/cjs/koni/api/contract-handler/utils/index.js +15 -1
- 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 +64 -4
- package/cjs/koni/background/handlers/State.js +23 -2
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +2 -1
- package/cjs/services/balance-service/transfer/xcm/index.js +31 -1
- package/cjs/services/balance-service/transfer/xcm/polygonBridge.js +108 -0
- package/cjs/services/chain-online-service/constants.js +32 -0
- package/cjs/services/chain-online-service/index.js +190 -0
- package/cjs/services/chain-service/constants.js +2 -1
- package/cjs/services/chain-service/index.js +87 -127
- package/cjs/services/chain-service/utils/index.js +0 -2
- package/cjs/services/chain-service/utils/patch.js +7 -3
- 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/fee-service/utils/index.js +14 -0
- package/cjs/services/inapp-notification-service/consts.js +6 -4
- package/cjs/services/inapp-notification-service/index.js +110 -6
- package/cjs/services/inapp-notification-service/interfaces.js +9 -1
- package/cjs/services/inapp-notification-service/utils/avail.js +88 -0
- package/cjs/services/inapp-notification-service/{utils.js → utils/common.js} +1 -84
- package/cjs/services/inapp-notification-service/utils/index.js +38 -0
- package/cjs/services/inapp-notification-service/utils/polygon.js +66 -0
- package/cjs/services/migration-service/scripts/MigrateTransactionHistoryBridge.js +37 -0
- package/cjs/services/migration-service/scripts/index.js +3 -1
- package/cjs/services/setting-service/SettingService.js +21 -0
- package/cjs/services/setting-service/constants.js +2 -1
- package/cjs/services/storage-service/DatabaseService.js +3 -0
- package/cjs/services/transaction-service/index.js +13 -7
- package/cjs/services/transaction-service/utils.js +3 -0
- package/cjs/stores/ChainlistStore.js +18 -0
- package/cjs/stores/EnvironmentStore.js +18 -0
- package/cjs/stores/index.js +8 -1
- package/cjs/types/index.js +11 -0
- package/cjs/utils/account/transform.js +1 -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 +2 -1
- package/core/substrate/xcm-parser.js +19 -5
- package/koni/api/contract-handler/utils/index.d.ts +2 -0
- package/koni/api/contract-handler/utils/index.js +12 -0
- package/koni/api/contract-handler/utils/polygon_bridge_abi.json +1004 -0
- 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 +5 -0
- package/koni/background/handlers/Extension.js +65 -5
- package/koni/background/handlers/State.d.ts +5 -0
- package/koni/background/handlers/State.js +23 -2
- package/package.json +76 -18
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/substrate/index.js +2 -1
- package/services/balance-service/transfer/xcm/index.d.ts +1 -0
- package/services/balance-service/transfer/xcm/index.js +29 -1
- package/services/balance-service/transfer/xcm/polygonBridge.d.ts +22 -0
- package/services/balance-service/transfer/xcm/polygonBridge.js +95 -0
- package/services/chain-online-service/constants.d.ts +4 -0
- package/services/chain-online-service/constants.js +23 -0
- package/services/chain-online-service/index.d.ts +22 -0
- package/services/chain-online-service/index.js +182 -0
- package/services/chain-service/constants.d.ts +1 -0
- package/services/chain-service/constants.js +2 -1
- package/services/chain-service/index.d.ts +6 -7
- package/services/chain-service/index.js +78 -116
- package/services/chain-service/utils/index.js +0 -2
- package/services/chain-service/utils/patch.d.ts +16 -1
- package/services/chain-service/utils/patch.js +7 -3
- 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/fee-service/utils/index.js +14 -0
- package/services/inapp-notification-service/consts.d.ts +3 -1
- package/services/inapp-notification-service/consts.js +6 -4
- package/services/inapp-notification-service/index.d.ts +10 -2
- package/services/inapp-notification-service/index.js +111 -7
- package/services/inapp-notification-service/interfaces.d.ts +27 -3
- package/services/inapp-notification-service/interfaces.js +7 -0
- package/services/inapp-notification-service/utils/avail.d.ts +40 -0
- package/services/inapp-notification-service/utils/avail.js +73 -0
- package/services/inapp-notification-service/utils/common.d.ts +11 -0
- package/services/inapp-notification-service/{utils.js → utils/common.js} +1 -72
- package/services/inapp-notification-service/utils/index.d.ts +3 -0
- package/services/inapp-notification-service/utils/index.js +6 -0
- package/services/inapp-notification-service/utils/polygon.d.ts +71 -0
- package/services/inapp-notification-service/utils/polygon.js +54 -0
- package/services/migration-service/scripts/MigrateTransactionHistoryBridge.d.ts +4 -0
- package/services/migration-service/scripts/MigrateTransactionHistoryBridge.js +29 -0
- package/services/migration-service/scripts/index.js +3 -1
- package/services/setting-service/SettingService.d.ts +9 -0
- package/services/setting-service/SettingService.js +21 -0
- package/services/setting-service/constants.js +2 -1
- package/services/storage-service/DatabaseService.d.ts +1 -0
- package/services/storage-service/DatabaseService.js +3 -0
- package/services/transaction-service/index.js +14 -8
- package/services/transaction-service/utils.js +3 -0
- package/stores/ChainlistStore.d.ts +7 -0
- package/stores/ChainlistStore.js +10 -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/types/{avail-bridge → bridge}/index.d.ts +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.js +1 -0
- package/types/notification/index.d.ts +5 -0
- package/utils/account/transform.js +1 -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
- package/services/inapp-notification-service/utils.d.ts +0 -55
- /package/cjs/types/{avail-bridge → bridge}/index.js +0 -0
- /package/types/{avail-bridge → bridge}/index.js +0 -0
|
@@ -33,6 +33,7 @@ var _token = require("@subwallet/extension-base/services/balance-service/transfe
|
|
|
33
33
|
var _tonTransfer = require("@subwallet/extension-base/services/balance-service/transfer/ton-transfer");
|
|
34
34
|
var _xcm = require("@subwallet/extension-base/services/balance-service/transfer/xcm");
|
|
35
35
|
var _availBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge");
|
|
36
|
+
var _polygonBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge");
|
|
36
37
|
var _constants2 = require("@subwallet/extension-base/services/chain-service/constants");
|
|
37
38
|
var _types2 = require("@subwallet/extension-base/services/chain-service/types");
|
|
38
39
|
var _utils4 = require("@subwallet/extension-base/services/chain-service/utils");
|
|
@@ -1295,6 +1296,7 @@ class KoniExtension {
|
|
|
1295
1296
|
const isAvailBridgeFromEvm = (0, _utils4._isPureEvmChain)(chainInfoMap[originNetworkKey]) && (0, _availBridge.isAvailChainBridge)(destinationNetworkKey);
|
|
1296
1297
|
const isAvailBridgeFromAvail = (0, _availBridge.isAvailChainBridge)(originNetworkKey) && (0, _utils4._isPureEvmChain)(chainInfoMap[destinationNetworkKey]);
|
|
1297
1298
|
const isSnowBridgeEvmTransfer = (0, _utils4._isPureEvmChain)(chainInfoMap[originNetworkKey]) && (0, _xcmParser._isSnowBridgeXcm)(chainInfoMap[originNetworkKey], chainInfoMap[destinationNetworkKey]) && !isAvailBridgeFromEvm;
|
|
1299
|
+
const isPolygonBridgeTransfer = (0, _polygonBridge._isPolygonChainBridge)(originNetworkKey, destinationNetworkKey);
|
|
1298
1300
|
let additionalValidator;
|
|
1299
1301
|
let eventsHandler;
|
|
1300
1302
|
if (fromKeyPair && destinationTokenInfo) {
|
|
@@ -1311,7 +1313,9 @@ class KoniExtension {
|
|
|
1311
1313
|
evmApi
|
|
1312
1314
|
};
|
|
1313
1315
|
let funcCreateExtrinsic;
|
|
1314
|
-
if (
|
|
1316
|
+
if (isPolygonBridgeTransfer) {
|
|
1317
|
+
funcCreateExtrinsic = _xcm.createPolygonBridgeExtrinsic;
|
|
1318
|
+
} else if (isSnowBridgeEvmTransfer) {
|
|
1315
1319
|
funcCreateExtrinsic = _xcm.createSnowBridgeExtrinsic;
|
|
1316
1320
|
} else if (isAvailBridgeFromEvm) {
|
|
1317
1321
|
funcCreateExtrinsic = _xcm.createAvailBridgeTxFromEth;
|
|
@@ -1376,7 +1380,7 @@ class KoniExtension {
|
|
|
1376
1380
|
transaction: extrinsic,
|
|
1377
1381
|
data: inputData,
|
|
1378
1382
|
extrinsicType: _KoniTypes.ExtrinsicType.TRANSFER_XCM,
|
|
1379
|
-
chainType: !isSnowBridgeEvmTransfer && !isAvailBridgeFromEvm ? _KoniTypes.ChainType.SUBSTRATE : _KoniTypes.ChainType.EVM,
|
|
1383
|
+
chainType: !isSnowBridgeEvmTransfer && !isAvailBridgeFromEvm && !isPolygonBridgeTransfer ? _KoniTypes.ChainType.SUBSTRATE : _KoniTypes.ChainType.EVM,
|
|
1380
1384
|
transferNativeAmount: (0, _utils4._isNativeToken)(originTokenInfo) ? value : '0',
|
|
1381
1385
|
ignoreWarnings,
|
|
1382
1386
|
isTransferAll: transferAll,
|
|
@@ -2578,7 +2582,6 @@ class KoniExtension {
|
|
|
2578
2582
|
}
|
|
2579
2583
|
|
|
2580
2584
|
// Phishing detect
|
|
2581
|
-
|
|
2582
2585
|
async passPhishingPage(_ref46) {
|
|
2583
2586
|
let {
|
|
2584
2587
|
url
|
|
@@ -2586,6 +2589,20 @@ class KoniExtension {
|
|
|
2586
2589
|
return await this.#koniState.approvePassPhishingPage(url);
|
|
2587
2590
|
}
|
|
2588
2591
|
|
|
2592
|
+
// Set environment config
|
|
2593
|
+
saveAppConfig(request) {
|
|
2594
|
+
this.#koniState.saveEnvConfig('appConfig', request.appConfig);
|
|
2595
|
+
return true;
|
|
2596
|
+
}
|
|
2597
|
+
saveBrowserConfig(request) {
|
|
2598
|
+
this.#koniState.saveEnvConfig('browserConfig', request.browserConfig);
|
|
2599
|
+
return true;
|
|
2600
|
+
}
|
|
2601
|
+
saveOSConfig(request) {
|
|
2602
|
+
this.#koniState.saveEnvConfig('osConfig', request.osConfig);
|
|
2603
|
+
return true;
|
|
2604
|
+
}
|
|
2605
|
+
|
|
2589
2606
|
/// Wallet connect
|
|
2590
2607
|
|
|
2591
2608
|
// Connect
|
|
@@ -3439,7 +3456,7 @@ class KoniExtension {
|
|
|
3439
3456
|
chain,
|
|
3440
3457
|
notification
|
|
3441
3458
|
} = data;
|
|
3442
|
-
const extrinsicType = _KoniTypes.ExtrinsicType.
|
|
3459
|
+
const extrinsicType = _KoniTypes.ExtrinsicType.CLAIM_BRIDGE;
|
|
3443
3460
|
let transaction = null;
|
|
3444
3461
|
let chainType;
|
|
3445
3462
|
if ((0, _keyring.isSubstrateAddress)(address)) {
|
|
@@ -3460,6 +3477,32 @@ class KoniExtension {
|
|
|
3460
3477
|
chainType
|
|
3461
3478
|
});
|
|
3462
3479
|
}
|
|
3480
|
+
async getIsClaimedPolygonBridge(data) {
|
|
3481
|
+
const evmApi = this.#koniState.getEvmApi(data.chainslug);
|
|
3482
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
3483
|
+
const isClaimed = await (0, _polygonBridge.isClaimedPolygonBridge)(data.chainslug, data.counter, data.sourceNetwork, evmApi);
|
|
3484
|
+
return isClaimed;
|
|
3485
|
+
}
|
|
3486
|
+
async submitClaimPolygonBridge(data) {
|
|
3487
|
+
const {
|
|
3488
|
+
address,
|
|
3489
|
+
chain,
|
|
3490
|
+
notification
|
|
3491
|
+
} = data;
|
|
3492
|
+
const extrinsicType = _KoniTypes.ExtrinsicType.CLAIM_BRIDGE;
|
|
3493
|
+
let transaction = null;
|
|
3494
|
+
const evmApi = this.#koniState.getEvmApi(chain);
|
|
3495
|
+
transaction = await (0, _polygonBridge.getClaimPolygonBridge)(chain, notification, evmApi);
|
|
3496
|
+
const chainType = _KoniTypes.ChainType.EVM;
|
|
3497
|
+
return await this.#koniState.transactionService.handleTransaction({
|
|
3498
|
+
address,
|
|
3499
|
+
chain,
|
|
3500
|
+
transaction,
|
|
3501
|
+
data,
|
|
3502
|
+
extrinsicType,
|
|
3503
|
+
chainType
|
|
3504
|
+
});
|
|
3505
|
+
}
|
|
3463
3506
|
|
|
3464
3507
|
/* Ledger */
|
|
3465
3508
|
|
|
@@ -3875,6 +3918,14 @@ class KoniExtension {
|
|
|
3875
3918
|
case 'pri(phishing.pass)':
|
|
3876
3919
|
return await this.passPhishingPage(request);
|
|
3877
3920
|
|
|
3921
|
+
// Set Environment config
|
|
3922
|
+
case 'pri(settings.saveAppConfig)':
|
|
3923
|
+
return this.saveAppConfig(request);
|
|
3924
|
+
case 'pri(settings.saveBrowserConfig)':
|
|
3925
|
+
return this.saveBrowserConfig(request);
|
|
3926
|
+
case 'pri(settings.saveOSConfig)':
|
|
3927
|
+
return this.saveOSConfig(request);
|
|
3928
|
+
|
|
3878
3929
|
/// Keyring state
|
|
3879
3930
|
case 'pri(keyring.subscribe)':
|
|
3880
3931
|
return this.keyringStateSubscribe(id, port);
|
|
@@ -4039,6 +4090,8 @@ class KoniExtension {
|
|
|
4039
4090
|
return this.fetchInappNotifications(request);
|
|
4040
4091
|
case 'pri(inappNotification.get)':
|
|
4041
4092
|
return this.getInappNotification(request);
|
|
4093
|
+
case 'pri(inappNotification.isClaimedPolygonBridge)':
|
|
4094
|
+
return this.getIsClaimedPolygonBridge(request);
|
|
4042
4095
|
/* Notification service */
|
|
4043
4096
|
|
|
4044
4097
|
/* Avail Bridge */
|
|
@@ -4046,6 +4099,13 @@ class KoniExtension {
|
|
|
4046
4099
|
return this.submitClaimAvailBridge(request);
|
|
4047
4100
|
/* Avail Bridge */
|
|
4048
4101
|
|
|
4102
|
+
/* Polygon Bridge */
|
|
4103
|
+
|
|
4104
|
+
case 'pri(polygonBridge.submitClaimPolygonBridge)':
|
|
4105
|
+
return this.submitClaimPolygonBridge(request);
|
|
4106
|
+
|
|
4107
|
+
/* Polygon Bridge */
|
|
4108
|
+
|
|
4049
4109
|
/* Ledger */
|
|
4050
4110
|
case 'pri(ledger.generic.allow)':
|
|
4051
4111
|
return this.subscribeLedgerGenericAllowChains(id, port);
|
|
@@ -15,6 +15,7 @@ var _balanceService = require("@subwallet/extension-base/services/balance-servic
|
|
|
15
15
|
var _types = require("@subwallet/extension-base/services/base/types");
|
|
16
16
|
var _buyService = _interopRequireDefault(require("@subwallet/extension-base/services/buy-service"));
|
|
17
17
|
var _campaignService = _interopRequireDefault(require("@subwallet/extension-base/services/campaign-service"));
|
|
18
|
+
var _chainOnlineService = require("@subwallet/extension-base/services/chain-online-service");
|
|
18
19
|
var _chainService = require("@subwallet/extension-base/services/chain-service");
|
|
19
20
|
var _constants2 = require("@subwallet/extension-base/services/chain-service/constants");
|
|
20
21
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
@@ -112,6 +113,7 @@ class KoniState {
|
|
|
112
113
|
this.feeService = new _service2.default(this);
|
|
113
114
|
this.swapService = new _swapService.SwapService(this);
|
|
114
115
|
this.inappNotificationService = new _inappNotificationService.InappNotificationService(this.dbService, this.keyringService, this.eventService, this.chainService);
|
|
116
|
+
this.chainOnlineService = new _chainOnlineService.ChainOnlineService(this.chainService, this.settingService, this.eventService, this.dbService);
|
|
115
117
|
this.subscription = new _subscription.KoniSubscription(this, this.dbService);
|
|
116
118
|
this.cron = new _cron.KoniCron(this, this.subscription, this.dbService);
|
|
117
119
|
this.logger = (0, _util.logger)('State');
|
|
@@ -206,7 +208,6 @@ class KoniState {
|
|
|
206
208
|
async init() {
|
|
207
209
|
await this.eventService.waitCryptoReady;
|
|
208
210
|
await this.chainService.init();
|
|
209
|
-
this.afterChainServiceInit();
|
|
210
211
|
await this.migrationService.run();
|
|
211
212
|
this.campaignService.init();
|
|
212
213
|
this.mktCampaignService.init();
|
|
@@ -222,7 +223,11 @@ class KoniState {
|
|
|
222
223
|
// TODO: consider moving this to a separate service
|
|
223
224
|
await this.dbService.stores.crowdloan.removeEndedCrowdloans();
|
|
224
225
|
await this.startSubscription();
|
|
226
|
+
this.chainOnlineService.checkLatestData();
|
|
225
227
|
this.chainService.checkLatestData();
|
|
228
|
+
this.chainService.subscribeChainInfoMap().subscribe(() => {
|
|
229
|
+
this.afterChainServiceInit();
|
|
230
|
+
});
|
|
226
231
|
}
|
|
227
232
|
async initMantaPay(password) {
|
|
228
233
|
var _this$chainService, _this$chainService$ma;
|
|
@@ -792,6 +797,7 @@ class KoniState {
|
|
|
792
797
|
return this.chainService.stopAllChainApis();
|
|
793
798
|
}
|
|
794
799
|
async resumeAllNetworks() {
|
|
800
|
+
this.chainOnlineService.checkLatestData();
|
|
795
801
|
return this.chainService.resumeAllChainApis();
|
|
796
802
|
}
|
|
797
803
|
publishCrowdloan(reset) {
|
|
@@ -1322,6 +1328,18 @@ class KoniState {
|
|
|
1322
1328
|
});
|
|
1323
1329
|
});
|
|
1324
1330
|
}
|
|
1331
|
+
saveEnvConfig(key, value) {
|
|
1332
|
+
this.settingService.getEnvironmentList(config => {
|
|
1333
|
+
const newSettings = {
|
|
1334
|
+
...config,
|
|
1335
|
+
[key]: value
|
|
1336
|
+
};
|
|
1337
|
+
this.settingService.setEnvironment(newSettings);
|
|
1338
|
+
});
|
|
1339
|
+
}
|
|
1340
|
+
initEnvConfig(envConfig) {
|
|
1341
|
+
this.settingService.setEnvironment(envConfig);
|
|
1342
|
+
}
|
|
1325
1343
|
async resetWallet(resetAll) {
|
|
1326
1344
|
await this.keyringService.resetWallet(resetAll);
|
|
1327
1345
|
await this.earningService.resetYieldPosition();
|
|
@@ -1339,8 +1357,11 @@ class KoniState {
|
|
|
1339
1357
|
this.chainService.resetWallet(resetAll);
|
|
1340
1358
|
await this.walletConnectService.resetWallet(resetAll);
|
|
1341
1359
|
await this.chainService.init();
|
|
1342
|
-
this.
|
|
1360
|
+
this.chainOnlineService.checkLatestData();
|
|
1343
1361
|
this.chainService.checkLatestData();
|
|
1362
|
+
this.chainService.subscribeChainInfoMap().subscribe(() => {
|
|
1363
|
+
this.afterChainServiceInit();
|
|
1364
|
+
});
|
|
1344
1365
|
}
|
|
1345
1366
|
async enableMantaPay(updateStore, address, password, seedPhrase) {
|
|
1346
1367
|
var _this$chainService3, _this$chainService3$m, _this$chainService4, _this$chainService4$m, _this$chainService4$m2, _this$chainService11, _this$chainService11$, _this$chainService11$2;
|
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];
|
|
@@ -4,10 +4,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.getXcmMockTxFee = exports.createXcmExtrinsic = exports.createSnowBridgeExtrinsic = exports.createAvailBridgeTxFromEth = exports.createAvailBridgeExtrinsicFromAvail = void 0;
|
|
7
|
+
exports.getXcmMockTxFee = exports.createXcmExtrinsic = exports.createSnowBridgeExtrinsic = exports.createPolygonBridgeExtrinsic = exports.createAvailBridgeTxFromEth = exports.createAvailBridgeExtrinsicFromAvail = void 0;
|
|
8
8
|
var _xcmParser = require("@subwallet/extension-base/core/substrate/xcm-parser");
|
|
9
9
|
var _availBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge");
|
|
10
10
|
var _polkadotXcm = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polkadotXcm");
|
|
11
|
+
var _polygonBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge");
|
|
11
12
|
var _snowBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/snowBridge");
|
|
12
13
|
var _xcmPallet = require("@subwallet/extension-base/services/balance-service/transfer/xcm/xcmPallet");
|
|
13
14
|
var _xTokens = require("@subwallet/extension-base/services/balance-service/transfer/xcm/xTokens");
|
|
@@ -100,6 +101,35 @@ const createAvailBridgeExtrinsicFromAvail = async _ref4 => {
|
|
|
100
101
|
return await (0, _availBridge.getAvailBridgeExtrinsicFromAvail)(recipient, sendingValue, substrateApi);
|
|
101
102
|
};
|
|
102
103
|
exports.createAvailBridgeExtrinsicFromAvail = createAvailBridgeExtrinsicFromAvail;
|
|
104
|
+
const createPolygonBridgeExtrinsic = async _ref5 => {
|
|
105
|
+
let {
|
|
106
|
+
chainInfoMap,
|
|
107
|
+
destinationTokenInfo,
|
|
108
|
+
evmApi,
|
|
109
|
+
originTokenInfo,
|
|
110
|
+
recipient,
|
|
111
|
+
sender,
|
|
112
|
+
sendingValue
|
|
113
|
+
} = _ref5;
|
|
114
|
+
const originChainInfo = chainInfoMap[originTokenInfo.originChain];
|
|
115
|
+
const destinationChainInfo = chainInfoMap[destinationTokenInfo.originChain];
|
|
116
|
+
if (!(0, _xcmParser._isPolygonBridgeXcm)(originChainInfo, destinationChainInfo)) {
|
|
117
|
+
throw new Error('This is not a valid PolygonBridge transfer');
|
|
118
|
+
}
|
|
119
|
+
if (!evmApi) {
|
|
120
|
+
throw Error('Evm API is not available');
|
|
121
|
+
}
|
|
122
|
+
if (!sender) {
|
|
123
|
+
throw Error('Sender is required');
|
|
124
|
+
}
|
|
125
|
+
const sourceChain = originChainInfo.slug;
|
|
126
|
+
if (sourceChain === 'polygonzkEvm_cardona' || sourceChain === 'polygonZkEvm') {
|
|
127
|
+
return (0, _polygonBridge._createPolygonBridgeL2toL1Extrinsic)(originTokenInfo, originChainInfo, sender, recipient, sendingValue, evmApi);
|
|
128
|
+
} else {
|
|
129
|
+
return (0, _polygonBridge._createPolygonBridgeL1toL2Extrinsic)(originTokenInfo, originChainInfo, sender, recipient, sendingValue, evmApi);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
exports.createPolygonBridgeExtrinsic = createPolygonBridgeExtrinsic;
|
|
103
133
|
const getXcmMockTxFee = async (substrateApi, chainInfoMap, originTokenInfo, destinationTokenInfo) => {
|
|
104
134
|
try {
|
|
105
135
|
var _paymentInfo$partialF;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.POLYGON_PROOF_INDEXER = exports.POLYGON_GAS_INDEXER = void 0;
|
|
7
|
+
exports._createPolygonBridgeL1toL2Extrinsic = _createPolygonBridgeL1toL2Extrinsic;
|
|
8
|
+
exports._createPolygonBridgeL2toL1Extrinsic = _createPolygonBridgeL2toL1Extrinsic;
|
|
9
|
+
exports._isPolygonChainBridge = _isPolygonChainBridge;
|
|
10
|
+
exports.getClaimPolygonBridge = getClaimPolygonBridge;
|
|
11
|
+
exports.isClaimedPolygonBridge = isClaimedPolygonBridge;
|
|
12
|
+
var _chainList = require("@subwallet/chain-list");
|
|
13
|
+
var _web = require("@subwallet/extension-base/koni/api/contract-handler/evm/web3");
|
|
14
|
+
var _utils = require("@subwallet/extension-base/koni/api/contract-handler/utils");
|
|
15
|
+
var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
|
|
16
|
+
var _utils3 = require("@subwallet/extension-base/services/fee-service/utils");
|
|
17
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
18
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
19
|
+
|
|
20
|
+
const POLYGON_PROOF_INDEXER = {
|
|
21
|
+
MAINNET: 'https://api-gateway.polygon.technology/api/v3/proof/mainnet/merkle-proof',
|
|
22
|
+
TESTNET: 'https://api-gateway.polygon.technology/api/v3/proof/testnet/merkle-proof'
|
|
23
|
+
};
|
|
24
|
+
exports.POLYGON_PROOF_INDEXER = POLYGON_PROOF_INDEXER;
|
|
25
|
+
const POLYGON_GAS_INDEXER = {
|
|
26
|
+
MAINNET: 'https://gasstation.polygon.technology/zkevm',
|
|
27
|
+
TESTNET: 'https://gasstation.polygon.technology/zkevm/cardona'
|
|
28
|
+
};
|
|
29
|
+
exports.POLYGON_GAS_INDEXER = POLYGON_GAS_INDEXER;
|
|
30
|
+
async function createPolygonBridgeTransaction(tokenInfo, originChainInfo, sender, recipientAddress, value, destinationNetwork, evmApi) {
|
|
31
|
+
var _priority$maxFeePerGa, _priority$maxPriority;
|
|
32
|
+
const polygonBridgeContractAddress = (0, _utils.getPolygonBridgeContract)(originChainInfo.slug);
|
|
33
|
+
const polygonBridgeContract = (0, _web.getWeb3Contract)(polygonBridgeContractAddress, evmApi, _utils._POLYGON_BRIDGE_ABI);
|
|
34
|
+
const tokenContract = (0, _utils2._getContractAddressOfToken)(tokenInfo) || '0x0000000000000000000000000000000000000000'; // FOR Ethereum: use null address
|
|
35
|
+
|
|
36
|
+
if (tokenContract !== '0x0000000000000000000000000000000000000000') {
|
|
37
|
+
throw new Error('Only native token transfer is supported');
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
|
|
41
|
+
const transferCall = polygonBridgeContract.methods.bridgeAsset(destinationNetwork, recipientAddress, value, tokenContract, true, '0x');
|
|
42
|
+
const transferEncodedCall = transferCall.encodeABI();
|
|
43
|
+
const priority = await (0, _utils3.calculateGasFeeParams)(evmApi, evmApi.chainSlug);
|
|
44
|
+
const transactionConfig = {
|
|
45
|
+
from: sender,
|
|
46
|
+
to: polygonBridgeContractAddress,
|
|
47
|
+
value: value,
|
|
48
|
+
data: transferEncodedCall,
|
|
49
|
+
gasPrice: priority.gasPrice,
|
|
50
|
+
maxFeePerGas: priority === null || priority === void 0 ? void 0 : (_priority$maxFeePerGa = priority.maxFeePerGas) === null || _priority$maxFeePerGa === void 0 ? void 0 : _priority$maxFeePerGa.toString(),
|
|
51
|
+
maxPriorityFeePerGas: priority === null || priority === void 0 ? void 0 : (_priority$maxPriority = priority.maxPriorityFeePerGas) === null || _priority$maxPriority === void 0 ? void 0 : _priority$maxPriority.toString()
|
|
52
|
+
};
|
|
53
|
+
const gasLimit = await evmApi.api.eth.estimateGas(transactionConfig).catch(() => 200000);
|
|
54
|
+
transactionConfig.gas = gasLimit.toString();
|
|
55
|
+
return transactionConfig;
|
|
56
|
+
}
|
|
57
|
+
async function _createPolygonBridgeL1toL2Extrinsic(tokenInfo, originChainInfo, sender, recipientAddress, value, evmApi) {
|
|
58
|
+
return createPolygonBridgeTransaction(tokenInfo, originChainInfo, sender, recipientAddress, value, 1, evmApi);
|
|
59
|
+
}
|
|
60
|
+
async function _createPolygonBridgeL2toL1Extrinsic(tokenInfo, originChainInfo, sender, recipientAddress, value, evmApi) {
|
|
61
|
+
return createPolygonBridgeTransaction(tokenInfo, originChainInfo, sender, recipientAddress, value, 0, evmApi);
|
|
62
|
+
}
|
|
63
|
+
async function getClaimPolygonBridge(chainSlug, notification, evmApi) {
|
|
64
|
+
var _priority$maxFeePerGa2, _priority$maxPriority2;
|
|
65
|
+
const polygonBridgeContractAddress = (0, _utils.getPolygonBridgeContract)(chainSlug);
|
|
66
|
+
const polygonBridgeContract = (0, _web.getWeb3Contract)(polygonBridgeContractAddress, evmApi, _utils._POLYGON_BRIDGE_ABI);
|
|
67
|
+
const metadata = notification.metadata;
|
|
68
|
+
const isTestnet = chainSlug === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA;
|
|
69
|
+
const proofDomain = isTestnet ? POLYGON_PROOF_INDEXER.TESTNET : POLYGON_PROOF_INDEXER.MAINNET;
|
|
70
|
+
const proofResponse = await fetch(`${proofDomain}?networkId=${metadata.sourceNetwork}&depositCount=${metadata.counter}`).then(res => res.json());
|
|
71
|
+
const proof = proofResponse.proof;
|
|
72
|
+
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
|
|
74
|
+
const transferCall = polygonBridgeContract.methods.claimAsset(proof.merkle_proof, proof.rollup_merkle_proof, metadata.counter, proof.main_exit_root, proof.rollup_exit_root, metadata.originTokenNetwork, metadata.originTokenAddress, metadata.destinationNetwork, metadata.receiver, metadata.amounts[0], '0x');
|
|
75
|
+
const transferEncodedCall = transferCall.encodeABI();
|
|
76
|
+
const priority = await (0, _utils3.calculateGasFeeParams)(evmApi, evmApi.chainSlug);
|
|
77
|
+
const transactionConfig = {
|
|
78
|
+
from: metadata.userAddress,
|
|
79
|
+
to: polygonBridgeContractAddress,
|
|
80
|
+
value: '0',
|
|
81
|
+
data: transferEncodedCall,
|
|
82
|
+
gasPrice: priority.gasPrice,
|
|
83
|
+
maxFeePerGas: (_priority$maxFeePerGa2 = priority.maxFeePerGas) === null || _priority$maxFeePerGa2 === void 0 ? void 0 : _priority$maxFeePerGa2.toString(),
|
|
84
|
+
maxPriorityFeePerGas: (_priority$maxPriority2 = priority.maxPriorityFeePerGas) === null || _priority$maxPriority2 === void 0 ? void 0 : _priority$maxPriority2.toString()
|
|
85
|
+
};
|
|
86
|
+
const gasLimit = await evmApi.api.eth.estimateGas(transactionConfig).catch(() => 200000);
|
|
87
|
+
transactionConfig.gas = gasLimit.toString();
|
|
88
|
+
return transactionConfig;
|
|
89
|
+
}
|
|
90
|
+
async function isClaimedPolygonBridge(chainSlug, counter, sourceNetwork, evmApi) {
|
|
91
|
+
const polygonBridgeContractAddress = (0, _utils.getPolygonBridgeContract)(chainSlug);
|
|
92
|
+
const polygonBridgeContract = (0, _web.getWeb3Contract)(polygonBridgeContractAddress, evmApi, _utils._POLYGON_BRIDGE_ABI);
|
|
93
|
+
|
|
94
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-return,@typescript-eslint/no-unsafe-member-access
|
|
95
|
+
return await polygonBridgeContract.methods.isClaimed(counter, sourceNetwork).call();
|
|
96
|
+
}
|
|
97
|
+
function _isPolygonChainBridge(srcChain, destChain) {
|
|
98
|
+
if (srcChain === 'polygonzkEvm_cardona' && destChain === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA) {
|
|
99
|
+
return true;
|
|
100
|
+
} else if (srcChain === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA && destChain === 'polygonzkEvm_cardona') {
|
|
101
|
+
return true;
|
|
102
|
+
} else if (srcChain === 'polygonZkEvm' && destChain === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM) {
|
|
103
|
+
return true;
|
|
104
|
+
} else if (srcChain === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM && destChain === 'polygonZkEvm') {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.LATEST_CHAIN_PATCH_FETCHING_INTERVAL = void 0;
|
|
7
|
+
exports.md5HashChainAsset = md5HashChainAsset;
|
|
8
|
+
exports.md5HashChainInfo = md5HashChainInfo;
|
|
9
|
+
var _tsMd = require("ts-md5");
|
|
10
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
11
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
12
|
+
|
|
13
|
+
const LATEST_CHAIN_PATCH_FETCHING_INTERVAL = 180000;
|
|
14
|
+
exports.LATEST_CHAIN_PATCH_FETCHING_INTERVAL = LATEST_CHAIN_PATCH_FETCHING_INTERVAL;
|
|
15
|
+
function md5HashChainInfo(data) {
|
|
16
|
+
// todo: use from chain list package later
|
|
17
|
+
const {
|
|
18
|
+
chainStatus,
|
|
19
|
+
icon,
|
|
20
|
+
providers,
|
|
21
|
+
...chainBaseInfo
|
|
22
|
+
} = data;
|
|
23
|
+
return _tsMd.Md5.hashStr(JSON.stringify(chainBaseInfo));
|
|
24
|
+
}
|
|
25
|
+
function md5HashChainAsset(data) {
|
|
26
|
+
// todo: use from chain list package later
|
|
27
|
+
const {
|
|
28
|
+
icon,
|
|
29
|
+
...assetBaseInfo
|
|
30
|
+
} = data;
|
|
31
|
+
return _tsMd.Md5.hashStr(JSON.stringify(assetBaseInfo));
|
|
32
|
+
}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ChainOnlineService = void 0;
|
|
7
|
+
var _chainList = require("@subwallet/chain-list");
|
|
8
|
+
var _constants = require("@subwallet/extension-base/services/chain-online-service/constants");
|
|
9
|
+
var _chainService = require("@subwallet/extension-base/services/chain-service");
|
|
10
|
+
var _types = require("@subwallet/extension-base/services/chain-service/types");
|
|
11
|
+
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
12
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
13
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
14
|
+
|
|
15
|
+
class ChainOnlineService {
|
|
16
|
+
constructor(chainService, settingService, eventService, dbService) {
|
|
17
|
+
this.chainService = chainService;
|
|
18
|
+
this.settingService = settingService;
|
|
19
|
+
this.eventService = eventService;
|
|
20
|
+
this.dbService = dbService;
|
|
21
|
+
this.firstApplied = false;
|
|
22
|
+
}
|
|
23
|
+
validatePatchWithHash(latestPatch) {
|
|
24
|
+
const {
|
|
25
|
+
ChainAsset,
|
|
26
|
+
ChainAssetHashMap,
|
|
27
|
+
ChainInfo,
|
|
28
|
+
ChainInfoHashMap
|
|
29
|
+
} = latestPatch;
|
|
30
|
+
for (const [chainSlug, chain] of Object.entries(ChainInfo)) {
|
|
31
|
+
if ((0, _constants.md5HashChainInfo)(chain) !== ChainInfoHashMap[chainSlug]) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
for (const [assetSlug, asset] of Object.entries(ChainAsset)) {
|
|
36
|
+
if ((0, _constants.md5HashChainAsset)(asset) !== ChainAssetHashMap[assetSlug]) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
validatePatchBeforeStore(candidateChainInfoMap, candidateAssetRegistry, latestPatch) {
|
|
43
|
+
for (const [chainSlug, chainHash] of Object.entries(latestPatch.ChainInfoHashMap)) {
|
|
44
|
+
if ((0, _constants.md5HashChainInfo)(candidateChainInfoMap[chainSlug]) !== chainHash) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
for (const [assetSlug, assetHash] of Object.entries(latestPatch.ChainAssetHashMap)) {
|
|
49
|
+
if (!candidateAssetRegistry[assetSlug]) {
|
|
50
|
+
if (!latestPatch.ChainInfo[assetSlug]) {
|
|
51
|
+
// assets are not existed in case chain is removed
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
if ((0, _constants.md5HashChainAsset)(candidateAssetRegistry[assetSlug]) !== assetHash) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
async handleLatestPatch(latestPatch) {
|
|
63
|
+
try {
|
|
64
|
+
var _await$this$settingSe;
|
|
65
|
+
// 1. validate fetch data with its hash
|
|
66
|
+
const isSafePatch = this.validatePatchWithHash(latestPatch);
|
|
67
|
+
const {
|
|
68
|
+
AssetLogoMap: latestAssetLogoMap,
|
|
69
|
+
ChainAsset: latestAssetInfo,
|
|
70
|
+
ChainInfo: latestChainInfo,
|
|
71
|
+
ChainLogoMap: latestChainLogoMap,
|
|
72
|
+
patchVersion: latestPatchVersion
|
|
73
|
+
} = latestPatch;
|
|
74
|
+
const currentPatchVersion = ((_await$this$settingSe = await this.settingService.getChainlistSetting()) === null || _await$this$settingSe === void 0 ? void 0 : _await$this$settingSe.patchVersion) || '';
|
|
75
|
+
const oldChainInfoMap = structuredClone(this.chainService.getChainInfoMap());
|
|
76
|
+
const oldAssetRegistry = structuredClone(this.chainService.getAssetRegistry());
|
|
77
|
+
let chainInfoMap = structuredClone(this.chainService.getChainInfoMap());
|
|
78
|
+
let assetRegistry = structuredClone(this.chainService.getAssetRegistry());
|
|
79
|
+
const currentChainStateMap = structuredClone(this.chainService.getChainStateMap());
|
|
80
|
+
const currentChainStatusMap = structuredClone(this.chainService.getChainStatusMap());
|
|
81
|
+
let addedChain = [];
|
|
82
|
+
if (isSafePatch && (!this.firstApplied || currentPatchVersion !== latestPatchVersion)) {
|
|
83
|
+
this.firstApplied = true;
|
|
84
|
+
|
|
85
|
+
// 2. merge data map
|
|
86
|
+
if (latestChainInfo && Object.keys(latestChainInfo).length > 0) {
|
|
87
|
+
chainInfoMap = Object.assign({}, oldChainInfoMap, latestChainInfo);
|
|
88
|
+
const [currentChainStateKey, newChainKey] = [Object.keys(currentChainStateMap), Object.keys(chainInfoMap)];
|
|
89
|
+
addedChain = newChainKey.filter(chain => !currentChainStateKey.includes(chain));
|
|
90
|
+
addedChain.forEach(key => {
|
|
91
|
+
currentChainStateMap[key] = {
|
|
92
|
+
active: false,
|
|
93
|
+
currentProvider: (0, _utils.randomizeProvider)(chainInfoMap[key].providers).providerKey,
|
|
94
|
+
manualTurnOff: false,
|
|
95
|
+
slug: key
|
|
96
|
+
};
|
|
97
|
+
currentChainStatusMap[key] = {
|
|
98
|
+
slug: key,
|
|
99
|
+
connectionStatus: _types._ChainConnectionStatus.DISCONNECTED,
|
|
100
|
+
lastUpdated: Date.now()
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
if (latestAssetInfo && Object.keys(latestAssetInfo).length > 0) {
|
|
105
|
+
assetRegistry = (0, _chainService.filterAssetInfoMap)(oldChainInfoMap, Object.assign({}, oldAssetRegistry, latestAssetInfo), addedChain);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// 3. validate data before write
|
|
109
|
+
const isCorrectPatch = this.validatePatchBeforeStore(chainInfoMap, assetRegistry, latestPatch);
|
|
110
|
+
|
|
111
|
+
// 4. write to subject
|
|
112
|
+
if (isCorrectPatch) {
|
|
113
|
+
this.chainService.setChainInfoMap(chainInfoMap);
|
|
114
|
+
this.chainService.subscribeChainInfoMap().next(chainInfoMap);
|
|
115
|
+
this.chainService.setAssetRegistry(assetRegistry);
|
|
116
|
+
this.chainService.subscribeAssetRegistry().next(assetRegistry);
|
|
117
|
+
this.chainService.autoEnableTokens().then(() => {
|
|
118
|
+
this.eventService.emit('asset.updateState', '');
|
|
119
|
+
}).catch(console.error);
|
|
120
|
+
this.chainService.setChainStateMap(currentChainStateMap);
|
|
121
|
+
this.chainService.subscribeChainStateMap().next(currentChainStateMap);
|
|
122
|
+
this.chainService.subscribeChainStatusMap().next(currentChainStatusMap);
|
|
123
|
+
const storedChainInfoList = Object.keys(chainInfoMap).map(chainSlug => {
|
|
124
|
+
return {
|
|
125
|
+
...chainInfoMap[chainSlug],
|
|
126
|
+
...currentChainStateMap[chainSlug]
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
await this.dbService.bulkUpdateChainStore(storedChainInfoList);
|
|
130
|
+
const addedAssets = [];
|
|
131
|
+
|
|
132
|
+
// todo: the stored asset is lack of adding new assets and edited assets of old chain, update to tracking exactly updated assets from patch online.
|
|
133
|
+
Object.entries(assetRegistry).forEach(_ref => {
|
|
134
|
+
let [slug, asset] = _ref;
|
|
135
|
+
if (addedChain.includes(asset.originChain)) {
|
|
136
|
+
addedAssets.push(asset);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
await this.dbService.bulkUpdateAssetsStore(addedAssets);
|
|
140
|
+
if (latestChainLogoMap) {
|
|
141
|
+
const logoMap = Object.assign({}, _chainList.ChainLogoMap, latestChainLogoMap);
|
|
142
|
+
this.chainService.subscribeChainLogoMap().next(logoMap);
|
|
143
|
+
}
|
|
144
|
+
if (latestAssetLogoMap) {
|
|
145
|
+
const logoMap = Object.assign({}, _chainList.AssetLogoMap, latestAssetLogoMap);
|
|
146
|
+
this.chainService.subscribeAssetLogoMap().next(logoMap);
|
|
147
|
+
}
|
|
148
|
+
this.settingService.setChainlist({
|
|
149
|
+
patchVersion: latestPatchVersion
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
} catch (e) {
|
|
154
|
+
console.error('Error fetching latest patch data');
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
async fetchLatestPatchData() {
|
|
158
|
+
return await (0, _utils.fetchPatchData)();
|
|
159
|
+
}
|
|
160
|
+
handleLatestPatchData() {
|
|
161
|
+
this.fetchLatestPatchData().then(latestPatch => {
|
|
162
|
+
return new Promise(resolve => {
|
|
163
|
+
if (latestPatch && !this.chainService.getlockChainInfoMap()) {
|
|
164
|
+
this.eventService.waitAssetReady.then(() => {
|
|
165
|
+
this.chainService.setLockChainInfoMap(true);
|
|
166
|
+
this.handleLatestPatch(latestPatch).then(() => this.chainService.setLockChainInfoMap(false)).catch(e => {
|
|
167
|
+
this.chainService.setLockChainInfoMap(false);
|
|
168
|
+
console.error('Error update latest patch', e);
|
|
169
|
+
}).finally(resolve);
|
|
170
|
+
}).catch(e => {
|
|
171
|
+
console.error('Asset fail to ready', e);
|
|
172
|
+
resolve();
|
|
173
|
+
});
|
|
174
|
+
} else {
|
|
175
|
+
resolve();
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}).catch(e => {
|
|
179
|
+
console.error('Error get latest patch or data map is locking', e);
|
|
180
|
+
}).finally(() => {
|
|
181
|
+
this.eventService.emit('asset.online.ready', true);
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
checkLatestData() {
|
|
185
|
+
clearInterval(this.refreshLatestChainDataTimeOut);
|
|
186
|
+
this.handleLatestPatchData();
|
|
187
|
+
this.refreshLatestChainDataTimeOut = setInterval(this.handleLatestPatchData.bind(this), _constants.LATEST_CHAIN_PATCH_FETCHING_INTERVAL);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
exports.ChainOnlineService = ChainOnlineService;
|
|
@@ -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--------------------------------------------------------------------------------------------------------------
|