3balance is an onchain mini app where players pick a crypto character, fight in a fast 1v1 arena, and record the result on Base.
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, won)transaction after battle resolution. - 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.
- Fight opponent in arena.
- Sign the onchain result transaction on Base.
- Share result.
- React 19 + Vite 7
- wagmi + viem
@coinbase/onchainkit- Base Mainnet
- Solidity (entry contract)
Contract source: contracts/BattleArenaV2.sol
Main entry function:
function enterMatch(string calldata characterId, bool won) external payableThe contract stores:
- Total entries
- Unique players
- Entries per player and per character
- Wins, losses, and current win streak per player
- Last entry timestamp per player
- ERC721 reward mint when a player reaches a 3-win streak
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. - Current Base mainnet deployment:
0x09C1FaD72f10c0Dd4C083A28990Faa8A7C8F0580
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/BattleArenaV2.sol- onchain match entry and streak reward contract
- Main gameplay and onchain result recording flow are live.
- Browser fallback is enabled if MiniKit is unavailable.
- UI is optimized for mobile mini app usage.
MIT