Playbook
Placeholder-URI und Owner-Reveal-Pipeline (Placeholder Uri Und Owner Reveal Pipeline)
Placeholder-Metadaten beim Mint, uridata-Map, reveal(tokenId, uriHash) und eine owner-only Reveal-Oberfläche.
NFT-Collection-Mint und Mainnet-Härtung
Teil 3 von 4
CBD All-Stars- und Confident-Gorillas-Mint-Oberflächen: WIP-Whitelist-Funnel, IPFS-Metadaten, Placeholder→Reveal-Pipeline und Web3Modal-Mainnet-Wallet-Härtung.
Mint gibt nicht die finale Kunst — Reveal tut es
In Confident Gorillas 1.4 zeigt Mint oft nicht sofort die finale Kunst. Eine Placeholder-/Interim-URI wird beim Mint geschrieben; echte CIDs warten in uridata als tokenId → hash/link. Der Reveal-Container sendet nach Owner-Check reveal(tokenId, uriHash) — das ist das Versprechen 'erscheint in deiner Wallet'.
mint → placeholder / interim tokenURI
│
uridata[tokenId] = { hash, link }
│
ownerOf(tokenId) === connected wallet?
yes │ no → deny
↓
reveal(tokenId, uriHash)
↓
tokenURI updated → retrieveJSON / image
Dieser Teil fixiert Reveal als Produkt- und Sicherheitsgrenze; der nächste härtet Wallet-Connect für Mainnet.
Begriffe, dort definiert, wo sie zuerst auftauchen
📦 Placeholder Metadata
Interim-URI beim Mint; finale Traits/Kunst noch nicht gebunden.
📦 uridata
tokenId → { hash, link, index }-Map; CID-Tabelle für Reveal.
📦 reveal(tokenId, uri)
Contract-Call, mit dem der Owner tokenURI auf den echten Hash setzt.
📦 Owner Gate
ownerOf === connected address in revealToken.
Viewer-Reveal kann disabled sein; operatives Reveal läuft oft über Owner-Panel oder Script. Die Gate bleibt Ownership.
Warum Placeholder?
Fairness und Ops: Metadata-Leaks vor vollem Supply reduzieren, Art-Generation vom Mint-Rhythmus trennen. Nutzer minten; Kunst kommt später per Reveal. Landing-FAQ rahmt es als 'in MetaMask sichtbar'.
Mint window
→ same placeholder look
Reveal window
→ unique CID per tokenId
Reveal-Pipeline
Reveal.ts liest uridata.uri[tokenId], nimmt den Hash, ruft revealToken(tokenId, hash). nftContractUtils prüft ownerOf; bei Match contract.methods.reveal(...).send({ from }). Danach liefert tokenURI den neuen Hash; retrieveJSON löst die Image-CID.
Reveal.ts
uridata[tokenId].hash
↓
revealToken → owner check
↓
reveal(tokenId, hash).send
ADR: Off-Chain-Tabelle + On-Chain-Owner-Reveal
Entscheidung: finale CID-Liste lebt im Client/Bundle (uridata); Mutationsautorität bleibt owner-gated reveal. Alternativen (Commit-Reveal on-chain, VRF) sind teurer. Trade-off: uridata kann aus dem Bundle leaken — Timing und Zugriff sind Produktrisiken.
ADR-03 Placeholder + owner reveal
Store: uridata off-chain map
Auth: ownerOf gate
Mutate: reveal(tokenId, uriHash)
Reject: non-owner / wrong id
Failure-Szenarien
Falsche tokenId → falsche Kunst. Hash/Link-Mismatch → Gateway-404. Non-Owner → stilles No-Op. Reveal fehlt in ABI → Encode-Fail. Placeholder nie aktualisiert → Collection aus leeren Boxen.
Fail matrix
wrong tokenId → wrong art
hash ≠ pinned CID → 404
non-owner → no-op / deny
missing reveal ABI→ encode fail
Die am häufigsten verwechselten Zuordnungen
❌ Reveal = nur UI-Blur entfernen
✓ Reveal = on-chain tokenURI-Update; UI zeigt nur das Ergebnis
❌ Jeder darf jedes Token revealen
✓ Nur Owner (oder definierte Minter/Owner-Rolle) reveal't
❌ uridata bleibt geheim, weil Bundle
✓ Frontend-Bundles sind lesbar; Timing und Zugriff sind die echte Kontrolle
Checkliste zur Prüfung des eigenen Systems
- Ist jeder tokenId-Hash in uridata gepinnt und abrufbar?
- Wird ownerOf vor Reveal in Client und Contract geprüft?
- Sind Placeholder- und Final-URI klar getrennt?
- Ist Reveal für Non-Owner sicher disabled/denied?
- Gibt es Index-Drift in der 750er-Tabelle?
Was aus diesem Teil bleiben sollte
- Placeholder-Mint plus Reveal trennt Fairness von Ops-Kadenz.
- Ohne Owner-Gate zerstört Reveal die Collection-Integrität.
- uridata ist eine Produktentscheidung; keine Geheimhaltung annehmen — Timing designen.
Kunst beim Mint zu geben ist leicht; fair und irreversibel zu geben ist Reveal-Disziplin.
FAQ
Häufige Fragen
Was ist Placeholder Metadata?
Interim-URI beim Mint; finale Traits/Kunst noch nicht gebunden.
Was ist uridata?
tokenId → { hash, link, index }-Map; CID-Tabelle für Reveal.
Stimmt es, dass „Reveal = nur UI-Blur entfernen“?
Reveal = on-chain tokenURI-Update; UI zeigt nur das Ergebnis
Was legt dieser Teil fest?
Dieser Teil fixiert Reveal als Produkt- und Sicherheitsgrenze; der nächste härtet Wallet-Connect für Mainnet. In Confident Gorillas 1.4 zeigt Mint oft nicht sofort die finale Kunst. Eine Placeholder-/Interim-URI wird beim Mint geschrieben; echte CIDs warten in uridata als tokenId → hash/link. Der Reveal-Container sendet nach Owner-Check reveal(tokenId, uriHash) — das ist das Versprechen 'erscheint in deiner Wallet'.
Gelernte Engineering-Prinzipien
- Trennen Sie Mint-URI und Final-URI bewusst.
- Sperren Sie Reveal-Autorität hinter ownerOf (oder einer expliziten Rolle).
- Prüfen Sie die Off-Chain-CID-Tabelle auf Pin- und Index-Integrität.
Weiterlesen
Weiterlesen
Nachster Teil der Serie
Mainnet Web3Modal und Wallet-Härtung
Von MetaMask-only zu Web3Modal + WalletConnect + Coinbase WalletLink; chainId, Gas und Adressen härten.
Nachster Teil der Serie
IPFS (InterPlanetary File System)-Metadaten, Mint und Multiple Mint
Infura IPFS + Pinata-Pin, Metadata-JSON, mint(tokenId, uri) und multipleMint: 0.1 ETH × n, 750 Supply.
Aus derselben Serie
Collection-Landing und WIP-Whitelist-Funnel
CBD-All-Stars-Mint-Landing: #GETINTHEWIP, 750 Plätze, Discount-Funnel und wie eine MetaMask-only-Mint-Oberfläche zum Produkt wird.