• Cans are local HUD only (cap 10). They never enter a calldata argument.
• fillOil() is public. No amount argument. Global cooldown only (start at 10 seconds). Packet size admin-settable. Caller bounty is a fixed callerBounty in DRB (start at 1). Rest of the packet goes to the Drop Vault. Keepers may call the same function with no cans. No per-wallet fill cooldown in beta.
• Drop Vault snapshots the live gate (sum(endId - startId + 1)). Days 0–7 holder 100%. Days 7–14 ≥1000 GEAR scavenges 90/10. Day 14+ admin NFT #1793 sweeps leftovers: 90% Oil Escrow, 10% immutable treasury.
• BYTE fetch is player-signed, 1 GEAR, BYTE.balanceOf > 0, per-wallet 60s cooldown until escrow is empty. Empty escrow = animation only. Do not promise 60 GEAR/hour.
• Junkyard doors are scenery. Drive = any GEAR. Junkyard gate = 100 GEAR (reads only).
• Treasury address is constructor-immutable. x402 cosmetics later. No new token.
Pattern: Cloned from Midas Gate (0x54c3c8c9e2180c6b90652983d1c15cf933f1a263). Admin rights strictly tied to the holder of DebtReliefFam NFT #1793 on Base (0xc659c002f06f980f2caa577748504e9be7f26146).
Total Calculation Without Loops: To avoid out-of-gas enumeration, the admin registers collections alongside an explicit ID range: (address collection, uint256 startId, uint256 endId). Total eligible NFTs is calculated on-chain via sum(endId - startId + 1). Cost: under 15k gas.
Immutability: Removing a collection affects future drops only; snapshots in Drop Vault preserve past claims.
Purpose: Holds community-funded DRB. Dispenses one packetSize per cooldownSeconds into the Drop Vault.
Public Function: fillOil(). Takes zero amount arguments from the caller to eliminate manipulation. Reverts if balance < packetSize or if cooldown is active.
Split Distribution: Packet size minus caller bounty transfers to Drop Vault; fixed callerBounty (1 DRB) transfers directly to msg.sender.
Admin Knobs: Admin NFT holder #1793 can tune packetSize and cooldownSeconds. Cannot rug or redirect held tokens.
Funding: Restricted to calls from Oil Escrow via fundFromEscrow(uint256 netAmount). The vault receives netAmount = packetSize - callerBounty (9 DRB out of 10) while callerBounty (1 DRB) transfers directly to msg.sender. The 1 DRB caller bounty never enters the Drop Vault split. Takes a real-time snapshot of active collections and eligible counts directly from Gate Registry.
Days 0–7: 100% claimed by current NFT holder of that token ID.
Days 7–14: Scavenger window. Any wallet with ≥ 1,000 GEAR can claim unclaimed bags for 90% payout; 10% routed to immutable treasury.
Day 14+: Holder of Admin NFT #1793 triggers sweepExpired(dropId). 90% recycled directly back to Oil Escrow, 10% to treasury.
Purpose: Holds GEAR tokens. Distributes exactly 1 GEAR per transaction.
Token Gate: Requires dust BYTE (BYTE.balanceOf(msg.sender) > 0).
Gas Requirement: Caller pays Base L2 network gas.
Cadence & Escrow: 1 GEAR per wallet per 60s cooldown until escrow is empty. Empty escrow = animation only. Do not promise 60 GEAR/hour.
Step 1: Street Arcade Collection: Player roams the top-down canvas picking up cans. Client holds can inventory up to a capped batch of 10 cans.
Step 2: Deposit at SUV: Player interacts with the red SUV to deposit the 10 cans into the tank.
Step 3: Public fillOil() & Global Cooldown: Cans stay local HUD only (cap 10) to unlock the in-game pump button. The on-chain fillOil() function is completely public with zero amount or can arguments. Keepers may call the same function with no cans. The contract enforces a 10-second global tank cooldown to prevent same-block collisions. There is no per-wallet cooldown in beta.
Step 4: Split Distribution: The Oil Tank contract releases 10 DRB: 9 DRB routes into the Drop Vault for NFT holders/scavengers, while 1 DRB transfers immediately to msg.sender as a fixed caller bounty for pumping the tank.
Bot Dynamic: If an automated keeper bot calls fillOil() first, the bot pays the network gas and earns the fixed 1 DRB caller bounty, while the 9 DRB still drops into the community vault. The game loop never stalls.
The Proposal: A 3-step contract where the browser triggers Call 1, solves a captcha, and triggers Call 2 within a 10-second window to release 10 DRB.
EVM Execution Reality: Smart contracts are public and deterministic. A bot monitoring the mempool or the public blockchain can call both Contract 1 and Contract 2 within the exact same block (or even via a single atomic smart contract transaction) in under 20 milliseconds. Furthermore, on-chain code cannot independently verify whether a web user solved an image captcha in their browser without an off-chain cryptographic signature.
The Real Solution (Option A — Fixed Caller Bounty): Instead of fighting bots with brittle on-chain timers, offer a fixed callerBounty (1 DRB) inside fillOil(). MEV searchers and keepers will happily pay Base gas 24/7 to pump the tank the instant the 10-second global cooldown resets, completely removing the need for you to run servers or pay gas.
The Real Solution (Option B — EIP-712 Signed Turnstile): If you strictly require human verification before a relayer submits gas, the user solves an off-chain Cloudflare Turnstile in the browser. A lightweight serverless backend verifies the token and signs an EIP-712 permit: (userAddress, nonce, deadline). The relayer submits the transaction only when the signature is valid.
Most Web3 games print inflationary reward tokens that collapse to zero value. CAPs Garage creates zero new tokens. Instead, it activates three existing market tokens on Base:
DRB (Fuel): Acts as the reward pool. Community members and sponsors deposit DRB to fuel airdrops to partner NFT communities.
BYTE (Acquisition Tool): Holding dust BYTE lets the player claim 1 GEAR per 60s from BYTE until the escrow is empty.
GEAR (Utility Key & Sieve): Required to drive vehicles, unlock high-tier junkyards (100 GEAR), and scavenge abandoned reward pools (1,000 GEAR).
The contract features an immutable treasury address set at deployment (e.g. 0xA12506f742F4AB0980a57264871DB56A1A150793). There are no admin override keys or backdoor withdrawal functions.
Revenue Source: When eligible NFT holders fail to claim their rewards within 7 days, open-market scavengers claim the assets, generating an automatic 10% fee directly into the cold treasury.
Unclaimed Dust Sweep: After 14 days, all remaining unclaimed rewards are swept: 90% is recycled into the game's fuel tank, and 10% is remitted to the treasury.
Traditional games require centralized game servers, databases, AWS hosting, and monthly maintenance retainers. CAPs Garage is built entirely serverless:
Frontend: Static files hosted on decentralized IPFS or Arweave at virtually zero cost.
Execution Layer: Base smart contracts. Gas for reward distributions can be completely crowdsourced or captured by decentralized arbitrage bots via caller bounties.
Top of Funnel: Anyone can roam the street arcade without a wallet, picking up virtual cans.
First Conversion: Dog offers 1 free GEAR. User connects a wallet to claim.
Second Conversion: User discovers driving requires holding GEAR, and the 500-door Junkyard requires 100 GEAR.
Whale Conversion: Users acquire 1,000+ GEAR to operate automated scavenger operations that harvest expired airdrop pools.
Imagine loading up a retro 16-bit arcade game like Pokémon or Earthbound directly in your browser. You spawn on an urban street beside a broken-down red SUV with big tires.
You can start running around immediately using your arrow keys. You spot shiny yellow oil cans on the pavement and walk over them to collect them. Your oil counter ticks up: 1, 2, 5, 10 cans!
You don't need an account, a password, a credit card, or a crypto wallet to enjoy the core arcade loop.
While exploring the map, a friendly dog named BYTE trots over to your character. BYTE barks and brings you a tool: 1 GEAR (1 GEAR per wallet per 60s until escrow is empty).
If you don't have a digital backpack connected yet, the game simply asks: "Want to keep this tool? Connect a wallet and stash it in your inventory, or it hits the dirt."
If you connect, BYTE hands you the item. When the tool escrow is empty, BYTE still plays the fetch animation.
Walking is fun, but driving is better. Once you collect tools, you can walk up to the broken-down SUV and tap Repair.
As long as you have a GEAR in your inventory, your character hops into the driver's seat. Your speed doubles and you can drift across the asphalt, collecting oil cans at high velocity.
At the edge of town is a heavy chain-link gate leading to the Junkyard. To open the gate, the gatekeeper requires 100 GEAR in your pack.
Inside lies an enormous maze of 500 numbered garages. The doors are randomized and shrouded in fog of war. You can drive your SUV through the alleys, discover hidden oil stations, and look for secret doors.
| Normal Web2 Mobile Game | CAPs Garage Experience |
|---|---|
| Game company can ban your account and delete your items. | Items are stored in your wallet. You own them forever. |
| Forced credit card purchases ($0.99 energy packs). | Free to roam. Dog gives you free items on a minute timer. |
| Servers get shut down after 2 years when company goes bust. | Smart contracts live permanently on Base. Game cannot be deleted. |
| Virtual currency cannot be traded outside the app. | DRB oil and GEAR tools can be traded or swapped freely at any time. |
Requirement: Hold dust $BYTE in your wallet on Base (BYTE.balanceOf > 0).
The Play: BYTE the dog trots over with 1 $GEAR. Player signs the transaction and pays Base network gas.
BYTE fetch is player-signed: 1 GEAR per wallet per 60s until the escrow is empty. Empty escrow = animation only. Do not promise 60 GEAR/hour.
When the oil tank pumps, real DRB drops into the vault split across all registered NFT collections (Letters to CAP, Midas, etc.).
Days 0–7: The NFT holder has 7 days to claim their 100% allocation.
Days 7–14 (The Scavenge Arena): If the holder is asleep, on vacation, or forgot to check the dApp, ANY degens holding ≥ 1,000 GEAR can step in, call claimScavenger(), and snatch 90% of their rewards right out of their hands. 10% goes to the treasury as a cleanup fee.
Instead of relying on a centralized server to pump oil into the drop vault, we attach a fixed 1 DRB caller bounty to fillOil().
Base arbitrage bots and keeper bots will monitor the contract 24/7. The millisecond the 10s global cooldown expires, bots frontrun each other, pay the network gas out of their own pocket, and execute the drop for the community just to grab that 1 DRB reward.
Whatever unclaimed dust survives past Day 14 gets swept by the Admin NFT (#1793). 90% is injected directly back into the Oil Escrow tank to fund the next wave of drops.
The tokens never leave the ecosystem. Unclaimed tokens feed new drops, which feed scavengers holding GEAR.
| Asset / Action | What You Need | What You Get |
|---|---|---|
| Drive SUV | ≥ 1 GEAR | 2x movement speed in street & junkyard maze. |
| Dog Fetch | > 0 BYTE | 1 GEAR per wallet per 60s until the escrow is empty. |
| Junkyard Gate | ≥ 100 GEAR | Access to 500-garage maze and secret oil stations. |
| Vulture Scavenge | ≥ 1,000 GEAR | Steal 90% of unclaimed NFT airdrops on days 7–14. |
| Sweep Leftovers | DebtReliefFam #1793 | Mop up expired drops: 90% back to oil tank, 10% to cold treasury. |