Build responsive, user-friendly decentralized applications using modern web technologies. MVP CHAIN provides fast transactions and low fees for optimal user experience.
App Router, SSR, SSG
Fast development
React hooks for Ethereum
TypeScript Ethereum library
Utility-first CSS
Beautiful components
// lib/config.ts
import { http, createConfig } from 'wagmi'
import { mainnet, sepolia } from 'wagmi/chains'
// MVP CHAIN configuration
export const mvpChain = {
id: 480001,
name: 'MVP CHAIN',
nativeCurrency: {
name: 'MVP',
symbol: 'MVP',
decimals: 18,
},
rpcUrls: {
http: ['https://rpc.mvpcha.in'],
},
blockExplorers: {
default: {
name: 'MVP Explorer',
url: 'https://exp.mvpcha.in',
},
},
}
export const config = createConfig({
chains: [mvpChain, mainnet, sepolia],
transports: {
[mvpChain.id]: http(),
[mainnet.id]: http(),
[sepolia.id]: http(),
},
})// components/WalletConnect.tsx
'use client'
import { useAccount, useConnect, useDisconnect } from 'wagmi'
import { Button } from '@/components/ui/button'
export function WalletConnect() {
const { address, isConnected } = useAccount()
const { connect, connectors } = useConnect()
const { disconnect } = useDisconnect()
if (isConnected) {
return (
<div className="flex items-center gap-4">
<span className="text-sm">
{address?.slice(0, 6)}...{address?.slice(-4)}
</span>
<Button onClick={() => disconnect()} variant="outline">
Disconnect
</Button>
</div>
)
}
return (
<div className="flex gap-2">
{connectors.map((connector) => (
<Button
key={connector.uid}
onClick={() => connect({ connector })}
variant="outline"
>
Connect {connector.name}
</Button>
))}
</div>
)
}// components/TokenBalance.tsx
'use client'
import { useReadContract, useWriteContract } from 'wagmi'
import { parseEther } from 'viem'
import { Button } from '@/components/ui/button'
const tokenABI = [
{
name: 'balanceOf',
type: 'function',
stateMutability: 'view',
inputs: [{ name: 'account', type: 'address' }],
outputs: [{ name: '', type: 'uint256' }],
},
{
name: 'transfer',
type: 'function',
stateMutability: 'nonpayable',
inputs: [
{ name: 'to', type: 'address' },
{ name: 'amount', type: 'uint256' },
],
outputs: [{ name: '', type: 'bool' }],
},
] as const
export function TokenBalance({ address, tokenAddress }: {
address: `0x${string}`
tokenAddress: `0x${string}`
}) {
const { data: balance } = useReadContract({
address: tokenAddress,
abi: tokenABI,
functionName: 'balanceOf',
args: [address],
})
const { writeContract } = useWriteContract()
const handleTransfer = () => {
writeContract({
address: tokenAddress,
abi: tokenABI,
functionName: 'transfer',
args: ['0x...', parseEther('1')],
})
}
return (
<div className="space-y-4">
<p>Balance: {balance?.toString() || '0'}</p>
<Button onClick={handleTransfer}>
Transfer 1 Token
</Button>
</div>
)
}