--- name: evm-wallet-integration description: Integrate wallets into Celo dApps. Covers RainbowKit, Dynamic, and wallet connection patterns. license: Apache-2.0 metadata: author: celo-org version: "1.0.0" --- # EVM Wallet Integration for Celo This skill covers integrating wallet connection libraries into Celo dApps. ## When to Use - Adding wallet connection to a dApp - Supporting multiple wallet types - Implementing authentication flows - Building wallet experiences ## Wallet Connection Libraries | Library | Description | Best For | |---------|-------------|----------| | Reown AppKit | Official WalletConnect SDK with wagmi | Production React apps | | Dynamic | Auth-focused with dashboard | Apps needing user management | | ConnectKit | Simple wagmi integration | Quick setup | | Custom wagmi | Direct connector setup | Full control | ## Reown AppKit Official WalletConnect SDK for React apps with built-in wallet UI. Supports 600+ wallets. Source: https://docs.reown.com/appkit > **Note**: Reown is the company formerly known as WalletConnect Inc. (rebranded in 2024). The protocol and npm packages for wagmi connectors still use "walletConnect" naming. ### Installation ```bash npm install @reown/appkit @reown/appkit-adapter-wagmi wagmi viem @tanstack/react-query ``` ### Get Project ID 1. Go to [cloud.reown.com](https://cloud.reown.com) 2. Create a new project 3. Copy the project ID ### Configuration ```typescript // config.ts import { WagmiAdapter } from "@reown/appkit-adapter-wagmi"; import { celo, celoAlfajores } from "@reown/appkit/networks"; const projectId = process.env.NEXT_PUBLIC_REOWN_PROJECT_ID!; export const wagmiAdapter = new WagmiAdapter({ networks: [celo, celoAlfajores], projectId, ssr: true, }); export const config = wagmiAdapter.wagmiConfig; ``` ### Provider Setup ```tsx "use client"; import { WagmiProvider } from "wagmi"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { createAppKit } from "@reown/appkit/react"; import { wagmiAdapter } from "./config"; import { celo, celoAlfajores } from "@reown/appkit/networks"; const queryClient = new QueryClient(); createAppKit({ adapters: [wagmiAdapter], networks: [celo, celoAlfajores], projectId: process.env.NEXT_PUBLIC_REOWN_PROJECT_ID!, metadata: { name: "My Celo App", description: "Celo dApp", url: "https://myapp.com", icons: ["https://myapp.com/icon.png"], }, }); export function Providers({ children }: { children: React.ReactNode }) { return ( {children} ); } ``` ### Connect Button ```tsx import { AppKitButton } from "@reown/appkit/react"; function Header() { return ( ); } ``` ### Custom Connect Button ```tsx import { useAppKit, useAppKitAccount } from "@reown/appkit/react"; function WalletConnect() { const { open } = useAppKit(); const { address, isConnected } = useAppKitAccount(); if (isConnected) { return (

Connected: {address}

); } return ; } ``` ### Using Wagmi Hooks with AppKit ```tsx import { useAccount, useBalance, useDisconnect } from "wagmi"; function AccountInfo() { const { address, isConnected } = useAccount(); const { data: balance } = useBalance({ address }); const { disconnect } = useDisconnect(); if (!isConnected) return null; return (

Address: {address}

Balance: {balance?.formatted} {balance?.symbol}

); } ``` ## Dynamic Authentication-focused wallet connection with user management dashboard. Source: https://docs.dynamic.xyz ### Installation ```bash npm install @dynamic-labs/sdk-react ``` ### Setup ```tsx import { DynamicContextProvider, DynamicWidget, } from "@dynamic-labs/sdk-react"; function App() { return ( ); } ``` ### Enable Celo 1. Go to app.dynamic.xyz dashboard 2. Navigate to Configurations 3. Select EVM card 4. Toggle Celo on ## Custom Implementation Build wallet connection without a library using wagmi directly. ### Wagmi Configuration ```typescript import { http, createConfig } from "wagmi"; import { celo, celoSepolia } from "wagmi/chains"; import { injected, walletConnect, metaMask } from "wagmi/connectors"; const projectId = process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID!; export const config = createConfig({ chains: [celo, celoSepolia], connectors: [ injected(), walletConnect({ projectId }), metaMask(), ], transports: { [celo.id]: http(), [celoSepolia.id]: http(), }, }); ``` ### Wallet Connect Component ```tsx import { useConnect, useConnectors, useAccount, useDisconnect } from "wagmi"; function WalletConnect() { const { connect } = useConnect(); const connectors = useConnectors(); const { address, isConnected } = useAccount(); const { disconnect } = useDisconnect(); if (isConnected) { return (

Connected: {address}

); } return (
{connectors.map((connector) => ( ))}
); } ``` ## Network Configuration ### Celo Networks | Network | Chain ID | Reown Import | Wagmi Import | |---------|----------|--------------|--------------| | Mainnet | 42220 | `celo` from `@reown/appkit/networks` | `celo` from `wagmi/chains` | | Celo Alfajores | 44787 | `celoAlfajores` from `@reown/appkit/networks` | `celoAlfajores` from `wagmi/chains` | | Celo Sepolia | 11142220 | - | `celoSepolia` from `wagmi/chains` | ### Reown Project ID Required for WalletConnect connections. WalletConnect Inc. rebranded to **Reown** in 2024. 1. Go to [cloud.reown.com](https://cloud.reown.com) (formerly WalletConnect Cloud) 2. Create a new project (select "AppKit" type) 3. Copy the project ID 4. Add to environment variables: ```bash NEXT_PUBLIC_REOWN_PROJECT_ID=your_project_id ``` > **Note**: The wagmi `walletConnect` connector still uses the same project ID. Only the cloud console was rebranded. ## Best Practices 1. **Support Multiple Wallets** - Don't force users into one wallet 2. **Handle Network Switching** - Prompt users to switch to Celo 3. **Show Connection State** - Clear UI for connected/disconnected 4. **Handle Errors** - User-friendly error messages 5. **Test on Mobile** - Mobile browsers and wallet apps ## Dependencies ### Reown AppKit ```json { "dependencies": { "@reown/appkit": "^1.0.0", "@reown/appkit-adapter-wagmi": "^1.0.0", "wagmi": "^2.0.0", "viem": "^2.0.0", "@tanstack/react-query": "^5.0.0" } } ``` ### Custom wagmi (without AppKit) ```json { "dependencies": { "wagmi": "^2.0.0", "viem": "^2.0.0", "@tanstack/react-query": "^5.0.0" } } ``` ## Additional Resources - [wallet-connectors.md](references/wallet-connectors.md) - Connector configuration reference