Assato
4444 pixel dwellers, fully onchain.
Pick a number. Its dweller is yours.
Twenty-nine wake from any number.
The thirtieth answers only to repdigits.
Plate I — Specimens
29 by roll · 1 by repdigit
Every number wakes one of thirty species: a pixel dweller in one of nine body forms, printed in process inks on white, with hollow eyes the page shows through, a top that usually breaks into drifting fragments and a thin drop shadow. Its eyes never blink. Awake, it glitches: now and then it twitches half a cell and a few pixels flicker out and back. Asleep, it holds still, a lid drawn halfway down each eye. Pick one to see how the engine draws it.
Specimen 1 of 30
No. 2262CommonPreview only
Harlequin
Harlequins keep the fairground lights of Asa, and their coats never agree on a colour.
How the engine draws it
Diagonal checker: ink on every other diagonal, a shuffled five-colour run between; 4 in 10 slip a step partway down.
Odds3.45% of numbers · about 1 in 29
Harlequin holds rolls 0–344 of 10,000
Label · No. 226222 traits onchain
- Motif
- Glitched Checker
- Palette
- Process
- Form
- Cone
- Height
- Mid
- Antenna
- Bulb
- Stance
- Grounded
- Mouth
- None
- Arms
- Up
- Dissolve
- Heavy
- Facing
- East
- Eyes
- Wide
- Pattern
- None
- Tier
- Common
Plate II — Inks
6 rolled · 2 earned
After its species, a number rolls 0–99 for its ink: process inks printed on white. Each square below is one roll.
Rolled · 6 inks · 100 in 100
Earned · never rolled
Harlequin in Process · No. 17180
Preview only
Harlequin in all six rolled inks
Six rolled inks, each a real number drawn alike. Aurum and Void are earned, never rolled.
Rarity lives in the digits.
The hash draws the rest.
Read a number
Rules, in order
- Repdigit: no match
- Echo: matches
- Run: not checked, an earlier rule matched
- Round: not checked, an earlier rule matched
- Mirror: not checked, an earlier rule matched
909090: 90, three times.
Nearest
No. 909090Preview only
Rare · Echo- Set by the digits
- Tier Rare
- Ink Aurum (the hash rolled Process, 16 of 100)
- Crown yes
- Drawn by the hash
- Species Confetti (roll 928 of 10,000)
- Form Tall (roll 27 of 100)
- Height Low
- Facing West
- Antenna None
- Stance Legged
- Arms None
- Eyes Single
- Mouth None
- Dissolve None
- Motif 13 Pieces
- Claim
- Protected claim: seal, then claim. — Rare per wallet. 141 exist · — free
Four tiers
Counts are exact for 1–999999
- Ultra Rare
1 in 18,519
Repdigit · every digit the same
Singularity · Void · magenta bulb
— free of 54
— per wallet · protected claim
- Rare
1 in 7,092
Echo 81 · Run 33 · Round 27
Aurum · crown · gold bulb
— free of 141
— per wallet · protected claim
- Uncommon
1 in 514
Mirror · reads the same backwards, 3+ digits
Bulb in the ink’s deep colour
One transaction
- Common
99.8% of numbers
No pattern
Nothing forced. The hash draws it all.
One transaction
Common and Uncommon claimed together: —
The 195
—
Every protected number. Filled = claimed. Select one to read it.
Repdigits · 54
—Echoes · 81
—No aa aa aa: those are repdigits.
Runs · 33
—Rounds · 27
—Rules are checked in this order: Repdigit, Echo, Run, Round, Mirror.
Live counts appear at launch.
Seven parts, all onchain.
Every formula in plain sight.
- Supply
- 4,444At launch
- Price
- 0.0005 ETHAt launch
- Per wallet
- 20At launch
- Rare caps
- 1 Ultra · 3 RareAt launch
- Royalty
- 10%At launch
- Chain
- Sepolia
- Signs nothing
Step 01: Connect
Any browser wallet.
Every wallet in the browser is listed with its own icon. Connecting shares an address; nothing is signed, nothing is spent.
network = Sepolia (chainId 11155111)contract = revealed at launch - 1–999999
Step 02: Choose a number
Any number from 1 to 999999, or roll the dice.
The art is a pure function of the number, so the preview is the mint. Each number is claimed once, ever. Ask for 5, 10 or more and the site draws free ones for you.
seed ∈ 1..999999 seedInfo(seed) → (valid, taken, tokenId, pattern, tier) art = engine(seed) // the preview is the mint - 0.0005 ETH each
Step 03: Claim
One transaction. Rare numbers: a protected claim in two.
Common · Uncommon
mintmintedOne transaction · up to 20 per wallet.
mint(uint32[] seeds) value = 0.0005 ETH × nRare · Ultra Rare — protected
seal≥ 1 blockclaimSeal a hash first (gas only). One block later, claim and pay. A seal lives 24 hours. 1 Ultra Rare · 3 Rare per wallet.
commit(keccak256(abi.encode(minter, seeds, salt))) // ≥ 1 block later, ≤ 24 h claim(uint32[] seeds, bytes32 salt) value = 0.0005 ETH × nLimits: First come, first served. Caps limit wallets, not people. A bot holding seals for all 195 rare numbers can still claim yours first once your claim is public; a private RPC (Flashbots Protect, MEV Blocker) hides it until it lands. A failed transaction returns your ETH; overpayment is refunded.
- 2,139 patterned
Step 04: Rarity
Rarity lives in the digits.
The rules are checked in order (Repdigit, Echo, Run, Round, Mirror) and the first match sets the tier. Counts are exact for 1–999999.
Read a numberTiers, their digit patterns and how many numbers from 1 to 999999 have each Tier Pattern Numbers Ultra Rare Repdigit 54 Rare Echo · Run · Round 141 Uncommon Mirror 1,944 Common everything else 997,860 - 6 moons max
Step 05: Orbit Docking
Dock one dweller onto another. Six moons at most.
- Host
- 2764
- Moons
- 6/6
A docked dweller becomes a moon in its species colour, in the white margin beside its host. Either owner can undock; a transfer undocks. Owners can close a dweller to other holders’ moons.
dock(sat, host) undock(sat) // owner of sat or host setDockingOpen(id, open) maxSatellites = 6 - 30 blocks ≈ 6 min
Step 06: Planetary Alignment
Every dweller aligns for 30 blocks, about every 6 hours.
Period and phase come from its number. While aligned, its bulb takes the ink’s star colour and its owner can add one star per window, up to seven. Stars light the floor.
Window · 30 blocksPeriod · ——
h = uint256(keccak256(abi.encode(seed))) period = [1789,1801,1811,1823,1831,1847,1861,1867][h & 7] phase = (h >> 3) % period aligned = (block.number + phase) % period < 30 // ≈ 6 min - 4 contracts
Step 07: Onchain
Four contracts draw the SVG and write the JSON.
AssatoSpeciesfills the speciesAssatoArtdraws the cellsAssatoRendererwrites SVG + JSONAssatoholds the numberThe Seed trait is the number itself, one of 22 traits. The site’s engine matches the Solidity renderer byte for byte. ERC-4906 refreshes metadata. No IPFS, no server.
tokenURI(id) → data:application/json;base64,… // SVG inside {"display_type":"number","trait_type":"Seed","value":909090}