From 45e535f67a90474d1d21b1e0d4cd0e02969bcee0 Mon Sep 17 00:00:00 2001 From: Karandeep Singh Date: Thu, 20 Mar 2025 17:00:52 +0530 Subject: [PATCH 1/5] added ETH config and asset metadata --- .../gift-donut-modal-views/CheckoutView.tsx | 2 +- .../gift-donut-modal-views/PayWithView.tsx | 2 +- .../chain-abstraction-demo/data/EIP155Data.ts | 24 +++++++++++++++--- .../public/token-images/ETH.png | Bin 0 -> 4886 bytes 4 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 advanced/dapps/chain-abstraction-demo/public/token-images/ETH.png diff --git a/advanced/dapps/chain-abstraction-demo/components/gift-donut-modal-views/CheckoutView.tsx b/advanced/dapps/chain-abstraction-demo/components/gift-donut-modal-views/CheckoutView.tsx index 6c715bf3f..4cd95eca7 100644 --- a/advanced/dapps/chain-abstraction-demo/components/gift-donut-modal-views/CheckoutView.tsx +++ b/advanced/dapps/chain-abstraction-demo/components/gift-donut-modal-views/CheckoutView.tsx @@ -238,7 +238,7 @@ function GiftDonutForm({ type="button" variant="secondary" className="flex flex-1 gap-1" - disabled={!giftDonutModalManager.isTokenNetworkCompatible()} + disabled={!giftDonutModalManager.isTokenNetworkCompatible() || count === 0} >

setSelectedToken(tokenItem)} /> {availableTokens.length - 1 !== index && } diff --git a/advanced/dapps/chain-abstraction-demo/data/EIP155Data.ts b/advanced/dapps/chain-abstraction-demo/data/EIP155Data.ts index f2aa430f8..697cf1569 100644 --- a/advanced/dapps/chain-abstraction-demo/data/EIP155Data.ts +++ b/advanced/dapps/chain-abstraction-demo/data/EIP155Data.ts @@ -13,10 +13,12 @@ export interface Network { } export interface Token { + id: string; // Unique identifier for the token + type: "erc20" | "native" // caip-19 asset namespace name: string; icon: string; - address: string; supportedChainIds: number[]; + decimals: number; } export const supportedNetworks: Network[] = [ @@ -42,23 +44,37 @@ export const supportedNetworks: Network[] = [ export const supportedTokens: Token[] = [ { + id: "USDC", + type: "erc20", name: "USDC", icon: "/token-images/USDC.png", - address: "0x1", supportedChainIds: [arbitrum.id, base.id, optimism.id], + decimals: 6, }, { + id: "USDT", + type: "erc20", name: "USDT", icon: "/token-images/USDT.png", - address: "0x2", supportedChainIds: [arbitrum.id, optimism.id], + decimals: 6, }, { + id: "USDS", + type: "erc20", name: "USDS", icon: "/token-images/USDS(DAI).png", - address: "0x3", supportedChainIds: [base.id], + decimals: 18, }, + { + id: "ETH", + type: "native", + name: "ETH", + icon: "/token-images/ETH.png", + supportedChainIds: [arbitrum.id, base.id, optimism.id], + decimals: 18, + } ]; export function isTokenSupportedOnNetwork( diff --git a/advanced/dapps/chain-abstraction-demo/public/token-images/ETH.png b/advanced/dapps/chain-abstraction-demo/public/token-images/ETH.png new file mode 100644 index 0000000000000000000000000000000000000000..db601549733159b8ecc75e73ba0ee7cf46fe669b GIT binary patch literal 4886 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 literal 0 HcmV?d00001 From b3244f7091a2a90c3e5f8b4f8614171156cdb52e Mon Sep 17 00:00:00 2001 From: Karandeep Singh Date: Thu, 20 Mar 2025 17:03:21 +0530 Subject: [PATCH 2/5] refactor and update useGiftDonut hook --- .../app/hooks/useGiftDonut.tsx | 47 ++++++--- .../controllers/GiftDonutModalManager.ts | 8 ++ .../utils/BalanceFetcherUtil.ts | 98 +++++++++---------- 3 files changed, 90 insertions(+), 63 deletions(-) diff --git a/advanced/dapps/chain-abstraction-demo/app/hooks/useGiftDonut.tsx b/advanced/dapps/chain-abstraction-demo/app/hooks/useGiftDonut.tsx index 840a17d1a..22b696774 100644 --- a/advanced/dapps/chain-abstraction-demo/app/hooks/useGiftDonut.tsx +++ b/advanced/dapps/chain-abstraction-demo/app/hooks/useGiftDonut.tsx @@ -2,13 +2,15 @@ import { config } from "@/config"; import { tokenAddresses } from "@/consts/tokens"; import { Network, Token } from "@/data/EIP155Data"; import { toast } from "sonner"; -import { erc20Abi, Hex, PublicClient } from "viem"; +import { erc20Abi, Hex, parseEther, PublicClient } from "viem"; import { getAccount, getWalletClient, getPublicClient } from "wagmi/actions"; import { useState } from "react"; import { TransactionToast } from "@/components/TransactionToast"; type TransactionStatus = "waiting-approval" | "pending" | "success" | "error"; +const ETH_USD_RATE = 0.0005; // 1 USD = 0.0005 ETH + export default function useGiftDonut() { const [isPending, setIsPending] = useState(false); @@ -36,7 +38,7 @@ export default function useGiftDonut() { ); }; - const validateTransaction = async (network: Network) => { + const getClients = async (network: Network) => { const client = await getWalletClient(config, { chainId: network.chainId }); const publicClient = getPublicClient(config); if (!publicClient) throw new Error("Failed to get public client"); @@ -64,6 +66,12 @@ export default function useGiftDonut() { return contract; }; + const convertDonutCountToEth = (donutCount: number) => { + // consider 1 donut = 1 USD, 1 USD = 0.0005 ETH + return donutCount * ETH_USD_RATE; + } + + const giftDonutAsync = async ( to: Hex, donutCount: number, @@ -77,13 +85,9 @@ export default function useGiftDonut() { try { // Validate chain and get clients - const { client, publicClient } = await validateTransaction(network); + const { client, publicClient } = await getClients(network); const chainId = getAccount(config).chain?.id!; - // Get token contract - const contract = getTokenContract(token, chainId); - const tokenAmount = donutCount * 1 * 10 ** 6; - // Start tracking elapsed time updateInterval = setInterval(() => { updateToast(toastId, "waiting-approval", { @@ -91,13 +95,28 @@ export default function useGiftDonut() { }); }, 1000); - // Send transaction - const tx = await client.writeContract({ - abi: erc20Abi, - address: contract, - functionName: "transfer", - args: [to, BigInt(tokenAmount)], - }); + + let tx: Hex; + if (token.name === "ETH") { + // Calculate ETH amount using the conversion rate + const ethAmount = convertDonutCountToEth(donutCount); + tx = await client.sendTransaction({ + to, + value: parseEther(ethAmount.toString()), + chainId, + }); + } else { + // Get token contract + const contract = getTokenContract(token, chainId); + const tokenAmount = donutCount * 10 ** token.decimals; + // Send transaction + tx = await client.writeContract({ + abi: erc20Abi, + address: contract, + functionName: "transfer", + args: [to, BigInt(tokenAmount)], + }); + } // Update to pending status updateToast(toastId, "pending", { hash: tx, networkName: network.name }); diff --git a/advanced/dapps/chain-abstraction-demo/controllers/GiftDonutModalManager.ts b/advanced/dapps/chain-abstraction-demo/controllers/GiftDonutModalManager.ts index 77bb13752..ff70032a4 100644 --- a/advanced/dapps/chain-abstraction-demo/controllers/GiftDonutModalManager.ts +++ b/advanced/dapps/chain-abstraction-demo/controllers/GiftDonutModalManager.ts @@ -168,6 +168,14 @@ class GiftDonutModalManager { } getBalanceBySymbol(symbol: string): string { + if(symbol === "ETH") { + const ethBalance = this.state.state.balances.find((b) => b.symbol === "ETH")?.balance || "0.00"; + // Convert ETH balance to USD equivalent (0.0005 ETH = 1 USD) + const usdEquivalent = parseFloat(ethBalance) / 0.0005; + + return usdEquivalent.toFixed(2); + } + const balance = this.state.state.balances.find((b) => b.symbol === symbol); return balance?.balance || "0.00"; } diff --git a/advanced/dapps/chain-abstraction-demo/utils/BalanceFetcherUtil.ts b/advanced/dapps/chain-abstraction-demo/utils/BalanceFetcherUtil.ts index 731e6cd0f..7ef2513fe 100644 --- a/advanced/dapps/chain-abstraction-demo/utils/BalanceFetcherUtil.ts +++ b/advanced/dapps/chain-abstraction-demo/utils/BalanceFetcherUtil.ts @@ -1,4 +1,5 @@ -import { usdcTokenAddresses, usdtTokenAddresses } from "@/consts/tokens"; +import { supportedTokens } from "@/data/EIP155Data"; +import { tokenAddresses } from "@/consts/tokens"; import { createPublicClient, erc20Abi, Hex, http, PublicClient } from "viem"; import { formatBalance } from "@/utils/FormatterUtil"; import { getChain } from "@/utils/NetworksUtil"; @@ -25,7 +26,11 @@ async function fetchTokenBalance({ }: { publicClient: PublicClient; userAddress: Hex; - tokenConfig: TokenConfig; + tokenConfig: { + symbol: string; + decimals: number; + address: Hex; + }; chainId: number; }): Promise { try { @@ -44,15 +49,16 @@ async function fetchTokenBalance({ }; } catch (error) { console.error(`Error fetching ${tokenConfig.symbol} balance:`, error); - return null; } } + function getTransport({ chainId }: { chainId: number }) { return http( `https://rpc.walletconnect.org/v1/?chainId=eip155:${chainId}&projectId=${process.env["NEXT_PUBLIC_PROJECT_ID"]}`, ); } + export async function fetchFallbackBalances( userAddress: Hex, currentChainIdAsHex: Hex, @@ -63,7 +69,6 @@ export async function fetchFallbackBalances( const chain = getChain(currentChainId); if (!chain) { console.error(`Chain not found for ID: ${currentChainId}`); - return []; } @@ -74,60 +79,56 @@ export async function fetchFallbackBalances( }) as PublicClient; const balances: TokenBalance[] = []; + const tokenBalancePromises: Promise[] = []; - // Fetch native token balance - try { - const nativeBalance = await publicClient.getBalance({ - address: userAddress, - }); - - balances.push({ - symbol: chain.nativeCurrency.symbol, - balance: formatBalance(nativeBalance, chain.nativeCurrency.decimals), - address: "0x" as Hex, - chainId: currentChainId, - }); - } catch (error) { - console.error(`Error fetching native balance:`, error); - } + // Filter tokens supported on the current chain + const tokensForChain = supportedTokens.filter(token => + token.supportedChainIds.includes(currentChainId) + ); - // Get supported tokens for current chain - const supportedTokens: TokenConfig[] = []; - - // Add USDC if supported - const usdcAddress = usdcTokenAddresses[currentChainId]; - if (usdcAddress) { - supportedTokens.push({ - symbol: "USDC", - decimals: 6, - address: usdcAddress, - }); + const nativeTokens = tokensForChain.filter(token => token.type === "native"); + for (const nativeToken of nativeTokens) { + try { + const nativeBalance = await publicClient.getBalance({ + address: userAddress, + }); + + balances.push({ + symbol: nativeToken.name, + balance: formatBalance(nativeBalance, nativeToken.decimals), + address: "0x" as Hex, + chainId: currentChainId, + }); + } catch (error) { + console.error(`Error fetching native ${nativeToken.name} balance:`, error); + } } - // Add USDT if supported - const usdtAddress = usdtTokenAddresses[currentChainId]; - if (usdtAddress) { - supportedTokens.push({ - symbol: "USDT", - decimals: 6, - address: usdtAddress, - }); - } + const erc20Tokens = tokensForChain.filter(token => token.type === "erc20"); + for (const erc20Token of erc20Tokens) { + const tokenAddressMap = tokenAddresses[erc20Token.id]; + if (!tokenAddressMap) continue; + + const tokenAddress = tokenAddressMap[currentChainId]; + if (!tokenAddress) continue; - // Fetch token balances - const tokenResults = await Promise.all( - supportedTokens.map((token) => + tokenBalancePromises.push( fetchTokenBalance({ publicClient, userAddress, - tokenConfig: token, + tokenConfig: { + symbol: erc20Token.name, + decimals: erc20Token.decimals, + address: tokenAddress, + }, chainId: currentChainId, - }), - ), - ); + }) + ); + } - // Add successful token balances - tokenResults.forEach((result) => { + const tokenResults = await Promise.all(tokenBalancePromises); + + tokenResults.forEach(result => { if (result) { balances.push(result); } @@ -136,7 +137,6 @@ export async function fetchFallbackBalances( return balances; } catch (error) { console.error("Error in fetchFallbackBalances:", error); - return []; } } From 066b8bc0ac3c8bafecfda64812c2b1d3e61a33f2 Mon Sep 17 00:00:00 2001 From: Karandeep Singh Date: Thu, 20 Mar 2025 17:25:58 +0530 Subject: [PATCH 3/5] highlighted the hardcorded conversion for ETH --- .../components/gift-donut-modal-views/PayWithView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced/dapps/chain-abstraction-demo/components/gift-donut-modal-views/PayWithView.tsx b/advanced/dapps/chain-abstraction-demo/components/gift-donut-modal-views/PayWithView.tsx index d435838c1..2bea7687f 100644 --- a/advanced/dapps/chain-abstraction-demo/components/gift-donut-modal-views/PayWithView.tsx +++ b/advanced/dapps/chain-abstraction-demo/components/gift-donut-modal-views/PayWithView.tsx @@ -122,7 +122,7 @@ function TokenItem({

- Balance: ${formattedBalance} + Balance: ${formattedBalance} { token.type === "native" && token.name === "ETH" &&'(0.0005 ETH = $1)'}
{selected && } From 16bf0d0bf3946aba7b32138cbc954af033176c02 Mon Sep 17 00:00:00 2001 From: Karandeep Singh Date: Thu, 20 Mar 2025 17:57:38 +0530 Subject: [PATCH 4/5] add ETH in tokenAddresses map --- advanced/dapps/chain-abstraction-demo/consts/tokens.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/advanced/dapps/chain-abstraction-demo/consts/tokens.ts b/advanced/dapps/chain-abstraction-demo/consts/tokens.ts index 4f827d18c..898a4cef2 100644 --- a/advanced/dapps/chain-abstraction-demo/consts/tokens.ts +++ b/advanced/dapps/chain-abstraction-demo/consts/tokens.ts @@ -17,10 +17,17 @@ export const usdsTokenAddresses: Record = { 8453: "0x820c137fa70c8691f0e44dc420a5e53c168921dc", // Base }; +export const ethTokenAddresses: Record = { + 42161: "0x0000000000000000000000000000000000000000", // Arbitrum + 10: "0x0000000000000000000000000000000000000000", // Optimism + 8453: "0x0000000000000000000000000000000000000000", // Base +}; + export const tokenAddresses: Record> = { USDC: usdcTokenAddresses, USDT: usdtTokenAddresses, USDS: usdsTokenAddresses, + ETH: ethTokenAddresses, }; export const getSupportedNetworks = (token: string): number[] => { From 5e86cf4c0e07661e98c8e9a6b0c4789aa1ef2e3d Mon Sep 17 00:00:00 2001 From: Karandeep Singh Date: Tue, 25 Mar 2025 10:20:25 +0530 Subject: [PATCH 5/5] chore: remove comment --- advanced/dapps/chain-abstraction-demo/data/EIP155Data.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced/dapps/chain-abstraction-demo/data/EIP155Data.ts b/advanced/dapps/chain-abstraction-demo/data/EIP155Data.ts index 697cf1569..ac2382359 100644 --- a/advanced/dapps/chain-abstraction-demo/data/EIP155Data.ts +++ b/advanced/dapps/chain-abstraction-demo/data/EIP155Data.ts @@ -14,7 +14,7 @@ export interface Network { export interface Token { id: string; // Unique identifier for the token - type: "erc20" | "native" // caip-19 asset namespace + type: "erc20" | "native" name: string; icon: string; supportedChainIds: number[];