GTAVi
ERC-20i on Robinhood Chain · mission not yet unlocked · fan-made, not Rockstar

Mission briefing

Everything about GTAVi in one page. No token-sale language, just how the thing works.

The job

GTAVi ($GTAVI) is an ERC-20i: a normal ERC-20 token whose contract can also draw a picture for any balance. There is no separate NFT and nothing to mint. Hold whole tokens and the contract will render a ride for your wallet whenever anyone asks it to. Sell them and the picture changes. The art is a pure function of two numbers, your whole-token balance and your address, computed inside the contract at read time. Nothing is stored off-chain, not even the image.

It runs on Robinhood Chain, an Arbitrum-based L2 that settles to Ethereum and uses ETH for gas.

The ride

Every render is a vector scene the contract writes as SVG, set in one of five eras: Liberty City 2001 (flat-topped towers, the suspension bridge, pigeons), Vice City 1986 (art-deco towers, the blimp), San Andreas 1992 (desert dunes, the trestle, and the train that never stops crossing), Los Santos 2013 (the hills with the sign, the wedge tower downtown) and Leonida 2026 (the ocean, the beach, flamingos). Over it a gradient sky from the level's palette with a noon sun, a moon with stars, or the big dusk sun cut by synthwave scanlines; one to three palms swaying in the breeze; and the ride on the highway with spinning rims, a soft shadow, motion lines, neon underglow from two stars, exhaust flames from 160 mph and blue nitro at the stunt jump. Body style (muscle, super, lowrider), livery (solid, stripe, two-tone) and every colour come from the seed, so two wallets holding the same amount get different rides in different cities. San Andreas lowriders hop on hydraulics. In a browser the scene moves: lane markings stream past, rims spin, palms sway, the train crosses, the wanted stars flash at five.

step 0 · wasted
step 2 · 40 mph
step 4 · 80 mph
step 6 · 120 mph
step 8 · 160 mph
step 10 · stunt jump

The two things your balance controls directly are the wanted level and the speed. Under 21k tokens the scene is wasted, or busted if the cops got there first: the ride sits wrecked and smoking, the colour drains out, and the big letters come up. From 21k it rolls, and each band after that is faster, until at 2.62M the flames go blue and MISSION PASSED comes up along the bottom. That is the whole idea: accumulate and you take off, sell and you get wasted.

Wanted level

The five stars in the top-right corner are your wanted level, one to five, following the ERC-20i thresholds: 21k, 525k, 1.05M, 1.575M and 2.1M tokens, out of a fixed supply of 210M. Each level has its own palettes; five stars gets the VI gradient sky, a gold body, flashing stars, and the police chopper sweeping its searchlight over the scene. Below 21k there are no stars.

Speed steps

Eleven steps. Thresholds are in whole tokens. Steps 1 to 10 come in pairs per level; the second of each pair starts halfway through the level's band, so the ride speeds up more often than the palette changes.

stepfromspeedwanted
0< 21k GTAVIwasted☆☆☆☆☆
121k GTAVI20 mph★☆☆☆☆
2273k GTAVI40 mph★☆☆☆☆
3525k GTAVI60 mph★★☆☆☆
4787k GTAVI80 mph★★☆☆☆
51.05M GTAVI100 mph★★★☆☆
61.31M GTAVI120 mph★★★☆☆
71.57M GTAVI140 mph★★★★☆
81.84M GTAVI160 mph★★★★☆
92.1M GTAVI180 mph★★★★★
102.62M GTAVIstunt jump★★★★★

Rides and keepers

Your live balance is your ride: one dynamic scene that redraws on every transfer in or out. The seed is the whole-token part of your balance; the fraction below one token is ignored.

Deliver your exact whole ride (the whole-token amount, no more, no less) to another wallet and it does not merge into their balance as loose tokens. It arrives as a keeper: a fixed piece that keeps your address in its seed, parked separately from their own ride. They can pass it on the same way. If they sell any part of it, the keeper breaks back into ordinary tokens.

  • Receiving tokens grows your ride. Sending less than the whole ride shrinks it.
  • Keepers are enumerable per owner. Wallet lookup shows them under your ride.
  • Burning (sending to the zero address) reduces supply and your ride like any sell.

The garage

getGarageSvg(address) draws everything a wallet holds as one scene: the ride and every keeper parked in front of an open garage under that wallet's own sky, neon strip lit. Up to five rides are drawn; getGarageMeta(address) carries the true count. Like the rides, it is computed inside the contract at read time and cannot be edited.

0 rides
1 rides
2 rides
3 rides
4 rides
5 rides

The garage is the collecting game. The only way to add a ride to yours is to receive another wallet's exact whole balance, so full garages mean other players chose to hand you their keys. The site ranks the fullest garages under the Garages tab.

Launch rules

Trading starts when the deployer calls launch(pool) with the DEX pool address. Before that, only transfers to or from the deployer are possible. After launch a per-buy cap ramps from 0.05% of supply by 0.005% per second, reaching the full supply after about five and a half hours. There are no taxes, no blacklist, no pause, and no way to change the art after deployment.

Contract

Not deployed yet. This page updates with the address at launch.

The read surface that the site and the bots use:

functionreturns
rideOf(address)the wallet's dynamic seed (seed, extra)
keeperCount(address)number of keepers
keeperOfOwnerByIndex(address, i)the i-th keeper's seed
getSvg((seed, extra))the image, as SVG text
getMeta((seed, extra))JSON with level, step, speed, palette, time, era, year, body, livery, palms, prop, outcome, line, billboard, colours
getRide((seed, extra))the same traits as a struct
getGarageSvg(address), getGarageMeta(address), seedsOf(address)the wallet's whole set as one scene, its counts, and the raw seeds
holdersCount(), getHoldersList(from, n)enumerate holders
ridesTotalCount(), keepersTotalCount()totals

extra is keccak256(abi.encode(originalOwner)). For a ride that is the holder; for a keeper it stays the address of whoever first held those tokens as a ride.

Read it yourself

With Foundry's cast against any RPC:

# your dynamic seed
cast call $GTAVI "rideOf(address)((uint256,uint256))" $YOU --rpc-url $RPC

# the image
cast call $GTAVI "getSvg((uint256,uint256))(string)" "(800000,$EXTRA)" --rpc-url $RPC > ride.svg

Renders are heavy views. Call getSvg once per piece rather than through a multicall, or the node's per-call gas cap will trip.

FAQ

Do I need to mint?

No. Holding at least one whole token puts you on the map.

Why did my ride change?

Your balance changed. The image is recomputed from the current balance every time it is read.

Can the team change the art?

No. There are no setters. The renderer and palettes are fixed in the deployed bytecode.

Where is the image stored?

Nowhere. It is produced on demand by the contract. This site, the share cards and the bots all call the same function.

How do I give someone my ride?

Send them your exact whole-token balance. It arrives as a keeper in their garage. See rides and keepers.

Can I respray my ride?

No Pay 'n' Spray here. The body, the livery and the colours come from your address and your balance.

What is on the billboard?

Cluckin' Bell, with Big Smoke's order as the ad copy. About a third of rides get the billboard. San Andreas rides can also carry the order as their line: two number 9s, a number 9 large. The number 6 with extra dip, the number 7 and the two number 45s did not fit in the frame.

Why is there a train in my picture?

You got a San Andreas ride. All you had to do was follow it.

Is this Rockstar Games?

No. GTAVi is a fan-made on-chain art project with no connection to Rockstar Games or Take-Two Interactive. Grand Theft Auto is their trademark.

← back