⚡ TECH BLOG
Home
Blog
Tags
About
⚡

Powered by Next.js 15 & Modern Web Tech ⚡

Back to Home

Wagmi: React Hooks for Ethereum

August 15, 2023
web3wagmiethereumreact
Wagmi: React Hooks for Ethereum

Wagmi: React Hooks for Ethereum

Wagmi is a collection of React hooks for Ethereum that makes building Web3 applications easier.

Installation

npm install wagmi viem @tanstack/react-query

Configuration

import { createConfig, http } from 'wagmi';
import { mainnet, polygon, optimism } from 'wagmi/chains';
import { injected, walletConnect } from 'wagmi/connectors';

export const config = createConfig({
  chains: [mainnet, polygon, optimism],
  connectors: [
    injected(),
    walletConnect({ projectId: 'YOUR_PROJECT_ID' }),
  ],
  transports: {
    [mainnet.id]: http(),
    [polygon.id]: http(),
  },
});

Provider Setup

import { WagmiProvider } from 'wagmi';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { config } from './config';

const queryClient = new QueryClient();

function App() {
  return (
    <WagmiProvider config={config}>
      <QueryClientProvider client={queryClient}>
        <YourApp />
      </QueryClientProvider>
    </WagmiProvider>
  );
}

Wallet Connection

import { useConnect, useDisconnect, useAccount } from 'wagmi';

function ConnectButton() {
  const { address, isConnected } = useAccount();
  const { connect, connectors } = useConnect();
  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.id} onClick={() => connect({ connector })}>
          Connect {connector.name}
        </button>
      ))}
    </div>
  );
}

Reading Contracts

import { useReadContract } from 'wagmi';
import { abi } from './abi';

function Balance({ address }: { address: `0x${string}` }) {
  const { data, isLoading } = useReadContract({
    address: '0x...',
    abi,
    functionName: 'balanceOf',
    args: [address],
  });

  return <div>Balance: {data?.toString()}</div>;
}

Writing Contracts

import { useWriteContract, useWaitForTransactionReceipt } from 'wagmi';

function MintButton() {
  const { data: hash, writeContract } = useWriteContract();
  const { isLoading, isSuccess } = useWaitForTransactionReceipt({
    hash,
  });

  const mint = () => {
    writeContract({
      address: '0x...',
      abi,
      functionName: 'mint',
      args: [1n],
    });
  };

  return (
    <div>
      <button onClick={mint} disabled={isLoading}>
        Mint
      </button>
      {isSuccess && <p>Transaction confirmed!</p>}
    </div>
  );
}

Conclusion

Wagmi provides a clean, type-safe way to interact with Ethereum from React applications.

Share:

💬 Comments