From 95d0cb179bd6237fc7b8f8fd0fc2b39cd6aea403 Mon Sep 17 00:00:00 2001 From: HJ Chen <221941357+hjchen-circle@users.noreply.github.com> Date: Tue, 8 Sep 2026 13:12:57 +0000 Subject: [PATCH 1/2] chore: bug fixes and dependency updates --- app-kit-bridge-evm/package.json | 8 ++++---- app-kit-bridge-evm/src/main.ts | 10 ++++++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app-kit-bridge-evm/package.json b/app-kit-bridge-evm/package.json index c068cbe..b188e09 100644 --- a/app-kit-bridge-evm/package.json +++ b/app-kit-bridge-evm/package.json @@ -9,11 +9,11 @@ }, "devDependencies": { "typescript": "~7.0.2", - "vite": "^8.2.1" + "vite": "^8.2.2" }, "dependencies": { - "@circle-fin/app-kit": "^1.12.0", - "@circle-fin/adapter-viem-v2": "^1.15.1", - "viem": "^2.55.17" + "@circle-fin/app-kit": "^1.14.0", + "@circle-fin/adapter-viem-v2": "^1.17.1", + "viem": "^2.56.3" } } diff --git a/app-kit-bridge-evm/src/main.ts b/app-kit-bridge-evm/src/main.ts index d5b2fa8..12949a0 100644 --- a/app-kit-bridge-evm/src/main.ts +++ b/app-kit-bridge-evm/src/main.ts @@ -82,9 +82,13 @@ async function handleEvmConnect() { })) as string[]; walletInfo.textContent = accounts[0] ?? "Connected"; + output.textContent = ""; bridgeButton.disabled = !evmProvider; } catch (error) { - render({ error: error instanceof Error ? error.message : "Unknown error" }); + evmProvider = null; + render({ + error: (error as { message?: string })?.message ?? String(error), + }); } finally { connectEvmButton.disabled = Boolean(evmProvider); } @@ -118,7 +122,9 @@ async function handleBridge() { render(result); } catch (error) { - render({ error: error instanceof Error ? error.message : "Unknown error" }); + render({ + error: (error as { message?: string })?.message ?? String(error), + }); } finally { bridgeButton.disabled = false; } From bf4f5c2e2de9c4e6070fc7abf7ce80dd8ae266b1 Mon Sep 17 00:00:00 2001 From: HJ Chen <221941357+hjchen-circle@users.noreply.github.com> Date: Tue, 8 Sep 2026 13:13:18 +0000 Subject: [PATCH 2/2] chore: bug fixes and dependency updates --- README.md | 2 +- app-kit-bridge-solana/package.json | 10 ++--- app-kit-bridge-solana/src/main.ts | 16 ++++++-- app-kit-send/README.md | 11 ++---- app-kit-send/package.json | 8 ++-- app-kit-send/src/main.ts | 22 ++++++----- app-kit-swap/README.md | 54 +++++++++++++++------------ app-kit-swap/package.json | 8 ++-- app-kit-swap/src/main.ts | 22 ++++++----- app-kit-unified-balance/README.md | 16 ++++++-- app-kit-unified-balance/index.html | 2 +- app-kit-unified-balance/package.json | 10 ++--- app-kit-unified-balance/src/main.ts | 56 ++++++++++++++++++---------- 13 files changed, 140 insertions(+), 97 deletions(-) diff --git a/README.md b/README.md index 9b24b31..b98678e 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ Run with `npm install && npm run dev`. ### [`app-kit-unified-balance`](./app-kit-unified-balance) -Browser app that deposits USDC into a unified balance from Base Sepolia and +Browser app that deposits USDC into a unified balance from Avalanche Fuji and Solana Devnet, reads the balance, and spends it on Arc Testnet using [App Kit](https://www.npmjs.com/package/@circle-fin/app-kit) with the viem and Solana adapters. Connects an EVM wallet and a Solana wallet. diff --git a/app-kit-bridge-solana/package.json b/app-kit-bridge-solana/package.json index 617ae3c..3251015 100644 --- a/app-kit-bridge-solana/package.json +++ b/app-kit-bridge-solana/package.json @@ -9,12 +9,12 @@ }, "devDependencies": { "typescript": "~7.0.2", - "vite": "^8.2.1" + "vite": "^8.2.2" }, "dependencies": { - "@circle-fin/adapter-solana": "^1.6.5", - "@circle-fin/adapter-viem-v2": "^1.15.1", - "@circle-fin/app-kit": "^1.12.0", - "viem": "^2.55.17" + "@circle-fin/adapter-solana": "^1.7.2", + "@circle-fin/adapter-viem-v2": "^1.17.1", + "@circle-fin/app-kit": "^1.14.0", + "viem": "^2.56.3" } } diff --git a/app-kit-bridge-solana/src/main.ts b/app-kit-bridge-solana/src/main.ts index 95e755b..1883c9a 100644 --- a/app-kit-bridge-solana/src/main.ts +++ b/app-kit-bridge-solana/src/main.ts @@ -90,9 +90,13 @@ async function handleEvmConnect() { })) as string[]; walletInfo.textContent = accounts[0] ?? "Connected"; + output.textContent = ""; bridgeButton.disabled = !evmProvider || !solanaProvider; } catch (error) { - render({ error: error instanceof Error ? error.message : "Unknown error" }); + evmProvider = null; + render({ + error: (error as { message?: string })?.message ?? String(error), + }); } finally { connectEvmButton.disabled = Boolean(evmProvider); } @@ -113,9 +117,13 @@ async function handleSolanaConnect() { connection.publicKey?.toString() ?? solanaProvider.publicKey?.toString() ?? "Connected"; + output.textContent = ""; bridgeButton.disabled = !evmProvider || !solanaProvider; } catch (error) { - render({ error: error instanceof Error ? error.message : "Unknown error" }); + solanaProvider = null; + render({ + error: (error as { message?: string })?.message ?? String(error), + }); } finally { connectSolButton.disabled = Boolean(solanaProvider); } @@ -152,7 +160,9 @@ async function handleBridge() { render(result); } catch (error) { - render({ error: error instanceof Error ? error.message : "Unknown error" }); + render({ + error: (error as { message?: string })?.message ?? String(error), + }); } finally { bridgeButton.disabled = false; } diff --git a/app-kit-send/README.md b/app-kit-send/README.md index 32fb879..89fe299 100644 --- a/app-kit-send/README.md +++ b/app-kit-send/README.md @@ -1,12 +1,10 @@ # Send USDC on an EVM chain Use [`@circle-fin/app-kit`](https://www.npmjs.com/package/@circle-fin/app-kit) -to estimate and send USDC on Arc Testnet with a browser wallet and the viem -adapter. +to send USDC on Arc Testnet with a browser wallet and the viem adapter. This Vite + TypeScript page connects an EIP-6963 wallet (for example MetaMask), -creates a Circle adapter from the provider, then calls `estimateSend()` and -`send()`. +creates a Circle adapter from the provider, then calls `send()`. ## Prerequisites @@ -34,11 +32,10 @@ npm run build 1. Discovers an EIP-6963 browser wallet and requests account access. 2. Creates a viem adapter with `createViemAdapterFromProvider()`. -3. Estimates the transfer with `kit.estimateSend()`. -4. Sends 1 USDC on `Arc_Testnet` to the entered recipient with `kit.send()`. +3. Sends 1 USDC on `Arc_Testnet` to the entered recipient with `kit.send()`. ## Key file -- `src/main.ts` — wallet connect, adapter creation, estimate, and send. +- `src/main.ts` — wallet connect, adapter creation, and send. Change `chain`, `amount`, and `token` in the send params for a different chain, amount, or token. diff --git a/app-kit-send/package.json b/app-kit-send/package.json index 41226b4..9af50b3 100644 --- a/app-kit-send/package.json +++ b/app-kit-send/package.json @@ -9,11 +9,11 @@ }, "devDependencies": { "typescript": "~7.0.2", - "vite": "^8.2.1" + "vite": "^8.2.2" }, "dependencies": { - "@circle-fin/adapter-viem-v2": "^1.15.1", - "@circle-fin/app-kit": "^1.12.0", - "viem": "^2.55.17" + "@circle-fin/adapter-viem-v2": "^1.17.1", + "@circle-fin/app-kit": "^1.14.0", + "viem": "^2.56.3" } } diff --git a/app-kit-send/src/main.ts b/app-kit-send/src/main.ts index 9b71fcb..e9d67f3 100644 --- a/app-kit-send/src/main.ts +++ b/app-kit-send/src/main.ts @@ -17,7 +17,6 @@ */ import { AppKit } from "@circle-fin/app-kit"; -import type { SendParams } from "@circle-fin/app-kit"; import { createViemAdapterFromProvider } from "@circle-fin/adapter-viem-v2"; import type { CreateViemAdapterFromProviderParams } from "@circle-fin/adapter-viem-v2"; @@ -83,15 +82,19 @@ async function handleWalletConnect() { })) as string[]; walletInfo.textContent = accounts[0] ?? "Connected"; + output.textContent = ""; sendButton.disabled = !walletProvider; } catch (error) { - render({ error: error instanceof Error ? error.message : "Unknown error" }); + walletProvider = null; + render({ + error: (error as { message?: string })?.message ?? String(error), + }); } finally { connectWalletButton.disabled = Boolean(walletProvider); } } -/** Estimate and send 1 USDC on Arc Testnet to the recipient. */ +/** Send 1 USDC on Arc Testnet to the recipient. */ async function handleSend(event: Event) { event.preventDefault(); @@ -111,19 +114,18 @@ async function handleSend(event: Event) { provider: walletProvider, }); - const sendParams: SendParams = { + const result = await kit.send({ from: { adapter, chain: "Arc_Testnet" }, to: recipientAddress, amount: "1.00", token: "USDC", - }; - - const estimate = await kit.estimateSend(sendParams); - const result = await kit.send(sendParams); + }); - render({ estimate, result }); + render(result); } catch (error) { - render({ error: error instanceof Error ? error.message : "Unknown error" }); + render({ + error: (error as { message?: string })?.message ?? String(error), + }); } finally { sendButton.disabled = false; } diff --git a/app-kit-swap/README.md b/app-kit-swap/README.md index b183378..c5ee5f3 100644 --- a/app-kit-swap/README.md +++ b/app-kit-swap/README.md @@ -1,12 +1,11 @@ # Swap USDC on Arc Testnet Use [`@circle-fin/app-kit`](https://www.npmjs.com/package/@circle-fin/app-kit) -to estimate and swap USDC for EURC on Arc Testnet with a browser wallet and the -viem adapter. +to swap USDC for EURC on Arc Testnet with a browser wallet and the viem +adapter. This Vite + TypeScript page connects an EIP-6963 wallet (for example MetaMask), -creates a Circle adapter from the provider, then calls `estimateSwap()` and -`swap()`. +creates a Circle adapter from the provider, then calls `swap()`. ## Prerequisites @@ -34,35 +33,42 @@ npm run build 1. Discovers an EIP-6963 browser wallet and requests account access. 2. Creates a viem adapter with `createViemAdapterFromProvider()`. -3. Estimates the swap with `kit.estimateSwap()`. -4. Swaps 1 USDC for EURC on `Arc_Testnet` with `kit.swap()`. +3. Swaps 1 USDC for EURC on `Arc_Testnet` with `kit.swap()`. -## Thin liquidity on Arc Testnet +## Troubleshooting -Arc Testnet swap pools are often thin or imbalanced. Quotes and swaps can fail -even when your code and wallet setup are correct. This is an environment -limitation on testnet, not a bug in your integration. +### Thin liquidity on Arc Testnet -Common errors: +Arc Testnet pools are often thin or imbalanced. Failures here are usually the +environment, not your integration. -- **No route available** — the swap router could not find a quote for that pair - or amount (liquidity path missing or temporarily unavailable). -- **On-chain simulation failed** — a quote existed, but the pool could not meet - the minimum output under the configured slippage. +- **No route available** — no quote for that pair/amount; try a smaller + `amountIn`, flip the direction (`EURC` → `USDC` often has more depth), or + retry later. +- **On-chain simulation failed** — quote existed but slippage/minimum output + could not be met; lower `amountIn` or raise `config.slippageBps` above the + default `300` (3%). -If you hit either error: +### Wallet stuck on “Pending” / approve never confirms -1. Retry with a smaller `amountIn` (for example `0.1` or `1` USDC). -2. Prefer `EURC → USDC` when probing for available depth — Arc Testnet pools - are often USDC-heavy, so that direction usually has less price impact. -3. Optionally raise `config.slippageBps` above the default `300` (3%) for - testnet experiments. -4. Retry later — testnet liquidity and routing availability change over time. +Browser swaps need the wallet to broadcast approve (if needed) then the swap +tx. If MetaMask (or another wallet) shows **Pending** forever and the tx hash +is **not** on [Arcscan](https://testnet.arcscan.app): -Use mainnet liquidity expectations only after you move off Arc Testnet. +1. The wallet’s Arc Testnet RPC likely failed to broadcast — fix or replace + the network RPC in the wallet settings. +2. Clear stuck local activity (MetaMask: Settings → Advanced → Clear activity + tab data / Reset account) so a phantom pending does not block the next + prompt. +3. Confirm you are on **Arc Testnet** with USDC/EURC and native gas, then + retry. Another EIP-6963 wallet can work if one wallet’s RPC is bad; this + example prefers MetaMask when both are installed. + +A custodial / Circle Wallets script can succeed while a browser wallet stalls +for the same route — that points at wallet RPC/queue, not App Kit. ## Key file -- `src/main.ts` — wallet connect, adapter creation, estimate, and swap. +- `src/main.ts` — wallet connect, adapter creation, and swap. Change `chain`, `tokenIn` / `tokenOut`, and `amountIn` in the swap params for a different chain, pair, or amount. diff --git a/app-kit-swap/package.json b/app-kit-swap/package.json index 3742342..69dacbf 100644 --- a/app-kit-swap/package.json +++ b/app-kit-swap/package.json @@ -9,11 +9,11 @@ }, "devDependencies": { "typescript": "~7.0.2", - "vite": "^8.2.1" + "vite": "^8.2.2" }, "dependencies": { - "@circle-fin/adapter-viem-v2": "^1.15.1", - "@circle-fin/app-kit": "^1.12.0", - "viem": "^2.55.17" + "@circle-fin/adapter-viem-v2": "^1.17.1", + "@circle-fin/app-kit": "^1.14.0", + "viem": "^2.56.3" } } diff --git a/app-kit-swap/src/main.ts b/app-kit-swap/src/main.ts index 82f12df..fcd0523 100644 --- a/app-kit-swap/src/main.ts +++ b/app-kit-swap/src/main.ts @@ -17,7 +17,6 @@ */ import { AppKit } from "@circle-fin/app-kit"; -import type { SwapParams } from "@circle-fin/app-kit"; import { createViemAdapterFromProvider } from "@circle-fin/adapter-viem-v2"; import type { CreateViemAdapterFromProviderParams } from "@circle-fin/adapter-viem-v2"; @@ -83,15 +82,19 @@ async function handleWalletConnect() { })) as string[]; walletInfo.textContent = accounts[0] ?? "Connected"; + output.textContent = ""; swapButton.disabled = !walletProvider; } catch (error) { - render({ error: error instanceof Error ? error.message : "Unknown error" }); + walletProvider = null; + render({ + error: (error as { message?: string })?.message ?? String(error), + }); } finally { connectWalletButton.disabled = Boolean(walletProvider); } } -/** Estimate and swap 1 USDC for EURC on Arc Testnet. */ +/** Swap 1 USDC for EURC on Arc Testnet. */ async function handleSwap() { try { if (!walletProvider) { @@ -104,19 +107,18 @@ async function handleSwap() { provider: walletProvider, }); - const swapParams: SwapParams = { + const result = await kit.swap({ from: { adapter, chain: "Arc_Testnet" }, tokenIn: "USDC", tokenOut: "EURC", amountIn: "1.00", - }; - - const estimate = await kit.estimateSwap(swapParams); - const result = await kit.swap(swapParams); + }); - render({ estimate, result }); + render(result); } catch (error) { - render({ error: error instanceof Error ? error.message : "Unknown error" }); + render({ + error: (error as { message?: string })?.message ?? String(error), + }); } finally { swapButton.disabled = false; } diff --git a/app-kit-unified-balance/README.md b/app-kit-unified-balance/README.md index 656fabc..42e53bc 100644 --- a/app-kit-unified-balance/README.md +++ b/app-kit-unified-balance/README.md @@ -14,7 +14,7 @@ Circle adapters with the chains this demo uses, then calls - [Node.js 22 or later](https://nodejs.org/) - An EIP-6963 EVM browser wallet such as MetaMask - A Solana browser wallet on `window.solana` such as Phantom -- Testnet USDC on Base Sepolia and Solana Devnet +- Testnet USDC on Avalanche Fuji and Solana Devnet - Native gas tokens for both wallets This project does not require environment variables or API keys. @@ -34,15 +34,25 @@ npm run build ## What this example does -1. Connects an EVM wallet and builds a viem adapter for Base Sepolia and Arc +1. Connects an EVM wallet and builds a viem adapter for Avalanche Fuji and Arc Testnet. 2. Connects a Solana wallet and builds a Solana adapter for Solana Devnet. -3. Deposits 2 USDC from Base Sepolia with `kit.unifiedBalance.deposit()`. +3. Deposits 2 USDC from Avalanche Fuji with `kit.unifiedBalance.deposit()`. 4. Deposits 1 USDC from Solana Devnet with `kit.unifiedBalance.deposit()`. 5. Reads the unified balance with `kit.unifiedBalance.getBalances()`. 6. Spends 2.50 USDC to a recipient on Arc Testnet with `kit.unifiedBalance.spend()`. +## Spend signing (EVM + Solana) + +This demo deposits on Avalanche Fuji (2 USDC) and Solana Devnet (1 USDC), then +spends 2.50 USDC. Auto-allocation therefore draws from **both** wallets. + +EVM burn intents can share one EIP-712 `BurnIntentSet` signature. Solana uses a +separate Ed25519 signature and cannot join that set. Expect **two wallet +prompts** on Spend: one in your EVM wallet, then one in your Solana wallet. +Both signed intents still go in a single Gateway transfer. + ## Key file - `src/main.ts` — wallet connect, adapters, deposit, balance, and spend. diff --git a/app-kit-unified-balance/index.html b/app-kit-unified-balance/index.html index 22740bd..786ec79 100644 --- a/app-kit-unified-balance/index.html +++ b/app-kit-unified-balance/index.html @@ -62,7 +62,7 @@
- +
diff --git a/app-kit-unified-balance/package.json b/app-kit-unified-balance/package.json index 442dcf0..88fce0e 100644 --- a/app-kit-unified-balance/package.json +++ b/app-kit-unified-balance/package.json @@ -9,12 +9,12 @@ }, "devDependencies": { "typescript": "~7.0.2", - "vite": "^8.2.1" + "vite": "^8.2.2" }, "dependencies": { - "@circle-fin/adapter-solana": "^1.6.5", - "@circle-fin/adapter-viem-v2": "^1.15.1", - "@circle-fin/app-kit": "^1.12.0", - "viem": "^2.55.17" + "@circle-fin/adapter-solana": "^1.7.2", + "@circle-fin/adapter-viem-v2": "^1.17.1", + "@circle-fin/app-kit": "^1.14.0", + "viem": "^2.56.3" } } diff --git a/app-kit-unified-balance/src/main.ts b/app-kit-unified-balance/src/main.ts index e8ee0ae..2f0c268 100644 --- a/app-kit-unified-balance/src/main.ts +++ b/app-kit-unified-balance/src/main.ts @@ -17,7 +17,7 @@ */ import { AppKit } from "@circle-fin/app-kit"; -import { ArcTestnet, BaseSepolia, SolanaDevnet } from "@circle-fin/app-kit/chains"; +import { ArcTestnet, AvalancheFuji, SolanaDevnet } from "@circle-fin/app-kit/chains"; import { createSolanaAdapterFromProvider } from "@circle-fin/adapter-solana"; import type { CreateSolanaAdapterFromProviderParams, @@ -45,6 +45,7 @@ type EIP6963ProviderDetail = { declare global { interface Window { solana?: SolanaWalletProvider; + solflare?: SolanaWalletProvider; } interface WindowEventMap { @@ -81,7 +82,7 @@ async function getEvmProvider(): Promise { return selectedProvider; } -/** Connect the EVM wallet and build an adapter for Base Sepolia + Arc Testnet. */ +/** Connect the EVM wallet and build an adapter for Avalanche Fuji + Arc Testnet. */ async function handleEvmConnect() { try { connectEvmButton.disabled = true; @@ -100,13 +101,16 @@ async function handleEvmConnect() { evmAdapter = await createViemAdapterFromProvider({ provider, capabilities: { - supportedChains: [BaseSepolia, ArcTestnet], + supportedChains: [AvalancheFuji, ArcTestnet], }, }); evmWalletInfo.textContent = accounts[0] ?? "Connected"; + output.textContent = ""; } catch (error) { evmAdapter = null; - render({ error: error instanceof Error ? error.message : "Unknown error" }); + render({ + error: (error as { message?: string })?.message ?? String(error), + }); } finally { connectEvmButton.disabled = Boolean(evmAdapter); updateActionButtons(); @@ -118,7 +122,8 @@ async function handleSolanaConnect() { try { connectSolanaButton.disabled = true; - const provider = window.solana; + // Prefer Solflare when present; fall back to window.solana (e.g. Phantom). + const provider = window.solflare ?? window.solana; if (!provider) { throw new Error("No Solana browser wallet found"); } @@ -135,36 +140,41 @@ async function handleSolanaConnect() { }, }); solanaWalletInfo.textContent = connectedAddress ?? "Connected"; + output.textContent = ""; } catch (error) { solanaAdapter = null; - render({ error: error instanceof Error ? error.message : "Unknown error" }); + render({ + error: (error as { message?: string })?.message ?? String(error), + }); } finally { connectSolanaButton.disabled = Boolean(solanaAdapter); updateActionButtons(); } } -/** Deposit 2 USDC from Base Sepolia into the unified balance. */ -async function handleDepositBase() { +/** Deposit 2 USDC from Avalanche Fuji into the unified balance. */ +async function handleDepositFuji() { try { if (!evmAdapter) { throw new Error("Connect an EVM wallet first"); } - depositBaseButton.disabled = true; + depositFujiButton.disabled = true; - // Switch the wallet to Base Sepolia before depositing - await evmAdapter.ensureChain(BaseSepolia); + // Switch the wallet to Avalanche Fuji before depositing + await evmAdapter.ensureChain(AvalancheFuji); const result = await kit.unifiedBalance.deposit({ - from: { adapter: evmAdapter, chain: "Base_Sepolia" }, + from: { adapter: evmAdapter, chain: "Avalanche_Fuji" }, amount: "2.00", token: "USDC", }); render(result); } catch (error) { - render({ error: error instanceof Error ? error.message : "Unknown error" }); + render({ + error: (error as { message?: string })?.message ?? String(error), + }); } finally { updateActionButtons(); } @@ -187,7 +197,9 @@ async function handleDepositSolana() { render(result); } catch (error) { - render({ error: error instanceof Error ? error.message : "Unknown error" }); + render({ + error: (error as { message?: string })?.message ?? String(error), + }); } finally { updateActionButtons(); } @@ -212,7 +224,9 @@ async function handleCheckBalance() { render(balances); } catch (error) { - render({ error: error instanceof Error ? error.message : "Unknown error" }); + render({ + error: (error as { message?: string })?.message ?? String(error), + }); } finally { updateActionButtons(); } @@ -245,7 +259,9 @@ async function handleSpend(event: SubmitEvent) { render(result); } catch (error) { - render({ error: error instanceof Error ? error.message : "Unknown error" }); + render({ + error: (error as { message?: string })?.message ?? String(error), + }); } finally { updateActionButtons(); } @@ -256,7 +272,7 @@ function updateActionButtons() { const hasEvmAdapter = Boolean(evmAdapter); const hasSolanaAdapter = Boolean(solanaAdapter); - depositBaseButton.disabled = !hasEvmAdapter; + depositFujiButton.disabled = !hasEvmAdapter; depositSolanaButton.disabled = !hasSolanaAdapter; checkBalanceButton.disabled = !hasEvmAdapter && !hasSolanaAdapter; spendButton.disabled = !(hasEvmAdapter && hasSolanaAdapter); @@ -276,8 +292,8 @@ function render(value: unknown) { const connectEvmButton = document.querySelector("#connectEvm")!; const connectSolanaButton = document.querySelector("#connectSolana")!; -const depositBaseButton = - document.querySelector("#depositBase")!; +const depositFujiButton = + document.querySelector("#depositFuji")!; const depositSolanaButton = document.querySelector("#depositSolana")!; const checkBalanceButton = @@ -293,7 +309,7 @@ const output = document.querySelector("#output")!; connectEvmButton.addEventListener("click", handleEvmConnect); connectSolanaButton.addEventListener("click", handleSolanaConnect); -depositBaseButton.addEventListener("click", handleDepositBase); +depositFujiButton.addEventListener("click", handleDepositFuji); depositSolanaButton.addEventListener("click", handleDepositSolana); checkBalanceButton.addEventListener("click", handleCheckBalance); spendForm.addEventListener("submit", handleSpend);