πŸ“œ The Blaze Papers ← back to sonicblaze.xyz

πŸ“œ The Blaze Papers / NFT Viewer Suite

πŸŽ’ NFT Viewer Suite

One tool, two modes: your own wallet, or any collection, no wallet required. Lives at nftviewer.html.

Two modes

πŸ₯± degen tl;dr

My NFTs mode connects your wallet (MetaMask or WalletConnect β€” mobile works too) and shows what you actually hold. Browse mode needs zero wallet connection at all β€” paste any of the tracked collection addresses and see every token, who owns it, and the biggest holders, just by looking. Nobody has to sign anything to window-shop. πŸ‘€

"Tracked here" is not the same as "whitelisted at the faucet." The gallery and the faucet's NFT boost are two separate lists, and since 2026-08-10 they genuinely differ: $HEDGY Hogs πŸ¦” is browsable here but is not on the faucet contract's on-chain whitelist, so holding one gets you the gallery and no faucet cooldown discount.

The faucet list only changes when the owner sends a transaction; the gallery list is ours to curate. 🀝

πŸ€“ the nerd stuff

My NFTs (wallet mode): connects via window.ethereum or WalletConnect, then discovers holdings per collection using the appropriate strategy for that collection's capabilities (enumerable ERC-721 walk, offline index lookup, or ERC-1155 probe), and verifies every result on-chain before display.

Browse (wallet-free): renders every token in a collection plus its current owner and a whale/top-holder list, entirely from precomputed data β€” zero chain calls to open the grid. Deep-link directly to a collection with a ?collection=<address> query parameter.

Traits & BLAZE-Calculatedβ„’ rarity

πŸ₯± degen tl;dr

Click any token in browse mode and a modal pops up with its image, its traits, and a rarity rank we compute ourselves β€” the "BLAZE-Calculatedβ„’" number. Not every collection can be ranked (some are all unique 1-of-1s with nothing to compare), and those get honestly labeled "unrankable" instead of a fake rank. πŸ†

πŸ€“ the nerd stuff

Rarity is computed with a trait-frequency method, the same general approach popularized by rarity.tools: rarer trait values (lower frequency across the collection) contribute more to a token's rank. Data comes from a lazily-loaded per-collection sidecar file, fetched only when a card is opened β€” browsing the grid itself makes no chain calls and loads no trait data up front.

An absent trait (a trait type the token simply doesn't have) is tracked as its own distinct counter, and is not conflated with a trait that is literally valued the string "None" β€” some collections genuinely have a trait value called "None" (e.g. a "Back" slot that can be empty), and treating that the same as "trait absent" would misrepresent both.

Collections with fewer than 2 rankable trait types (effectively, collections of unique 1-of-1 art with nothing comparable across tokens) are marked unrankable rather than assigned an arbitrary rank. Tokens whose metadata could not be resolved from any gateway are left unranked rather than shown as falsely rare.

ERC-1155 & 1-of-1 collections

πŸ₯± degen tl;dr

Most NFT viewers assume every collection is standard ERC-721. Two of BLAZE's tracked collections aren't β€” they're ERC-1155 with every single token being a unique 1-of-1 (one owner, supply of exactly one, each). The viewer treats them like any other individually-owned collection instead of getting confused by the different token standard. 🎨

πŸ€“ the nerd stuff

Derpe Dewdz (99 tokens) and toona bros (35 tokens) are both ERC-1155 collections where every token id has supply exactly 1 and a single owner β€” genuine 1-of-1s, not multi-edition prints.

Both browse (via the owner-per-token index, ids discovered from on-chain Transfer logs) and wallet mode (via the same index-backed lookup used for non-enumerable ERC-721) route these collections through the ordinary single-owner path rather than a multi-edition view.

A pasted/unindexed ERC-1155 collection still falls back to a direct balanceOf probe against the registry's sample ids.

πŸ₯± degen tl;dr

Found a cool token? Share it. A share button on the detail modal generates a real link that unfurls nicely when posted anywhere β€” image, name, everything β€” no screenshot needed. πŸ”—

πŸ€“ the nerd stuff

Share buttons generate links to static share/<slug>.html unfurl pages carrying the correct Open Graph / Twitter Card metadata for that specific token, so link previews on social platforms and chat apps render the actual artwork rather than a generic site card. A collection can also be reached directly with a ?collection=<address> deep link into browse mode.

Transfers

πŸ₯± degen tl;dr

Sending an NFT is a two-step flow on purpose: fill in the recipient, then a confirm step shows exactly what's about to happen before anything irreversible fires. No accidental one-click sends. βœ‹

πŸ€“ the nerd stuff

The transfer form opens a confirm panel anchored to the specific card, showing the recipient address grouped for easy visual verification, before the actual on-chain transfer transaction is sent. This is deliberately a two-step confirm rather than a single click, because token transfers are irreversible.

Failsafes

πŸ₯± degen tl;dr

Both the metadata gateways and the RPC endpoints have backups. If one IPFS gateway or one Sonic RPC node has a bad day, the viewer just quietly tries the next one β€” you shouldn't notice. πŸ›‘οΈ

πŸ€“ the nerd stuff

IPFS gateways: a pool of five (filebase, pinata, dweb, w3s.link, nftstorage.link) β€” the runtime does one full pass across the pool plus a single retry pass, capped by an overall time budget per token so a hanging gateway can't stall a card indefinitely.

RPC endpoints: every read on every BLAZE page goes through one shared read-only provider backed by four verified Sonic RPC endpoints (soniclabs primary, then drpc / publicnode / tenderly), with automatic failover so a single endpoint outage doesn't blank the page.

The Arena

πŸ₯± degen tl;dr

The 🏟️ BLAZE Arena ranks the NFT tribes by how much BLAZE their members have burned β€” all-time, no seasons, no resets. Hold a tribe's NFT and every burn you make counts for them (hold many bags, bless many tribes). Whoever leads wears the πŸ‘‘. No wallet needed to watch. 🍿

πŸ€“ the nerd stuff

Standings are precomputed offline and shipped as static data with an "as of block N" freshness stamp β€” that per-tribe scoreboard makes zero chain calls. As of 2026-08-05 the page ALSO shows a small live ticker strip (three GLOBAL view calls, polled every 30s) so the numbers never look frozen between rebuilds; it fails silently to hidden if the chain is unreachable, and it never touches the tribe standings themselves.

Score = all-time BLAZE burned (transfers to 0x0 / 0x…dEaD) by wallets holding each collection, per the shipped owner indexes. Game loss-burns are re-attributed to the losing player via the flip event in the same transaction.

Burns from project wallets (treasury, faucet, game ops) sit in a visible, non-competing "πŸ›οΈ The House" row so totals still reconcile with the token's totalBurned(); wallets holding none of the tribed collections appear as "🌫️ lone wolves".

A tribe exists in the Arena exactly when a shipped owner index exists for it, so a newly registered collection joins the standings when its index is built, not the moment it is added to the registry. (Tribes follow the gallery list, not the faucet whitelist β€” $HEDGY Hogs πŸ¦” is a tribe without being whitelisted.) Multi-tribe wallets credit every tribe they hold β€” a stated feature, which is why the tribe columns intentionally sum to slightly more than the unique total.