From 04356a38bcb31f713c65b6792bc1c047542bf6a9 Mon Sep 17 00:00:00 2001 From: ankitkr104 Date: Thu, 13 Aug 2026 16:01:12 +0530 Subject: [PATCH] Fix Polygon Amoy RPC, Gas Estimation, and ABI Integration --- .../[id]/DeploymentDetailClient.tsx | 33 +++++++++++++++---- config/wagmi.ts | 11 ++++++- lib/abi/Tectonic.ts | 14 +++++--- lib/deployments-data.ts | 2 +- 4 files changed, 47 insertions(+), 13 deletions(-) diff --git a/app/deployments/[id]/DeploymentDetailClient.tsx b/app/deployments/[id]/DeploymentDetailClient.tsx index 0393a13..1fadad5 100644 --- a/app/deployments/[id]/DeploymentDetailClient.tsx +++ b/app/deployments/[id]/DeploymentDetailClient.tsx @@ -9,12 +9,13 @@ import { statusCfg, pct } from "@/lib/deployments-ui"; import { DEPLOYMENTS } from "@/lib/deployments-data"; import type { Deployment } from "@/lib/deployments-data"; import { useTranslations } from "@/lib/i18n"; -import { parseEther, formatEther } from "viem"; +import { parseEther, formatEther, parseGwei } from "viem"; import { useReadContract, useWriteContract, useWaitForTransactionReceipt, useChainId, + useAccount, } from "wagmi"; import { tectonicAbi } from "@/lib/abi/Tectonic"; @@ -22,7 +23,7 @@ import { tectonicAbi } from "@/lib/abi/Tectonic"; const CONTRACT_ADDRESSES: Record = { 31337: "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512", // Anvil 11155111: "0x016eed9c27848d9ba152fe2d45dd2949f3f4780d", // Sepolia - 80002: "0x016eed9c27848d9ba152fe2d45dd2949f3f4780d", // Amoy (Placeholder) + 80002: "0xfD14ac4867954173552dFB72be1321Ce1AC35834", // Amoy 61: "0x016eed9c27848d9ba152fe2d45dd2949f3f4780d", // Ethereum Classic (Placeholder) 8453: "0x016eed9c27848d9ba152fe2d45dd2949f3f4780d", // Base Mainnet (Placeholder) }; @@ -88,41 +89,54 @@ function MintRedeemForm({ estimateNum = estimateNum * (1 - feePct); // Wagmi hooks - const { data: hash, writeContract, isPending } = useWriteContract(); - const { isLoading: isConfirming, isSuccess } = useWaitForTransactionReceipt({ hash }); + const { address: userAddress } = useAccount(); + const { data: hash, writeContract, isPending, error: writeError } = useWriteContract(); + const { isLoading: isConfirming, isSuccess, error: receiptError } = useWaitForTransactionReceipt({ hash }); + const currentChainId = useChainId(); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); - if (!amount || isNaN(valNum) || valNum <= 0 || !contractAddress) return; + if (!amount || isNaN(valNum) || valNum <= 0 || !contractAddress || !userAddress) return; const weiAmount = parseEther(amount); + const txOptions = currentChainId === 80002 ? { + maxPriorityFeePerGas: parseGwei("30"), + maxFeePerGas: parseGwei("30") + } : {}; + if (isMint && !isEquity) { writeContract({ address: contractAddress, abi: tectonicAbi, functionName: "mint", + args: [userAddress], value: weiAmount, + ...txOptions }); } else if (isMint && isEquity) { writeContract({ address: contractAddress, abi: tectonicAbi, functionName: "mintEquityCoins", + args: [userAddress], value: weiAmount, + ...txOptions }); } else if (!isMint && !isEquity) { writeContract({ address: contractAddress, abi: tectonicAbi, functionName: "redeem", - args: [weiAmount], + args: [weiAmount, userAddress], + ...txOptions }); } else if (!isMint && isEquity) { writeContract({ address: contractAddress, abi: tectonicAbi, functionName: "redeemEquityCoins", - args: [weiAmount], + args: [weiAmount, userAddress], + ...txOptions }); } }; @@ -201,6 +215,11 @@ function MintRedeemForm({ {t("transactionConfirmed", { defaultValue: "Transaction confirmed!" })} )} + {(writeError || receiptError) && ( +
+ {writeError?.message || receiptError?.message} +
+ )} ); } diff --git a/config/wagmi.ts b/config/wagmi.ts index 45de0dc..c09a06c 100644 --- a/config/wagmi.ts +++ b/config/wagmi.ts @@ -1,9 +1,18 @@ import { getDefaultConfig } from '@rainbow-me/rainbowkit'; import { classic, sepolia, hardhat, polygonAmoy, base } from 'wagmi/chains'; +import { http } from 'wagmi'; + export const config = getDefaultConfig({ appName: 'Tectonic-EVM-WebUI', - projectId: process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID || 'c4a4f8d9b1dbbb3d5006b9ef2db5c4a7', // Fallback to public demo ID without localhost restrictions + projectId: process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID || 'b56e18d47c72ab683b10814fe9495694', // Fallback to public demo ID without localhost restrictions chains: [classic, base, sepolia, polygonAmoy, hardhat], + transports: { + [classic.id]: http(), + [base.id]: http(), + [sepolia.id]: http(), + [polygonAmoy.id]: http('https://polygon-amoy.drpc.org'), + [hardhat.id]: http('http://127.0.0.1:8545'), + }, ssr: true, }); diff --git a/lib/abi/Tectonic.ts b/lib/abi/Tectonic.ts index ad078ef..4ce1d20 100644 --- a/lib/abi/Tectonic.ts +++ b/lib/abi/Tectonic.ts @@ -38,28 +38,34 @@ export const tectonicAbi = [ // WRITES { - inputs: [], + inputs: [{ internalType: "address", name: "receiver", type: "address" }], name: "mint", outputs: [], stateMutability: "payable", type: "function", }, { - inputs: [], + inputs: [{ internalType: "address", name: "receiver", type: "address" }], name: "mintEquityCoins", outputs: [], stateMutability: "payable", type: "function", }, { - inputs: [{ internalType: "uint256", name: "amount", type: "uint256" }], + inputs: [ + { internalType: "uint256", name: "amount", type: "uint256" }, + { internalType: "address", name: "receiver", type: "address" } + ], name: "redeem", outputs: [], stateMutability: "nonpayable", type: "function", }, { - inputs: [{ internalType: "uint256", name: "amount", type: "uint256" }], + inputs: [ + { internalType: "uint256", name: "amount", type: "uint256" }, + { internalType: "address", name: "receiver", type: "address" } + ], name: "redeemEquityCoins", outputs: [], stateMutability: "nonpayable", diff --git a/lib/deployments-data.ts b/lib/deployments-data.ts index b547caa..d3658dc 100644 --- a/lib/deployments-data.ts +++ b/lib/deployments-data.ts @@ -30,7 +30,7 @@ export interface Deployment { export const DEPLOYMENTS: Deployment[] = [ { id:"tusd-local", name:"TUSD on Local (Anvil)", chain:"Hardhat", chainShort:"LOCAL",chainColor:"#f3f3f3", chainTextColor:"text-[#1a1a1a]", chainId:31337, isPlaceholder:false, stablecoin:"TUSD", equityCoin:"TEQT", reserveRatio:325, totalReserve:"$14.82M", stableSupply:"1.2M", equitySupply:"45K", equityLeverage:"3.25×", equityYield:6.2, tvl:"$4.56M", status:"healthy", reserveAsset:"ETH", pegAsset:"USD" }, { id:"tusd-sepolia",name:"TUSD on Sepolia", chain:"Sepolia", chainShort:"SEP", chainColor:"#cfb53b", chainTextColor:"text-white", chainId:11155111, isPlaceholder:false, stablecoin:"TUSD", equityCoin:"TEQT", reserveRatio:410, totalReserve:"$13.28M", stableSupply:"850K", equitySupply:"22K", equityLeverage:"4.1×", equityYield:5.8, tvl:"$3.24M", status:"healthy", reserveAsset:"ETH", pegAsset:"USD" }, - { id:"usdp-amoy", name:"USDP on Polygon Amoy", chain:"Polygon", chainShort:"AMOY", chainColor:"#8247e5", chainTextColor:"text-white", chainId:80002, isPlaceholder:true, stablecoin:"USDP", equityCoin:"PEQT", reserveRatio:155, totalReserve:"$3.19M", stableSupply:"2.1M", equitySupply:"18K", equityLeverage:"1.55×", equityYield:4.1, tvl:"$2.06M", status:"warning", reserveAsset:"MATIC",pegAsset:"USD" }, + { id:"usdp-amoy", name:"USDP on Polygon Amoy", chain:"Polygon", chainShort:"AMOY", chainColor:"#8247e5", chainTextColor:"text-white", chainId:80002, isPlaceholder:false, stablecoin:"USDP", equityCoin:"PEQT", reserveRatio:155, totalReserve:"$3.19M", stableSupply:"2.1M", equitySupply:"18K", equityLeverage:"1.55×", equityYield:4.1, tvl:"$2.06M", status:"warning", reserveAsset:"MATIC",pegAsset:"USD" }, { id:"tusd-classic",name:"TUSD on Ethereum Classic", chain:"Classic", chainShort:"ETC", chainColor:"#34fa99", chainTextColor:"text-[#1a1a1a]", chainId:61, isPlaceholder:true, stablecoin:"TUSD", equityCoin:"TEQT", reserveRatio:280, totalReserve:"$5.12M", stableSupply:"600K", equitySupply:"15K", equityLeverage:"2.8×", equityYield:7.4, tvl:"$2.15M", status:"healthy", reserveAsset:"ETC", pegAsset:"USD" }, { id:"tusd-base", name:"TUSD on Base", chain:"Base", chainShort:"BASE", chainColor:"#0052ff", chainTextColor:"text-white", chainId:8453, isPlaceholder:true, stablecoin:"TUSD", equityCoin:"TEQT", reserveRatio:315, totalReserve:"$8.45M", stableSupply:"2.6M", equitySupply:"85K", equityLeverage:"3.15×", equityYield:5.2, tvl:"$6.21M", status:"healthy", reserveAsset:"ETH", pegAsset:"USD" }, ];