Smart Contracts

All Litany assets are fully onchain. The contracts generate, store, and render every NFT without external dependencies.

Contract Addresses

ContractAddress
LitanyCards0xd44abe71c312FCAf73cC20f7DF61C39A89C203eB
LitanyRenderer0x4044dA12e3d20A865A733802F84F7bDb4892Ce0C

Network: Abstract mainnet(chain ID 2741). RPC: https://api.abs.xyz. Explorer: abscan.org.

Architecture

Litany uses a two-contract architecture for the Litany Card collection:

LitanyRenderer — Holds all content pools and SVG generation logic. Deployed once. Immutable. Pure view functions.

LitanyCards — The ERC-721 mint contract. Stores attribute indices. Calls the renderer for tokenURI. Implements ERC-2981 for 10% royalties.

This split keeps the mintable contract lightweight while allowing the renderer to hold all the content data needed for onchain SVG generation.

Key Interfaces

Minting

function mint(uint256 quantity) external payable

// quantity: 1 to MAX_PER_TX
// value: mintPrice() * quantity
// Protected by nonReentrant and whenNotPaused

// Check state before minting:
function mintActive() → bool
function mintPrice()  → uint256
function totalSupply() → uint256
function MAX_SUPPLY()  → uint256   // 8,000
function MAX_PER_TX()  → uint256

Reading Litany Card Data

Any external contract or agent can read Litany Card data:

// Structured text — the primary agent interface
function getCardText(uint256 tokenId) → (
    string name,
    string className,
    string speed,
    string aggression,
    string caution,
    string precision,
    string trait
)

// Packed indices — for rarity analysis
function getCardIndices(uint256 tokenId) → uint256

// Full metadata + onchain SVG
function tokenURI(uint256 tokenId) → string

Ownership

function balanceOf(address owner) → uint256
function ownerOf(uint256 tokenId) → address

For Game Developers

If you’re building a game that uses Litany Cards:

  1. Call getCardText(tokenId) to read the card’s seven text fields
  2. Map the phrases to your game’s stat system however you choose
  3. The card’s meaning in YOUR game is up to you

This is the composability model. Your game decides what “Reaction Time: Before the Signal” means. Another game decides differently. Both are valid. The Litany Card is just the config.

Viewing Cards

PlatformURL Pattern
OpenSeahttps://opensea.io/item/abstract/0xd44abe71c312fcaf73cc20f7df61c39a89c203eb/{tokenId}
Abscanhttps://abscan.org/token/0xd44abe71c312FCAf73cC20f7DF61C39A89C203eB?a={tokenId}
Litany Inventoryhttps://litany.gg/inventory

Standards

StandardUsage
ERC-721NFT ownership
ERC-298110% royalty enforcement
Onchain SVGtokenURI returns base64-encoded SVG
Base64 JSONtokenURI returns data:application/json;base64

Supply

ParameterValue
Max Supply8,000
Mint Price0.0025 ETH
Team Mint200 (pre-minted)
Public Supply7,800