@subwallet/extension-base 1.3.22-0 → 1.3.24-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 +77 -4
- package/background/KoniTypes.js +2 -0
- package/cjs/background/KoniTypes.js +2 -0
- package/cjs/constants/environment.js +4 -2
- package/cjs/constants/index.js +21 -4
- package/cjs/constants/signing.js +6 -2
- package/cjs/core/logic-validation/recipientAddress.js +9 -1
- package/cjs/core/logic-validation/transfer.js +57 -36
- 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 +343 -185
- package/cjs/koni/background/handlers/State.js +17 -2
- package/cjs/koni/background/handlers/Tabs.js +1 -1
- 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/smart-contract.js +24 -3
- package/cjs/services/balance-service/transfer/token.js +4 -4
- 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/TonApi.js +2 -5
- package/cjs/services/chain-service/index.js +40 -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/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/service.js +6 -12
- package/cjs/services/fee-service/service.js +19 -8
- package/cjs/services/fee-service/utils/tokenPayFee.js +151 -0
- 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/request-service/handler/CardanoRequestHandler.js +172 -0
- package/cjs/services/request-service/handler/EvmRequestHandler.js +1 -1
- package/cjs/services/request-service/handler/MetadataRequestHandler.js +5 -13
- package/cjs/services/request-service/index.js +22 -4
- package/cjs/services/setting-service/constants.js +10 -1
- package/cjs/services/storage-service/DatabaseService.js +3 -0
- package/cjs/services/storage-service/db-stores/InappNotification.js +6 -0
- 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 +286 -26
- 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 +87 -21
- 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/index.d.ts +6 -1
- package/constants/index.js +14 -1
- package/constants/signing.js +6 -2
- package/core/logic-validation/recipientAddress.js +11 -3
- package/core/logic-validation/transfer.d.ts +1 -1
- package/core/logic-validation/transfer.js +33 -12
- 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 +225 -69
- package/koni/background/handlers/State.d.ts +6 -2
- package/koni/background/handlers/State.js +18 -3
- package/koni/background/handlers/Tabs.js +1 -1
- package/package.json +76 -9
- 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/smart-contract.d.ts +4 -2
- package/services/balance-service/transfer/smart-contract.js +24 -3
- package/services/balance-service/transfer/token.d.ts +1 -1
- package/services/balance-service/transfer/token.js +2 -2
- 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/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 +41 -8
- 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/handlers/liquid-staking/bifrost-manta.js +1 -1
- package/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
- package/services/earning-service/service.js +8 -14
- package/services/fee-service/interfaces.d.ts +25 -0
- package/services/fee-service/service.js +19 -8
- package/services/fee-service/utils/tokenPayFee.d.ts +8 -0
- package/services/fee-service/utils/tokenPayFee.js +141 -0
- 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/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/handler/MetadataRequestHandler.d.ts +1 -1
- package/services/request-service/handler/MetadataRequestHandler.js +5 -13
- package/services/request-service/index.d.ts +7 -4
- package/services/request-service/index.js +21 -7
- package/services/setting-service/constants.d.ts +3 -0
- package/services/setting-service/constants.js +6 -0
- package/services/storage-service/DatabaseService.d.ts +1 -0
- package/services/storage-service/DatabaseService.js +3 -0
- package/services/storage-service/db-stores/InappNotification.d.ts +1 -0
- package/services/storage-service/db-stores/InappNotification.js +6 -0
- 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 +273 -17
- 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/option.d.ts +1 -1
- 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 +3 -2
- package/utils/fee/transfer.js +90 -24
- 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
|
@@ -4,16 +4,17 @@
|
|
|
4
4
|
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
5
5
|
import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
6
6
|
import { TransactionWarning } from '@subwallet/extension-base/background/warnings/TransactionWarning';
|
|
7
|
-
import { LEDGER_SIGNING_COMPATIBLE_MAP, SIGNING_COMPATIBLE_MAP, XCM_MIN_AMOUNT_RATIO } from '@subwallet/extension-base/constants';
|
|
7
|
+
import { _SUPPORT_TOKEN_PAY_FEE_GROUP, LEDGER_SIGNING_COMPATIBLE_MAP, SIGNING_COMPATIBLE_MAP, XCM_MIN_AMOUNT_RATIO } from '@subwallet/extension-base/constants';
|
|
8
8
|
import { _canAccountBeReaped, _isAccountActive } from '@subwallet/extension-base/core/substrate/system-pallet';
|
|
9
|
+
import { getCardanoAssetId } from '@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano/utils';
|
|
9
10
|
import { isBounceableAddress } from '@subwallet/extension-base/services/balance-service/helpers/subscribe/ton/utils';
|
|
10
11
|
import { _TRANSFER_CHAIN_GROUP } from '@subwallet/extension-base/services/chain-service/constants';
|
|
11
|
-
import { _getAssetDecimals, _getChainExistentialDeposit, _getChainNativeTokenBasicInfo, _getContractAddressOfToken, _getTokenMinAmount, _isNativeToken, _isTokenEvmSmartContract, _isTokenTonSmartContract } from '@subwallet/extension-base/services/chain-service/utils';
|
|
12
|
+
import { _getAssetDecimals, _getAssetPriceId, _getAssetSymbol, _getChainExistentialDeposit, _getChainNativeTokenBasicInfo, _getContractAddressOfToken, _getTokenMinAmount, _isCIP26Token, _isNativeToken, _isNativeTokenBySlug, _isTokenEvmSmartContract, _isTokenTonSmartContract } from '@subwallet/extension-base/services/chain-service/utils';
|
|
12
13
|
import { calculateToAmountByReservePool, FEE_COVERAGE_PERCENTAGE_SPECIAL_CASE } from '@subwallet/extension-base/services/fee-service/utils';
|
|
13
|
-
import { isSubstrateTransaction, isTonTransaction } from '@subwallet/extension-base/services/transaction-service/helpers';
|
|
14
|
+
import { isCardanoTransaction, isSubstrateTransaction, isTonTransaction } from '@subwallet/extension-base/services/transaction-service/helpers';
|
|
14
15
|
import { AccountSignMode, BasicTxErrorType, BasicTxWarningCode, TransferTxErrorType } from '@subwallet/extension-base/types';
|
|
15
16
|
import { balanceFormatter, combineEthFee, formatNumber, pairToAccount } from '@subwallet/extension-base/utils';
|
|
16
|
-
import { isTonAddress } from '@subwallet/keyring';
|
|
17
|
+
import { isCardanoAddress, isTonAddress } from '@subwallet/keyring';
|
|
17
18
|
import { keyring } from '@subwallet/ui-keyring';
|
|
18
19
|
import BigN from 'bignumber.js';
|
|
19
20
|
import { t } from 'i18next';
|
|
@@ -36,6 +37,9 @@ export function validateTransferRequest(tokenInfo, from, to, value, transferAll)
|
|
|
36
37
|
if (isTonAddress(from) && isTonAddress(to) && _isTokenTonSmartContract(tokenInfo) && _getContractAddressOfToken(tokenInfo).length === 0) {
|
|
37
38
|
errors.push(new TransactionError(BasicTxErrorType.INVALID_PARAMS, t('Not found TEP74 address for this token')));
|
|
38
39
|
}
|
|
40
|
+
if (isCardanoAddress(from) && isCardanoAddress(to) && _isCIP26Token(tokenInfo) && getCardanoAssetId(tokenInfo).length === 0) {
|
|
41
|
+
errors.push(new TransactionError(BasicTxErrorType.INVALID_PARAMS, t('Not found policy id of this token')));
|
|
42
|
+
}
|
|
39
43
|
return errors;
|
|
40
44
|
}
|
|
41
45
|
export function additionalValidateTransferForRecipient(sendingTokenInfo, nativeTokenInfo, extrinsicType, receiverSendingTokenKeepAliveBalance, transferAmount, senderSendingTokenTransferable, receiverSystemAccountInfo, isSendingTokenSufficient) {
|
|
@@ -327,7 +331,7 @@ export function checkSupportForTransaction(validationResponse, transaction) {
|
|
|
327
331
|
}
|
|
328
332
|
}
|
|
329
333
|
}
|
|
330
|
-
export async function estimateFeeForTransaction(validationResponse, transaction, chainInfo, evmApi, substrateApi, feeInfo, nativeTokenInfo,
|
|
334
|
+
export async function estimateFeeForTransaction(validationResponse, transaction, chainInfo, evmApi, substrateApi, priceMap, feeInfo, nativeTokenInfo, nonNativeTokenPayFeeInfo, isTransferLocalTokenAndPayThatTokenAsFee) {
|
|
331
335
|
const estimateFee = {
|
|
332
336
|
symbol: '',
|
|
333
337
|
decimals: 0,
|
|
@@ -346,6 +350,8 @@ export async function estimateFeeForTransaction(validationResponse, transaction,
|
|
|
346
350
|
estimateFee.value = (await transaction.paymentInfo(validationResponse.address)).partialFee.toString();
|
|
347
351
|
} else if (isTonTransaction(transaction)) {
|
|
348
352
|
estimateFee.value = transaction.estimateFee; // todo: might need to update logic estimate fee inside for future actions excluding normal transfer Ton and Jetton
|
|
353
|
+
} else if (isCardanoTransaction(transaction)) {
|
|
354
|
+
estimateFee.value = transaction.estimateCardanoFee;
|
|
349
355
|
} else {
|
|
350
356
|
const gasLimit = transaction.gas || (await evmApi.api.eth.estimateGas(transaction));
|
|
351
357
|
const feeCombine = combineEthFee(feeInfo, validationResponse.feeOption, validationResponse.feeCustom);
|
|
@@ -371,11 +377,25 @@ export async function estimateFeeForTransaction(validationResponse, transaction,
|
|
|
371
377
|
}
|
|
372
378
|
}
|
|
373
379
|
}
|
|
374
|
-
|
|
380
|
+
const isCustomTokenPayFeeAssetHub = !!nonNativeTokenPayFeeInfo && _SUPPORT_TOKEN_PAY_FEE_GROUP.assetHub.includes(nonNativeTokenPayFeeInfo.originChain);
|
|
381
|
+
const isCustomTokenPayFeeHydration = !!nonNativeTokenPayFeeInfo && _SUPPORT_TOKEN_PAY_FEE_GROUP.hydration.includes(nonNativeTokenPayFeeInfo.originChain);
|
|
382
|
+
if (isCustomTokenPayFeeAssetHub) {
|
|
375
383
|
const estimatedFeeAmount = isTransferLocalTokenAndPayThatTokenAsFee ? (BigInt(estimateFee.value) * BigInt(FEE_COVERAGE_PERCENTAGE_SPECIAL_CASE) / BigInt(100)).toString() : estimateFee.value;
|
|
376
|
-
estimateFee.decimals =
|
|
377
|
-
estimateFee.symbol =
|
|
378
|
-
estimateFee.value = await calculateToAmountByReservePool(substrateApi.api, nativeTokenInfo,
|
|
384
|
+
estimateFee.decimals = _getAssetDecimals(nonNativeTokenPayFeeInfo);
|
|
385
|
+
estimateFee.symbol = _getAssetSymbol(nonNativeTokenPayFeeInfo);
|
|
386
|
+
estimateFee.value = await calculateToAmountByReservePool(substrateApi.api, nativeTokenInfo, nonNativeTokenPayFeeInfo, estimatedFeeAmount);
|
|
387
|
+
}
|
|
388
|
+
if (isCustomTokenPayFeeHydration) {
|
|
389
|
+
const nativePriceId = _getAssetPriceId(nativeTokenInfo);
|
|
390
|
+
const nativeDecimals = _getAssetDecimals(nativeTokenInfo);
|
|
391
|
+
const nativePrice = priceMap[nativePriceId];
|
|
392
|
+
const tokenPriceId = _getAssetPriceId(nonNativeTokenPayFeeInfo);
|
|
393
|
+
const tokenDecimals = _getAssetDecimals(nonNativeTokenPayFeeInfo);
|
|
394
|
+
const tokenPrice = priceMap[tokenPriceId];
|
|
395
|
+
const rate = new BigN(nativePrice).div(tokenPrice).multipliedBy(10 ** (tokenDecimals - nativeDecimals)).toFixed();
|
|
396
|
+
estimateFee.decimals = _getAssetDecimals(nonNativeTokenPayFeeInfo);
|
|
397
|
+
estimateFee.symbol = _getAssetSymbol(nonNativeTokenPayFeeInfo);
|
|
398
|
+
estimateFee.value = new BigN(estimateFee.value).multipliedBy(rate).toFixed(0);
|
|
379
399
|
}
|
|
380
400
|
return estimateFee;
|
|
381
401
|
}
|
|
@@ -415,10 +435,11 @@ export function checkBalanceWithTransactionFee(validationResponse, transactionIn
|
|
|
415
435
|
edAsWarning,
|
|
416
436
|
extrinsicType,
|
|
417
437
|
isTransferAll,
|
|
418
|
-
|
|
419
|
-
|
|
438
|
+
skipFeeValidation,
|
|
439
|
+
tokenPayFeeSlug
|
|
420
440
|
} = transactionInput;
|
|
421
|
-
if (skipFeeValidation ||
|
|
441
|
+
if (skipFeeValidation || tokenPayFeeSlug && !_isNativeTokenBySlug(tokenPayFeeSlug)) {
|
|
442
|
+
// todo: need improve: input should be balance of fee token and check this again
|
|
422
443
|
return;
|
|
423
444
|
}
|
|
424
445
|
const bnFee = new BigN(validationResponse.estimateFee.value);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { _ChainAsset, _ChainInfo } from '@subwallet/chain-list/types';
|
|
2
2
|
import { _Address } from '@subwallet/extension-base/background/KoniTypes';
|
|
3
|
-
export declare function _getXcmDestWeight(originChainInfo: _ChainInfo):
|
|
3
|
+
export declare function _getXcmDestWeight(originChainInfo: _ChainInfo): "Unlimited" | 5000000000;
|
|
4
4
|
export declare function _getXcmBeneficiary(destChainInfo: _ChainInfo, recipient: _Address, version: number): {
|
|
5
5
|
[x: string]: {
|
|
6
6
|
parents: number;
|
package/core/types.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export declare enum ValidationCondition {
|
|
|
7
7
|
IS_VALID_ADDRESS_FOR_ECOSYSTEM = "IS_VALID_ADDRESS_FOR_ECOSYSTEM",
|
|
8
8
|
IS_VALID_SUBSTRATE_ADDRESS_FORMAT = "IS_VALID_SUBSTRATE_ADDRESS_FORMAT",
|
|
9
9
|
IS_VALID_TON_ADDRESS_FORMAT = "IS_VALID_TON_ADDRESS_FORMAT",
|
|
10
|
+
IS_VALID_CARDANO_ADDRESS_FORMAT = "IS_VALID_CARDANO_ADDRESS_FORMAT",
|
|
10
11
|
IS_NOT_DUPLICATE_ADDRESS = "IS_NOT_DUPLICATE_ADDRESS",
|
|
11
12
|
IS_SUPPORT_LEDGER_ACCOUNT = "IS_SUPPORT_LEDGER_ACCOUNT"
|
|
12
13
|
}
|
package/core/types.js
CHANGED
|
@@ -8,6 +8,7 @@ export let ValidationCondition;
|
|
|
8
8
|
ValidationCondition["IS_VALID_ADDRESS_FOR_ECOSYSTEM"] = "IS_VALID_ADDRESS_FOR_ECOSYSTEM";
|
|
9
9
|
ValidationCondition["IS_VALID_SUBSTRATE_ADDRESS_FORMAT"] = "IS_VALID_SUBSTRATE_ADDRESS_FORMAT";
|
|
10
10
|
ValidationCondition["IS_VALID_TON_ADDRESS_FORMAT"] = "IS_VALID_TON_ADDRESS_FORMAT";
|
|
11
|
+
ValidationCondition["IS_VALID_CARDANO_ADDRESS_FORMAT"] = "IS_VALID_CARDANO_ADDRESS_FORMAT";
|
|
11
12
|
ValidationCondition["IS_NOT_DUPLICATE_ADDRESS"] = "IS_NOT_DUPLICATE_ADDRESS";
|
|
12
13
|
ValidationCondition["IS_SUPPORT_LEDGER_ACCOUNT"] = "IS_SUPPORT_LEDGER_ACCOUNT";
|
|
13
14
|
})(ValidationCondition || (ValidationCondition = {}));
|
package/core/utils.d.ts
CHANGED
|
@@ -10,5 +10,6 @@ export declare function _isAddress(validateRecipientParams: ValidateRecipientPar
|
|
|
10
10
|
export declare function _isValidAddressForEcosystem(validateRecipientParams: ValidateRecipientParams): string;
|
|
11
11
|
export declare function _isValidSubstrateAddressFormat(validateRecipientParams: ValidateRecipientParams): string;
|
|
12
12
|
export declare function _isValidTonAddressFormat(validateRecipientParams: ValidateRecipientParams): string;
|
|
13
|
+
export declare function _isValidCardanoAddressFormat(validateRecipientParams: ValidateRecipientParams): string;
|
|
13
14
|
export declare function _isNotDuplicateAddress(validateRecipientParams: ValidateRecipientParams): string;
|
|
14
15
|
export declare function _isSupportLedgerAccount(validateRecipientParams: ValidateRecipientParams): string;
|
package/core/utils.js
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
5
|
import { BalanceAccountType } from '@subwallet/extension-base/core/substrate/types';
|
|
6
6
|
import { tonAddressInfo } from '@subwallet/extension-base/services/balance-service/helpers/subscribe/ton/utils';
|
|
7
|
-
import { _isChainEvmCompatible, _isChainSubstrateCompatible, _isChainTonCompatible } from '@subwallet/extension-base/services/chain-service/utils';
|
|
7
|
+
import { _isChainCardanoCompatible, _isChainEvmCompatible, _isChainSubstrateCompatible, _isChainTonCompatible } from '@subwallet/extension-base/services/chain-service/utils';
|
|
8
8
|
import { isAddressAndChainCompatible, isSameAddress, reformatAddress } from '@subwallet/extension-base/utils';
|
|
9
|
-
import { isAddress, isTonAddress } from '@subwallet/keyring';
|
|
9
|
+
import { isAddress, isCardanoTestnetAddress, isTonAddress } from '@subwallet/keyring';
|
|
10
10
|
import { isEthereumAddress } from '@polkadot/util-crypto';
|
|
11
11
|
export function getStrictMode(type, extrinsicType) {
|
|
12
12
|
if (type === BalanceAccountType.FrameSystemAccountInfo) {
|
|
@@ -54,7 +54,7 @@ export function _isValidAddressForEcosystem(validateRecipientParams) {
|
|
|
54
54
|
toAddress
|
|
55
55
|
} = validateRecipientParams;
|
|
56
56
|
if (!isAddressAndChainCompatible(toAddress, destChainInfo)) {
|
|
57
|
-
if (_isChainEvmCompatible(destChainInfo) || _isChainSubstrateCompatible(destChainInfo) || _isChainTonCompatible(destChainInfo)) {
|
|
57
|
+
if (_isChainEvmCompatible(destChainInfo) || _isChainSubstrateCompatible(destChainInfo) || _isChainTonCompatible(destChainInfo) || _isChainCardanoCompatible(destChainInfo)) {
|
|
58
58
|
return 'Recipient address must be the same type as sender address';
|
|
59
59
|
}
|
|
60
60
|
return 'Unknown chain type';
|
|
@@ -85,6 +85,16 @@ export function _isValidTonAddressFormat(validateRecipientParams) {
|
|
|
85
85
|
}
|
|
86
86
|
return '';
|
|
87
87
|
}
|
|
88
|
+
export function _isValidCardanoAddressFormat(validateRecipientParams) {
|
|
89
|
+
const {
|
|
90
|
+
destChainInfo,
|
|
91
|
+
toAddress
|
|
92
|
+
} = validateRecipientParams;
|
|
93
|
+
if (isCardanoTestnetAddress(toAddress) !== destChainInfo.isTestnet) {
|
|
94
|
+
return `Recipient address must be a valid ${destChainInfo.name} address`;
|
|
95
|
+
}
|
|
96
|
+
return '';
|
|
97
|
+
}
|
|
88
98
|
export function _isNotDuplicateAddress(validateRecipientParams) {
|
|
89
99
|
const {
|
|
90
100
|
fromAddress,
|
package/defaults.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare const ALLOWED_PATH: readonly ["/", "/settings/security", "/transaction-submission", "/accounts/connect-ledger", "/accounts/restore-json", "/accounts/detail", "/accounts/new-seed-phrase"];
|
|
1
|
+
declare const ALLOWED_PATH: readonly ["/", "/settings/security", "/transaction-submission", "/accounts/connect-ledger", "/accounts/restore-json", "/accounts/detail", "/accounts/new-seed-phrase", "/migrate-account"];
|
|
2
2
|
declare const PHISHING_PAGE_REDIRECT = "/phishing-page-detected";
|
|
3
3
|
declare const EXTENSION_PREFIX: string;
|
|
4
4
|
declare const ID_PREFIX: string;
|
package/defaults.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright 2019-2022 @polkadot/extension-base authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
const ALLOWED_PATH = ['/', '/settings/security', '/transaction-submission', '/accounts/connect-ledger', '/accounts/restore-json', '/accounts/detail', '/accounts/new-seed-phrase'];
|
|
4
|
+
const ALLOWED_PATH = ['/', '/settings/security', '/transaction-submission', '/accounts/connect-ledger', '/accounts/restore-json', '/accounts/detail', '/accounts/new-seed-phrase', '/migrate-account'];
|
|
5
5
|
const PHISHING_PAGE_REDIRECT = '/phishing-page-detected';
|
|
6
6
|
const EXTENSION_PREFIX = process.env.EXTENSION_PREFIX || '';
|
|
7
7
|
const ID_PREFIX = process.env.ID_PREFIX || EXTENSION_PREFIX || '';
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
|
|
4
4
|
import { COMMON_CHAIN_SLUGS } from '@subwallet/chain-list';
|
|
5
5
|
import { _FundStatus } from '@subwallet/chain-list/types';
|
|
6
|
-
import { APIItemState, CrowdloanParaState } from '@subwallet/extension-base/background/KoniTypes';
|
|
6
|
+
import { APIItemState, ChainType, CrowdloanParaState } from '@subwallet/extension-base/background/KoniTypes';
|
|
7
7
|
import { ACALA_REFRESH_CROWDLOAN_INTERVAL } from '@subwallet/extension-base/constants';
|
|
8
8
|
import registry from '@subwallet/extension-base/koni/api/dotsama/typeRegistry';
|
|
9
|
-
import {
|
|
9
|
+
import { fetchJson, getAddressesByChainType, reformatAddress } from '@subwallet/extension-base/utils';
|
|
10
10
|
import { fetchStaticData } from '@subwallet/extension-base/utils/fetchStaticData';
|
|
11
11
|
import { BN } from '@polkadot/util';
|
|
12
12
|
const STATUS_MAP = {
|
|
@@ -164,7 +164,7 @@ export async function subscribeCrowdloan(addresses, substrateApiMap, callback) {
|
|
|
164
164
|
const now = Date.now();
|
|
165
165
|
const polkadotAPI = await substrateApiMap[COMMON_CHAIN_SLUGS.POLKADOT].isReady;
|
|
166
166
|
const kusamaAPI = await substrateApiMap[COMMON_CHAIN_SLUGS.KUSAMA].isReady;
|
|
167
|
-
const substrateAddresses =
|
|
167
|
+
const substrateAddresses = getAddressesByChainType(addresses, [ChainType.SUBSTRATE]);
|
|
168
168
|
const hexAddresses = substrateAddresses.map(address => {
|
|
169
169
|
return registry.createType('AccountId', address).toHex();
|
|
170
170
|
});
|
package/koni/api/nft/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
+
import { ChainType } from '@subwallet/extension-base/background/KoniTypes';
|
|
4
5
|
import { AcalaNftApi } from '@subwallet/extension-base/koni/api/nft/acala_nft';
|
|
5
6
|
import AssetHubUniquesPalletApi from '@subwallet/extension-base/koni/api/nft/assethub_unique';
|
|
6
7
|
import { BitCountryNftApi } from '@subwallet/extension-base/koni/api/nft/bit.country';
|
|
@@ -10,21 +11,18 @@ import { KaruraNftApi } from '@subwallet/extension-base/koni/api/nft/karura_nft'
|
|
|
10
11
|
import OrdinalNftApi from '@subwallet/extension-base/koni/api/nft/ordinal_nft';
|
|
11
12
|
import { RmrkNftApi } from '@subwallet/extension-base/koni/api/nft/rmrk_nft';
|
|
12
13
|
import { UniqueNftApi } from '@subwallet/extension-base/koni/api/nft/unique_network_nft';
|
|
13
|
-
// import UniqueNftApi from '@subwallet/extension-base/koni/api/nft/unique_nft';
|
|
14
14
|
import { VaraNftApi } from '@subwallet/extension-base/koni/api/nft/vara_nft';
|
|
15
15
|
import { WasmNftApi } from '@subwallet/extension-base/koni/api/nft/wasm_nft';
|
|
16
16
|
import { _NFT_CHAIN_GROUP } from '@subwallet/extension-base/services/chain-service/constants';
|
|
17
17
|
import { _isChainSupportEvmNft, _isChainSupportNativeNft, _isChainSupportWasmNft, _isSupportOrdinal } from '@subwallet/extension-base/services/chain-service/utils';
|
|
18
|
-
import {
|
|
18
|
+
import { getAddressesByChainType, targetIsWeb } from '@subwallet/extension-base/utils';
|
|
19
19
|
import AssetHubNftsPalletApi from "./assethub_nft/index.js";
|
|
20
20
|
import { RariNftApi } from "./rari/index.js";
|
|
21
21
|
import { OdysseyNftApi } from "./story_odyssey_nft/index.js";
|
|
22
22
|
import { TernoaNftApi } from "./ternoa_nft/index.js";
|
|
23
23
|
function createSubstrateNftApi(chain, substrateApi, addresses) {
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
substrate: substrateAddresses
|
|
27
|
-
} = categoryAddresses(addresses);
|
|
24
|
+
const evmAddresses = getAddressesByChainType(addresses, [ChainType.EVM]);
|
|
25
|
+
const substrateAddresses = getAddressesByChainType(addresses, [ChainType.SUBSTRATE]);
|
|
28
26
|
if (_NFT_CHAIN_GROUP.acala.includes(chain)) {
|
|
29
27
|
return [new AcalaNftApi(substrateApi, substrateAddresses, chain)];
|
|
30
28
|
} else if (_NFT_CHAIN_GROUP.karura.includes(chain)) {
|
|
@@ -55,11 +53,11 @@ function createSubstrateNftApi(chain, substrateApi, addresses) {
|
|
|
55
53
|
return null;
|
|
56
54
|
}
|
|
57
55
|
function createWasmNftApi(chain, apiProps, addresses) {
|
|
58
|
-
const substrateAddresses =
|
|
56
|
+
const substrateAddresses = getAddressesByChainType(addresses, [ChainType.SUBSTRATE]);
|
|
59
57
|
return new WasmNftApi(apiProps, substrateAddresses, chain);
|
|
60
58
|
}
|
|
61
59
|
function createWeb3NftApi(chain, evmApi, addresses) {
|
|
62
|
-
const evmAddresses =
|
|
60
|
+
const evmAddresses = getAddressesByChainType(addresses, [ChainType.EVM]);
|
|
63
61
|
return new EvmNftApi(evmApi, evmAddresses, chain);
|
|
64
62
|
}
|
|
65
63
|
const createOrdinalApi = (chain, subscanChain, addresses) => {
|
|
@@ -93,10 +91,8 @@ export class NftHandler {
|
|
|
93
91
|
}
|
|
94
92
|
setAddresses(addresses) {
|
|
95
93
|
this.addresses = addresses;
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
substrate: substrateAddresses
|
|
99
|
-
} = categoryAddresses(addresses);
|
|
94
|
+
const evmAddresses = getAddressesByChainType(addresses, [ChainType.EVM]);
|
|
95
|
+
const substrateAddresses = getAddressesByChainType(addresses, [ChainType.SUBSTRATE]);
|
|
100
96
|
for (const handler of this.handlers) {
|
|
101
97
|
const useAddresses = handler.isEthereum ? evmAddresses : substrateAddresses;
|
|
102
98
|
handler.setAddresses(useAddresses);
|
|
@@ -121,10 +117,8 @@ export class NftHandler {
|
|
|
121
117
|
if (this.needSetupApi) {
|
|
122
118
|
// setup connections for first time use
|
|
123
119
|
this.handlers = [];
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
substrate: substrateAddresses
|
|
127
|
-
} = categoryAddresses(this.addresses);
|
|
120
|
+
const evmAddresses = getAddressesByChainType(this.addresses, [ChainType.EVM]);
|
|
121
|
+
const substrateAddresses = getAddressesByChainType(this.addresses, [ChainType.SUBSTRATE]);
|
|
128
122
|
Object.entries(this.chainInfoMap).forEach(([chain, chainInfo]) => {
|
|
129
123
|
if (_isChainSupportNativeNft(chainInfo)) {
|
|
130
124
|
if (this.substrateApiMap[chain]) {
|
|
@@ -35,6 +35,6 @@ export declare class OdysseyNftApi extends BaseNftApi {
|
|
|
35
35
|
private processNftItem;
|
|
36
36
|
handleNfts(params: HandleNftParams): Promise<void>;
|
|
37
37
|
fetchNftsWithDetail(address: string): Promise<OdysseyToken[] | null>;
|
|
38
|
-
fetchNfts(params: HandleNftParams): Promise<
|
|
38
|
+
fetchNfts(params: HandleNftParams): Promise<1 | 0>;
|
|
39
39
|
}
|
|
40
40
|
export {};
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
+
import { ChainType } from '@subwallet/extension-base/background/KoniTypes';
|
|
4
5
|
import { getAmplitudeStakingOnChain, getAstarStakingOnChain, getParaStakingOnChain } from '@subwallet/extension-base/koni/api/staking/paraChain';
|
|
5
6
|
import { getNominationPoolReward, getRelayPoolingOnChain, getRelayStakingOnChain } from '@subwallet/extension-base/koni/api/staking/relayChain';
|
|
6
7
|
import { getAllSubsquidStaking } from '@subwallet/extension-base/koni/api/staking/subsquidStaking';
|
|
7
8
|
import { _PURE_EVM_CHAINS } from '@subwallet/extension-base/services/chain-service/constants';
|
|
8
9
|
import { _isChainEvmCompatible, _isChainSupportSubstrateStaking, _isSubstrateRelayChain } from '@subwallet/extension-base/services/chain-service/utils';
|
|
9
10
|
import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants';
|
|
10
|
-
import {
|
|
11
|
+
import { getAddressesByChainType } from '@subwallet/extension-base/utils';
|
|
11
12
|
export function stakingOnChainApi(addresses, substrateApiMap, chainInfoMap, stakingCallback, nominatorStateCallback) {
|
|
12
13
|
const filteredApiMap = [];
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
substrate: substrateAddresses
|
|
16
|
-
} = categoryAddresses(addresses);
|
|
14
|
+
const evmAddresses = getAddressesByChainType(addresses, [ChainType.EVM]);
|
|
15
|
+
const substrateAddresses = getAddressesByChainType(addresses, [ChainType.SUBSTRATE]);
|
|
17
16
|
Object.entries(chainInfoMap).forEach(([networkKey, chainInfo]) => {
|
|
18
17
|
if (_PURE_EVM_CHAINS.indexOf(networkKey) < 0 && _isChainSupportSubstrateStaking(chainInfo)) {
|
|
19
18
|
filteredApiMap.push({
|
|
@@ -77,6 +77,9 @@ export default class KoniExtension {
|
|
|
77
77
|
private subscribeSettings;
|
|
78
78
|
private setEnableChainPatrol;
|
|
79
79
|
private saveNotificationSetup;
|
|
80
|
+
private saveMigrationAcknowledgedStatus;
|
|
81
|
+
private saveUnifiedAccountMigrationInProgress;
|
|
82
|
+
private pingUnifiedAccountMigrationDone;
|
|
80
83
|
private setShowZeroBalance;
|
|
81
84
|
private setLanguage;
|
|
82
85
|
private setShowBalance;
|
|
@@ -149,8 +152,10 @@ export default class KoniExtension {
|
|
|
149
152
|
private resolveQrTransfer;
|
|
150
153
|
private subscribeConfirmations;
|
|
151
154
|
private subscribeConfirmationsTon;
|
|
155
|
+
private subscribeConfirmationsCardano;
|
|
152
156
|
private completeConfirmation;
|
|
153
157
|
private completeConfirmationTon;
|
|
158
|
+
private completeConfirmationCardano;
|
|
154
159
|
private getNetworkJsonByChainId;
|
|
155
160
|
private parseSubstrateTransaction;
|
|
156
161
|
private parseEVMRLP;
|
|
@@ -250,6 +255,7 @@ export default class KoniExtension {
|
|
|
250
255
|
private subscribeBuyTokens;
|
|
251
256
|
private subscribeBuyServices;
|
|
252
257
|
private subscribeSwapPairs;
|
|
258
|
+
private generateOptimalProcess;
|
|
253
259
|
private handleSwapRequest;
|
|
254
260
|
private getLatestSwapQuote;
|
|
255
261
|
private validateSwapProcess;
|
|
@@ -268,5 +274,8 @@ export default class KoniExtension {
|
|
|
268
274
|
private createPassConfirmationParams;
|
|
269
275
|
private subscribeProcessById;
|
|
270
276
|
private subscribeProcessAlive;
|
|
277
|
+
private migrateUnifiedAndFetchEligibleSoloAccounts;
|
|
278
|
+
private migrateSoloAccount;
|
|
279
|
+
private pingSession;
|
|
271
280
|
handle<TMessageType extends MessageTypes>(id: string, type: TMessageType, request: RequestTypes[TMessageType], port: chrome.runtime.Port): Promise<ResponseType<TMessageType>>;
|
|
272
281
|
}
|