Smart Contracts
All Litany assets are fully onchain. The contracts generate, store, and render every NFT without external dependencies.
Contract Addresses
| Contract | Address |
|---|---|
| LitanyCards | 0xd44abe71c312FCAf73cC20f7DF61C39A89C203eB |
| LitanyRenderer | 0x4044dA12e3d20A865A733802F84F7bDb4892Ce0C |
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() → uint256Reading 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) → stringOwnership
function balanceOf(address owner) → uint256
function ownerOf(uint256 tokenId) → addressFor Game Developers
If you’re building a game that uses Litany Cards:
- Call
getCardText(tokenId)to read the card’s seven text fields - Map the phrases to your game’s stat system however you choose
- 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
| Platform | URL Pattern |
|---|---|
| OpenSea | https://opensea.io/item/abstract/0xd44abe71c312fcaf73cc20f7df61c39a89c203eb/{tokenId} |
| Abscan | https://abscan.org/token/0xd44abe71c312FCAf73cC20f7DF61C39A89C203eB?a={tokenId} |
| Litany Inventory | https://litany.gg/inventory |
Standards
| Standard | Usage |
|---|---|
| ERC-721 | NFT ownership |
| ERC-2981 | 10% royalty enforcement |
| Onchain SVG | tokenURI returns base64-encoded SVG |
| Base64 JSON | tokenURI returns data:application/json;base64 |
Supply
| Parameter | Value |
|---|---|
| Max Supply | 8,000 |
| Mint Price | 0.0025 ETH |
| Team Mint | 200 (pre-minted) |
| Public Supply | 7,800 |