uMASK
10,000 cursed nightmares living entirely on-chain.
Hand-coded vector SVG art. Hold to earn ETH yield from a 2/2 v4 hook tax —
the rarer your nightmare, the bigger your share.
The thesis
Fully on-chain SVG
Every NFT's image is generated and stored entirely in Solidity. No IPFS, no Arweave, no off-chain server. The art is computed at the moment tokenURI(id) is called.
Tier-weighted yield
Common (1×), Cursed (3×), Wraith (9×), Nightmare (27×), Legendary (65×), Mythic (200×). 4% Uniswap v4 hook tax routes 75% of all swap fees to NFT holders pro-rata to their yield weight.
10 named mythic 1/1s
Crown King. Phoenix Rising. Void Walker. Soul Eater. First Nightmare. Solar Saint. Cursed Bride. Iron Tyrant. Witch Queen. The Drowned. Hand-crafted, never re-rolled.
Hold to earn
No staking. No lockup. No claim fees. Yield accrues to every uMASK on every swap, in real time. claim() when you want, sell when you want, transfer when you want.
Tier distribution
Mythic 1/1s
Fully on-chain — read the contract
Every action runs directly against UrareToken.sol — state, math, and payouts. This UI is a convenience: you can call the contract from Etherscan, a script, or any RPC.
Contract functions
tokenURI(uint256 id) Returns base64-encoded JSON with image (SVG data URI) + traits. The art lives here.claimable(address holder) View — pending ETH yield earned by all your uMASKs since your last claim.claim() Withdraws pending yield to msg.sender. Pull pattern, pays in ETH.balanceOf(address holder) View — number of uMASKs you own. Standard ERC-721.ownerOf(uint256 id) View — current owner of a specific token.tier(uint256 id) View — returns 1=Common, 2=Cursed, 3=Wraith, 4=Nightmare, 5=Legendary, 6=Mythic.yieldWeight(uint256 id) View — returns 1, 3, 9, 27, 65, or 200 — your share multiplier.mythicName(uint256 id) View — for IDs 9991-10000, returns the named mythic string ("The Crown King" etc).mintRitual(uint256 maskCount, uint256 maxUpegCost) UPEG holders only. Reads spot UPEG/ETH price, applies 15% discount, slippage-protected.safeTransferFrom(...) Standard ERC-721 transfer. EOA → EOA, no royalty.royaltyInfo(uint256 id, uint256 salePrice) ERC-2981 — returns 2% royalty receiver + amount on contract-recipient transfers (marketplaces).