Reference

Docs

What the program does, the accounts it owns, the instructions it exposes, and the endpoints this site serves.

Overview

NFTITS is a wrapper around an ordinary SPL token. Lock 1,000,000 $NFTITS and the program mints one NFT whose vault is derived from that NFT's own mint address. Sell the NFT and the tokens move with it, in the same transaction, without anyone approving a transfer.

The cap follows from the supply rather than from a constant somebody chose: a billion tokens at a million per wrap is a thousand pieces, each of them 0.1% of the supply. Reaching all 1,000 would mean the entire supply is locked and nothing is left trading, so in practice the set never fills.

Nothing here is a new token standard. The wrapped asset is a standard Metaplex NFT and the locked asset is a standard SPL token, which is why both trade on existing marketplaces on day one.

Program IDDnzB7YfUeDLryWRYYDCtBngoYvSgMTyzr2RpUS6r2GAM
Token mint92ULP9FgN58UFXomEB2PPUsRdk46jdDyCZuF62XQpump
Tokens per nftit1,000,000
Token supply1,000,000,000
Maximum in circulation1,000 (supply ÷ tokens per nftit)

Quick start

  1. Hold 1,000,000 $NFTITS. That is one wrap. Two million is two wraps, and so on.
  2. Wrap. On /wrap the tokens leave your wallet for a vault and an NFT arrives in their place.
  3. Trade or unwrap. List the NFT anywhere, or burn it on the Unwrap tab to take the tokens back.
Unwrapping is open to whoever holds the NFT, not to whoever created it. Buying the NFT buys the right to redeem its vault.

Accounts & PDAs

Four program-derived addresses. The seeds are the whole mechanism — in particular the vault, which is derived from the NFT mint rather than from a wallet, which is what makes the tokens follow the art.

AccountSeedsPurpose
NftitBank["bank"]Singleton. Supply counters, token mint, free-tier stack.
NftitAsset["nftit", tier_index]One per live nftit. Ties a tier number to its NFT mint.
Vault["vault", nft_mint]Token account holding the locked 1,000,000.
Collection authority["collection_authority"]Signs the Metaplex collection verification.

A vault's authority cannot be reassigned, because it is not stored anywhere — it is recomputed from the NFT mint every time. There is no owner field to update and no admin key that could point it somewhere else.

Instructions

InstructionWho can call itEffect
initializeDeployer, onceCreates the bank and records the token mint.
initialize_collectionDeployer, onceCreates the Metaplex certified collection.
wrap_nftitAnyone with 1,000,000 tokensMoves tokens to a vault, mints and verifies the NFT.
unwrap_nftitCurrent NFT holderBurns the NFT, releases the vault, frees the tier.
Anchor derives each instruction's 8-byte discriminator from its name, so a client built against a stale IDL fails withInstructionFallbackNotFound rather than doing something unintended. If you fork this and rename an instruction, regenerate the IDL.

Art & traits

Every piece is the same 48×48 drawing recoloured across four traits. The engine never redraws the figure, so the set is consistent by construction rather than by review.

Art is bound to the tier number, not to the NFT mint. NFTITS #42 is row 42 of the manifest and /collection/images/42.png, permanently. Unwrapping frees the number; whoever wraps it next mints a different NFT with the same picture. That makes /api/render/42 immutable and safe for a marketplace CDN to hold forever.

TraitValuesRarest in the set
Body16teal — 32 of 1,000
Fabric31rust — 15 of 1,000
Studs5onyx — 41 of 1,000
Background8void — 68 of 1,000

16 × 31 × 5 × 8 is 19,840 combinations on paper. The renderer rejects 2,068 of them for perceptual contrast — studs the colour of the fabric they sit on, a garment that sinks into the body — which leaves 17,772 that can actually be produced. The 1,000 minted pieces are drawn from those without repetition.

Full trait table: /collection/traits.csv. Longer explanation on the art page.

HTTP API

Public, unauthenticated, and served by this site. Marketplaces read the first two.

EndpointReturns
GET /api/metadata/{tier}Metaplex JSON metadata for one nftit.
GET /api/metadata/collectionCollection-level metadata.
GET /api/render/{tier}768×768 PNG, immutable. Add ?format=svg for the vector source.
GET /api/deflationSupply locked in vaults and the share of total supply.
GET /api/recently-wrappedThe most recent wraps.
GET /api/launch-stateWhether wrapping is open yet.
GET /api/healthLiveness, for monitoring.

Guarantees

What the program cannot do, enforced on chain rather than promised:

  • → It cannot move tokens out of a vault except by burning that vault's NFT.
  • → It cannot mint more than 1,000 live nftits.
  • → It cannot mint a second NFT for a tier that is already live.
  • → It has no admin instruction that transfers, freezes or reassigns a vault.

The site itself never holds keys and never asks for a signature it does not immediately submit. Both wrap and unwrap re-read the chain and refuse to build a transaction that would revert, so your wallet is never handed a guaranteed failure to simulate.

Threat model and audit notes: /security. Full walkthrough of the program: /tech. Why it exists at all: /thesis.

FAQ

Do I need to be the wallet that wrapped it to unwrap?

No. Whoever holds the NFT can unwrap it. That is the point — the vault is attached to the NFT, not to a person.

What happens to the tier number when someone unwraps?

It goes back on a stack and the next wrap reuses it, so the set stays numbered 1 to 1,000 with no gaps. The new NFT is a different mint but carries the same picture, because the art belongs to the number.

Can all 1,000 ever be minted?

Only if every token in existence is wrapped at the same moment, with none in liquidity and none being traded. So no, not realistically — the collection is capped at 1,000 and will settle well below it.

Is this Token-2022 or SPL-404?

Neither. Both would require abandoning the standard SPL token pump.fun launches with. This is a plain SPL token plus a vault whose authority is derived from an NFT mint.

What if this website goes down?

Wrapping and unwrapping are program instructions; any client can call them. The art is regenerable from the open-source renderer. The site is a convenience, not a dependency.