@subwallet/extension-base 1.3.21-0 → 1.3.23-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 +75 -2
- package/background/KoniTypes.js +2 -0
- package/cjs/background/KoniTypes.js +2 -0
- package/cjs/constants/environment.js +4 -2
- package/cjs/constants/signing.js +6 -2
- package/cjs/core/logic-validation/recipientAddress.js +9 -1
- package/cjs/core/logic-validation/transfer.js +35 -29
- package/cjs/core/types.js +1 -0
- package/cjs/core/utils.js +12 -1
- package/cjs/defaults.js +1 -1
- package/cjs/koni/api/dotsama/crowdloan.js +1 -1
- package/cjs/koni/api/nft/index.js +9 -16
- package/cjs/koni/api/staking/index.js +3 -4
- package/cjs/koni/background/handlers/Extension.js +234 -96
- package/cjs/koni/background/handlers/State.js +15 -0
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/cardano/consts.js +11 -0
- package/cjs/services/balance-service/helpers/subscribe/cardano/index.js +63 -0
- package/cjs/services/balance-service/helpers/subscribe/cardano/types.js +1 -0
- package/cjs/services/balance-service/helpers/subscribe/cardano/utils.js +74 -0
- package/cjs/services/balance-service/helpers/subscribe/index.js +21 -7
- package/cjs/services/balance-service/helpers/subscribe/ton/utils.js +2 -2
- package/cjs/services/balance-service/index.js +4 -2
- package/cjs/services/balance-service/transfer/cardano-transfer.js +122 -0
- package/cjs/services/balance-service/transfer/token.js +4 -4
- package/cjs/services/chain-service/constants.js +8 -3
- package/cjs/services/chain-service/handler/CardanoApi.js +176 -0
- package/cjs/services/chain-service/handler/CardanoChainHandler.js +83 -0
- package/cjs/services/chain-service/handler/SubstrateChainHandler.js +3 -2
- package/cjs/services/chain-service/handler/TonApi.js +2 -5
- package/cjs/services/chain-service/index.js +38 -7
- package/cjs/services/chain-service/utils/index.js +40 -11
- package/cjs/services/chain-service/utils/patch.js +1 -1
- package/cjs/services/earning-service/constants/chains.js +2 -1
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost-manta.js +1 -1
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
- package/cjs/services/earning-service/handlers/native-staking/mythos.js +337 -0
- package/cjs/services/earning-service/service.js +10 -12
- package/cjs/services/earning-service/utils/index.js +2 -0
- package/cjs/services/fee-service/service.js +19 -8
- package/cjs/services/history-service/index.js +4 -6
- package/cjs/services/inapp-notification-service/index.js +12 -4
- package/cjs/services/keyring-service/context/account-context.js +17 -2
- package/cjs/services/keyring-service/context/handlers/Derive.js +10 -7
- package/cjs/services/keyring-service/context/handlers/Migration.js +268 -0
- package/cjs/services/keyring-service/context/handlers/Mnemonic.js +2 -2
- package/cjs/services/keyring-service/context/handlers/Secret.js +1 -1
- package/cjs/services/keyring-service/utils.js +18 -0
- package/cjs/services/migration-service/scripts/databases/ClearMetadataDatabase.js +3 -23
- package/cjs/services/migration-service/scripts/databases/ClearMetadataForChains.js +40 -0
- package/cjs/services/migration-service/scripts/databases/ClearMetadataForMythos.js +15 -0
- package/cjs/services/migration-service/scripts/index.js +6 -2
- package/cjs/services/request-service/handler/CardanoRequestHandler.js +172 -0
- package/cjs/services/request-service/handler/EvmRequestHandler.js +1 -1
- package/cjs/services/request-service/index.js +20 -2
- package/cjs/services/setting-service/constants.js +10 -1
- package/cjs/services/storage-service/DatabaseService.js +6 -0
- package/cjs/services/storage-service/db-stores/InappNotification.js +6 -0
- package/cjs/services/storage-service/db-stores/Metadata.js +3 -0
- package/cjs/services/storage-service/db-stores/Migration.js +6 -1
- package/cjs/services/swap-service/handler/asset-hub/handler.js +0 -59
- package/cjs/services/swap-service/handler/chainflip-handler.js +33 -281
- package/cjs/services/swap-service/handler/hydradx-handler.js +23 -190
- package/cjs/services/swap-service/handler/simpleswap-handler.js +1 -222
- package/cjs/services/swap-service/handler/uniswap-handler.js +331 -0
- package/cjs/services/swap-service/index.js +31 -22
- package/cjs/services/swap-service/utils.js +21 -38
- package/cjs/services/transaction-service/helpers/index.js +6 -1
- package/cjs/services/transaction-service/index.js +278 -21
- package/cjs/services/transaction-service/utils.js +5 -1
- package/cjs/types/account/info/keyring.js +12 -1
- package/cjs/types/fee/cardano.js +1 -0
- package/cjs/types/swap/index.js +7 -2
- package/cjs/utils/account/analyze.js +2 -1
- package/cjs/utils/account/common.js +29 -20
- package/cjs/utils/account/derive/info/solo.js +9 -4
- package/cjs/utils/account/derive/validate.js +36 -2
- package/cjs/utils/account/transform.js +38 -13
- package/cjs/utils/fee/transfer.js +40 -7
- package/cjs/utils/index.js +2 -2
- package/cjs/utils/staticData/index.js +7 -2
- package/constants/environment.d.ts +1 -0
- package/constants/environment.js +2 -1
- package/constants/signing.js +6 -2
- package/core/logic-validation/recipientAddress.js +11 -3
- package/core/logic-validation/transfer.js +9 -3
- package/core/substrate/xcm-parser.d.ts +1 -1
- package/core/types.d.ts +1 -0
- package/core/types.js +1 -0
- package/core/utils.d.ts +1 -0
- package/core/utils.js +13 -3
- package/defaults.d.ts +1 -1
- package/defaults.js +1 -1
- package/koni/api/dotsama/crowdloan.js +3 -3
- package/koni/api/nft/index.js +10 -16
- package/koni/api/nft/story_odyssey_nft/index.d.ts +1 -1
- package/koni/api/staking/index.js +4 -5
- package/koni/background/handlers/Extension.d.ts +9 -0
- package/koni/background/handlers/Extension.js +144 -8
- package/koni/background/handlers/State.d.ts +5 -1
- package/koni/background/handlers/State.js +16 -1
- package/package.json +102 -25
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/cardano/consts.d.ts +1 -0
- package/services/balance-service/helpers/subscribe/cardano/consts.js +4 -0
- package/services/balance-service/helpers/subscribe/cardano/index.d.ts +2 -0
- package/services/balance-service/helpers/subscribe/cardano/index.js +57 -0
- package/services/balance-service/helpers/subscribe/cardano/types.d.ts +34 -0
- package/services/balance-service/helpers/subscribe/cardano/types.js +1 -0
- package/services/balance-service/helpers/subscribe/cardano/utils.d.ts +15 -0
- package/services/balance-service/helpers/subscribe/cardano/utils.js +62 -0
- package/services/balance-service/helpers/subscribe/index.d.ts +2 -2
- package/services/balance-service/helpers/subscribe/index.js +23 -9
- package/services/balance-service/helpers/subscribe/ton/utils.d.ts +1 -1
- package/services/balance-service/helpers/subscribe/ton/utils.js +1 -1
- package/services/balance-service/index.js +4 -2
- package/services/balance-service/transfer/cardano-transfer.d.ts +24 -0
- package/services/balance-service/transfer/cardano-transfer.js +114 -0
- package/services/balance-service/transfer/token.d.ts +1 -1
- package/services/balance-service/transfer/token.js +2 -2
- package/services/chain-service/constants.js +8 -3
- package/services/chain-service/handler/CardanoApi.d.ts +38 -0
- package/services/chain-service/handler/CardanoApi.js +167 -0
- package/services/chain-service/handler/CardanoChainHandler.d.ts +17 -0
- package/services/chain-service/handler/CardanoChainHandler.js +75 -0
- package/services/chain-service/handler/SubstrateChainHandler.js +3 -2
- package/services/chain-service/handler/TonApi.js +3 -6
- package/services/chain-service/handler/types.d.ts +1 -0
- package/services/chain-service/index.d.ts +4 -1
- package/services/chain-service/index.js +38 -7
- package/services/chain-service/types.d.ts +9 -1
- package/services/chain-service/utils/index.d.ts +4 -0
- package/services/chain-service/utils/index.js +32 -11
- package/services/chain-service/utils/patch.js +1 -1
- package/services/earning-service/constants/chains.d.ts +1 -0
- package/services/earning-service/constants/chains.js +2 -1
- package/services/earning-service/handlers/liquid-staking/bifrost-manta.js +1 -1
- package/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
- package/services/earning-service/handlers/native-staking/mythos.d.ts +35 -0
- package/services/earning-service/handlers/native-staking/mythos.js +329 -0
- package/services/earning-service/service.js +12 -14
- package/services/earning-service/utils/index.js +2 -0
- package/services/fee-service/service.js +19 -8
- package/services/history-service/index.js +6 -8
- package/services/inapp-notification-service/index.d.ts +3 -4
- package/services/inapp-notification-service/index.js +14 -6
- package/services/keyring-service/context/account-context.d.ts +6 -2
- package/services/keyring-service/context/account-context.js +17 -2
- package/services/keyring-service/context/handlers/Derive.d.ts +1 -1
- package/services/keyring-service/context/handlers/Derive.js +10 -8
- package/services/keyring-service/context/handlers/Migration.d.ts +17 -0
- package/services/keyring-service/context/handlers/Migration.js +258 -0
- package/services/keyring-service/context/handlers/Mnemonic.js +2 -2
- package/services/keyring-service/context/handlers/Secret.js +2 -2
- package/services/keyring-service/utils.d.ts +2 -0
- package/services/keyring-service/utils.js +11 -0
- package/services/migration-service/scripts/databases/ClearMetadataDatabase.d.ts +3 -3
- package/services/migration-service/scripts/databases/ClearMetadataDatabase.js +3 -23
- package/services/migration-service/scripts/databases/ClearMetadataForChains.d.ts +5 -0
- package/services/migration-service/scripts/databases/ClearMetadataForChains.js +32 -0
- package/services/migration-service/scripts/databases/ClearMetadataForMythos.d.ts +4 -0
- package/services/migration-service/scripts/databases/ClearMetadataForMythos.js +7 -0
- package/services/migration-service/scripts/index.d.ts +1 -0
- package/services/migration-service/scripts/index.js +4 -1
- package/services/request-service/handler/CardanoRequestHandler.d.ts +16 -0
- package/services/request-service/handler/CardanoRequestHandler.js +163 -0
- package/services/request-service/handler/EvmRequestHandler.js +1 -1
- package/services/request-service/index.d.ts +6 -3
- package/services/request-service/index.js +19 -5
- package/services/setting-service/constants.d.ts +3 -0
- package/services/setting-service/constants.js +6 -0
- package/services/storage-service/DatabaseService.d.ts +2 -0
- package/services/storage-service/DatabaseService.js +6 -0
- package/services/storage-service/db-stores/InappNotification.d.ts +1 -0
- package/services/storage-service/db-stores/InappNotification.js +6 -0
- package/services/storage-service/db-stores/Metadata.d.ts +1 -0
- package/services/storage-service/db-stores/Metadata.js +3 -0
- package/services/storage-service/db-stores/Migration.d.ts +1 -0
- package/services/storage-service/db-stores/Migration.js +6 -1
- package/services/swap-service/handler/asset-hub/handler.d.ts +1 -4
- package/services/swap-service/handler/asset-hub/handler.js +2 -61
- package/services/swap-service/handler/base-handler.d.ts +1 -4
- package/services/swap-service/handler/chainflip-handler.d.ts +2 -9
- package/services/swap-service/handler/chainflip-handler.js +31 -280
- package/services/swap-service/handler/hydradx-handler.d.ts +1 -6
- package/services/swap-service/handler/hydradx-handler.js +13 -180
- package/services/swap-service/handler/simpleswap-handler.d.ts +1 -4
- package/services/swap-service/handler/simpleswap-handler.js +5 -226
- package/services/swap-service/handler/uniswap-handler.d.ts +41 -0
- package/services/swap-service/handler/uniswap-handler.js +323 -0
- package/services/swap-service/index.js +30 -22
- package/services/swap-service/utils.d.ts +1 -5
- package/services/swap-service/utils.js +7 -21
- package/services/transaction-service/helpers/index.d.ts +2 -0
- package/services/transaction-service/helpers/index.js +4 -0
- package/services/transaction-service/index.d.ts +8 -2
- package/services/transaction-service/index.js +263 -10
- package/services/transaction-service/types.d.ts +7 -0
- package/services/transaction-service/utils.js +7 -2
- package/types/account/info/keyring.d.ts +4 -1
- package/types/account/info/keyring.js +9 -0
- package/types/account/info/proxy.d.ts +2 -0
- package/types/balance/index.d.ts +4 -1
- package/types/fee/base.d.ts +1 -1
- package/types/fee/cardano.d.ts +18 -0
- package/types/fee/cardano.js +1 -0
- package/types/fee/subscription.d.ts +4 -3
- package/types/swap/index.d.ts +11 -3
- package/types/swap/index.js +7 -2
- package/utils/account/analyze.js +2 -1
- package/utils/account/common.d.ts +11 -6
- package/utils/account/common.js +28 -19
- package/utils/account/derive/info/solo.js +10 -5
- package/utils/account/derive/validate.d.ts +1 -0
- package/utils/account/derive/validate.js +34 -1
- package/utils/account/transform.d.ts +2 -1
- package/utils/account/transform.js +37 -13
- package/utils/fee/transfer.d.ts +2 -1
- package/utils/fee/transfer.js +44 -11
- package/utils/index.js +4 -4
- package/utils/staticData/index.d.ts +4 -1
- package/utils/staticData/index.js +5 -1
- package/utils/staticData/oldChainPrefix.json +1 -0
|
@@ -43,6 +43,7 @@ var _storage = require("@subwallet/extension-base/storage");
|
|
|
43
43
|
var _types2 = require("@subwallet/extension-base/types");
|
|
44
44
|
var _utils3 = require("@subwallet/extension-base/utils");
|
|
45
45
|
var _promise = require("@subwallet/extension-base/utils/promise");
|
|
46
|
+
var _subwalletApiSdk = _interopRequireDefault(require("@subwallet/subwallet-api-sdk"));
|
|
46
47
|
var _uiKeyring = require("@subwallet/ui-keyring");
|
|
47
48
|
var _bn = _interopRequireDefault(require("bn.js"));
|
|
48
49
|
var _i18next = require("i18next");
|
|
@@ -90,6 +91,8 @@ class KoniState {
|
|
|
90
91
|
waitStarting = null;
|
|
91
92
|
constructor() {
|
|
92
93
|
let providers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
94
|
+
// Init subwallet api sdk
|
|
95
|
+
_subwalletApiSdk.default.init(_constants.BACKEND_API_URL);
|
|
93
96
|
this.providers = providers;
|
|
94
97
|
this.eventService = new _eventService.EventService();
|
|
95
98
|
this.dbService = new _DatabaseService.default(this.eventService);
|
|
@@ -731,6 +734,12 @@ class KoniState {
|
|
|
731
734
|
getTonApi(networkKey) {
|
|
732
735
|
return this.chainService.getTonApi(networkKey);
|
|
733
736
|
}
|
|
737
|
+
getCardanoApiMap() {
|
|
738
|
+
return this.chainService.getCardanoApiMap();
|
|
739
|
+
}
|
|
740
|
+
getCardanoApi(networkKey) {
|
|
741
|
+
return this.chainService.getCardanoApi(networkKey);
|
|
742
|
+
}
|
|
734
743
|
getApiMap() {
|
|
735
744
|
return {
|
|
736
745
|
substrate: this.chainService.getSubstrateApiMap(),
|
|
@@ -1017,12 +1026,18 @@ class KoniState {
|
|
|
1017
1026
|
getConfirmationsQueueSubjectTon() {
|
|
1018
1027
|
return this.requestService.confirmationsQueueSubjectTon;
|
|
1019
1028
|
}
|
|
1029
|
+
getConfirmationsQueueSubjectCardano() {
|
|
1030
|
+
return this.requestService.confirmationsQueueSubjectCardano;
|
|
1031
|
+
}
|
|
1020
1032
|
async completeConfirmation(request) {
|
|
1021
1033
|
return await this.requestService.completeConfirmation(request);
|
|
1022
1034
|
}
|
|
1023
1035
|
async completeConfirmationTon(request) {
|
|
1024
1036
|
return await this.requestService.completeConfirmationTon(request);
|
|
1025
1037
|
}
|
|
1038
|
+
async completeConfirmationCardano(request) {
|
|
1039
|
+
return await this.requestService.completeConfirmationCardano(request);
|
|
1040
|
+
}
|
|
1026
1041
|
async onMV3Update() {
|
|
1027
1042
|
const migrationStatus = await _storage.SWStorage.instance.getItem('mv3_migration');
|
|
1028
1043
|
if (!migrationStatus || migrationStatus !== 'done') {
|
package/cjs/packageInfo.js
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.DEFAULT_CARDANO_TTL_OFFSET = void 0;
|
|
7
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
8
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
|
|
10
|
+
const DEFAULT_CARDANO_TTL_OFFSET = 2 * 60 * 60 * 1000; // 2 hours
|
|
11
|
+
exports.DEFAULT_CARDANO_TTL_OFFSET = DEFAULT_CARDANO_TTL_OFFSET;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.subscribeCardanoBalance = subscribeCardanoBalance;
|
|
7
|
+
var _types = require("@subwallet/chain-list/types");
|
|
8
|
+
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
9
|
+
var _constants = require("@subwallet/extension-base/constants");
|
|
10
|
+
var _utils = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano/utils");
|
|
11
|
+
var _utils2 = require("@subwallet/extension-base/utils");
|
|
12
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
13
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
14
|
+
|
|
15
|
+
async function getBalanceMap(addresses, cardanoApi, isTestnet) {
|
|
16
|
+
const addressBalanceMap = {};
|
|
17
|
+
for (const address of addresses) {
|
|
18
|
+
addressBalanceMap[address] = await cardanoApi.getBalanceMap(isTestnet ? (0, _utils2.reformatAddress)(address, 0) : address);
|
|
19
|
+
}
|
|
20
|
+
return addressBalanceMap;
|
|
21
|
+
}
|
|
22
|
+
function subscribeCardanoBalance(params) {
|
|
23
|
+
const {
|
|
24
|
+
addresses,
|
|
25
|
+
assetMap,
|
|
26
|
+
callback,
|
|
27
|
+
cardanoApi,
|
|
28
|
+
chainInfo
|
|
29
|
+
} = params;
|
|
30
|
+
const chain = chainInfo.slug;
|
|
31
|
+
const isTestnet = chainInfo.isTestnet;
|
|
32
|
+
const tokens = (0, _utils2.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.NATIVE, _types._AssetType.CIP26]);
|
|
33
|
+
function getBalance() {
|
|
34
|
+
getBalanceMap(addresses, cardanoApi, isTestnet).then(addressBalanceMap => {
|
|
35
|
+
Object.values(tokens).forEach(tokenInfo => {
|
|
36
|
+
const id = (0, _utils.getCardanoAssetId)(tokenInfo);
|
|
37
|
+
const balances = addresses.map(address => {
|
|
38
|
+
var _addressBalanceMap$ad;
|
|
39
|
+
if (!addressBalanceMap[address]) {
|
|
40
|
+
return '0';
|
|
41
|
+
}
|
|
42
|
+
return ((_addressBalanceMap$ad = addressBalanceMap[address].find(asset => asset.unit === id)) === null || _addressBalanceMap$ad === void 0 ? void 0 : _addressBalanceMap$ad.quantity) || '0';
|
|
43
|
+
});
|
|
44
|
+
const items = balances.map((balance, index) => {
|
|
45
|
+
return {
|
|
46
|
+
address: addresses[index],
|
|
47
|
+
tokenSlug: tokenInfo.slug,
|
|
48
|
+
free: balance,
|
|
49
|
+
locked: '0',
|
|
50
|
+
// todo: research cardano lock balance
|
|
51
|
+
state: _KoniTypes.APIItemState.READY
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
callback(items);
|
|
55
|
+
});
|
|
56
|
+
}).catch(e => console.error('Error while fetching cardano balance', e));
|
|
57
|
+
}
|
|
58
|
+
const interval = setInterval(getBalance, _constants.ASTAR_REFRESH_BALANCE_INTERVAL);
|
|
59
|
+
getBalance();
|
|
60
|
+
return () => {
|
|
61
|
+
clearInterval(interval);
|
|
62
|
+
};
|
|
63
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.cborToBytes = void 0;
|
|
7
|
+
exports.getAdaBelongUtxo = getAdaBelongUtxo;
|
|
8
|
+
exports.getCardanoAssetId = getCardanoAssetId;
|
|
9
|
+
exports.getCardanoTxFee = getCardanoTxFee;
|
|
10
|
+
exports.retryCardanoTxStatus = retryCardanoTxStatus;
|
|
11
|
+
exports.splitCardanoId = splitCardanoId;
|
|
12
|
+
var _cardanoSerializationLibNodejs = require("@emurgo/cardano-serialization-lib-nodejs");
|
|
13
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
14
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
15
|
+
|
|
16
|
+
function getCardanoAssetId(chainAsset) {
|
|
17
|
+
var _chainAsset$metadata;
|
|
18
|
+
return (_chainAsset$metadata = chainAsset.metadata) === null || _chainAsset$metadata === void 0 ? void 0 : _chainAsset$metadata.cardanoId;
|
|
19
|
+
}
|
|
20
|
+
function getCardanoTxFee(payload) {
|
|
21
|
+
return BigInt(_cardanoSerializationLibNodejs.Transaction.from_hex(payload).body().fee().to_str());
|
|
22
|
+
}
|
|
23
|
+
function getAdaBelongUtxo(payload, receiverAddress) {
|
|
24
|
+
const txOutputsRaw = _cardanoSerializationLibNodejs.Transaction.from_hex(payload).body().outputs().to_json();
|
|
25
|
+
const txOutputs = JSON.parse(txOutputsRaw);
|
|
26
|
+
const receiverUtxo = txOutputs.find(utxo => utxo.address === receiverAddress); // must has utxo to receiver
|
|
27
|
+
|
|
28
|
+
// @ts-ignore
|
|
29
|
+
return BigInt(receiverUtxo.amount.coin);
|
|
30
|
+
}
|
|
31
|
+
const cborToBytes = hex => {
|
|
32
|
+
if (hex.length % 2 === 0 && /^[0-9A-F]*$/i.test(hex)) {
|
|
33
|
+
return Buffer.from(hex, 'hex');
|
|
34
|
+
}
|
|
35
|
+
return Buffer.from(hex, 'utf-8');
|
|
36
|
+
};
|
|
37
|
+
exports.cborToBytes = cborToBytes;
|
|
38
|
+
async function retryCardanoTxStatus(fn, options) {
|
|
39
|
+
let lastError;
|
|
40
|
+
for (let i = 0; i < options.retries; i++) {
|
|
41
|
+
try {
|
|
42
|
+
return await fn();
|
|
43
|
+
} catch (e) {
|
|
44
|
+
if (e instanceof Error) {
|
|
45
|
+
lastError = e;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// todo: improve the timeout tx
|
|
49
|
+
await new Promise(resolve => setTimeout(resolve, options.delay)); // wait for delay period, then recall the fn()
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
console.error('Cardano transaction timeout', lastError); // throw only last error, in case no successful result from fn()
|
|
54
|
+
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
function splitCardanoId(id) {
|
|
58
|
+
if (id === 'lovelace') {
|
|
59
|
+
return {
|
|
60
|
+
cardanoId: id,
|
|
61
|
+
policyId: '',
|
|
62
|
+
nameHex: ''
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (!id || id.length < 56) {
|
|
66
|
+
throw new Error('The cardano native asset policy id must has 28 bytes in length.');
|
|
67
|
+
} else {
|
|
68
|
+
return {
|
|
69
|
+
cardanoId: id,
|
|
70
|
+
policyId: id.slice(0, 56),
|
|
71
|
+
nameHex: id.slice(56)
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -8,6 +8,7 @@ exports.getAccountJsonByAddress = void 0;
|
|
|
8
8
|
exports.subscribeBalance = subscribeBalance;
|
|
9
9
|
var _types = require("@subwallet/chain-list/types");
|
|
10
10
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
11
|
+
var _cardano = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano");
|
|
11
12
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
12
13
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
13
14
|
var _uiKeyring = _interopRequireDefault(require("@subwallet/ui-keyring"));
|
|
@@ -45,16 +46,19 @@ exports.getAccountJsonByAddress = getAccountJsonByAddress;
|
|
|
45
46
|
const filterAddress = (addresses, chainInfo) => {
|
|
46
47
|
const {
|
|
47
48
|
bitcoin,
|
|
49
|
+
cardano,
|
|
48
50
|
evm,
|
|
49
51
|
substrate,
|
|
50
52
|
ton
|
|
51
|
-
} = (0, _utils2.
|
|
53
|
+
} = (0, _utils2.getAddressesByChainTypeMap)(addresses);
|
|
52
54
|
if ((0, _utils._isChainEvmCompatible)(chainInfo)) {
|
|
53
|
-
return [evm, [...bitcoin, ...substrate, ...ton]];
|
|
55
|
+
return [evm, [...bitcoin, ...substrate, ...ton, ...cardano]];
|
|
54
56
|
} else if ((0, _utils._isChainBitcoinCompatible)(chainInfo)) {
|
|
55
|
-
return [bitcoin, [...evm, ...substrate, ...ton]];
|
|
57
|
+
return [bitcoin, [...evm, ...substrate, ...ton, ...cardano]];
|
|
56
58
|
} else if ((0, _utils._isChainTonCompatible)(chainInfo)) {
|
|
57
|
-
return [ton, [...bitcoin, ...evm, ...substrate]];
|
|
59
|
+
return [ton, [...bitcoin, ...evm, ...substrate, ...cardano]];
|
|
60
|
+
} else if ((0, _utils._isChainCardanoCompatible)(chainInfo)) {
|
|
61
|
+
return [cardano, [...bitcoin, ...evm, ...substrate, ...ton]];
|
|
58
62
|
} else {
|
|
59
63
|
const fetchList = [];
|
|
60
64
|
const unfetchList = [];
|
|
@@ -80,11 +84,11 @@ const filterAddress = (addresses, chainInfo) => {
|
|
|
80
84
|
fetchList.push(address);
|
|
81
85
|
}
|
|
82
86
|
});
|
|
83
|
-
return [fetchList, [...unfetchList, ...bitcoin, ...evm, ...ton]];
|
|
87
|
+
return [fetchList, [...unfetchList, ...bitcoin, ...evm, ...ton, ...cardano]];
|
|
84
88
|
}
|
|
85
89
|
};
|
|
86
90
|
const handleUnsupportedOrPendingAddresses = (addresses, chainSlug, chainAssetMap, state, callback) => {
|
|
87
|
-
const tokens = (0, _utils2.filterAssetsByChainAndType)(chainAssetMap, chainSlug, [_types._AssetType.NATIVE, _types._AssetType.ERC20, _types._AssetType.PSP22, _types._AssetType.LOCAL, _types._AssetType.GRC20, _types._AssetType.VFT]);
|
|
91
|
+
const tokens = (0, _utils2.filterAssetsByChainAndType)(chainAssetMap, chainSlug, [_types._AssetType.NATIVE, _types._AssetType.ERC20, _types._AssetType.PSP22, _types._AssetType.LOCAL, _types._AssetType.GRC20, _types._AssetType.VFT, _types._AssetType.TEP74, _types._AssetType.CIP26]);
|
|
88
92
|
const now = new Date().getTime();
|
|
89
93
|
Object.values(tokens).forEach(token => {
|
|
90
94
|
const items = addresses.map(address => ({
|
|
@@ -100,7 +104,7 @@ const handleUnsupportedOrPendingAddresses = (addresses, chainSlug, chainAssetMap
|
|
|
100
104
|
};
|
|
101
105
|
|
|
102
106
|
// main subscription, use for multiple chains, multiple addresses and multiple tokens
|
|
103
|
-
function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, callback, extrinsicType) {
|
|
107
|
+
function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, callback, extrinsicType) {
|
|
104
108
|
// Filter chain and token
|
|
105
109
|
const chainAssetMap = Object.fromEntries(Object.entries(_chainAssetMap).filter(_ref => {
|
|
106
110
|
let [token] = _ref;
|
|
@@ -138,6 +142,16 @@ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoM
|
|
|
138
142
|
tonApi
|
|
139
143
|
});
|
|
140
144
|
}
|
|
145
|
+
const cardanoApi = cardanoApiMap[chainSlug];
|
|
146
|
+
if ((0, _utils._isPureCardanoChain)(chainInfo)) {
|
|
147
|
+
return (0, _cardano.subscribeCardanoBalance)({
|
|
148
|
+
addresses: useAddresses,
|
|
149
|
+
assetMap: chainAssetMap,
|
|
150
|
+
callback,
|
|
151
|
+
chainInfo,
|
|
152
|
+
cardanoApi
|
|
153
|
+
});
|
|
154
|
+
}
|
|
141
155
|
|
|
142
156
|
// If the chain is not ready, return pending state
|
|
143
157
|
if (!substrateApiMap[chainSlug].isApiReady) {
|
|
@@ -18,7 +18,7 @@ exports.getTransferCellPromise = getTransferCellPromise;
|
|
|
18
18
|
exports.getWalletQueryId = getWalletQueryId;
|
|
19
19
|
exports.isBounceableAddress = isBounceableAddress;
|
|
20
20
|
exports.messageRelaxedToCell = messageRelaxedToCell;
|
|
21
|
-
exports.
|
|
21
|
+
exports.retryTonTxStatus = retryTonTxStatus;
|
|
22
22
|
exports.tonAddressInfo = tonAddressInfo;
|
|
23
23
|
var _consts = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/ton/consts");
|
|
24
24
|
var _core = require("@ton/core");
|
|
@@ -45,7 +45,7 @@ function externalMessage(contract, seqno, body) {
|
|
|
45
45
|
body: body
|
|
46
46
|
}))).endCell();
|
|
47
47
|
}
|
|
48
|
-
async function
|
|
48
|
+
async function retryTonTxStatus(fn, options) {
|
|
49
49
|
let lastError;
|
|
50
50
|
for (let i = 0; i < options.retries; i++) {
|
|
51
51
|
try {
|
|
@@ -200,8 +200,9 @@ class BalanceService {
|
|
|
200
200
|
const evmApiMap = this.state.chainService.getEvmApiMap();
|
|
201
201
|
const substrateApiMap = this.state.chainService.getSubstrateApiMap();
|
|
202
202
|
const tonApiMap = this.state.chainService.getTonApiMap();
|
|
203
|
+
const cardanoApiMap = this.state.chainService.getCardanoApiMap();
|
|
203
204
|
let unsub = _util.noop;
|
|
204
|
-
unsub = (0, _helpers.subscribeBalance)([address], [chain], [tSlug], assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, result => {
|
|
205
|
+
unsub = (0, _helpers.subscribeBalance)([address], [chain], [tSlug], assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, result => {
|
|
205
206
|
const rs = result[0];
|
|
206
207
|
let value;
|
|
207
208
|
switch (balanceType) {
|
|
@@ -371,13 +372,14 @@ class BalanceService {
|
|
|
371
372
|
const evmApiMap = this.state.chainService.getEvmApiMap();
|
|
372
373
|
const substrateApiMap = this.state.chainService.getSubstrateApiMap();
|
|
373
374
|
const tonApiMap = this.state.chainService.getTonApiMap();
|
|
375
|
+
const cardanoApiMap = this.state.chainService.getCardanoApiMap();
|
|
374
376
|
const activeChainSlugs = Object.keys(this.state.getActiveChainInfoMap());
|
|
375
377
|
const assetState = this.state.chainService.subscribeAssetSettings().value;
|
|
376
378
|
const assets = Object.values(assetMap).filter(asset => {
|
|
377
379
|
var _assetState$asset$slu;
|
|
378
380
|
return activeChainSlugs.includes(asset.originChain) && ((_assetState$asset$slu = assetState[asset.slug]) === null || _assetState$asset$slu === void 0 ? void 0 : _assetState$asset$slu.visible);
|
|
379
381
|
}).map(asset => asset.slug);
|
|
380
|
-
const unsub = (0, _helpers.subscribeBalance)(addresses, activeChainSlugs, assets, assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, result => {
|
|
382
|
+
const unsub = (0, _helpers.subscribeBalance)(addresses, activeChainSlugs, assets, assetMap, chainInfoMap, substrateApiMap, evmApiMap, tonApiMap, cardanoApiMap, result => {
|
|
381
383
|
!cancel && this.setBalanceItem(result);
|
|
382
384
|
}, _KoniTypes.ExtrinsicType.TRANSFER_BALANCE);
|
|
383
385
|
const unsub2 = this.state.subscribeMantaPayBalance();
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createCardanoTransaction = createCardanoTransaction;
|
|
7
|
+
var csl = _interopRequireWildcard(require("@emurgo/cardano-serialization-lib-nodejs"));
|
|
8
|
+
var _types = require("@subwallet/chain-list/types");
|
|
9
|
+
var _utils = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano/utils");
|
|
10
|
+
var _subwalletApiSdk = require("@subwallet/subwallet-api-sdk");
|
|
11
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
12
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
13
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
14
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
15
|
+
|
|
16
|
+
async function createCardanoTransaction(params) {
|
|
17
|
+
var _tokenInfo$metadata;
|
|
18
|
+
const {
|
|
19
|
+
cardanoTtlOffset,
|
|
20
|
+
from,
|
|
21
|
+
networkKey,
|
|
22
|
+
to,
|
|
23
|
+
tokenInfo,
|
|
24
|
+
transferAll,
|
|
25
|
+
value
|
|
26
|
+
} = params;
|
|
27
|
+
const cardanoId = (_tokenInfo$metadata = tokenInfo.metadata) === null || _tokenInfo$metadata === void 0 ? void 0 : _tokenInfo$metadata.cardanoId;
|
|
28
|
+
const isNativeTransfer = tokenInfo.assetType === _types._AssetType.NATIVE;
|
|
29
|
+
const isSelfTransfer = from === to;
|
|
30
|
+
if (!cardanoId) {
|
|
31
|
+
throw new Error('Missing token policy id metadata');
|
|
32
|
+
}
|
|
33
|
+
const payload = await _subwalletApiSdk.subwalletApiSdk.fetchUnsignedPayload({
|
|
34
|
+
tokenDecimals: params.tokenInfo.decimals || 0,
|
|
35
|
+
nativeTokenSymbol: params.nativeTokenInfo.symbol,
|
|
36
|
+
cardanoId,
|
|
37
|
+
from: params.from,
|
|
38
|
+
to: params.to,
|
|
39
|
+
value: params.value,
|
|
40
|
+
cardanoTtlOffset: params.cardanoTtlOffset
|
|
41
|
+
});
|
|
42
|
+
console.log('Build cardano payload successfully!', payload);
|
|
43
|
+
validatePayload(payload, params);
|
|
44
|
+
const fee = (0, _utils.getCardanoTxFee)(payload);
|
|
45
|
+
const adaBelongToCnaUtxo = isNativeTransfer || isSelfTransfer ? BigInt(0) : (0, _utils.getAdaBelongUtxo)(payload, to);
|
|
46
|
+
const tx = {
|
|
47
|
+
from,
|
|
48
|
+
to,
|
|
49
|
+
networkKey,
|
|
50
|
+
value,
|
|
51
|
+
transferAll,
|
|
52
|
+
cardanoTtlOffset,
|
|
53
|
+
estimateCardanoFee: (fee + adaBelongToCnaUtxo).toString(),
|
|
54
|
+
cardanoPayload: payload
|
|
55
|
+
};
|
|
56
|
+
return [tx, value];
|
|
57
|
+
}
|
|
58
|
+
function validatePayload(payload, params) {
|
|
59
|
+
var _params$tokenInfo$met;
|
|
60
|
+
const txInfo = JSON.parse(csl.Transaction.from_hex(payload).to_json());
|
|
61
|
+
const outputs = txInfo.body.outputs;
|
|
62
|
+
const cardanoId = (_params$tokenInfo$met = params.tokenInfo.metadata) === null || _params$tokenInfo$met === void 0 ? void 0 : _params$tokenInfo$met.cardanoId;
|
|
63
|
+
const assetType = params.tokenInfo.assetType;
|
|
64
|
+
const isSendSameAddress = params.from === params.to;
|
|
65
|
+
if (!cardanoId) {
|
|
66
|
+
throw new Error('Missing cardano id metadata');
|
|
67
|
+
}
|
|
68
|
+
const cardanoAssetMetadata = (0, _utils.splitCardanoId)(cardanoId);
|
|
69
|
+
if (isSendSameAddress) {
|
|
70
|
+
validateAllOutputsBelongToAddress(params.from, outputs);
|
|
71
|
+
validateExistOutputWithAmountSend(params.value, outputs, assetType, cardanoAssetMetadata);
|
|
72
|
+
} else {
|
|
73
|
+
const [outputsBelongToReceiver, outputsNotBelongToReceiver] = [outputs.filter(output => output.address === params.to), outputs.filter(output => output.address !== params.to)];
|
|
74
|
+
validateReceiverOutputsWithAmountSend(params.value, outputsBelongToReceiver, assetType, cardanoAssetMetadata);
|
|
75
|
+
validateAllOutputsBelongToAddress(params.from, outputsNotBelongToReceiver);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function validateAllOutputsBelongToAddress(address, outputs) {
|
|
79
|
+
const found = outputs.find(output => output.address !== address);
|
|
80
|
+
if (found) {
|
|
81
|
+
throw new Error('Transaction has invalid address information');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function validateExistOutputWithAmountSend(amount, outputs, assetType, cardanoAssetMetadata) {
|
|
85
|
+
if (assetType === _types._AssetType.NATIVE) {
|
|
86
|
+
const found = outputs.find(output => output.amount.coin === amount);
|
|
87
|
+
if (found) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
throw new Error('Transaction has invalid transfer amount information');
|
|
91
|
+
}
|
|
92
|
+
if (assetType === _types._AssetType.CIP26) {
|
|
93
|
+
const found = outputs.find(output => {
|
|
94
|
+
var _output$amount$multia;
|
|
95
|
+
return amount === ((_output$amount$multia = output.amount.multiasset[cardanoAssetMetadata.policyId]) === null || _output$amount$multia === void 0 ? void 0 : _output$amount$multia[cardanoAssetMetadata.nameHex]);
|
|
96
|
+
});
|
|
97
|
+
if (found) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
throw new Error('Transaction has invalid transfer amount information');
|
|
101
|
+
}
|
|
102
|
+
throw new Error('Invalid asset type!');
|
|
103
|
+
}
|
|
104
|
+
function validateReceiverOutputsWithAmountSend(amount, outputs, assetType, cardanoAssetMetadata) {
|
|
105
|
+
if (outputs.length !== 1) {
|
|
106
|
+
throw new Error('Transaction has invalid transfer amount information');
|
|
107
|
+
}
|
|
108
|
+
const receiverOutput = outputs[0];
|
|
109
|
+
if (assetType === _types._AssetType.NATIVE) {
|
|
110
|
+
if (receiverOutput.amount.coin === amount) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
throw new Error('Transaction has invalid transfer amount information');
|
|
114
|
+
}
|
|
115
|
+
if (assetType === _types._AssetType.CIP26) {
|
|
116
|
+
if (receiverOutput.amount.multiasset[cardanoAssetMetadata.policyId][cardanoAssetMetadata.nameHex] === amount) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
throw new Error('Transaction has invalid transfer amount information');
|
|
120
|
+
}
|
|
121
|
+
throw new Error('Invalid asset type!');
|
|
122
|
+
}
|
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.getTransferMockTxFee = exports.
|
|
7
|
+
exports.getTransferMockTxFee = exports.createSubstrateExtrinsic = void 0;
|
|
8
8
|
var _api = require("@gear-js/api");
|
|
9
9
|
var _types = require("@subwallet/chain-list/types");
|
|
10
10
|
var _wasm = require("@subwallet/extension-base/koni/api/contract-handler/wasm");
|
|
@@ -23,7 +23,7 @@ var _utilCrypto = require("@polkadot/util-crypto");
|
|
|
23
23
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
24
24
|
// SPDX-License-Identifier: Apache-2.0
|
|
25
25
|
|
|
26
|
-
const
|
|
26
|
+
const createSubstrateExtrinsic = async _ref => {
|
|
27
27
|
var _tokenInfo$metadata;
|
|
28
28
|
let {
|
|
29
29
|
from,
|
|
@@ -119,7 +119,7 @@ const createTransferExtrinsic = async _ref => {
|
|
|
119
119
|
}
|
|
120
120
|
return [transfer, transferAmount || value];
|
|
121
121
|
};
|
|
122
|
-
exports.
|
|
122
|
+
exports.createSubstrateExtrinsic = createSubstrateExtrinsic;
|
|
123
123
|
const getTransferMockTxFee = async (address, chainInfo, tokenInfo, api) => {
|
|
124
124
|
try {
|
|
125
125
|
let estimatedFee;
|
|
@@ -157,7 +157,7 @@ const getTransferMockTxFee = async (address, chainInfo, tokenInfo, api) => {
|
|
|
157
157
|
var _paymentInfo$partialF;
|
|
158
158
|
const substrateApi = api;
|
|
159
159
|
const chainApi = await substrateApi.isReady;
|
|
160
|
-
const [mockTx] = await
|
|
160
|
+
const [mockTx] = await createSubstrateExtrinsic({
|
|
161
161
|
from: address,
|
|
162
162
|
networkKey: chainInfo.slug,
|
|
163
163
|
substrateApi: chainApi,
|
|
@@ -115,7 +115,10 @@ const _STAKING_ERA_LENGTH_MAP = {
|
|
|
115
115
|
polkadex: 24,
|
|
116
116
|
avail_mainnet: 24,
|
|
117
117
|
cere: 24,
|
|
118
|
-
analog_timechain: 12
|
|
118
|
+
analog_timechain: 12,
|
|
119
|
+
muse_testnet: 25 * 6 / 60 / 60,
|
|
120
|
+
// 25 blocks per session
|
|
121
|
+
mythos: 24
|
|
119
122
|
};
|
|
120
123
|
exports._STAKING_ERA_LENGTH_MAP = _STAKING_ERA_LENGTH_MAP;
|
|
121
124
|
const _EXPECTED_BLOCK_TIME = {
|
|
@@ -149,7 +152,9 @@ const _EXPECTED_BLOCK_TIME = {
|
|
|
149
152
|
enjin_relaychain: 6,
|
|
150
153
|
availTuringTest: 20,
|
|
151
154
|
avail_mainnet: 20,
|
|
152
|
-
dentnet: 3
|
|
155
|
+
dentnet: 3,
|
|
156
|
+
muse_testnet: 6,
|
|
157
|
+
mythos: 6
|
|
153
158
|
};
|
|
154
159
|
exports._EXPECTED_BLOCK_TIME = _EXPECTED_BLOCK_TIME;
|
|
155
160
|
const _PARACHAIN_INFLATION_DISTRIBUTION = {
|
|
@@ -266,7 +271,7 @@ const _TRANSFER_CHAIN_GROUP = {
|
|
|
266
271
|
genshiro: ['genshiro_testnet', 'genshiro', 'equilibrium_parachain'],
|
|
267
272
|
// crab: ['crab', 'pangolin'],
|
|
268
273
|
bitcountry: ['pioneer', 'bitcountry'],
|
|
269
|
-
statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet', 'dbcchain'],
|
|
274
|
+
statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet', 'dbcchain', 'westend_assethub'],
|
|
270
275
|
riochain: ['riochain'],
|
|
271
276
|
sora_substrate: ['sora_substrate'],
|
|
272
277
|
avail: ['kate', 'goldberg_testnet'],
|