From dda594862690ac4f6aeddb915d50bd567d3a1d7d Mon Sep 17 00:00:00 2001 From: weatherstar Date: Wed, 22 Jan 2025 09:34:32 +0800 Subject: [PATCH] Fix/transfer alert & receive label error OK-35294 OK-34964 (#6580) * fix: validate to address in internal transfer only * fix: receive address label --- packages/core/src/types/coreTypesTx.ts | 1 + packages/kit-bg/src/services/ServiceSend.ts | 2 ++ packages/kit-bg/src/vaults/types.ts | 1 + packages/kit/src/hooks/useSignatureConfirm.ts | 1 + .../SendDataInput/SendDataInputContainer.tsx | 1 + .../TxConfirmActions.tsx | 28 +++++++++++++------ .../SignatureConfirmComponents/Address.tsx | 9 +++++- .../pages/TxConfirm/TxConfirm.tsx | 8 +----- packages/shared/src/utils/txActionUtils.ts | 1 + packages/shared/types/signatureConfirm.ts | 1 + 10 files changed, 36 insertions(+), 17 deletions(-) diff --git a/packages/core/src/types/coreTypesTx.ts b/packages/core/src/types/coreTypesTx.ts index 376c45d276e..85e9d076222 100644 --- a/packages/core/src/types/coreTypesTx.ts +++ b/packages/core/src/types/coreTypesTx.ts @@ -116,6 +116,7 @@ export type IUnsignedTxPro = IUnsignedTx & { rawTxUnsigned?: string; uuid?: string; isInternalSwap?: boolean; + isInternalTransfer?: boolean; }; export type ISignedTx = { txid: string; diff --git a/packages/kit-bg/src/services/ServiceSend.ts b/packages/kit-bg/src/services/ServiceSend.ts index 3e8ea14b7c8..899f6e9a40d 100644 --- a/packages/kit-bg/src/services/ServiceSend.ts +++ b/packages/kit-bg/src/services/ServiceSend.ts @@ -535,6 +535,7 @@ class ServiceSend extends ServiceBase { prevNonce, feeInfo, isInternalSwap, + isInternalTransfer, } = params; let newUnsignedTx = unsignedTx; @@ -560,6 +561,7 @@ class ServiceSend extends ServiceBase { } newUnsignedTx.isInternalSwap = isInternalSwap; + newUnsignedTx.isInternalTransfer = isInternalTransfer; if (swapInfo) { newUnsignedTx.swapInfo = swapInfo; diff --git a/packages/kit-bg/src/vaults/types.ts b/packages/kit-bg/src/vaults/types.ts index b641d5c8e52..3386237d196 100644 --- a/packages/kit-bg/src/vaults/types.ts +++ b/packages/kit-bg/src/vaults/types.ts @@ -547,6 +547,7 @@ export interface IBuildUnsignedTxParams { feeInfo?: IFeeInfoUnit; transferPayload?: ITransferPayload; isInternalSwap?: boolean; + isInternalTransfer?: boolean; } export type ITokenApproveInfo = { allowance: string; isUnlimited: boolean }; diff --git a/packages/kit/src/hooks/useSignatureConfirm.ts b/packages/kit/src/hooks/useSignatureConfirm.ts index 212fdea9ef2..508de9c12c6 100644 --- a/packages/kit/src/hooks/useSignatureConfirm.ts +++ b/packages/kit/src/hooks/useSignatureConfirm.ts @@ -48,6 +48,7 @@ type IBuildUnsignedTxParams = { feeInfoEditable?: boolean; feeInfo?: IFeeInfoUnit; isInternalSwap?: boolean; + isInternalTransfer?: boolean; }; function useSignatureConfirm(params: IParams) { diff --git a/packages/kit/src/views/Send/pages/SendDataInput/SendDataInputContainer.tsx b/packages/kit/src/views/Send/pages/SendDataInput/SendDataInputContainer.tsx index fa92e1fa75c..3504f3779f9 100644 --- a/packages/kit/src/views/Send/pages/SendDataInput/SendDataInputContainer.tsx +++ b/packages/kit/src/views/Send/pages/SendDataInput/SendDataInputContainer.tsx @@ -549,6 +549,7 @@ function SendDataInputContainer() { paymentId: paymentIdValue, note: noteValue, }, + isInternalTransfer: true, }); setIsSubmitting(false); } catch (e: any) { diff --git a/packages/kit/src/views/SignatureConfirm/components/SignatureConfirmActions/TxConfirmActions.tsx b/packages/kit/src/views/SignatureConfirm/components/SignatureConfirmActions/TxConfirmActions.tsx index e62466db37b..3562117cbec 100644 --- a/packages/kit/src/views/SignatureConfirm/components/SignatureConfirmActions/TxConfirmActions.tsx +++ b/packages/kit/src/views/SignatureConfirm/components/SignatureConfirmActions/TxConfirmActions.tsx @@ -60,8 +60,6 @@ type IProps = { useFeeInTx?: boolean; feeInfoEditable?: boolean; popStack?: boolean; - fromAddress?: string; - toAddress?: string; }; function TxConfirmActions(props: IProps) { @@ -76,8 +74,6 @@ function TxConfirmActions(props: IProps) { transferPayload, useFeeInTx, feeInfoEditable, - fromAddress, - toAddress, popStack = true, } = props; const intl = useIntl(); @@ -100,6 +96,9 @@ function TxConfirmActions(props: IProps) { const successfullySentTxs = useRef([]); const { bottom } = useSafeAreaInsets(); + const toAddress = transferPayload?.originalRecipient; + const unsignedTx = unsignedTxs[0]; + const dappApprove = useDappApproveAction({ id: sourceInfo?.id ?? '', closeWindowAfterResolved: true, @@ -125,11 +124,22 @@ function TxConfirmActions(props: IProps) { updateSendTxStatus({ isSubmitting: true }); isSubmitted.current = true; // Pre-check before submit + + const accountAddress = + await backgroundApiProxy.serviceAccount.getAccountAddressForApi({ + accountId, + networkId, + }); try { - if (networkId && fromAddress && toAddress) { + if ( + unsignedTx.isInternalTransfer && + networkId && + accountAddress && + toAddress + ) { await serviceSend.checkAddressBeforeSending({ networkId, - fromAddress, + fromAddress: accountAddress, toAddress, }); } @@ -286,11 +296,11 @@ function TxConfirmActions(props: IProps) { } }, [ updateSendTxStatus, - sendSelectedFeeInfo, + accountId, networkId, - fromAddress, + sendSelectedFeeInfo, + unsignedTx.isInternalTransfer, toAddress, - accountId, unsignedTxs, nativeTokenTransferAmountToUpdate.isMaxSend, nativeTokenTransferAmountToUpdate.amountToUpdate, diff --git a/packages/kit/src/views/SignatureConfirm/components/SignatureConfirmComponents/Address.tsx b/packages/kit/src/views/SignatureConfirm/components/SignatureConfirmComponents/Address.tsx index 8843c05c276..279a45470ff 100644 --- a/packages/kit/src/views/SignatureConfirm/components/SignatureConfirmComponents/Address.tsx +++ b/packages/kit/src/views/SignatureConfirm/components/SignatureConfirmComponents/Address.tsx @@ -28,7 +28,14 @@ function formatTagValue(value: string | string[]) { function Address(props: IProps) { const intl = useIntl(); - const { accountId, networkId, component, showAddressLocalTags } = props; + const { + accountId, + networkId: currentNetworkId, + component, + showAddressLocalTags, + } = props; + + const networkId = component.networkId || currentNetworkId; return ( diff --git a/packages/kit/src/views/SignatureConfirm/pages/TxConfirm/TxConfirm.tsx b/packages/kit/src/views/SignatureConfirm/pages/TxConfirm/TxConfirm.tsx index c0fafb88053..4544bb3945d 100644 --- a/packages/kit/src/views/SignatureConfirm/pages/TxConfirm/TxConfirm.tsx +++ b/packages/kit/src/views/SignatureConfirm/pages/TxConfirm/TxConfirm.tsx @@ -127,8 +127,6 @@ function TxConfirm() { }, ); - const fromAddress = decodedTxs?.[0]?.owner; - const toAddress = decodedTxs?.[0]?.to; usePromiseResult(async () => { if (txConfirmParamsInit.current) return; updateNativeTokenInfo({ @@ -272,11 +270,7 @@ function TxConfirm() { {renderTxConfirmContent()} - + ); } diff --git a/packages/shared/src/utils/txActionUtils.ts b/packages/shared/src/utils/txActionUtils.ts index 8031aceb811..3d7fbc1ef43 100644 --- a/packages/shared/src/utils/txActionUtils.ts +++ b/packages/shared/src/utils/txActionUtils.ts @@ -330,6 +330,7 @@ function convertAssetTransferActionToSignatureConfirmComponent({ }), address: unsignedTx.swapInfo.receivingAddress, tags: [], + networkId: unsignedTx.swapInfo.receiver.accountInfo.networkId, }; components.push(receiveAddressComponent); diff --git a/packages/shared/types/signatureConfirm.ts b/packages/shared/types/signatureConfirm.ts index 05f92318c6f..f65a1475ba6 100644 --- a/packages/shared/types/signatureConfirm.ts +++ b/packages/shared/types/signatureConfirm.ts @@ -64,6 +64,7 @@ export interface IDisplayComponentAddress { iconURL?: string; }[]; isNavigable?: boolean; + networkId?: string; } export interface IDisplayComponentAmount {