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.

01
Connect your wallet
EVM browser wallet — MetaMask, Rabby, Phantom, or any EIP-6963 compatible
02
Mint, buy, or claim earnings
Hold any uMASK and yield accrues automatically. Claim anytime.

The thesis

/01

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.

/02

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.

/03

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.

/04

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 — rarity drives yield

Common
6,465
64.65% — 1× yield
Cursed
1,999
19.99% — 3× yield
Wraith
999
9.99% — 9× yield
Nightmare
481
4.81% — 27× yield
Legendary
46
0.46% — 65× yield
★ Mythic
10
0.10% — 200× yield

Mythic 1/1s — 10 of 10,000 (0.10%) — hand-crafted, named, 200× yield weight

Fully on-chain — read the contract

Every action runs directly against the uMASK contract — 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).