원클릭으로
evm-wallet-integration
// Integrate wallets into Celo dApps. Covers RainbowKit, Dynamic, and wallet connection patterns.
// Integrate wallets into Celo dApps. Covers RainbowKit, Dynamic, and wallet connection patterns.
ERC-8004 Agent Trust Protocol for AI agent identity, reputation, and validation on Celo. Use when building AI agents that need identity registration, reputation tracking, or trust verification across organizational boundaries.
x402 HTTP-native payment protocol for AI agents on Celo. Use when implementing pay-per-use APIs, agent micropayments, or HTTP 402 Payment Required flows with stablecoins.
Verify smart contracts on Celo. Use when publishing contract source code to Celoscan or Blockscout.
Pay gas fees with ERC-20 tokens on Celo. Covers supported tokens, implementation, and wallet compatibility.
Use viem for Celo development. Includes fee currency support, transaction signing, and Celo-specific configurations.
Use wagmi React hooks for Celo dApps. Includes wallet connection, transaction hooks, and React integration patterns.
| 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"} |
This skill covers integrating wallet connection libraries into Celo dApps.
| 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 |
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.
npm install @reown/appkit @reown/appkit-adapter-wagmi wagmi viem @tanstack/react-query
// 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;
"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 (
<WagmiProvider config={wagmiAdapter.wagmiConfig}>
<QueryClientProvider client={queryClient}>
{children}
</QueryClientProvider>
</WagmiProvider>
);
}
import { AppKitButton } from "@reown/appkit/react";
function Header() {
return (
<nav>
<AppKitButton />
</nav>
);
}
import { useAppKit, useAppKitAccount } from "@reown/appkit/react";
function WalletConnect() {
const { open } = useAppKit();
const { address, isConnected } = useAppKitAccount();
if (isConnected) {
return (
<div>
<p>Connected: {address}</p>
<button onClick={() => open({ view: "Account" })}>Account</button>
</div>
);
}
return <button onClick={() => open()}>Connect Wallet</button>;
}
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 (
<div>
<p>Address: {address}</p>
<p>Balance: {balance?.formatted} {balance?.symbol}</p>
<button onClick={() => disconnect()}>Disconnect</button>
</div>
);
}
Authentication-focused wallet connection with user management dashboard.
Source: https://docs.dynamic.xyz
npm install @dynamic-labs/sdk-react
import {
DynamicContextProvider,
DynamicWidget,
} from "@dynamic-labs/sdk-react";
function App() {
return (
<DynamicContextProvider
settings={{
environmentId: process.env.NEXT_PUBLIC_DYNAMIC_ENV_ID!,
}}
>
<DynamicWidget />
</DynamicContextProvider>
);
}
Build wallet connection without a library using wagmi directly.
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(),
},
});
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 (
<div>
<p>Connected: {address}</p>
<button onClick={() => disconnect()}>Disconnect</button>
</div>
);
}
return (
<div>
{connectors.map((connector) => (
<button
key={connector.uid}
onClick={() => connect({ connector })}
>
{connector.name}
</button>
))}
</div>
);
}
| 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 |
Required for WalletConnect connections. WalletConnect Inc. rebranded to Reown in 2024.
NEXT_PUBLIC_REOWN_PROJECT_ID=your_project_id
Note: The wagmi
walletConnectconnector still uses the same project ID. Only the cloud console was rebranded.
{
"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"
}
}
{
"dependencies": {
"wagmi": "^2.0.0",
"viem": "^2.0.0",
"@tanstack/react-query": "^5.0.0"
}
}