0xverin
Nextjs-Wagmi-QuickStart
TypeScript

Nextjs wagmi rainbowkit

Last updated Jun 28, 2026
132
Stars
51
Forks
0
Issues
0
Stars/day
Attention Score
64
Language breakdown
TypeScript 86.0%
CSS 5.0%
Solidity 4.5%
JavaScript 4.4%
โ–ธ Files click to expand
README

Next.js Wagmi QuickStart Template

A quick start template integrating Next.js with Wagmi for developing Web3 applications that interact with the Ethereum blockchain. The template provides basic implementations for reading smart contract data and writing transactions.

Libraries

  • โœ… Next.js 14
  • โœ… Wagmi v2
  • โœ… RainbowKit

Getting Started and Running locally

Set NEXTPUBLICPROJECTID in your .env.local file. This is a WalletConnect Project ID which you can obtain from WalletConnect Cloud.

echo "NEXTPUBLICPROJECTID=yourprojectidhere" > .env.local
pnpm install
pnpm dev

Template Structure

/
โ”œโ”€โ”€ app/                    # Next.js app directory
โ”œโ”€โ”€ config/                 # Configuration files
โ”‚   โ””โ”€โ”€ contracts/          # Contract-related configurations
โ”‚       โ”œโ”€โ”€ abi/            # Contract ABIs
โ”‚       โ””โ”€โ”€ addresses.ts    # Contract addresses
โ”œโ”€โ”€ hooks/                  # Custom React Hooks
โ”‚   โ””โ”€โ”€ contracts/          # Contract-related hooks
โ”œโ”€โ”€ utils/                  # Utility functions
โ”‚   โ”œโ”€โ”€ addressHelpers.ts   # Address-related utilities
โ”‚   โ””โ”€โ”€ contractHelpers.ts  # Contract-related utilities
โ””โ”€โ”€ ...

Read Contract Example

Used for batch reading multiple functions from the TestToken contract, including balance, decimals, name, symbol, and total supply.

export const useReadTestTokenContract = (address?: Address) => {
  const chainId = useChainId();
  const contract = getTestTokenContract(chainId);

const contracts = [ { ...contract, functionName: "balanceOf", args: [address], }, { ...contract, functionName: "decimals", }, { ...contract, functionName: "name", }, { ...contract, functionName: "symbol", }, { ...contract, functionName: "totalSupply", }, ];

const { data, error, isLoading, isError, refetch } = useReadContracts({ contracts: contracts.map((contract) => ({ ...contract, abi: contract.abi as Abi, })), query: { enabled: !!address, }, });

const [ balanceOfAddress = BigInt(0), decimals = 0, name = "", symbol = "", totalSupply = BigInt(0), ] = data?.map((d) => d.result) ?? [];

const res = { balanceOfAddress, decimals, name, symbol, totalSupply, }; return { data: res, error, isLoading, isError, refetch, }; };

// Usage const { data, error, isLoading, isError, refetch } = useReadTestTokenContract(address);

Write Contract Example

Used for minting TestToken tokens and handling transaction states (pending, confirming, confirmed).

export const useMintTestToken = () => {
  const chainId = useChainId();
  const contract = getTestTokenContract(chainId);

const [isConfirmed, setIsConfirmed] = useState(false); const { data: hash, isPending, error: excuteError, isError: isExcuteError, writeContractAsync, } = useWriteContract(); const { isLoading: isConfirming, error: callError, isError: isCallError, } = useWaitForTransactionReceipt({ hash, });

const writeContract = async (address: Address, amount: bigint) => { setIsConfirmed(false); const hash = await writeContractAsync({ ...contract, functionName: "mint", args: [address, amount], }); const { receipt, isConfirmed } = await waitForTransactionReceipt(hash); return { receipt, isConfirmed, }; };

const error = callError || excuteError; return { isConfirmed, writeContract, isPending: isConfirming || isPending, hash, errorMessage: (error as BaseError)?.shortMessage || error?.message || "Unknown error", isError: isCallError || isExcuteError, }; };

// Usage in components const handleMint = async () => { const { receipt, isConfirmed } = await mintTestToken(address, BigInt(1000)); if (isConfirmed) { console.log("mint success", receipt); refetchTestToken(); } };

## Adding New Functionality
  • Add contract ABI in config/contracts/abi/
  • Add contract addresses in config/contracts/addresses.ts
  • Add address getter function in utils/addressHelpers.ts
  • Add contract getter function in utils/contractHelpers.ts
  • Create custom hook in hooks/contracts/
๐Ÿ”— More in this category

ยฉ 2026 GitRepoTrend ยท 0xverin/Nextjs-Wagmi-QuickStart ยท Updated daily from GitHub