diff --git a/src/components/ppom/batching.js b/src/components/ppom/batching.js
index f00050cd..6f66b136 100644
--- a/src/components/ppom/batching.js
+++ b/src/components/ppom/batching.js
@@ -159,7 +159,7 @@ export function ppomMaliciousBatchingAndQueueing(parentContainer) {
           params: [
             {
               from: globalContext.accounts[0],
-              to: '0x5FbDB2315678afecb367f032d93F642f64180aa3',
+              to: maliciousAddress,
               value: '0x0',
               gasLimit: MIN_GAS_LIMIT,
               maxFeePerGas: '0x2540be400',
diff --git a/src/components/ppom/eip5792.js b/src/components/ppom/eip5792.js
new file mode 100644
index 00000000..d913c67a
--- /dev/null
+++ b/src/components/ppom/eip5792.js
@@ -0,0 +1,220 @@
+import globalContext from '../..';
+import { DEFAULT_CALLS, VERSION } from '../transactions/eip5792/sendCalls';
+import { getMaliciousTransactions } from './sharedConstants';
+
+export function ppomMaliciousSendCalls(parentContainer) {
+  parentContainer.insertAdjacentHTML(
+    'beforeend',
+    `<div class="col-xl-4 col-lg-6 col-md-12 col-sm-12 col-12 d-flex align-items-stretch">
+      <div class="card full-width">
+        <div class="card-body">
+          <h4 class="card-title">
+            PPOM - EIP 5792 - Malicious Send Calls
+          </h4>
+          <button class="btn btn-primary btn-lg btn-block mb-3" id="ppomSendMaliciousEthButton">
+            Send Calls with Malicious ETH Transfer
+          </button>
+          <button class="btn btn-primary btn-lg btn-block mb-3" id="ppomSendMaliciousERC20TransferButton">
+            Send Calls with Malicious ERC20 Transfer (USDC)
+          </button>
+          <button class="btn btn-primary btn-lg btn-block mb-3" id="ppomSendMaliciousERC20ApprovalButton">
+            Send Calls with Malicious ERC20 Approval (BUSDC)
+          </button>
+          <button class="btn btn-primary btn-lg btn-block mb-3" id="ppomSendMaliciousSetApprovalForAllButton">
+            Send Calls with Malicious Set Approval for All
+          </button>
+          <button class="btn btn-primary btn-lg btn-block mb-3" id="ppomSendMaliciousContractInteractionButton">
+            Send Calls with Malicious Contract Interaction
+          </button>
+          <button class="btn btn-primary btn-lg btn-block mb-3" id="ppomSendThreeMaliciousTxsButton">
+            Send Calls with 3 Malicious Transactions
+          </button>
+          <hr/>
+          <div id="ppomRequestIdContainer" hidden>
+            <label>Request ID:</label>
+            <input type="text" id="ppomRequestIdInput" class="form-control" readonly />
+          </div>
+          <p class="info-text alert alert-warning" id="ppomSendCallsErrorContainer" hidden>
+            <span class="wrap" id="ppomSendCallsError"></span>
+          </p>
+          <button class="btn btn-primary btn-lg btn-block mb-3" id="ppomGetCallsStatusButton" disabled>
+            Get Calls Status
+          </button>
+          <p class="info-text alert alert-success">
+            <span class="wrap" id="ppomGetCallsStatusResult">Status</span>
+          </p>
+        </div>
+      </div>
+    </div>`,
+  );
+
+  const ppomSendMaliciousEthButton = document.getElementById(
+    'ppomSendMaliciousEthButton',
+  );
+
+  ppomSendMaliciousEthButton.onclick = async () => {
+    await sendMaliciousCalls('eth');
+  };
+
+  const ppomSendMaliciousERC20TransferButton = document.getElementById(
+    'ppomSendMaliciousERC20TransferButton',
+  );
+
+  ppomSendMaliciousERC20TransferButton.onclick = async () => {
+    await sendMaliciousCalls('erc20Transfer');
+  };
+
+  const ppomSendMaliciousERC20ApprovalButton = document.getElementById(
+    'ppomSendMaliciousERC20ApprovalButton',
+  );
+
+  ppomSendMaliciousERC20ApprovalButton.onclick = async () => {
+    await sendMaliciousCalls('erc20Approval');
+  };
+
+  const ppomSendMaliciousSetApprovalForAllButton = document.getElementById(
+    'ppomSendMaliciousSetApprovalForAllButton',
+  );
+
+  ppomSendMaliciousSetApprovalForAllButton.onclick = async () => {
+    await sendMaliciousCalls('setApprovalForAll');
+  };
+
+  const ppomSendMaliciousContractInteractionButton = document.getElementById(
+    'ppomSendMaliciousContractInteractionButton',
+  );
+
+  ppomSendMaliciousContractInteractionButton.onclick = async () => {
+    await sendMaliciousCalls('maliciousContractInteraction');
+  };
+
+  const ppomSendThreeMaliciousTxsButton = document.getElementById(
+    'ppomSendThreeMaliciousTxsButton',
+  );
+
+  ppomSendThreeMaliciousTxsButton.onclick = async () => {
+    await sendThreeMaliciousCalls();
+  };
+
+  document.addEventListener('globalConnectionChange', function (e) {
+    if (e.detail.connected) {
+      // MetaMask is connected, enable the button
+      ppomSendMaliciousEthButton.disabled = false;
+      ppomSendMaliciousERC20TransferButton.disabled = false;
+      ppomSendMaliciousERC20ApprovalButton.disabled = false;
+      ppomSendMaliciousSetApprovalForAllButton.disabled = false;
+      ppomSendMaliciousContractInteractionButton.disabled = false;
+      ppomSendThreeMaliciousTxsButton.disabled = false;
+    }
+  });
+
+  document.addEventListener('disableAndClear', function () {
+    ppomSendMaliciousEthButton.disabled = true;
+    ppomSendMaliciousERC20TransferButton.disabled = true;
+    ppomSendMaliciousERC20ApprovalButton.disabled = true;
+    ppomSendMaliciousSetApprovalForAllButton.disabled = true;
+    ppomSendMaliciousContractInteractionButton.disabled = true;
+    ppomSendThreeMaliciousTxsButton.disabled = true;
+  });
+
+  async function sendMaliciousCalls(type) {
+    const maliciousTransactions = getMaliciousTransactions(globalContext);
+    const calls = [];
+
+    switch (type) {
+      case 'eth':
+        calls.push(maliciousTransactions.eth);
+        break;
+      case 'erc20Transfer':
+        calls.push(maliciousTransactions.erc20Transfer);
+        break;
+      case 'erc20Approval':
+        calls.push(maliciousTransactions.erc20Approval);
+        break;
+      case 'maliciousContractInteraction':
+        calls.push(maliciousTransactions.maliciousContractInteraction);
+        break;
+      case 'setApprovalForAll':
+        calls.push(maliciousTransactions.setApprovalForAll);
+        break;
+      default:
+        // Do nothing
+        break;
+    }
+
+    calls.push(...DEFAULT_CALLS);
+
+    try {
+      const result = await globalContext.provider.request({
+        method: 'wallet_sendCalls',
+        params: [getParams(calls)],
+      });
+      document.getElementById('ppomRequestIdInput').value = result.id;
+      document.getElementById('ppomRequestIdContainer').hidden = false;
+      document.getElementById('ppomGetCallsStatusButton').disabled = false;
+      document.getElementById('ppomSendCallsErrorContainer').hidden = true;
+    } catch (error) {
+      console.error(error);
+      document.getElementById('ppomSendCallsErrorContainer').hidden = false;
+      document.getElementById(
+        'ppomSendCallsError',
+      ).innerHTML = `Error: ${error.message}`;
+    }
+  }
+
+  async function sendThreeMaliciousCalls() {
+    const maliciousTransactions = getMaliciousTransactions(globalContext);
+
+    const calls = [
+      maliciousTransactions.erc20Approval,
+      maliciousTransactions.setApprovalForAll,
+      maliciousTransactions.maliciousContractInteraction,
+    ];
+
+    try {
+      const result = await globalContext.provider.request({
+        method: 'wallet_sendCalls',
+        params: [getParams(calls)],
+      });
+      document.getElementById('ppomRequestIdInput').value = result.id;
+      document.getElementById('ppomRequestIdContainer').hidden = false;
+      document.getElementById('ppomGetCallsStatusButton').disabled = false;
+      document.getElementById('ppomSendCallsErrorContainer').hidden = true;
+    } catch (error) {
+      console.error(error);
+      document.getElementById('ppomSendCallsErrorContainer').hidden = false;
+      document.getElementById(
+        'ppomSendCallsError',
+      ).innerHTML = `Error: ${error.message}`;
+    }
+  }
+
+  // Get Calls Status functionality
+  document.getElementById('ppomGetCallsStatusButton').onclick = async () => {
+    const requestId = document.getElementById('ppomRequestIdInput').value;
+    const resultOutput = document.getElementById('ppomGetCallsStatusResult');
+
+    try {
+      const result = await globalContext.provider.request({
+        method: 'wallet_getCallsStatus',
+        params: [requestId],
+      });
+
+      resultOutput.innerHTML = JSON.stringify(result, null, 2);
+      document.getElementById('ppomGetCallsStatusButton').disabled = false;
+    } catch (error) {
+      console.error(error);
+      resultOutput.innerHTML = `Error: ${error.message}`;
+    }
+  };
+
+  function getParams(calls) {
+    return {
+      version: VERSION,
+      from: globalContext.accounts[0],
+      chainId: `0x${globalContext.chainIdInt.toString(16)}`,
+      atomicRequired: true,
+      calls,
+    };
+  }
+}
diff --git a/src/components/ppom/index.js b/src/components/ppom/index.js
index e47c77b8..335180e0 100644
--- a/src/components/ppom/index.js
+++ b/src/components/ppom/index.js
@@ -1,3 +1,4 @@
-export * from './transactions';
 export * from './batching';
 export * from './bypasses';
+export * from './eip5792';
+export * from './transactions';
diff --git a/src/components/ppom/sharedConstants.js b/src/components/ppom/sharedConstants.js
new file mode 100644
index 00000000..7969163f
--- /dev/null
+++ b/src/components/ppom/sharedConstants.js
@@ -0,0 +1,51 @@
+import { maliciousAddress } from '../../sample-addresses';
+import {
+  ERC20_SAMPLE_CONTRACTS,
+  ERC721_SAMPLE_CONTRACTS,
+  MALICIOUS_CONTRACT_ADDRESSES,
+  NETWORKS_BY_CHAIN_ID,
+} from '../../onchain-sample-contracts';
+
+const maliciousTransactionsCache = {};
+
+export const getMaliciousTransactions = (globalContext) => {
+  const chainId = globalContext.chainIdInt;
+  const networkName = NETWORKS_BY_CHAIN_ID[chainId] || 'default';
+
+  // to avoid recalculating the tx object everytime if the chainId hasn't changed
+  if (maliciousTransactionsCache[chainId]) {
+    return maliciousTransactionsCache[chainId];
+  }
+
+  const transactions = {
+    eth: {
+      to: maliciousAddress,
+      value: '0x9184e72a000',
+    },
+    erc20Transfer: {
+      to: ERC20_SAMPLE_CONTRACTS[networkName],
+      data: '0xa9059cbb0000000000000000000000005fbdb2315678afecb367f032d93f642f64180aa30000000000000000000000000000000000000000000000000000000000000064',
+      value: '0x0',
+    },
+    erc20Approval: {
+      to: ERC20_SAMPLE_CONTRACTS[networkName],
+      data: '0x095ea7b3000000000000000000000000e50a2dbc466d01a34c3e8b7e8e45fce4f7da39e6000000000000000000000000000000000000000000000000ffffffffffffffff',
+      value: '0x0',
+    },
+    setApprovalForAll: {
+      to: ERC721_SAMPLE_CONTRACTS[networkName],
+      data: '0xa22cb465000000000000000000000000b85492afc686d5ca405e3cd4f50b05d358c75ede0000000000000000000000000000000000000000000000000000000000000001',
+      value: '0x0',
+    },
+    maliciousContractInteraction: {
+      to:
+        MALICIOUS_CONTRACT_ADDRESSES[networkName] ||
+        MALICIOUS_CONTRACT_ADDRESSES.default,
+      data: '0xef5cfb8c0000000000000000000000000b3e87a076ac4b0d1975f0f232444af6deb96c59',
+      value: '0x0',
+    },
+  };
+
+  maliciousTransactionsCache[chainId] = transactions;
+  return transactions;
+};
diff --git a/src/components/ppom/transactions.js b/src/components/ppom/transactions.js
index 5f35441c..927c79d1 100644
--- a/src/components/ppom/transactions.js
+++ b/src/components/ppom/transactions.js
@@ -1,11 +1,7 @@
 import globalContext from '../..';
 import { maliciousAddress } from '../../sample-addresses';
-import {
-  ERC20_SAMPLE_CONTRACTS,
-  ERC721_SAMPLE_CONTRACTS,
-  MALICIOUS_CONTRACT_ADDRESSES,
-} from '../../onchain-sample-contracts';
-import { isBaseNetworkId, isSepoliaNetworkId } from '../../utils';
+import { isSepoliaNetworkId } from '../../utils';
+import { getMaliciousTransactions } from './sharedConstants';
 
 export function ppomMaliciousTransactionsAndSignatures(parentContainer) {
   parentContainer.insertAdjacentHTML(
@@ -51,17 +47,17 @@ export function ppomMaliciousTransactionsAndSignatures(parentContainer) {
           </button>
           <button
             class="btn btn-primary btn-lg btn-block mb-3"
-            id="maliciousContractInteractionButton"
+            id="maliciousSetApprovalForAll"
             disabled
           >
-              Malicious Contract Interaction
+            Malicious Set Approval For All
           </button>
           <button
             class="btn btn-primary btn-lg btn-block mb-3"
-            id="maliciousSetApprovalForAll"
+            id="maliciousContractInteractionButton"
             disabled
           >
-            Malicious Set Approval For All
+            Malicious Contract Interaction
           </button>
           <h5>Signatures</h5>
           <button
@@ -139,20 +135,17 @@ export function ppomMaliciousTransactionsAndSignatures(parentContainer) {
 
   document.addEventListener('newNetwork', function (e) {
     mintSepoliaERC20.hidden = !isSepoliaNetworkId(e.detail.networkId);
-    maliciousContractInteractionButton.hidden =
-      isBaseNetworkId(e.detail.networkId) ||
-      isSepoliaNetworkId(e.detail.networkId);
   });
 
   // Malicious raw ETH transfer
   maliciousRawEthButton.onclick = async () => {
+    const { eth } = getMaliciousTransactions(globalContext);
     const result = await globalContext.provider.request({
       method: 'eth_sendTransaction',
       params: [
         {
           from: globalContext.accounts[0],
-          to: `${maliciousAddress}`,
-          value: '0x9184e72a000',
+          ...eth,
         },
       ],
     });
@@ -183,21 +176,13 @@ export function ppomMaliciousTransactionsAndSignatures(parentContainer) {
 
   // Malicious ERC20 transfer
   maliciousERC20TransferButton.onclick = async () => {
-    let erc20Contract;
-
-    if (globalContext.networkName) {
-      erc20Contract = ERC20_SAMPLE_CONTRACTS[globalContext.networkName];
-    } else {
-      erc20Contract = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48';
-    }
-
+    const { erc20Transfer } = getMaliciousTransactions(globalContext);
     const result = await globalContext.provider.request({
       method: 'eth_sendTransaction',
       params: [
         {
           from: globalContext.accounts[0],
-          to: erc20Contract,
-          data: '0xa9059cbb0000000000000000000000005fbdb2315678afecb367f032d93f642f64180aa30000000000000000000000000000000000000000000000000000000000000064',
+          ...erc20Transfer,
         },
       ],
     });
@@ -206,20 +191,13 @@ export function ppomMaliciousTransactionsAndSignatures(parentContainer) {
 
   // Malicious ERC20 Approval
   maliciousApprovalButton.onclick = async () => {
-    let erc20Contract;
-
-    if (globalContext.networkName) {
-      erc20Contract = ERC20_SAMPLE_CONTRACTS[globalContext.networkName];
-    } else {
-      erc20Contract = '0x4fabb145d64652a948d72533023f6e7a623c7c53';
-    }
+    const { erc20Approval } = getMaliciousTransactions(globalContext);
     const result = await globalContext.provider.request({
       method: 'eth_sendTransaction',
       params: [
         {
           from: globalContext.accounts[0],
-          to: erc20Contract,
-          data: '0x095ea7b3000000000000000000000000e50a2dbc466d01a34c3e8b7e8e45fce4f7da39e6000000000000000000000000000000000000000000000000ffffffffffffffff',
+          ...erc20Approval,
         },
       ],
     });
@@ -228,18 +206,15 @@ export function ppomMaliciousTransactionsAndSignatures(parentContainer) {
 
   // Malicious Contract interaction
   maliciousContractInteractionButton.onclick = async () => {
-    const contractAddress =
-      MALICIOUS_CONTRACT_ADDRESSES[globalContext.networkName] ||
-      MALICIOUS_CONTRACT_ADDRESSES.default;
+    const { maliciousContractInteraction } =
+      getMaliciousTransactions(globalContext);
 
     const result = await globalContext.provider.request({
       method: 'eth_sendTransaction',
       params: [
         {
           from: globalContext.accounts[0],
-          to: contractAddress,
-          data: '0xef5cfb8c0000000000000000000000000b3e87a076ac4b0d1975f0f232444af6deb96c59',
-          value: '0x0',
+          ...maliciousContractInteraction,
         },
       ],
     });
@@ -248,21 +223,14 @@ export function ppomMaliciousTransactionsAndSignatures(parentContainer) {
 
   // Malicious Set Approval For All
   maliciousSetApprovalForAll.onclick = async () => {
-    let erc721Contract;
-
-    if (globalContext.networkName) {
-      erc721Contract = ERC721_SAMPLE_CONTRACTS[globalContext.networkName];
-    } else {
-      erc721Contract = '0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d';
-    }
+    const { setApprovalForAll } = getMaliciousTransactions(globalContext);
 
     const result = await globalContext.provider.request({
       method: 'eth_sendTransaction',
       params: [
         {
           from: globalContext.accounts[0],
-          to: erc721Contract,
-          data: '0xa22cb465000000000000000000000000b85492afc686d5ca405e3cd4f50b05d358c75ede0000000000000000000000000000000000000000000000000000000000000001',
+          ...setApprovalForAll,
         },
       ],
     });
diff --git a/src/components/transactions/eip5792/sendCalls.js b/src/components/transactions/eip5792/sendCalls.js
index 07218579..2f5923d6 100644
--- a/src/components/transactions/eip5792/sendCalls.js
+++ b/src/components/transactions/eip5792/sendCalls.js
@@ -1,8 +1,8 @@
 import globalContext from '../../..';
 
-const VERSION = '2.0.0';
+export const VERSION = '2.0.0';
 
-const DEFAULT_CALLS = [
+export const DEFAULT_CALLS = [
   {
     to: '0x0c54FcCd2e384b4BB6f2E405Bf5Cbc15a017AaFb',
     data: '0x654365436543',
diff --git a/src/index.js b/src/index.js
index f2aa6651..1d6629cd 100644
--- a/src/index.js
+++ b/src/index.js
@@ -20,6 +20,7 @@ import {
   erc721Component,
 } from './components/transactions';
 import {
+  ppomMaliciousSendCalls,
   ppomMaliciousTransactionsAndSignatures,
   ppomMaliciousBatchingAndQueueing,
   ppomMaliciousWarningBypasses,
@@ -184,6 +185,7 @@ const ppomRow = document.createElement('div');
 ppomRow.className = 'row';
 ppomSection.appendChild(ppomRow);
 ppomMaliciousTransactionsAndSignatures(ppomRow);
+ppomMaliciousSendCalls(ppomRow);
 ppomMaliciousBatchingAndQueueing(ppomRow);
 ppomMaliciousWarningBypasses(ppomRow);
 
diff --git a/src/onchain-sample-contracts.js b/src/onchain-sample-contracts.js
index e8a80750..da0b1428 100644
--- a/src/onchain-sample-contracts.js
+++ b/src/onchain-sample-contracts.js
@@ -1,35 +1,38 @@
 // Contracts for Malicious Transactions in different chains
 export const NETWORKS_BY_CHAIN_ID = {
-  137: 'polygon',
+  1: 'mainnet',
   10: 'optimism',
   56: 'bsc',
-  43114: 'avalanche',
+  137: 'polygon',
+  204: 'opBnb',
   42161: 'arbitrum',
-  11155111: 'sepolia',
+  43114: 'avalanche',
   8453: 'base',
-  204: 'opBnb',
+  11155111: 'sepolia',
 };
 
 export const ERC20_SAMPLE_CONTRACTS = {
-  polygon: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174',
-  optimism: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',
-  bsc: '0x8965349fb649A33a30cbFDa057D8eC2C48AbE2A2',
-  avalanche: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E',
   arbitrum: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
-  sepolia: '0x27A56df30bC838BCA36141E517e7b5376dea68eE',
+  avalanche: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E',
   base: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
+  bsc: '0x8965349fb649A33a30cbFDa057D8eC2C48AbE2A2',
+  mainnet: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
   opBnb: '0x9e5aac1ba1a2e6aed6b32689dfcf62a509ca96f3',
+  optimism: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',
+  polygon: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174',
+  sepolia: '0x27A56df30bC838BCA36141E517e7b5376dea68eE',
 };
 
 export const ERC721_SAMPLE_CONTRACTS = {
-  polygon: '0x9e8ea82e76262e957d4cc24e04857a34b0d8f062',
-  optimism: '0xaf18644083151cf57f914cccc23c42a1892c218e',
-  bsc: '0xebfbfd7c41b123500fb16b71c43b400c12b08be0',
-  avalanche: '0x880f7e04D722e305126F7E1efd3434A7d5b1465c',
   arbitrum: '0x8659a4876369b94515a86048fe7f99daba6b9a7d',
-  sepolia: '0xbba60aa8144579e07c6db64121b0f608ab6f0c89',
+  avalanche: '0x880f7e04D722e305126F7E1efd3434A7d5b1465c',
   base: '0x90997fc967e75b7e69f899133aab31d197beb802',
+  bsc: '0xebfbfd7c41b123500fb16b71c43b400c12b08be0',
+  mainnet: '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D',
   opBnb: '0x61d7e121185b1d7902a3da7f3c8ac9faaee8863b',
+  optimism: '0xaf18644083151cf57f914cccc23c42a1892c218e',
+  polygon: '0x9e8ea82e76262e957d4cc24e04857a34b0d8f062',
+  sepolia: '0xbba60aa8144579e07c6db64121b0f608ab6f0c89',
 };
 
 export const MALICIOUS_CONTRACT_ADDRESSES = {
