Skip to content

Commit

Permalink
address feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
pedronfigueiredo committed May 2, 2024
1 parent c997858 commit 6c84c02
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 15 deletions.
9 changes: 6 additions & 3 deletions test/data/confirmations/contract-interaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ export const CONTRACT_INTERACTION_SENDER_ADDRESS =
'0x2e0d7e8c45221fca00d74a3609a0f7097035d09b';

export const genUnapprovedContractInteractionConfirmation = (
{ address } = { address: CONTRACT_INTERACTION_SENDER_ADDRESS },
{ address, txData } = {
address: CONTRACT_INTERACTION_SENDER_ADDRESS,
txData: '0xd0e30db0',
},
): Confirmation => ({
actionId: String(400855682),
chainId: '0xaa36a7',
Expand Down Expand Up @@ -45,7 +48,7 @@ export const genUnapprovedContractInteractionConfirmation = (
status: TransactionStatus.unapproved,
time: 1713534772044,
txParams: {
data: '0xd0e30db0',
data: txData,
from: address,
gas: '0xab77',
maxFeePerGas: '0xaa350353',
Expand Down Expand Up @@ -130,7 +133,7 @@ export const genUnapprovedContractInteractionConfirmation = (
status: TransactionStatus.unapproved,
time: 1713534772044,
txParams: {
data: '0xd0e30db0',
data: txData,
from: address,
gas: '0xab77',
maxFeePerGas: '0xaa350353',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import { TransactionMeta } from '@metamask/transaction-controller';
import {
CONTRACT_INTERACTION_SENDER_ADDRESS,
genUnapprovedContractInteractionConfirmation,
} from '../../../../../../../test/data/confirmations/contract-interaction';
import mockState from '../../../../../../../test/data/mock-state.json';
import { renderHookWithProvider } from '../../../../../../../test/lib/render-helpers';
import { useKnownMethodDataInTransaction } from './known-method-data-in-transaction';

describe('useKnownMethodDataInTransaction', () => {
const depositHexData = '0xd0e30db0';

it('returns the method name and params', () => {
const currentConfirmation = genUnapprovedContractInteractionConfirmation({
address: CONTRACT_INTERACTION_SENDER_ADDRESS,
txData: depositHexData,
}) as TransactionMeta;

const { result } = renderHookWithProvider(
() => useKnownMethodDataInTransaction(currentConfirmation),
{
...mockState,
metamask: {
...mockState.metamask,
use4ByteResolution: true,
knownMethodData: {
[depositHexData]: { name: 'Deposit', params: [] },
},
},
},
);

expect(result.current.knownMethodData.name).toEqual('Deposit');
expect(result.current.knownMethodData.params).toEqual([]);
});

it('returns no known method data if resolution is turned off', () => {
const depositHexData = '0xd0e30db0';

const currentConfirmation = genUnapprovedContractInteractionConfirmation({
address: CONTRACT_INTERACTION_SENDER_ADDRESS,
txData: depositHexData,
}) as TransactionMeta;

const { result } = renderHookWithProvider(
() => useKnownMethodDataInTransaction(currentConfirmation),
{
...mockState,
metamask: {
...mockState.metamask,
use4ByteResolution: false,
knownMethodData: {
[depositHexData]: { name: 'Deposit', params: [] },
},
},
},
);

expect(result.current.knownMethodData).toEqual({});
});

it("returns no method data if it's not known even if resolution is enabled", () => {
const depositHexData = '0xd0e30db0';

const currentConfirmation = genUnapprovedContractInteractionConfirmation({
address: CONTRACT_INTERACTION_SENDER_ADDRESS,
txData: depositHexData,
}) as TransactionMeta;

const { result } = renderHookWithProvider(
() => useKnownMethodDataInTransaction(currentConfirmation),
{
...mockState,
metamask: {
...mockState.metamask,
use4ByteResolution: true,
knownMethodData: {},
},
},
);

expect(result.current.knownMethodData).toEqual({});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,11 @@ export const useKnownMethodDataInTransaction = (
) => {
const dispatch = useDispatch();
const use4ByteResolution = useSelector(use4ByteResolutionSelector);
if (use4ByteResolution && currentConfirmation?.txParams?.data) {
const transactionData = currentConfirmation?.txParams?.data;
if (use4ByteResolution && transactionData) {
dispatch(getContractMethodData(currentConfirmation.txParams.data));
}
const knownMethodData =
useSelector((state) =>
getKnownMethodData(state, currentConfirmation?.txParams?.data),
) || {};
useSelector((state) => getKnownMethodData(state, transactionData)) || {};
return { knownMethodData };
};
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,20 @@ const OriginRow = () => {
currentConfirmationSelector,
) as TransactionMeta;

return currentConfirmation?.origin ? (
const origin = currentConfirmation.origin;

if (!origin) {
return null;
}

return (
<ConfirmInfoRow
label={t('requestFrom')}
tooltip={t('requestFromTransactionDescription')}
>
<ConfirmInfoRowUrl url={currentConfirmation.origin} />
<ConfirmInfoRowUrl url={origin} />
</ConfirmInfoRow>
) : null;
);
};

const RecipientRow = () => {
Expand All @@ -36,15 +42,21 @@ const RecipientRow = () => {
currentConfirmationSelector,
) as TransactionMeta;

return currentConfirmation?.txParams.to &&
isValidAddress(currentConfirmation.txParams.to) ? (
if (
!currentConfirmation.txParams.to ||
!isValidAddress(currentConfirmation.txParams.to)
) {
return null;
}

return (
<ConfirmInfoRow
label={t('interactingWith')}
tooltip={t('interactingWithTransactionDescription')}
>
<ConfirmInfoRowAddress address={currentConfirmation.txParams.to} />
</ConfirmInfoRow>
) : null;
);
};

const MethodDataRow = () => {
Expand All @@ -57,14 +69,18 @@ const MethodDataRow = () => {
const { knownMethodData } =
useKnownMethodDataInTransaction(currentConfirmation);

return knownMethodData?.name ? (
if (!knownMethodData?.name) {
return null;
}

return (
<ConfirmInfoRow
label={t('methodData')}
tooltip={t('methodDataTransactionDescription')}
>
<ConfirmInfoRowText text={knownMethodData.name} />
</ConfirmInfoRow>
) : null;
);
};

export const TransactionDetails = () => {
Expand Down

0 comments on commit 6c84c02

Please sign in to comment.