π 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.
Sharing & deep links
π₯± 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.