@subwallet/extension-base 1.2.13-0 → 1.2.15-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/errors/SwapError.js +5 -1
- package/cjs/background/errors/SwapError.js +5 -1
- package/cjs/core/logic-validation/swap.js +56 -3
- package/cjs/core/substrate/nominationpools-pallet.js +2 -1
- package/cjs/koni/api/nft/config.js +37 -23
- package/cjs/koni/api/nft/index.js +9 -1
- package/cjs/koni/api/nft/unique_network_nft/index.js +12 -20
- package/cjs/koni/background/handlers/Extension.js +12 -0
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/transfer/xcm/utils.js +2 -2
- package/cjs/services/chain-service/constants.js +2 -1
- package/cjs/services/chain-service/handler/SubstrateApi.js +6 -0
- package/cjs/services/chain-service/health-check/constants/index.js +4 -4
- package/cjs/services/chain-service/health-check/utils/asset-info.js +23 -6
- package/cjs/services/chain-service/health-check/utils/chain-info.js +25 -2
- package/cjs/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +160 -0
- package/cjs/services/chain-service/health-check/utils/new-utils/asset-validate.js +45 -0
- package/cjs/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +73 -0
- package/cjs/services/chain-service/health-check/utils/new-utils/chain-validate.js +34 -0
- package/cjs/services/chain-service/index.js +47 -5
- package/cjs/services/earning-service/handlers/liquid-staking/acala.js +49 -19
- package/cjs/services/migration-service/scripts/databases/ReloadMetadata.js +35 -0
- package/cjs/services/migration-service/scripts/index.js +4 -2
- package/cjs/services/price-service/coingecko.js +57 -32
- package/cjs/services/price-service/index.js +30 -11
- package/cjs/services/storage-service/db-stores/BaseStore.js +4 -0
- package/cjs/services/swap-service/handler/asset-hub/handler.js +343 -0
- package/cjs/services/swap-service/handler/asset-hub/index.js +12 -0
- package/cjs/services/swap-service/handler/asset-hub/router.js +93 -0
- package/cjs/services/swap-service/handler/asset-hub/utils.js +158 -0
- package/cjs/services/swap-service/index.js +10 -1
- package/cjs/services/swap-service/utils.js +10 -1
- package/cjs/types/swap/index.js +5 -1
- package/core/logic-validation/swap.d.ts +3 -1
- package/core/logic-validation/swap.js +55 -4
- package/core/substrate/nominationpools-pallet.js +2 -1
- package/koni/api/nft/config.d.ts +1 -0
- package/koni/api/nft/config.js +31 -19
- package/koni/api/nft/index.js +9 -1
- package/koni/api/nft/unique_network_nft/index.js +12 -20
- package/koni/background/handlers/Extension.js +12 -0
- package/package.json +56 -11
- package/packageInfo.js +1 -1
- package/services/balance-service/transfer/xcm/utils.js +2 -2
- package/services/chain-service/constants.d.ts +1 -0
- package/services/chain-service/constants.js +2 -1
- package/services/chain-service/handler/SubstrateApi.js +6 -0
- package/services/chain-service/health-check/constants/index.js +4 -4
- package/services/chain-service/health-check/utils/asset-info.d.ts +1 -0
- package/services/chain-service/health-check/utils/asset-info.js +20 -4
- package/services/chain-service/health-check/utils/chain-info.d.ts +4 -2
- package/services/chain-service/health-check/utils/chain-info.js +20 -0
- package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.d.ts +10 -0
- package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +146 -0
- package/services/chain-service/health-check/utils/new-utils/asset-validate.d.ts +3 -0
- package/services/chain-service/health-check/utils/new-utils/asset-validate.js +38 -0
- package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.d.ts +5 -0
- package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +64 -0
- package/services/chain-service/health-check/utils/new-utils/chain-validate.d.ts +4 -0
- package/services/chain-service/health-check/utils/new-utils/chain-validate.js +26 -0
- package/services/chain-service/index.js +47 -5
- package/services/chain-service/types.d.ts +5 -0
- package/services/earning-service/handlers/liquid-staking/acala.js +46 -17
- package/services/migration-service/scripts/databases/ReloadMetadata.d.ts +5 -0
- package/services/migration-service/scripts/databases/ReloadMetadata.js +27 -0
- package/services/migration-service/scripts/index.js +4 -2
- package/services/price-service/coingecko.js +54 -32
- package/services/price-service/index.js +29 -11
- package/services/storage-service/db-stores/BaseStore.d.ts +3 -0
- package/services/storage-service/db-stores/BaseStore.js +4 -0
- package/services/swap-service/handler/asset-hub/handler.d.ts +31 -0
- package/services/swap-service/handler/asset-hub/handler.js +335 -0
- package/services/swap-service/handler/asset-hub/index.d.ts +1 -0
- package/services/swap-service/handler/asset-hub/index.js +4 -0
- package/services/swap-service/handler/asset-hub/router.d.ts +16 -0
- package/services/swap-service/handler/asset-hub/router.js +85 -0
- package/services/swap-service/handler/asset-hub/utils.d.ts +18 -0
- package/services/swap-service/handler/asset-hub/utils.js +133 -0
- package/services/swap-service/index.js +10 -1
- package/services/swap-service/utils.d.ts +1 -0
- package/services/swap-service/utils.js +9 -1
- package/types/swap/index.d.ts +15 -2
- package/types/swap/index.js +5 -1
- /package/cjs/services/migration-service/scripts/{ClearMetadataDatabase.js → databases/ClearMetadataDatabase.js} +0 -0
- /package/services/migration-service/scripts/{ClearMetadataDatabase.d.ts → databases/ClearMetadataDatabase.d.ts} +0 -0
- /package/services/migration-service/scripts/{ClearMetadataDatabase.js → databases/ClearMetadataDatabase.js} +0 -0
|
@@ -37,12 +37,16 @@ const defaultErrorMap = {
|
|
|
37
37
|
code: undefined
|
|
38
38
|
},
|
|
39
39
|
NOT_ENOUGH_LIQUIDITY: {
|
|
40
|
-
message: detectTranslate('
|
|
40
|
+
message: detectTranslate('Insufficient liquidity to complete the swap. Lower your amount and try again'),
|
|
41
41
|
code: undefined
|
|
42
42
|
},
|
|
43
43
|
AMOUNT_CANNOT_BE_ZERO: {
|
|
44
44
|
message: detectTranslate('Amount must be greater than 0'),
|
|
45
45
|
code: undefined
|
|
46
|
+
},
|
|
47
|
+
MAKE_POOL_NOT_ENOUGH_EXISTENTIAL_DEPOSIT: {
|
|
48
|
+
message: detectTranslate('Insufficient liquidity to complete the swap. Lower your amount and try again'),
|
|
49
|
+
code: undefined
|
|
46
50
|
}
|
|
47
51
|
};
|
|
48
52
|
export class SwapError extends SWError {
|
|
@@ -43,12 +43,16 @@ const defaultErrorMap = {
|
|
|
43
43
|
code: undefined
|
|
44
44
|
},
|
|
45
45
|
NOT_ENOUGH_LIQUIDITY: {
|
|
46
|
-
message: (0, _utils.detectTranslate)('
|
|
46
|
+
message: (0, _utils.detectTranslate)('Insufficient liquidity to complete the swap. Lower your amount and try again'),
|
|
47
47
|
code: undefined
|
|
48
48
|
},
|
|
49
49
|
AMOUNT_CANNOT_BE_ZERO: {
|
|
50
50
|
message: (0, _utils.detectTranslate)('Amount must be greater than 0'),
|
|
51
51
|
code: undefined
|
|
52
|
+
},
|
|
53
|
+
MAKE_POOL_NOT_ENOUGH_EXISTENTIAL_DEPOSIT: {
|
|
54
|
+
message: (0, _utils.detectTranslate)('Insufficient liquidity to complete the swap. Lower your amount and try again'),
|
|
55
|
+
code: undefined
|
|
52
56
|
}
|
|
53
57
|
};
|
|
54
58
|
class SwapError extends _SWError.SWError {
|
|
@@ -5,8 +5,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports._getChainflipEarlyValidationError = _getChainflipEarlyValidationError;
|
|
8
|
+
exports._getEarlyAssetHubValidationError = _getEarlyAssetHubValidationError;
|
|
8
9
|
exports._getEarlyHydradxValidationError = _getEarlyHydradxValidationError;
|
|
9
10
|
exports._validateBalanceToSwap = _validateBalanceToSwap;
|
|
11
|
+
exports._validateBalanceToSwapOnAssetHub = _validateBalanceToSwapOnAssetHub;
|
|
10
12
|
exports._validateSwapRecipient = _validateSwapRecipient;
|
|
11
13
|
var _SwapError = require("@subwallet/extension-base/background/errors/SwapError");
|
|
12
14
|
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
@@ -19,12 +21,46 @@ var _utilCrypto = require("@polkadot/util-crypto");
|
|
|
19
21
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
20
22
|
// SPDX-License-Identifier: Apache-2.0
|
|
21
23
|
|
|
24
|
+
function _validateBalanceToSwapOnAssetHub(fromToken, feeToken, feeTokenChainInfo, feeAmount, fromTokenBalance, feeTokenBalance, swapAmount, isXcmOk, minSwap) {
|
|
25
|
+
const bnFromTokenBalance = new _bignumber.default(fromTokenBalance);
|
|
26
|
+
if (!(0, _utils._isNativeToken)(fromToken) && bnFromTokenBalance.minus(swapAmount).lt((0, _utils._getTokenMinAmount)(fromToken))) {
|
|
27
|
+
const parsedMaxBalanceSwap = (0, _utils2.formatNumber)(bnFromTokenBalance.minus((0, _utils._getTokenMinAmount)(fromToken)), (0, _utils._getAssetDecimals)(fromToken));
|
|
28
|
+
return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_EXCEED_ALLOWANCE, `Amount too high. Lower your amount ${bnFromTokenBalance.gt(0) ? `below ${parsedMaxBalanceSwap} ${fromToken.symbol}` : ''} and try again`);
|
|
29
|
+
}
|
|
30
|
+
if (new _bignumber.default(feeTokenBalance).lte(feeAmount)) {
|
|
31
|
+
return new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.NOT_ENOUGH_BALANCE, `You don't have enough ${feeToken.symbol} (${feeTokenChainInfo.name}) to pay transaction fee`);
|
|
32
|
+
}
|
|
33
|
+
if (!(0, _utils._isNativeToken)(fromToken) && fromToken.slug === feeToken.slug) {
|
|
34
|
+
// todo: need review and refactor
|
|
35
|
+
if (bnFromTokenBalance.lte(new _bignumber.default(feeAmount).plus(swapAmount))) {
|
|
36
|
+
return new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.NOT_ENOUGH_BALANCE, `Insufficient balance. Deposit ${fromToken.symbol} and try again.`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (isXcmOk) {
|
|
40
|
+
// assume that the swap is valid if XCM is in the process and it was successful
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
if (minSwap) {
|
|
44
|
+
if (bnFromTokenBalance.lte(minSwap)) {
|
|
45
|
+
const parsedMinSwapValue = (0, _utils2.formatNumber)(minSwap, (0, _utils._getAssetDecimals)(fromToken));
|
|
46
|
+
return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_NOT_ENOUGH_BALANCE, `Insufficient balance. You need more than ${parsedMinSwapValue} ${fromToken.symbol} to start swapping. Deposit ${fromToken.symbol} and try again.`); // todo: min swap or amount?
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (new _bignumber.default(swapAmount).gte(fromTokenBalance)) {
|
|
51
|
+
const parsedMaxBalanceSwap = (0, _utils2.formatNumber)(fromTokenBalance, (0, _utils._getAssetDecimals)(fromToken));
|
|
52
|
+
return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_EXCEED_ALLOWANCE, `Amount too high. Lower your amount ${bnFromTokenBalance.gt(0) ? `below ${parsedMaxBalanceSwap} ${fromToken.symbol}` : ''} and try again`);
|
|
53
|
+
}
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
22
56
|
function _validateBalanceToSwap(fromToken, feeToken, feeTokenChainInfo, feeAmount, fromTokenBalance, feeTokenBalance, swapAmount, isXcmOk, minSwap) {
|
|
57
|
+
const bnFromTokenBalance = new _bignumber.default(fromTokenBalance);
|
|
23
58
|
if (new _bignumber.default(feeTokenBalance).lte(feeAmount)) {
|
|
24
59
|
return new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.NOT_ENOUGH_BALANCE, `You don't have enough ${feeToken.symbol} (${feeTokenChainInfo.name}) to pay transaction fee`);
|
|
25
60
|
}
|
|
26
61
|
if (fromToken.slug === feeToken.slug) {
|
|
27
|
-
|
|
62
|
+
// todo: need review and refactor
|
|
63
|
+
if (bnFromTokenBalance.lte(new _bignumber.default(feeAmount).plus(swapAmount))) {
|
|
28
64
|
return new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.NOT_ENOUGH_BALANCE, `Insufficient balance. Deposit ${fromToken.symbol} and try again.`);
|
|
29
65
|
}
|
|
30
66
|
}
|
|
@@ -33,7 +69,7 @@ function _validateBalanceToSwap(fromToken, feeToken, feeTokenChainInfo, feeAmoun
|
|
|
33
69
|
return undefined;
|
|
34
70
|
}
|
|
35
71
|
if (minSwap) {
|
|
36
|
-
if (
|
|
72
|
+
if (bnFromTokenBalance.lte(minSwap)) {
|
|
37
73
|
const parsedMinSwapValue = (0, _utils2.formatNumber)(minSwap, (0, _utils._getAssetDecimals)(fromToken));
|
|
38
74
|
return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_NOT_ENOUGH_BALANCE, `Insufficient balance. You need more than ${parsedMinSwapValue} ${fromToken.symbol} to start swapping. Deposit ${fromToken.symbol} and try again.`); // todo: min swap or amount?
|
|
39
75
|
}
|
|
@@ -41,7 +77,7 @@ function _validateBalanceToSwap(fromToken, feeToken, feeTokenChainInfo, feeAmoun
|
|
|
41
77
|
|
|
42
78
|
if (new _bignumber.default(swapAmount).gte(fromTokenBalance)) {
|
|
43
79
|
const parsedMaxBalanceSwap = (0, _utils2.formatNumber)(fromTokenBalance, (0, _utils._getAssetDecimals)(fromToken));
|
|
44
|
-
return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_EXCEED_ALLOWANCE, `Amount too high. Lower your amount ${
|
|
80
|
+
return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_EXCEED_ALLOWANCE, `Amount too high. Lower your amount ${bnFromTokenBalance.gt(0) ? `below ${parsedMaxBalanceSwap} ${fromToken.symbol}` : ''} and try again`);
|
|
45
81
|
}
|
|
46
82
|
return undefined;
|
|
47
83
|
}
|
|
@@ -96,4 +132,21 @@ function _getEarlyHydradxValidationError(error, metadata) {
|
|
|
96
132
|
default:
|
|
97
133
|
return new _SwapError.SwapError(error);
|
|
98
134
|
}
|
|
135
|
+
}
|
|
136
|
+
function _getEarlyAssetHubValidationError(error, metadata) {
|
|
137
|
+
switch (error) {
|
|
138
|
+
case _swap.SwapErrorType.AMOUNT_CANNOT_BE_ZERO:
|
|
139
|
+
return new _SwapError.SwapError(error, 'Amount too low. Increase your amount above 0 and try again');
|
|
140
|
+
case _swap.SwapErrorType.ASSET_NOT_SUPPORTED:
|
|
141
|
+
return new _SwapError.SwapError(error, 'This swap pair is not supported');
|
|
142
|
+
case _swap.SwapErrorType.UNKNOWN:
|
|
143
|
+
return new _SwapError.SwapError(error, `Undefined error. Check your Internet and ${metadata.chain.slug} connection or contact support`);
|
|
144
|
+
case _swap.SwapErrorType.ERROR_FETCHING_QUOTE:
|
|
145
|
+
return new _SwapError.SwapError(error, 'No swap quote found. Adjust your amount or try again later.');
|
|
146
|
+
case _swap.SwapErrorType.MAKE_POOL_NOT_ENOUGH_EXISTENTIAL_DEPOSIT:
|
|
147
|
+
return new _SwapError.SwapError(error, 'You swap too much. It make pool not enough existential deposit');
|
|
148
|
+
// TODO: i18n this
|
|
149
|
+
default:
|
|
150
|
+
return new _SwapError.SwapError(error);
|
|
151
|
+
}
|
|
99
152
|
}
|
|
@@ -15,7 +15,8 @@ function _getActiveStakeInNominationPool(memberInfo) {
|
|
|
15
15
|
return new _bignumber.default(memberInfo.points.toString());
|
|
16
16
|
}
|
|
17
17
|
function _getUnbondingStakeInNominationPool(memberInfo) {
|
|
18
|
-
|
|
18
|
+
const unbondingValues = Object.values(memberInfo.unbondingEras).map(unbonding => new _bignumber.default(unbonding));
|
|
19
|
+
return new _bignumber.default(Object.values(unbondingValues).reduce((a, b) => a.plus(b), new _bignumber.default(0)));
|
|
19
20
|
}
|
|
20
21
|
function _getTotalStakeInNominationPool(memberInfo) {
|
|
21
22
|
return _getActiveStakeInNominationPool(memberInfo).plus(_getUnbondingStakeInNominationPool(memberInfo));
|
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.W3S_IPFS = exports.VARA_SCAN_ENDPOINT = exports.UNIQUE_SCAN_ENDPOINT = exports.UNIQUE_IPFS_GATEWAY = exports.TRANSFER_CHAIN_ID = 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.PINATA_IPFS_GATEWAY = exports.OPAL_SCAN_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 = void 0;
|
|
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.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.PINATA_IPFS_GATEWAY = exports.OPAL_SCAN_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 = void 0;
|
|
7
7
|
exports.getRandomIpfsGateway = getRandomIpfsGateway;
|
|
8
|
-
var
|
|
8
|
+
var _environment = require("@subwallet/extension-base/utils/environment");
|
|
9
9
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
10
10
|
// SPDX-License-Identifier: Apache-2.0
|
|
11
11
|
|
|
12
|
+
// do not change to shorten path, avoid circle import
|
|
13
|
+
|
|
12
14
|
const SINGULAR_V1_ENDPOINT = 'https://singular.rmrk-api.xyz/api/account-rmrk1/';
|
|
13
15
|
exports.SINGULAR_V1_ENDPOINT = SINGULAR_V1_ENDPOINT;
|
|
14
16
|
const SINGULAR_V2_ENDPOINT = 'https://singular.rmrk-api.xyz/api/account/';
|
|
@@ -110,6 +112,8 @@ exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = SUPPORTED_TRANSFER_EVM_CHAIN_NAME;
|
|
|
110
112
|
})(SUPPORTED_TRANSFER_EVM_CHAIN_NAME || (exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = SUPPORTED_TRANSFER_EVM_CHAIN_NAME = {}));
|
|
111
113
|
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];
|
|
112
114
|
exports.SUPPORTED_TRANSFER_EVM_CHAIN = SUPPORTED_TRANSFER_EVM_CHAIN;
|
|
115
|
+
const UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = ['unique_evm'];
|
|
116
|
+
exports.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME;
|
|
113
117
|
const TRANSFER_CHAIN_ID = {
|
|
114
118
|
[SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbase]: 1287,
|
|
115
119
|
[SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbeam]: 1284,
|
|
@@ -134,33 +138,43 @@ exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = SUPPORTED_TRANSFER_SUBSTRATE_C
|
|
|
134
138
|
SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME["pioneer"] = "pioneer";
|
|
135
139
|
})(SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME || (exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = {}));
|
|
136
140
|
const RANDOM_IPFS_GATEWAY_SETTING = [];
|
|
137
|
-
if (
|
|
141
|
+
if (_environment.isFirefox) {
|
|
138
142
|
RANDOM_IPFS_GATEWAY_SETTING.push({
|
|
139
143
|
provider: SUBWALLET_IPFS,
|
|
140
144
|
weight: 5000
|
|
141
145
|
});
|
|
142
146
|
}
|
|
143
|
-
if (
|
|
147
|
+
if (_environment.RuntimeInfo.protocol && _environment.RuntimeInfo.protocol.startsWith('http')) {
|
|
144
148
|
// This is for https
|
|
145
|
-
if (
|
|
146
|
-
RANDOM_IPFS_GATEWAY_SETTING.push(
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
},
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
149
|
+
if (_environment.RuntimeInfo.protocol.startsWith('https')) {
|
|
150
|
+
RANDOM_IPFS_GATEWAY_SETTING.push(
|
|
151
|
+
// {
|
|
152
|
+
// provider: IPFS_FLEEK,
|
|
153
|
+
// weight: 4
|
|
154
|
+
// },
|
|
155
|
+
// {
|
|
156
|
+
// provider: IPFS_GATEWAY_4EVERLAND,
|
|
157
|
+
// weight: 2
|
|
158
|
+
// },
|
|
159
|
+
// {
|
|
160
|
+
// provider: IPFS_W3S_LINK,
|
|
161
|
+
// weight: 1
|
|
162
|
+
// },
|
|
163
|
+
// {
|
|
164
|
+
// provider: CF_IPFS_GATEWAY,
|
|
165
|
+
// weight: 4
|
|
166
|
+
// },
|
|
167
|
+
// {
|
|
168
|
+
// provider: PINATA_IPFS_GATEWAY,
|
|
169
|
+
// weight: 1 // Rate limit too low
|
|
170
|
+
// },
|
|
171
|
+
// {
|
|
172
|
+
// provider: IPFS_IO,
|
|
173
|
+
// weight: 5
|
|
174
|
+
// },
|
|
175
|
+
{
|
|
176
|
+
provider: SUBWALLET_IPFS,
|
|
177
|
+
weight: 10
|
|
164
178
|
});
|
|
165
179
|
}
|
|
166
180
|
} else {
|
|
@@ -25,7 +25,7 @@ var _assethub_nft = _interopRequireDefault(require("./assethub_nft"));
|
|
|
25
25
|
// import UniqueNftApi from '@subwallet/extension-base/koni/api/nft/unique_nft';
|
|
26
26
|
|
|
27
27
|
function createSubstrateNftApi(chain, substrateApi, addresses) {
|
|
28
|
-
const [substrateAddresses] = (0, _utils2.categoryAddresses)(addresses);
|
|
28
|
+
const [substrateAddresses, evmAddresses] = (0, _utils2.categoryAddresses)(addresses);
|
|
29
29
|
if (_constants._NFT_CHAIN_GROUP.acala.includes(chain)) {
|
|
30
30
|
return [new _acala_nft.AcalaNftApi(substrateApi, substrateAddresses, chain)];
|
|
31
31
|
} else if (_constants._NFT_CHAIN_GROUP.karura.includes(chain)) {
|
|
@@ -38,6 +38,8 @@ function createSubstrateNftApi(chain, substrateApi, addresses) {
|
|
|
38
38
|
return [new _assethub_unique.default(substrateApi, substrateAddresses, chain), new _assethub_nft.default(substrateApi, substrateAddresses, chain)];
|
|
39
39
|
} else if (_constants._NFT_CHAIN_GROUP.unique_network.includes(chain)) {
|
|
40
40
|
return [new _unique_network_nft.UniqueNftApi(chain, substrateAddresses)];
|
|
41
|
+
} else if (_constants._NFT_CHAIN_GROUP.unique_evm.includes(chain)) {
|
|
42
|
+
return [new _unique_network_nft.UniqueNftApi(chain, evmAddresses)];
|
|
41
43
|
} else if (_constants._NFT_CHAIN_GROUP.bitcountry.includes(chain)) {
|
|
42
44
|
return [new _bit.BitCountryNftApi(substrateApi, substrateAddresses, chain)];
|
|
43
45
|
} else if (_constants._NFT_CHAIN_GROUP.vara.includes(chain)) {
|
|
@@ -128,6 +130,12 @@ class NftHandler {
|
|
|
128
130
|
}
|
|
129
131
|
}
|
|
130
132
|
}
|
|
133
|
+
if (chain === 'unique_evm') {
|
|
134
|
+
const handlers = createSubstrateNftApi(chain, null, evmAddresses);
|
|
135
|
+
if (handlers && !!handlers.length) {
|
|
136
|
+
this.handlers.push(...handlers);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
131
139
|
if ((0, _utils._isChainSupportWasmNft)(chainInfo)) {
|
|
132
140
|
if (this.substrateApiMap[chain]) {
|
|
133
141
|
const handler = createWasmNftApi(chain, this.substrateApiMap[chain], substrateAddresses);
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.UniqueNftApi = void 0;
|
|
7
7
|
var _config = require("@subwallet/extension-base/koni/api/nft/config");
|
|
8
8
|
var _nft = require("@subwallet/extension-base/koni/api/nft/nft");
|
|
9
|
+
var _constants = require("@subwallet/extension-base/services/chain-service/constants");
|
|
9
10
|
var _utils = require("@subwallet/extension-base/utils");
|
|
10
11
|
var _utilCrypto = require("@polkadot/util-crypto");
|
|
11
12
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
@@ -21,23 +22,13 @@ class UniqueNftApi extends _nft.BaseNftApi {
|
|
|
21
22
|
handleProperties(nft) {
|
|
22
23
|
const propertiesMap = {};
|
|
23
24
|
const attRecord = nft.attributes;
|
|
24
|
-
if (attRecord) {
|
|
25
|
-
for (const item
|
|
26
|
-
const attName =
|
|
27
|
-
const attInfo =
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
attList.push(trait._);
|
|
32
|
-
}
|
|
33
|
-
propertiesMap[attName] = {
|
|
34
|
-
value: attList
|
|
35
|
-
};
|
|
36
|
-
} else {
|
|
37
|
-
propertiesMap[attName] = {
|
|
38
|
-
value: attInfo._
|
|
39
|
-
};
|
|
40
|
-
}
|
|
25
|
+
if (attRecord.length) {
|
|
26
|
+
for (const item of attRecord) {
|
|
27
|
+
const attName = item.trait_type;
|
|
28
|
+
const attInfo = item.value;
|
|
29
|
+
propertiesMap[attName] = {
|
|
30
|
+
value: attInfo
|
|
31
|
+
};
|
|
41
32
|
}
|
|
42
33
|
}
|
|
43
34
|
return propertiesMap;
|
|
@@ -84,8 +75,10 @@ class UniqueNftApi extends _nft.BaseNftApi {
|
|
|
84
75
|
endpoint = _config.OPAL_SCAN_ENDPOINT;
|
|
85
76
|
uniqueAddress = address;
|
|
86
77
|
// Opal address: Normal address
|
|
78
|
+
} else if (_constants._NFT_CHAIN_GROUP.unique_evm.includes(this.chain)) {
|
|
79
|
+
endpoint = _config.UNIQUE_SCAN_ENDPOINT;
|
|
80
|
+
uniqueAddress = address.toLowerCase();
|
|
87
81
|
}
|
|
88
|
-
|
|
89
82
|
const resp = await fetch(endpoint, {
|
|
90
83
|
method: 'post',
|
|
91
84
|
headers: {
|
|
@@ -105,7 +98,6 @@ class UniqueNftApi extends _nft.BaseNftApi {
|
|
|
105
98
|
if (nfts) {
|
|
106
99
|
const collectionMap = {};
|
|
107
100
|
for (const nft of nfts) {
|
|
108
|
-
var _nft$image;
|
|
109
101
|
// Handle case rendering image on Quartz Network (Temporary solution)
|
|
110
102
|
if (this.chain === 'quartz' && nft.collection_id.toString() === '141') {
|
|
111
103
|
continue;
|
|
@@ -120,7 +112,7 @@ class UniqueNftApi extends _nft.BaseNftApi {
|
|
|
120
112
|
chain: this.chain,
|
|
121
113
|
owner: address,
|
|
122
114
|
name: nft.token_name,
|
|
123
|
-
image: this.parseUrl(
|
|
115
|
+
image: this.parseUrl(nft.image),
|
|
124
116
|
description: nft.collection_description,
|
|
125
117
|
collectionId: nft.collection_id.toString(),
|
|
126
118
|
properties: propertiesMap
|
|
@@ -20,6 +20,7 @@ var _web = require("@subwallet/extension-base/koni/api/contract-handler/evm/web3
|
|
|
20
20
|
var _utils = require("@subwallet/extension-base/koni/api/contract-handler/utils");
|
|
21
21
|
var _domain = require("@subwallet/extension-base/koni/api/dotsama/domain");
|
|
22
22
|
var _parseTransaction = require("@subwallet/extension-base/koni/api/dotsama/parseTransaction");
|
|
23
|
+
var _config = require("@subwallet/extension-base/koni/api/nft/config");
|
|
23
24
|
var _transfer2 = require("@subwallet/extension-base/koni/api/nft/transfer");
|
|
24
25
|
var _bonding = require("@subwallet/extension-base/koni/api/staking/bonding");
|
|
25
26
|
var _paraChain = require("@subwallet/extension-base/koni/api/staking/bonding/paraChain");
|
|
@@ -1856,6 +1857,17 @@ class KoniExtension {
|
|
|
1856
1857
|
} = inputData;
|
|
1857
1858
|
const contractAddress = params.contractAddress;
|
|
1858
1859
|
const tokenId = params.tokenId;
|
|
1860
|
+
if (_config.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME.includes(networkKey)) {
|
|
1861
|
+
return await this.#koniState.transactionService.handleTransaction({
|
|
1862
|
+
address: senderAddress,
|
|
1863
|
+
chain: networkKey,
|
|
1864
|
+
chainType: _KoniTypes.ChainType.EVM,
|
|
1865
|
+
data: inputData,
|
|
1866
|
+
extrinsicType: _KoniTypes.ExtrinsicType.SEND_NFT,
|
|
1867
|
+
transaction: null,
|
|
1868
|
+
url: _constants3.EXTENSION_REQUEST_URL
|
|
1869
|
+
});
|
|
1870
|
+
}
|
|
1859
1871
|
const transaction = await (0, _smartContract.getERC721Transaction)(this.#koniState.getEvmApi(networkKey), networkKey, contractAddress, senderAddress, recipientAddress, tokenId);
|
|
1860
1872
|
|
|
1861
1873
|
// this.addContact(recipientAddress);
|
package/cjs/packageInfo.js
CHANGED
|
@@ -11,7 +11,7 @@ exports.isUseTeleportProtocol = isUseTeleportProtocol;
|
|
|
11
11
|
const STABLE_XCM_VERSION = 3;
|
|
12
12
|
exports.STABLE_XCM_VERSION = STABLE_XCM_VERSION;
|
|
13
13
|
function isUseTeleportProtocol(originChainInfo, destChainInfo) {
|
|
14
|
-
const relayChainToSystemChain = ['polkadot'].includes(originChainInfo.slug) && ['statemint'].includes(destChainInfo.slug) || ['kusama'].includes(originChainInfo.slug) && ['statemine'].includes(destChainInfo.slug);
|
|
15
|
-
const systemChainToRelayChain = ['polkadot'].includes(destChainInfo.slug) && ['statemint'].includes(originChainInfo.slug) || ['kusama'].includes(destChainInfo.slug) && ['statemine'].includes(originChainInfo.slug);
|
|
14
|
+
const relayChainToSystemChain = ['polkadot'].includes(originChainInfo.slug) && ['statemint'].includes(destChainInfo.slug) || ['kusama'].includes(originChainInfo.slug) && ['statemine'].includes(destChainInfo.slug) || ['rococo'].includes(originChainInfo.slug) && ['rococo_assethub'].includes(destChainInfo.slug);
|
|
15
|
+
const systemChainToRelayChain = ['polkadot'].includes(destChainInfo.slug) && ['statemint'].includes(originChainInfo.slug) || ['kusama'].includes(destChainInfo.slug) && ['statemine'].includes(originChainInfo.slug) || ['rococo'].includes(destChainInfo.slug) && ['rococo_assethub'].includes(originChainInfo.slug);
|
|
16
16
|
return relayChainToSystemChain || systemChainToRelayChain;
|
|
17
17
|
}
|
|
@@ -61,6 +61,7 @@ const _NFT_CHAIN_GROUP = {
|
|
|
61
61
|
statemine: ['statemine'],
|
|
62
62
|
statemint: ['statemint'],
|
|
63
63
|
unique_network: ['unique_network', 'quartz', 'opal'],
|
|
64
|
+
unique_evm: ['unique_evm'],
|
|
64
65
|
bitcountry: ['bitcountry', 'pioneer', 'continuum_network'],
|
|
65
66
|
vara: ['vara_network']
|
|
66
67
|
};
|
|
@@ -272,7 +273,7 @@ const _DEFAULT_MANTA_ZK_CHAIN = 'calamari';
|
|
|
272
273
|
exports._DEFAULT_MANTA_ZK_CHAIN = _DEFAULT_MANTA_ZK_CHAIN;
|
|
273
274
|
const _XCM_CHAIN_GROUP = {
|
|
274
275
|
polkadotXcm: ['astar', 'shiden', 'statemine', 'statemint', 'equilibrium_parachain', 'rococo_assethub'],
|
|
275
|
-
xcmPallet: ['polkadot', 'kusama']
|
|
276
|
+
xcmPallet: ['polkadot', 'kusama', 'rococo']
|
|
276
277
|
// default is xTokens pallet
|
|
277
278
|
};
|
|
278
279
|
exports._XCM_CHAIN_GROUP = _XCM_CHAIN_GROUP;
|
|
@@ -31,8 +31,14 @@ const typesBundle = {
|
|
|
31
31
|
const _availSpec = {
|
|
32
32
|
signedExtensions: _availJsSdk.spec.signedExtensions
|
|
33
33
|
};
|
|
34
|
+
|
|
35
|
+
// Override avail goldberg spec for signedExtensions
|
|
36
|
+
const _goldbergSpec = {
|
|
37
|
+
signedExtensions: _availJsSdk.spec.signedExtensions
|
|
38
|
+
};
|
|
34
39
|
if (typesBundle.spec) {
|
|
35
40
|
typesBundle.spec.avail = _availSpec;
|
|
41
|
+
typesBundle.spec['data-avail'] = _goldbergSpec;
|
|
36
42
|
}
|
|
37
43
|
class SubstrateApi {
|
|
38
44
|
useLightClient = false;
|
|
@@ -11,11 +11,11 @@ var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
|
11
11
|
|
|
12
12
|
const chainProvider = {
|
|
13
13
|
default: 0,
|
|
14
|
-
ethereum:
|
|
14
|
+
ethereum: 0,
|
|
15
15
|
polygon: 2,
|
|
16
|
-
shidenEvm:
|
|
17
|
-
shiden:
|
|
18
|
-
ajunaPolkadot:
|
|
16
|
+
shidenEvm: 1,
|
|
17
|
+
shiden: 1,
|
|
18
|
+
ajunaPolkadot: 0,
|
|
19
19
|
crabParachain: 1,
|
|
20
20
|
astarEvm: 1,
|
|
21
21
|
shibuya: 1,
|
|
@@ -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.getSubstrateNativeInfo = exports.getPsp22AssetInfo = exports.getLocalAssetInfo = exports.getEvmNativeInfo = exports.getErc20AssetInfo = exports.compareAsset = void 0;
|
|
7
|
+
exports.validateAsset = exports.getSubstrateNativeInfo = exports.getPsp22AssetInfo = exports.getLocalAssetInfo = exports.getEvmNativeInfo = exports.getErc20AssetInfo = exports.compareAsset = void 0;
|
|
8
8
|
var _web = require("@subwallet/extension-base/koni/api/contract-handler/evm/web3");
|
|
9
9
|
var _utils = require("@subwallet/extension-base/koni/api/contract-handler/utils");
|
|
10
10
|
var _utils2 = require("@subwallet/extension-base/koni/api/contract-handler/wasm/utils");
|
|
@@ -116,13 +116,12 @@ const getByAssetManagerWithAssetIdPallet = async (asset, api) => {
|
|
|
116
116
|
};
|
|
117
117
|
};
|
|
118
118
|
const getByAssetRegistryWithAssetIdPallet = async (asset, api) => {
|
|
119
|
-
const [_info
|
|
119
|
+
const [_info] = await api.queryMulti([[api.query.assetRegistry.assets, (0, _utils3._getTokenOnChainAssetId)(asset)]]);
|
|
120
120
|
const info = _info.toPrimitive();
|
|
121
|
-
const metadata = _metadata.toPrimitive();
|
|
122
121
|
return {
|
|
123
|
-
decimals:
|
|
122
|
+
decimals: info.decimals,
|
|
124
123
|
minAmount: info.existentialDeposit.toString(),
|
|
125
|
-
symbol:
|
|
124
|
+
symbol: info.symbol
|
|
126
125
|
};
|
|
127
126
|
};
|
|
128
127
|
const getLocalAssetInfo = async (chain, asset, api) => {
|
|
@@ -277,4 +276,22 @@ const compareAsset = (assetInfo, asset, errors) => {
|
|
|
277
276
|
errors.push(`Wrong decimals: current - ${(_asset$decimals = asset.decimals) !== null && _asset$decimals !== void 0 ? _asset$decimals : 'null'}, onChain - ${decimals}`);
|
|
278
277
|
}
|
|
279
278
|
};
|
|
280
|
-
exports.compareAsset = compareAsset;
|
|
279
|
+
exports.compareAsset = compareAsset;
|
|
280
|
+
const validateAsset = (onchainAsset, chainlistAsset) => {
|
|
281
|
+
const {
|
|
282
|
+
decimals,
|
|
283
|
+
minAmount,
|
|
284
|
+
symbol
|
|
285
|
+
} = onchainAsset;
|
|
286
|
+
const chainlistMinAmount = chainlistAsset.minAmount || '0';
|
|
287
|
+
const chainlistDecimals = chainlistAsset.decimals || 0;
|
|
288
|
+
const chainlistSymbol = chainlistAsset.symbol;
|
|
289
|
+
console.log(`[i] minAmount: current - ${chainlistMinAmount}, onchain - ${minAmount}`);
|
|
290
|
+
console.log(`[i] decimals: current - ${chainlistDecimals}, onchain - ${decimals}`);
|
|
291
|
+
console.log(`[i] symbol: current - ${chainlistSymbol}, onchain - ${symbol}`);
|
|
292
|
+
const isValidSymbol = symbol === chainlistSymbol ? true : 'zk' + symbol === chainlistSymbol;
|
|
293
|
+
const isValidMinAmount = minAmount === chainlistMinAmount;
|
|
294
|
+
const isValidDecimal = decimals === chainlistDecimals;
|
|
295
|
+
return isValidSymbol && isValidMinAmount && isValidDecimal;
|
|
296
|
+
};
|
|
297
|
+
exports.validateAsset = validateAsset;
|
|
@@ -4,12 +4,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.compareNativeAsset = void 0;
|
|
7
|
+
exports.compareNativeAsset = exports.checkSs58Prefix = exports.checkParachainId = exports.checkNativeAsset = void 0;
|
|
8
8
|
var _constants = require("@subwallet/extension-base/services/chain-service/health-check/constants");
|
|
9
9
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
10
10
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
11
11
|
// SPDX-License-Identifier: Apache-2.0
|
|
12
12
|
|
|
13
|
+
// function for old health-check chain
|
|
13
14
|
const compareNativeAsset = (assetInfo, nativeAsset, errors) => {
|
|
14
15
|
const {
|
|
15
16
|
decimals: _decimals,
|
|
@@ -33,4 +34,26 @@ const compareNativeAsset = (assetInfo, nativeAsset, errors) => {
|
|
|
33
34
|
errors.push(`Wrong decimals: current - ${_decimals}, onChain - ${decimals}`);
|
|
34
35
|
}
|
|
35
36
|
};
|
|
36
|
-
exports.compareNativeAsset = compareNativeAsset;
|
|
37
|
+
exports.compareNativeAsset = compareNativeAsset;
|
|
38
|
+
const checkNativeAsset = (assetInfo, nativeAsset) => {
|
|
39
|
+
const {
|
|
40
|
+
decimals: _decimals,
|
|
41
|
+
existentialDeposit: _minAmount,
|
|
42
|
+
symbol: _symbol
|
|
43
|
+
} = nativeAsset;
|
|
44
|
+
const {
|
|
45
|
+
decimals,
|
|
46
|
+
minAmount,
|
|
47
|
+
symbol
|
|
48
|
+
} = assetInfo;
|
|
49
|
+
return minAmount === _minAmount && symbol === _symbol && decimals === _decimals;
|
|
50
|
+
};
|
|
51
|
+
exports.checkNativeAsset = checkNativeAsset;
|
|
52
|
+
const checkSs58Prefix = (onchainPrefix, chainlistPrefix) => {
|
|
53
|
+
return onchainPrefix === chainlistPrefix;
|
|
54
|
+
};
|
|
55
|
+
exports.checkSs58Prefix = checkSs58Prefix;
|
|
56
|
+
const checkParachainId = (onchainPrefix, chainlistPrefix) => {
|
|
57
|
+
return onchainPrefix === chainlistPrefix;
|
|
58
|
+
};
|
|
59
|
+
exports.checkParachainId = checkParachainId;
|