From 14abf9ba18e44a8310850f8f444266cd6478f9a9 Mon Sep 17 00:00:00 2001 From: S2kael Date: Wed, 12 Feb 2025 11:14:46 +0700 Subject: [PATCH 1/4] [Issue-3901] Fix error process status and lint --- .../src/koni/background/handlers/Extension.ts | 20 ++++++++----------- .../src/services/transaction-service/index.ts | 2 +- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/packages/extension-base/src/koni/background/handlers/Extension.ts b/packages/extension-base/src/koni/background/handlers/Extension.ts index 5b5e043204..69f3aee222 100644 --- a/packages/extension-base/src/koni/background/handlers/Extension.ts +++ b/packages/extension-base/src/koni/background/handlers/Extension.ts @@ -3,20 +3,12 @@ import { Common } from '@ethereumjs/common'; import { LegacyTransaction } from '@ethereumjs/tx'; - -import { SubmittableExtrinsic } from '@polkadot/api/types'; -import { TypeRegistry } from '@polkadot/types'; -import { AnyJson, Registry, SignerPayloadJSON, SignerPayloadRaw } from '@polkadot/types/types'; -import { assert, hexStripPrefix, hexToU8a, isAscii, isHex, u8aToHex } from '@polkadot/util'; -import { decodeAddress, isEthereumAddress } from '@polkadot/util-crypto'; import { COMMON_CHAIN_SLUGS } from '@subwallet/chain-list'; import { _AssetRef, _AssetType, _ChainAsset, _ChainInfo, _MultiChainAsset } from '@subwallet/chain-list/types'; import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError'; import { withErrorLog } from '@subwallet/extension-base/background/handlers/helpers'; import { createSubscription } from '@subwallet/extension-base/background/handlers/subscriptions'; -import { - AccountExternalError, AddressBookInfo, AmountData, AmountDataWithId, AssetSetting, AssetSettingUpdateReq, BondingOptionParams, BrowserConfirmationType, CampaignBanner, CampaignData, CampaignDataType, ChainType, CronReloadRequest, CrowdloanJson, ExternalRequestPromiseStatus, ExtrinsicType, KeyringState, MantaPayEnableMessage, MantaPayEnableParams, MantaPayEnableResponse, MantaPaySyncState, MetadataItem, NftCollection, NftJson, NftTransactionRequest, NftTransactionResponse, PriceJson, RequestAccountCreateExternalV2, RequestAccountCreateHardwareMultiple, RequestAccountCreateHardwareV2, RequestAccountCreateWithSecretKey, RequestAccountExportPrivateKey, RequestAddInjectedAccounts, RequestApproveConnectWalletSession, RequestApproveWalletConnectNotSupport, RequestAuthorization, RequestAuthorizationBlock, RequestAuthorizationPerAccount, RequestAuthorizationPerSite, RequestAuthorizeApproveV2, RequestBondingSubmit, RequestCameraSettings, RequestCampaignBannerComplete, RequestChangeEnableChainPatrol, RequestChangeLanguage, RequestChangeMasterPassword, RequestChangePriceCurrency, RequestChangeShowBalance, RequestChangeShowZeroBalance, RequestChangeTimeAutoLock, RequestConfirmationComplete, RequestConfirmationCompleteTon, RequestConnectWalletConnect, RequestCrowdloanContributions, RequestDeleteContactAccount, RequestDisconnectWalletConnectSession, RequestEditContactAccount, RequestFindRawMetadata, RequestForgetSite, RequestFreeBalance, RequestGetTransaction, RequestKeyringExportMnemonic, RequestMaxTransferable, RequestMigratePassword, RequestParseEvmContractInput, RequestParseTransactionSubstrate, RequestPassPhishingPage, RequestQrParseRLP, RequestQrSignEvm, RequestQrSignSubstrate, RequestRejectConnectWalletSession, RequestRejectExternalRequest, RequestRejectWalletConnectNotSupport, RequestRemoveInjectedAccounts, RequestResetWallet, RequestResolveExternalRequest, RequestSaveAppConfig, RequestSaveBrowserConfig, RequestSaveOSConfig, RequestSaveRecentAccount, RequestSettingsType, RequestSigningApprovePasswordV2, RequestStakePoolingBonding, RequestStakePoolingUnbonding, RequestSubscribeHistory, RequestSubstrateNftSubmitTransaction, RequestTuringCancelStakeCompound, RequestTuringStakeCompound, RequestUnbondingSubmit, RequestUnlockKeyring, RequestUnlockType, ResolveAddressToDomainRequest, ResolveDomainRequest, ResponseAccountCreateWithSecretKey, ResponseAccountExportPrivateKey, ResponseChangeMasterPassword, ResponseFindRawMetadata, ResponseKeyringExportMnemonic, ResponseMigratePassword, ResponseNftImport, ResponseParseEvmContractInput, ResponseParseTransactionSubstrate, ResponseQrParseRLP, ResponseQrSignEvm, ResponseQrSignSubstrate, ResponseRejectExternalRequest, ResponseResetWallet, ResponseResolveExternalRequest, ResponseSubscribeHistory, ResponseUnlockKeyring, ShowCampaignPopupRequest, StakingJson, StakingRewardJson, StakingType, SufficientMetadata, ThemeNames, TokenPriorityDetails, TransactionHistoryItem, TransactionResponse, ValidateNetworkRequest, ValidateNetworkResponse, ValidatorInfo -} from '@subwallet/extension-base/background/KoniTypes'; +import { AccountExternalError, AddressBookInfo, AmountData, AmountDataWithId, AssetSetting, AssetSettingUpdateReq, BondingOptionParams, BrowserConfirmationType, CampaignBanner, CampaignData, CampaignDataType, ChainType, CronReloadRequest, CrowdloanJson, ExternalRequestPromiseStatus, ExtrinsicType, KeyringState, MantaPayEnableMessage, MantaPayEnableParams, MantaPayEnableResponse, MantaPaySyncState, MetadataItem, NftCollection, NftJson, NftTransactionRequest, NftTransactionResponse, PriceJson, RequestAccountCreateExternalV2, RequestAccountCreateHardwareMultiple, RequestAccountCreateHardwareV2, RequestAccountCreateWithSecretKey, RequestAccountExportPrivateKey, RequestAddInjectedAccounts, RequestApproveConnectWalletSession, RequestApproveWalletConnectNotSupport, RequestAuthorization, RequestAuthorizationBlock, RequestAuthorizationPerAccount, RequestAuthorizationPerSite, RequestAuthorizeApproveV2, RequestBondingSubmit, RequestCameraSettings, RequestCampaignBannerComplete, RequestChangeEnableChainPatrol, RequestChangeLanguage, RequestChangeMasterPassword, RequestChangePriceCurrency, RequestChangeShowBalance, RequestChangeShowZeroBalance, RequestChangeTimeAutoLock, RequestConfirmationComplete, RequestConfirmationCompleteTon, RequestConnectWalletConnect, RequestCrowdloanContributions, RequestDeleteContactAccount, RequestDisconnectWalletConnectSession, RequestEditContactAccount, RequestFindRawMetadata, RequestForgetSite, RequestFreeBalance, RequestGetTransaction, RequestKeyringExportMnemonic, RequestMaxTransferable, RequestMigratePassword, RequestParseEvmContractInput, RequestParseTransactionSubstrate, RequestPassPhishingPage, RequestQrParseRLP, RequestQrSignEvm, RequestQrSignSubstrate, RequestRejectConnectWalletSession, RequestRejectExternalRequest, RequestRejectWalletConnectNotSupport, RequestRemoveInjectedAccounts, RequestResetWallet, RequestResolveExternalRequest, RequestSaveAppConfig, RequestSaveBrowserConfig, RequestSaveOSConfig, RequestSaveRecentAccount, RequestSettingsType, RequestSigningApprovePasswordV2, RequestStakePoolingBonding, RequestStakePoolingUnbonding, RequestSubscribeHistory, RequestSubstrateNftSubmitTransaction, RequestTuringCancelStakeCompound, RequestTuringStakeCompound, RequestUnbondingSubmit, RequestUnlockKeyring, RequestUnlockType, ResolveAddressToDomainRequest, ResolveDomainRequest, ResponseAccountCreateWithSecretKey, ResponseAccountExportPrivateKey, ResponseChangeMasterPassword, ResponseFindRawMetadata, ResponseKeyringExportMnemonic, ResponseMigratePassword, ResponseNftImport, ResponseParseEvmContractInput, ResponseParseTransactionSubstrate, ResponseQrParseRLP, ResponseQrSignEvm, ResponseQrSignSubstrate, ResponseRejectExternalRequest, ResponseResetWallet, ResponseResolveExternalRequest, ResponseSubscribeHistory, ResponseUnlockKeyring, ShowCampaignPopupRequest, StakingJson, StakingRewardJson, StakingType, SufficientMetadata, ThemeNames, TokenPriorityDetails, TransactionHistoryItem, TransactionResponse, ValidateNetworkRequest, ValidateNetworkResponse, ValidatorInfo } from '@subwallet/extension-base/background/KoniTypes'; import { AccountAuthType, AuthorizeRequest, MessageTypes, MetadataRequest, RequestAccountExport, RequestAuthorizeCancel, RequestAuthorizeReject, RequestCurrentAccountAddress, RequestMetadataApprove, RequestMetadataReject, RequestSigningApproveSignature, RequestSigningCancel, RequestTypes, ResponseAccountExport, ResponseAuthorizeList, ResponseType, SigningRequest, WindowOpenParams } from '@subwallet/extension-base/background/types'; import { TransactionWarning } from '@subwallet/extension-base/background/warnings/TransactionWarning'; import { ALL_ACCOUNT_KEY, LATEST_SESSION, XCM_FEE_RATIO } from '@subwallet/extension-base/constants'; @@ -57,9 +49,7 @@ import { isProposalExpired, isSupportWalletConnectChain, isSupportWalletConnectN import { ResultApproveWalletConnectSession, WalletConnectNotSupportRequest, WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types'; import { SWStorage } from '@subwallet/extension-base/storage'; import { AccountsStore } from '@subwallet/extension-base/stores'; -import { - AccountJson, AccountProxyMap, AccountSignMode, AccountsWithCurrentAddress, BalanceJson, BasicTxErrorType, BasicTxWarningCode, BriefProcessStep, BriefSwapStep, BuyServiceInfo, BuyTokenInfo, CommonStepFeeInfo, CommonStepType, EarningProcessType, EarningRewardJson, NominationPoolInfo, OptimalYieldPathParams, ProcessStep, ProcessTransactionData, ProcessType, RequestAccountBatchExportV2, RequestAccountCreateSuriV2, RequestAccountNameValidate, RequestBatchJsonGetAccountInfo, RequestBatchRestoreV2, RequestBounceableValidate, RequestChangeTonWalletContractVersion, RequestCheckPublicAndSecretKey, RequestCrossChainTransfer, RequestDeriveCreateMultiple, RequestDeriveCreateV3, RequestDeriveValidateV2, RequestEarlyValidateYield, RequestExportAccountProxyMnemonic, RequestGetAllTonWalletContractVersion, RequestGetDeriveAccounts, RequestGetDeriveSuggestion, RequestGetYieldPoolTargets, RequestInputAccountSubscribe, RequestJsonGetAccountInfo, RequestJsonRestoreV2, RequestMetadataHash, RequestMnemonicCreateV2, RequestMnemonicValidateV2, RequestPrivateKeyValidateV2, RequestShortenMetadata, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestSubmitProcessTransaction, RequestSubscribeProcessById, RequestTransfer, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, ResponseAccountBatchExportV2, ResponseAccountCreateSuriV2, ResponseAccountNameValidate, ResponseBatchJsonGetAccountInfo, ResponseCheckPublicAndSecretKey, ResponseDeriveValidateV2, ResponseExportAccountProxyMnemonic, ResponseGetAllTonWalletContractVersion, ResponseGetDeriveAccounts, ResponseGetDeriveSuggestion, ResponseGetYieldPoolTargets, ResponseInputAccountSubscribe, ResponseJsonGetAccountInfo, ResponseMetadataHash, ResponseMnemonicCreateV2, ResponseMnemonicValidateV2, ResponsePrivateKeyValidateV2, ResponseShortenMetadata, ResponseSubscribeProcessById, StakingTxErrorType, StepStatus, StorageDataInterface, SummaryEarningProcessData, SwapBaseTxData, SwapFeeType, SwapStepType, TokenSpendingApprovalParams, ValidateYieldProcessParams, YieldPoolType, YieldStepType, YieldTokenBaseInfo -} from '@subwallet/extension-base/types'; +import { AccountJson, AccountProxyMap, AccountSignMode, AccountsWithCurrentAddress, BalanceJson, BasicTxErrorType, BasicTxWarningCode, BriefProcessStep, BriefSwapStep, BuyServiceInfo, BuyTokenInfo, CommonStepFeeInfo, CommonStepType, EarningProcessType, EarningRewardJson, NominationPoolInfo, OptimalYieldPathParams, ProcessStep, ProcessTransactionData, ProcessType, RequestAccountBatchExportV2, RequestAccountCreateSuriV2, RequestAccountNameValidate, RequestBatchJsonGetAccountInfo, RequestBatchRestoreV2, RequestBounceableValidate, RequestChangeTonWalletContractVersion, RequestCheckPublicAndSecretKey, RequestCrossChainTransfer, RequestDeriveCreateMultiple, RequestDeriveCreateV3, RequestDeriveValidateV2, RequestEarlyValidateYield, RequestExportAccountProxyMnemonic, RequestGetAllTonWalletContractVersion, RequestGetDeriveAccounts, RequestGetDeriveSuggestion, RequestGetYieldPoolTargets, RequestInputAccountSubscribe, RequestJsonGetAccountInfo, RequestJsonRestoreV2, RequestMetadataHash, RequestMnemonicCreateV2, RequestMnemonicValidateV2, RequestPrivateKeyValidateV2, RequestShortenMetadata, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestSubmitProcessTransaction, RequestSubscribeProcessById, RequestTransfer, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, ResponseAccountBatchExportV2, ResponseAccountCreateSuriV2, ResponseAccountNameValidate, ResponseBatchJsonGetAccountInfo, ResponseCheckPublicAndSecretKey, ResponseDeriveValidateV2, ResponseExportAccountProxyMnemonic, ResponseGetAllTonWalletContractVersion, ResponseGetDeriveAccounts, ResponseGetDeriveSuggestion, ResponseGetYieldPoolTargets, ResponseInputAccountSubscribe, ResponseJsonGetAccountInfo, ResponseMetadataHash, ResponseMnemonicCreateV2, ResponseMnemonicValidateV2, ResponsePrivateKeyValidateV2, ResponseShortenMetadata, ResponseSubscribeProcessById, StakingTxErrorType, StepStatus, StorageDataInterface, SummaryEarningProcessData, SwapBaseTxData, SwapFeeType, SwapStepType, TokenSpendingApprovalParams, ValidateYieldProcessParams, YieldPoolType, YieldStepType, YieldTokenBaseInfo } from '@subwallet/extension-base/types'; import { RequestAccountProxyEdit, RequestAccountProxyForget } from '@subwallet/extension-base/types/account/action/edit'; import { RequestClaimBridge } from '@subwallet/extension-base/types/bridge'; import { GetNotificationParams, RequestIsClaimedPolygonBridge, RequestSwitchStatusParams } from '@subwallet/extension-base/types/notification'; @@ -81,6 +71,12 @@ import { t } from 'i18next'; import { combineLatest, Subject } from 'rxjs'; import { TransactionConfig } from 'web3-core'; +import { SubmittableExtrinsic } from '@polkadot/api/types'; +import { TypeRegistry } from '@polkadot/types'; +import { AnyJson, Registry, SignerPayloadJSON, SignerPayloadRaw } from '@polkadot/types/types'; +import { assert, hexStripPrefix, hexToU8a, isAscii, isHex, u8aToHex } from '@polkadot/util'; +import { decodeAddress, isEthereumAddress } from '@polkadot/util-crypto'; + import { getSuitableRegistry, RegistrySource, setupApiRegistry, setupDappRegistry, setupDatabaseRegistry } from '../utils'; export function isJsonPayload (value: SignerPayloadJSON | SignerPayloadRaw): value is SignerPayloadJSON { diff --git a/packages/extension-base/src/services/transaction-service/index.ts b/packages/extension-base/src/services/transaction-service/index.ts index a262595354..60e0b01523 100644 --- a/packages/extension-base/src/services/transaction-service/index.ts +++ b/packages/extension-base/src/services/transaction-service/index.ts @@ -299,7 +299,7 @@ export default class TransactionService { this.onFailed({ ...data, errors: [...data.errors, new TransactionError(BasicTxErrorType.INTERNAL_ERROR)] }); if (step) { - this.updateProcessStepStatus(step, { status: StepStatus.COMPLETE }); + this.updateProcessStepStatus(step, { status: StepStatus.FAILED }); } }); From c79d951dbe054a7c485502f1fd905617686703cb Mon Sep 17 00:00:00 2001 From: S2kael Date: Wed, 12 Feb 2025 11:36:43 +0700 Subject: [PATCH 2/4] [Issue-3901] Fix lint --- .../extension-base/src/koni/background/handlers/Extension.ts | 3 ++- .../extension-koni-ui/src/Popup/Transaction/variants/Earn.tsx | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/extension-base/src/koni/background/handlers/Extension.ts b/packages/extension-base/src/koni/background/handlers/Extension.ts index 69f3aee222..b6c22dfdf2 100644 --- a/packages/extension-base/src/koni/background/handlers/Extension.ts +++ b/packages/extension-base/src/koni/background/handlers/Extension.ts @@ -3310,8 +3310,8 @@ export default class KoniExtension { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const { chainType, extrinsic, extrinsicType, transferNativeAmount, txChain, txData } = await this.#koniState.earningService.handleYieldJoin(inputData); - const poolHandler = await this.#koniState.earningService.getPoolHandler(data.slug); const isPoolSupportAlternativeFee = this.#koniState.earningService.isPoolSupportAlternativeFee(inputData.data.slug); + const poolHandler = this.#koniState.earningService.getPoolHandler(data.slug); const isMintingStep = YIELD_EXTRINSIC_TYPES.includes(extrinsicType); @@ -3340,6 +3340,7 @@ export default class KoniExtension { if (!this.#koniState.transactionService.checkProcessExist(processId)) { const lastStep = path.steps[path.steps.length - 1]; const combineInfo: SummaryEarningProcessData = { + // In real case, only `YIELD` have multiple steps type: lastStep.type === YieldStepType.JOIN_NOMINATION_POOL ? EarningProcessType.NOMINATION_POOL : lastStep.type === YieldStepType.NOMINATE diff --git a/packages/extension-koni-ui/src/Popup/Transaction/variants/Earn.tsx b/packages/extension-koni-ui/src/Popup/Transaction/variants/Earn.tsx index a93e9a03f6..f4fbd38ff1 100644 --- a/packages/extension-koni-ui/src/Popup/Transaction/variants/Earn.tsx +++ b/packages/extension-koni-ui/src/Popup/Transaction/variants/Earn.tsx @@ -516,7 +516,7 @@ const Component = () => { } } else { if (oneSign - // && path.steps.length > 2 + // && path.steps.length > 2 ) { const submitPromise: Promise = submitProcess({ address: from, From 30472ef65cf97643259c887c13d0fe19e051e0b9 Mon Sep 17 00:00:00 2001 From: S2kael Date: Wed, 12 Feb 2025 12:08:12 +0700 Subject: [PATCH 3/4] [Issue-3901] [Earning] Update content --- .../src/koni/background/handlers/Extension.ts | 8 +++--- .../inapp-notification-service/index.ts | 26 +++++++++++++++++-- .../src/types/yield/actions/join/submit.ts | 4 +-- .../src/Popup/Confirmations/index.tsx | 3 +++ 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/packages/extension-base/src/koni/background/handlers/Extension.ts b/packages/extension-base/src/koni/background/handlers/Extension.ts index b6c22dfdf2..5db6288e32 100644 --- a/packages/extension-base/src/koni/background/handlers/Extension.ts +++ b/packages/extension-base/src/koni/background/handlers/Extension.ts @@ -3323,7 +3323,7 @@ export default class KoniExtension { let step: BriefProcessStep | undefined; - if (processId) { + if (processId && poolHandler) { const convertFee = (fee: YieldTokenBaseInfo): CommonStepFeeInfo => { return { feeComponent: [{ @@ -3349,9 +3349,9 @@ export default class KoniExtension { data, brief: { amount: data.amount, - chain: poolHandler?.chain || '', - token: poolHandler?.metadataInfo.inputAsset || '', - method: poolHandler?.type || '' + chain: poolHandler.chain, + token: poolHandler.metadataInfo.inputAsset, + method: poolHandler.type } }; diff --git a/packages/extension-base/src/services/inapp-notification-service/index.ts b/packages/extension-base/src/services/inapp-notification-service/index.ts index 9b78b4a6dd..85447add1e 100644 --- a/packages/extension-base/src/services/inapp-notification-service/index.ts +++ b/packages/extension-base/src/services/inapp-notification-service/index.ts @@ -8,13 +8,14 @@ import { CRON_LISTEN_AVAIL_BRIDGE_CLAIM } from '@subwallet/extension-base/consta import { fetchLastestRemindNotificationTime } from '@subwallet/extension-base/constants/remind-notification-time'; import { CronServiceInterface, ServiceStatus } from '@subwallet/extension-base/services/base/types'; import { ChainService } from '@subwallet/extension-base/services/chain-service'; +import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants'; import { EventService } from '@subwallet/extension-base/services/event-service'; import { NotificationDescriptionMap, NotificationTitleMap, ONE_DAY_MILLISECOND } from '@subwallet/extension-base/services/inapp-notification-service/consts'; import { _BaseNotificationInfo, _NotificationInfo, ClaimAvailBridgeNotificationMetadata, ClaimPolygonBridgeNotificationMetadata, NotificationActionType, NotificationTab, ProcessNotificationMetadata, WithdrawClaimNotificationMetadata } from '@subwallet/extension-base/services/inapp-notification-service/interfaces'; import { AvailBridgeSourceChain, AvailBridgeTransaction, fetchAllAvailBridgeClaimable, fetchPolygonBridgeTransactions, hrsToMillisecond, PolygonTransaction } from '@subwallet/extension-base/services/inapp-notification-service/utils'; import { KeyringService } from '@subwallet/extension-base/services/keyring-service'; import DatabaseService from '@subwallet/extension-base/services/storage-service/DatabaseService'; -import { ProcessTransactionData, ProcessType, SummaryEarningProcessData, SwapBaseTxData } from '@subwallet/extension-base/types'; +import { ProcessTransactionData, ProcessType, SummaryEarningProcessData, SwapBaseTxData, YieldPoolType } from '@subwallet/extension-base/types'; import { GetNotificationParams, RequestSwitchStatusParams } from '@subwallet/extension-base/types/notification'; import { categoryAddresses, formatNumber } from '@subwallet/extension-base/utils'; import { isSubstrateAddress } from '@subwallet/keyring'; @@ -419,7 +420,28 @@ export class InappNotificationService implements CronServiceInterface { const asset = this.chainService.getAssetBySlug(combineInfo.brief.token); const chain = this.chainService.getChainInfoByKey(combineInfo.brief.chain); const amount = combineInfo.brief.amount; - const method = combineInfo.brief.method; + let method: string; + + switch (combineInfo.brief.method) { + case YieldPoolType.LIQUID_STAKING: + method = 'Liquid staking'; + break; + case YieldPoolType.LENDING: + method = 'Lending'; + break; + case YieldPoolType.SINGLE_FARMING: + method = 'Single farming'; + break; + case YieldPoolType.NOMINATION_POOL: + method = 'Nomination pool'; + break; + case YieldPoolType.PARACHAIN_STAKING: + method = 'Parachain staking'; + break; + case YieldPoolType.NATIVE_STAKING: + method = _STAKING_CHAIN_GROUP.astar.includes(chain.slug) ? 'dApp staking' : 'Direct nomination'; + break; + } title = '[{{accountName}}] STAKED {{asset}}' .replace('{{asset}}', asset.symbol); diff --git a/packages/extension-base/src/types/yield/actions/join/submit.ts b/packages/extension-base/src/types/yield/actions/join/submit.ts index 39f32dc480..cf6c386b1e 100644 --- a/packages/extension-base/src/types/yield/actions/join/submit.ts +++ b/packages/extension-base/src/types/yield/actions/join/submit.ts @@ -4,7 +4,7 @@ import { _Address, ChainType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes'; import { BaseProcessRequestSign, BaseRequestSign, InternalRequestSign, TransactionData } from '../../../transaction'; -import { NominationPoolInfo, ValidatorInfo, YieldPositionInfo } from '../../info'; +import { NominationPoolInfo, ValidatorInfo, YieldPoolType, YieldPositionInfo } from '../../info'; import { OptimalYieldPath } from './step'; // Result after create extrinsic @@ -54,7 +54,7 @@ export interface SummaryEarningProcessData { token: string; amount: string; chain: string; - method: string; + method: YieldPoolType; } } diff --git a/packages/extension-koni-ui/src/Popup/Confirmations/index.tsx b/packages/extension-koni-ui/src/Popup/Confirmations/index.tsx index 3998d74f81..922b6bcfe7 100644 --- a/packages/extension-koni-ui/src/Popup/Confirmations/index.tsx +++ b/packages/extension-koni-ui/src/Popup/Confirmations/index.tsx @@ -194,6 +194,9 @@ const Component = function ({ className }: Props) { switch (transaction.process.type) { case ProcessType.SWAP: return t('Swap confirmation'); + case ProcessType.EARNING: + // TODO: Replace message + return t('Earning confirmation'); } } From 9350ad868fb95f5a4abc274ee5c0c7065cb47b45 Mon Sep 17 00:00:00 2001 From: S2kael Date: Wed, 12 Feb 2025 14:26:04 +0700 Subject: [PATCH 4/4] [Issue-3901] [Earning] Add approve step metadata --- .../handlers/liquid-staking/stella-swap.ts | 10 ++++++++-- .../extension-base/src/types/transaction/process.ts | 6 ++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/extension-base/src/services/earning-service/handlers/liquid-staking/stella-swap.ts b/packages/extension-base/src/services/earning-service/handlers/liquid-staking/stella-swap.ts index 88adc91f88..12386bb44a 100644 --- a/packages/extension-base/src/services/earning-service/handlers/liquid-staking/stella-swap.ts +++ b/packages/extension-base/src/services/earning-service/handlers/liquid-staking/stella-swap.ts @@ -8,7 +8,7 @@ import KoniState from '@subwallet/extension-base/koni/background/handlers/State' import { _EvmApi } from '@subwallet/extension-base/services/chain-service/types'; import { _getAssetDecimals, _getContractAddressOfToken } from '@subwallet/extension-base/services/chain-service/utils'; import { calculateGasFeeParams } from '@subwallet/extension-base/services/fee-service/utils'; -import { BaseYieldStepDetail, BasicTxErrorType, EarningStatus, HandleYieldStepData, LiquidYieldPoolInfo, OptimalYieldPath, OptimalYieldPathParams, SubmitYieldJoinData, TokenSpendingApprovalParams, TransactionData, UnstakingInfo, UnstakingStatus, YieldPoolMethodInfo, YieldPositionInfo, YieldStepType, YieldTokenBaseInfo } from '@subwallet/extension-base/types'; +import { ApproveStepMetadata, BaseYieldStepDetail, BasicTxErrorType, EarningStatus, HandleYieldStepData, LiquidYieldPoolInfo, OptimalYieldPath, OptimalYieldPathParams, SubmitYieldJoinData, TokenSpendingApprovalParams, TransactionData, UnstakingInfo, UnstakingStatus, YieldPoolMethodInfo, YieldPositionInfo, YieldStepType, YieldTokenBaseInfo } from '@subwallet/extension-base/types'; import { TransactionConfig } from 'web3-core'; import { Contract } from 'web3-eth-contract'; @@ -248,9 +248,15 @@ export default class StellaSwapLiquidStakingPoolHandler extends BaseLiquidStakin ]); if (!allowance || parseInt(allowance) <= 0) { + const metadata: ApproveStepMetadata = { + contractAddress: inputTokenSlug, + spenderAddress: this.derivativeAssets[0] + }; + const step: BaseYieldStepDetail = { name: 'Authorize token approval', - type: YieldStepType.TOKEN_APPROVAL + type: YieldStepType.TOKEN_APPROVAL, + metadata: metadata as unknown as Record }; // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access diff --git a/packages/extension-base/src/types/transaction/process.ts b/packages/extension-base/src/types/transaction/process.ts index 20867b3006..3fff4131b4 100644 --- a/packages/extension-base/src/types/transaction/process.ts +++ b/packages/extension-base/src/types/transaction/process.ts @@ -71,6 +71,12 @@ export interface BriefSwapStep { route: SwapRoute; } +export interface ApproveStepMetadata { + contractAddress: string; + spenderAddress: string; + amount?: string; +} + export interface RequestSubscribeProcessById { processId: string; }