ISS.PROTOCOL
Specification

Docs · Shibanaut v0.5

Reference for the International Shiba Station collection. Covers the shipping spec — trait catalog, on-chain art layer stack, the five-contract suite, and the placement system that pins each token to a station slot.

At a glance
Chain
Ethereum mainnet
Supply cap
2,000
Combinatorics
9,600 unique
Native sprite
64×64 px
Mint mechanic
V4 afterSwap
Storage
100% on-chain
Deployment model

Shibanaut is a fully on-chain generative collection on Ethereum mainnet. SVGs render directly from tokenURI() — no IPFS, no Arweave, no server. Mints are gated by a Uniswap V4 afterSwap hook on the canonical $ISS pool.

Chain choice rationale. Post-Pectra/Fusaka, sustained mainnet gas at ~0.1 gwei makes the swap+mint mechanic economically comparable to L2 alternatives (~$0.12 per mint at $3,000 ETH). Mainnet wins on durability, decentralization, and collector prestige for a permanent fully-on-chain collection. Testnet: Sepolia.

Trait catalog

Six trait categories. Body is mandatory; the other five overlay onto a canonical sprite that already bakes in the bubble dome, the white suit baseline, the happy face, and a small utility tool in the right paw.

Body

5 variants · always present · derived as palette swaps from one canonical sprite
IDNameWeightNotes
0Cream 25%Palette swap
1Red 30%Canonical sprite
2Sesame 25%Palette swap
3Black & Tan 15%Palette swap
4White 5% Palette swap · rarest body

Suit

4 variants · Standard White is the baked-in baseline (no overlay)
IDNameWeightNotes
0Standard White45%No overlay — baked into body
1Mission Red 25%GPT generation
2Steel Gray 20%Palette-snapped from Deep Blue
3Cargo Yellow 10%Palette-snapped from Cargo Orange

Glasses

6 variants · Gold Aviators is founder-locked (tokenIds 1–100 only)
IDNameWeightNotes
0None 35%No overlay
1Round Spectacles 20%
2Aviators 15%
3Visor Shades 15%
4Monocle 10%
5Gold Aviators5%Founder-locked · re-rolls for tokenId ≥ 101

Emblem

4 variants · paints into the chest patch on the suit
IDNameWeightNotes
0None 40%No overlay
1Mission Patch 30%
2Star 20%
3Skull 10%

Accessory

5 variants · overrides the baked-in utility tool in the right paw
IDNameWeightNotes
0None 40%Baked utility tool remains visible
1Coffee Mug 25%
2Wrench 15%
3Flag 12%
4Bone 8%

Backpack

4 variants · drawn behind the body so it visibly extends past the silhouette
IDNameWeightNotes
0None 50%No overlay
1O2 Tank 25%
2Solar Panels 15%
3Jetpack 10%

Combinatorics: 5 × 4 × 6 × 4 × 5 × 4 = 9,600 unique combinations across a 2,000-supply collection. Expected duplicate trait sets: ~420. Mint block timestamps in metadata distinguish otherwise-identical mints.

Layer stack

Render order is back-to-front. Body is always present. Backpack is the only layer drawn behind it; everything else stacks on top.

L0Backpack overlayOptional · behind
L1Body base — fur + suit baseline + dome + face + utility toolRequired
L2Suit overlay (replaces white torso/arms/legs)Optional
L3Emblem overlay (chest patch)Optional
L4Glasses overlay (visible through dome)Optional
L5Accessory overlay (replaces baked-in tool)Optional
Contract suite

Five contracts. The Descriptor is forked from Nouns and holds all the RLE trait bytes; the rest are project-specific.

Token
ERC-20 $ISS. The token traded in the gated V4 pool. Holding it does not mint — only swapping into it through the hook does.
Seeder
Pure function. Maps the mint block hash and token ID to a 6-field trait seed via weighted bit-slicing. Re-rolls Gold Aviators outside the founder window.
Descriptor
Nouns-forked. Stores RLE-encoded trait bytes, decodes & renders SVG, returns base64 metadata data URI. ~15–16 KB.
NFT
ERC-721. The mint entry point is restricted to the hook contract. tokenURI() defers to the Descriptor.
Hook
V4 afterSwap hook. The single entry point that triggers a mint. See the Hook page for the full flow.
Metadata schema

tokenURI(uint256) returns a base64-encoded JSON data URI. The image is itself a base64-encoded SVG inlined in the JSON — no external resource is ever required to render a Shibanaut.

// tokenURI(1337) → data:application/json;base64,...  decoded:
{
  "name":        "Shibanaut #1337",
  "description": "Resident of the International Shiba Station...",
  "image":       "data:image/svg+xml;base64,PHN2Zy4uLg==",
  "attributes": [
    { "trait_type": "Body",       "value": "Sesame"       },
    { "trait_type": "Suit",       "value": "Cargo Yellow" },
    { "trait_type": "Glasses",    "value": "Aviators"     },
    { "trait_type": "Emblem",     "value": "Star"         },
    { "trait_type": "Accessory",  "value": "Wrench"       },
    { "trait_type": "Backpack",   "value": "Solar Panels" },
    { "trait_type": "Mint Block", "display_type": "number", "value": 18742019 }
  ]
}
Placement system

Each token gets a permanent slot on the station the moment it mints. Placement is sequential: tokenId N takes slot N in the canonical manifest. The manifest is published off-chain alongside the frontend, read once at load time, and never mutated.

Slots are partitioned into five modules so the station feels like a crewed habitat instead of a uniform grid.

ModuleSlotsNotes
Command Deck100Tokens 1–100 (founder window)
Habitat 200Largest cluster · general crew
Observatory 60
Hydroponics 60
Cargo Dock 80
Total 500Sized for v1 supply at realistic adoption

Capacity scales by adding new wings to the station, not by inflating existing modules.

Open decisions

These do not block contract work but must be resolved before mainnet launch.

  • Mint threshold — USD value of $ISS needed in a swap to trigger a mint.
  • V4 pool fee tier — 0.30% or 1.00%.
  • Initial liquidity — amount of $ISS + ETH seeded into the pool.
  • Supply cap re-confirmation — currently 2,000.
  • Founder window size — currently 100 (locks Gold Aviators).
  • Station art production path — commission, AI-generate, or hybrid.