diff --git a/src/components/Transactions/TransactionSimulationCard.tsx b/src/components/Transactions/TransactionSimulationCard.tsx
index 7d0d40a498d..0bd3060a965 100644
--- a/src/components/Transactions/TransactionSimulationCard.tsx
+++ b/src/components/Transactions/TransactionSimulationCard.tsx
@@ -37,6 +37,7 @@ interface TransactionSimulationCardProps {
isLoading: boolean;
txSimulationApiError: unknown;
isPersonalSignRequest: boolean;
+ isTypedDataRequest: boolean;
noChanges: boolean;
simulation: TransactionSimulationResult | undefined;
simulationError: TransactionErrorType | undefined;
@@ -51,6 +52,7 @@ export const TransactionSimulationCard = ({
isLoading,
txSimulationApiError,
isPersonalSignRequest,
+ isTypedDataRequest,
noChanges,
simulation,
simulationError,
@@ -60,6 +62,7 @@ export const TransactionSimulationCard = ({
const cardHeight = useSharedValue(COLLAPSED_CARD_HEIGHT);
const contentHeight = useSharedValue(COLLAPSED_CARD_HEIGHT - CARD_BORDER_WIDTH * 2);
const spinnerRotation = useSharedValue(0);
+ const isSimulationUnavailable = isPersonalSignRequest || isTypedDataRequest;
const listStyle = useAnimatedStyle(() => ({
opacity: noChanges
@@ -81,18 +84,18 @@ export const TransactionSimulationCard = ({
});
useAnimatedReaction(
- () => ({ isLoading, isPersonalSignRequest }),
- ({ isLoading, isPersonalSignRequest }, previous = { isLoading: false, isPersonalSignRequest: false }) => {
+ () => ({ isLoading, isSimulationUnavailable }),
+ ({ isLoading, isSimulationUnavailable }, previous = { isLoading: false, isSimulationUnavailable: false }) => {
if (isLoading && !previous?.isLoading) {
spinnerRotation.value = withRepeat(withTiming(360, rotationConfig), -1, false);
} else if (
(!isLoading && previous?.isLoading) ||
- (isPersonalSignRequest && !previous?.isPersonalSignRequest && previous?.isLoading)
+ (isSimulationUnavailable && !previous?.isSimulationUnavailable && previous?.isLoading)
) {
spinnerRotation.value = withTiming(360, timingConfig);
}
},
- [isLoading, isPersonalSignRequest]
+ [isLoading, isSimulationUnavailable]
);
const renderSimulationEventRows = useMemo(() => {
if (isBalanceEnough === false) return null;
@@ -142,7 +145,7 @@ export const TransactionSimulationCard = ({
if (isBalanceEnough === false) {
return 'blue';
}
- if (noChanges || isPersonalSignRequest || txSimulationApiError) {
+ if (noChanges || isSimulationUnavailable || txSimulationApiError) {
return 'labelQuaternary';
}
if (simulationScanResult === TransactionScanResultType.Warning) {
@@ -152,7 +155,7 @@ export const TransactionSimulationCard = ({
return 'red';
}
return 'label';
- }, [isBalanceEnough, isLoading, noChanges, simulationError, simulationScanResult, isPersonalSignRequest, txSimulationApiError]);
+ }, [isBalanceEnough, isLoading, noChanges, simulationError, simulationScanResult, isSimulationUnavailable, txSimulationApiError]);
const titleText = useMemo(() => {
if (isLoading) {
@@ -161,7 +164,7 @@ export const TransactionSimulationCard = ({
if (isBalanceEnough === false) {
return i18n.t(i18n.l.walletconnect.simulation.simulation_card.titles.not_enough_native_balance, { symbol: nativeAsset.symbol });
}
- if (txSimulationApiError || isPersonalSignRequest) {
+ if (txSimulationApiError || isSimulationUnavailable) {
return i18n.t(i18n.l.walletconnect.simulation.simulation_card.titles.simulation_unavailable);
}
if (simulationScanResult === TransactionScanResultType.Warning) {
@@ -181,7 +184,7 @@ export const TransactionSimulationCard = ({
isLoading,
isBalanceEnough,
txSimulationApiError,
- isPersonalSignRequest,
+ isSimulationUnavailable,
simulationScanResult,
noChanges,
simulationError,
@@ -189,12 +192,12 @@ export const TransactionSimulationCard = ({
]);
const isExpanded = useMemo(() => {
- if (isLoading || isPersonalSignRequest) {
+ if (isLoading || isSimulationUnavailable) {
return false;
}
const shouldExpandOnLoad = isBalanceEnough === false || (!isEmpty(simulation) && !noChanges) || !!simulationError;
return shouldExpandOnLoad;
- }, [isBalanceEnough, isLoading, isPersonalSignRequest, noChanges, simulation, simulationError]);
+ }, [isBalanceEnough, isLoading, isSimulationUnavailable, noChanges, simulation, simulationError]);
return (
) : (
- {!isLoading && noChanges && !isPersonalSignRequest ? (
+ {!isLoading && noChanges && !isSimulationUnavailable ? (
{/* The extra space avoids icon clipping */}
{' '}
@@ -228,7 +231,7 @@ export const TransactionSimulationCard = ({
@@ -278,6 +281,13 @@ export const TransactionSimulationCard = ({
)}
+ {isTypedDataRequest && (
+
+
+ {i18n.t(i18n.l.walletconnect.simulation.simulation_card.messages.unavailable_typed_data)}
+
+
+ )}
{txSimulationApiError && (
{i18n.t(i18n.l.walletconnect.simulation.simulation_card.messages.tx_api_error)}
diff --git a/src/languages/en_US.json b/src/languages/en_US.json
index 7c81c21ea08..fa17bd8028b 100644
--- a/src/languages/en_US.json
+++ b/src/languages/en_US.json
@@ -3320,6 +3320,7 @@
"no_changes": "No Changes Detected",
"need_more_native": "You’ll need more %{symbol} on %{network} to pay for this transaction. Get some %{symbol} below to continue with this request.",
"unavailable_personal_sign": "Simulation for personal signs is not yet supported",
+ "unavailable_typed_data": "Simulation for typed data signing is not yet supported",
"unavailable_zora_network": "Simulation on Zora is not yet supported",
"failed_to_simulate": "The simulation failed, which suggests your transaction is likely to fail. This may be an issue with the app you’re using.",
"tx_api_error": "We are unable to determine whether or not your transaction will succeed or fail. Proceed with caution.",
diff --git a/src/languages/zh_CN.json b/src/languages/zh_CN.json
index ee2ee3e056b..74d5b5992e5 100644
--- a/src/languages/zh_CN.json
+++ b/src/languages/zh_CN.json
@@ -3338,6 +3338,7 @@
"no_changes": "未检测到任何更改",
"need_more_native": "你需要更多的 %{symbol} 在 %{network} 上支付这笔交易。获得下面的 %{symbol} 继续进行这个请求。",
"unavailable_personal_sign": "尚不支持个人签名的模拟",
+ "unavailable_typed_data": "尚不支持类型数据签名的模拟",
"unavailable_zora_network": "尚不支持Zora的模拟",
"failed_to_simulate": "模拟失败,您的交易可能会失败。这可能与您正在使用的应用有关。",
"tx_api_error": "我们无法确定您的交易是否会成功或失败。请谨慎进行。",
diff --git a/src/screens/SignTransactionSheet.tsx b/src/screens/SignTransactionSheet.tsx
index 9f7f78d9977..6be751d4175 100644
--- a/src/screens/SignTransactionSheet.tsx
+++ b/src/screens/SignTransactionSheet.tsx
@@ -23,6 +23,7 @@ import {
SIGN_TYPED_DATA_V4,
isMessageDisplayType,
isPersonalSign,
+ isSignTypedData,
} from '@/utils/signingMethods';
import { Transaction } from '@ethersproject/transactions';
import { RouteProp, useRoute } from '@react-navigation/native';
@@ -160,6 +161,8 @@ export const SignTransactionSheet = () => {
const isMessageRequest = isMessageDisplayType(transactionDetails.payload.method);
const isPersonalSignRequest = isPersonalSign(transactionDetails.payload.method);
+ const isTypedDataRequest = isSignTypedData(transactionDetails.payload.method);
+ const isSimulationUnavailable = isPersonalSignRequest || isTypedDataRequest;
const label = useForegroundColor('label');
const surfacePrimary = useBackgroundColor('surfacePrimary');
@@ -235,7 +238,7 @@ export const SignTransactionSheet = () => {
transactionDetails,
},
{
- enabled: !isPersonalSignRequest,
+ enabled: !isSimulationUnavailable,
}
);