---
name: wagmi
description: Use wagmi React hooks for Celo dApps. Includes wallet connection, transaction hooks, and React integration patterns.
license: Apache-2.0
metadata:
author: celo-org
version: "1.0.0"
---
# Wagmi for Celo
Wagmi is a React library for building Ethereum applications with hooks. It uses viem under the hood.
Source: https://wagmi.sh
## When to Use
- Building React dApps on Celo
- Implementing wallet connection flows
- Managing blockchain state in React components
- Using React hooks for contract interactions
## Installation
```bash
npm install wagmi viem@2.x @tanstack/react-query
```
## Configuration
### Basic Setup
```typescript
// config.ts
import { http, createConfig } from "wagmi";
import { celo, celoSepolia } from "wagmi/chains";
export const config = createConfig({
chains: [celo, celoSepolia],
transports: {
[celo.id]: http(),
[celoSepolia.id]: http(),
},
});
```
### With Connectors
```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(),
},
});
```
Source: https://wagmi.sh/react/guides/connect-wallet
## Provider Setup
```tsx
// app.tsx
import { WagmiProvider } from "wagmi";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { config } from "./config";
const queryClient = new QueryClient();
function App({ children }: { children: React.ReactNode }) {
return (
{children}
);
}
```
## Wallet Connection
### Display Wallet Options
```tsx
import { useConnect, useConnectors } from "wagmi";
function WalletOptions() {
const { connect } = useConnect();
const connectors = useConnectors();
return (
{connectors.map((connector) => (
))}
);
}
```
### Display Connected Account
```tsx
import { useAccount, useDisconnect } from "wagmi";
function Account() {
const { address, isConnected, chain } = useAccount();
const { disconnect } = useDisconnect();
if (!isConnected) return ;
return (
Connected: {address}
Chain: {chain?.name}
);
}
```
## Reading Contract Data
```tsx
import { useReadContract } from "wagmi";
const ERC20_ABI = [
{
name: "balanceOf",
type: "function",
stateMutability: "view",
inputs: [{ name: "account", type: "address" }],
outputs: [{ type: "uint256" }],
},
] as const;
function TokenBalance({ address }: { address: `0x${string}` }) {
const { data: balance, isLoading } = useReadContract({
address: "0x765de816845861e75a25fca122bb6898b8b1282a", // USDm
abi: ERC20_ABI,
functionName: "balanceOf",
args: [address],
});
if (isLoading) return Loading...
;
return Balance: {balance?.toString()}
;
}
```
## Writing to Contracts
```tsx
import { useWriteContract, useWaitForTransactionReceipt } from "wagmi";
import { parseEther } from "viem";
function TransferToken() {
const { writeContract, data: hash, isPending } = useWriteContract();
const { isLoading: isConfirming, isSuccess } = useWaitForTransactionReceipt({
hash,
});
async function handleTransfer() {
writeContract({
address: "0x765de816845861e75a25fca122bb6898b8b1282a",
abi: ERC20_ABI,
functionName: "transfer",
args: ["0x...", parseEther("10")],
});
}
return (
{isConfirming &&
Waiting for confirmation...
}
{isSuccess &&
Transaction confirmed!
}
);
}
```
## Sending Transactions
```tsx
import { useSendTransaction, useWaitForTransactionReceipt } from "wagmi";
import { parseEther } from "viem";
function SendCelo() {
const { sendTransaction, data: hash, isPending } = useSendTransaction();
const { isSuccess } = useWaitForTransactionReceipt({ hash });
return (
);
}
```
## Chain Switching
```tsx
import { useSwitchChain } from "wagmi";
import { celo, celoSepolia } from "wagmi/chains";
function NetworkSwitcher() {
const { switchChain, isPending } = useSwitchChain();
return (
);
}
```
## Common Hooks
| Hook | Purpose |
|------|---------|
| useAccount | Get connected account info |
| useConnect | Connect wallet |
| useDisconnect | Disconnect wallet |
| useReadContract | Read contract state |
| useWriteContract | Write to contract |
| useSendTransaction | Send native currency |
| useWaitForTransactionReceipt | Wait for tx confirmation |
| useSwitchChain | Switch networks |
| useBalance | Get account balance |
| useChainId | Get current chain ID |
## Celo Chain IDs
| Network | Chain ID |
|---------|----------|
| Celo Mainnet | 42220 |
| Celo Sepolia | 11142220 |
## Dependencies
```json
{
"dependencies": {
"wagmi": "^2.0.0",
"viem": "^2.0.0",
"@tanstack/react-query": "^5.0.0"
}
}
```
## Additional Resources
- [hooks-reference.md](references/hooks-reference.md) - Complete hooks reference