3balance is an onchain mini app where players pick a crypto character, sign a match entry transaction on Base, and fight in a fast 1v1 arena.
The core idea is simple: every new match starts with an onchain action. Gameplay is offchain and instant, while entry analytics stay transparent onchain.
- Sends an onchain
enterMatch(characterId)transaction before battle start. - Uses Base Account + OnchainKit MiniKit inside Base App.
- Supports sponsored gas flow through Coinbase Paymaster when available.
- Shows player profile from MiniKit context (
displayName,username, avatar). - Runs battle gameplay with character selection, lives, coin control, AI behavior, and win/lose states.
- Supports result sharing to feed via
composeCast, with browser fallback (navigator.shareor copy link).
- Open app.
- Pick fighter.
- Sign entry transaction on Base.
- Fight opponent in arena.
- Share result.
- React 19 + Vite 7
- wagmi + viem
@coinbase/onchainkit- Base Mainnet
- Solidity (entry contract)
Contract source: contracts/BattleArenaEntry.sol
Main entry function:
function enterMatch(string calldata characterId) externalThe contract stores:
- Total entries
- Unique players
- Entries per player
- Entries per character (by hash)
- Last entry timestamp per player
Create .env.local and set:
VITE_PUBLIC_ONCHAINKIT_API_KEY=your_onchainkit_api_key
VITE_BATTLE_ENTRY_CONTRACT=0xYourBattleArenaEntryContract
VITE_APP_URL=https://3balances.vercel.appNotes:
VITE_BATTLE_ENTRY_CONTRACThas a default fallback insrc/App.jsxif env is missing.- Paymaster RPC URL is currently configured directly in
src/App.jsx.
pnpm install
pnpm devBuild and checks:
pnpm lint
pnpm build
pnpm previewMetadata files:
public/.well-known/farcaster.jsonindex.html(fc:miniapptag)
Screenshots and cover assets:
public/cover-1200x630.pngpublic/screenshots/screenshot-1.pngpublic/screenshots/screenshot-2.pngpublic/screenshots/screenshot-3.png
Character images:
public/battle/characters/
Coin icons:
public/battle/coins/
src/App.jsx- app shell, wallet/profile, entry tx, share logic, navigationsrc/BattleArena.jsx- game screen and mechanicssrc/main.jsx- OnchainKit provider bootstrapcontracts/BattleArenaEntry.sol- onchain match entry contract
- Main gameplay and onchain entry flow are live.
- Browser fallback is enabled if MiniKit is unavailable.
- UI is optimized for mobile mini app usage.
MIT