Beasts is a fully onchain NFT collection featuring 75 unique monster species that integrate with the Loot Survivor game ecosystem on Starknet. Each Beast is dynamically generated with unique attributes, names, and artworkโall stored and rendered directly from the blockchain.
The Beasts are a collection of digital-native creatures, born onchain and built for battle. With 1,243 variants across 75 species, the fixed supply of 93,225 Beasts balances abundance and scarcity. Beasts carry two sets of traits: visual and combat.
- Visual traits power collecting: Shiny and Animated forms activate pixel-perfect effects. Each Beast has live ranking within its species (1โ1,243) that updates as new Beasts are minted; once a species is complete, a King Beast is crowned.
- Combat traits power play: On mint, a Beast includes level and health. Together with its type and tier, this defines a combat profile compatible with the Loot Survivor system that first brought Beasts into the world.
- Live, credibly neutral traits such as Adventurers slain, last Adventurer who defeated a Beast, and timestamp of that defeat enable long-term growth systems without hardcoding game logic.
- Beasts are earned by worthy Adventurers in the dungeons of Loot Survivor using verifiable randomness. Every step is etched onchain for permanent provenance. For collectors, Beasts offer verifiable scarcity and provenance; for players, they unlock endless onchain fun.
- ๐จ Fully Onchain Artwork: Every Beastโs image data and metadata are generated onchain
- ๐ฎ Born Onchain: Beasts emerge from the dungeons of Loot Survivor
- โ๏ธ Battle-Ready: Each Beast is minted with level and health and is compatible with the Loot Survivor combat system
- ๐๏ธ 75 Unique Species: From mystical Warlocks to fierce Minotaurs, each with distinct visual traits
- ๐ Tiered Rarity System: 5 tiers with visual indicators through border colors and effects
- Scarb 2.10.1
- Starknet Foundry 0.46.0
- Cairo Coverage 0.5.0 (for test coverage)
- Clone the repository:
git clone https://github.com/Provable-Games/beasts.git
cd beasts- Build contracts:
scarb build- Run tests:
snforge testsrc/
โโโ lib.cairo # Entry point; exposes modules and ERC721 contract (beasts_nft)
โโโ pack.cairo # Attribute packing (id, name parts, level, health, shiny, animated)
โโโ beast_definitions.cairo # 75 species definitions and names
โโโ beast_manager.cairo # Validation and uniqueness hashing
โโโ beast_ranking.cairo # Per-species live ranking + king logic
โโโ metadata_generator.cairo # Onchain JSON metadata generation
โโโ beast_svg.cairo # Dynamic SVG artwork generation
โโโ minting_coordinator.cairo # Single and batch mint prep
โโโ interfaces.cairo # External interfaces (image data providers, systems)
Each Beast is efficiently packed into 53 bits:
PackableBeast {
id: u8, // 7 bits - species (1โ75)
prefix: u8, // 7 bits - name prefix
suffix: u8, // 5 bits - name suffix
level: u16, // 16 bits - level
health: u16, // 16 bits - health
shiny: u8, // 1 bit - visual trait
animated: u8, // 1 bit - visual trait
}- ๐ฎ Magical: Mystical creatures with arcane powers
- ๐น Hunter: Swift and agile predators
- โ๏ธ Brute: Raw strength and physical dominance
- Tier 1: Orange borders (Legendary) - Most powerful beasts
- Tier 2: Purple borders (Epic)
- Tier 3: Blue borders (Rare)
- Tier 4: Green borders (Uncommon)
- Tier 5: White borders (Common) - Entry level beasts
Run the comprehensive test suite:
# Run foundry with coverage
snforge test --coverage
# Summarize coverage locally
lcov --summary coverage/coverage.lcovCI enforces formatting and coverage on patches (โฅ35%); aim for โฅ80% overall when feasible.
- Configure environment variables:
cp .env.example .env
# Edit .env with your configurationRequired in .env (no defaults are assumed):
STARKNET_ACCOUNT,STARKNET_PRIVATE_KEYRPC_URL(e.g., Sepolia or Mainnet endpoint)NAME,SYMBOLOWNER,ROYALTY_RECEIVER,ROYALTY_FRACTION(u128, denominator 10,000)
Optional in .env:
TERMINAL_TIMESTAMP(u64, default0): UNIX timestamp (seconds) after whichtoken_uriis disabled and calls revert. Use0to keeptoken_uriactive indefinitely.DEATH_MOUNTAIN_ADDRESS(ContractAddress, default0): external systems integration address; set to0to disable.
- Deploy to Starknet:
bash scripts/deploy.shNotes:
- The script declares and deploys the four image data provider contracts, then deploys the core NFT with their addresses passed to the constructor.
- The script fails with a descriptive error if any required
.envvalue is missing. - The deploy script reads
TERMINAL_TIMESTAMPandDEATH_MOUNTAIN_ADDRESSand appends them to the constructor. IfTERMINAL_TIMESTAMP > 0, after that time,token_uricalls revert withTerminal: token_uri disabled.
- Run formatter before committing:
scarb fmtThe project uses GitHub Actions for:
- Linting (scarb fmt --check)
- Testing with fuzzing
- Coverage verification (patch โฅ35%)
- Beast pixels from the legends at 1337 Skulls
- Play Loot Survivor
- Discord Community
- Beast NFT
- Regular PNG URI
- Shiny PNG URI
- Regular GIF URI
- Shiny GIF URI