Oyun Kitabı
IPFS (InterPlanetary File System) Metadata, Mint ve Multiple Mint (İpfs Metadata Mint Ve Multiple Mint)
Infura IPFS + Pinata pin, metadata JSON, mint(tokenId, uri) ve multipleMint: 0.1 ETH × n, 750 supply.
NFT Koleksiyon Mint ve Mainnet Sertleştirmesi
Bolum 2 / 4
CBD All-Stars ve Confident Gorillas mint yüzeyleri: WIP whitelist hunisi, IPFS metadata, placeholder→reveal hattı ve Web3Modal ile mainnet cüzdan sertleştirmesi.
Zincir resmi tutmaz; CID tutar
Confident Gorillas mint akışında görsel ve özellikler önce IPFS'e yazılır: Infura add API ile JSON/file upload, Pinata ile pin. Sonra sözleşme mint veya multipleMint çağrılır; value 0.1 ETH × adet. Landing'deki miktar seçici (2–5) doğrudan multipleMint(num) parametresine bağlanır.
traits + image
↓
uploadJSON / uploadFile (Infura IPFS)
↓
pinHash (Pinata)
↓
CID / metadata hash
↓
mint(tokenId, uri) | multipleMint(uri, num)
↓
value = 0.1 ETH × num supply ≤ 750
Bu bölüm, metadata boru hattını mint tx'sine bağlar; sonraki bölüm placeholder URI ve owner reveal'i açar.
Kavramlar ilk geçtiği yerde
📦 IPFS CID
İçeriğin içeriğe dayalı adresi; tokenURI genelde bu hash'e referans verir.
📦 Pinning
CID'nin kaybolmaması için Pinata gibi bir pinning servisinde tutma.
📦 multipleMint
Tek tx'de birden fazla NFT basma; value ve gas maliyeti adetle ölçeklenir.
📦 Mint Price
Confident Gorillas'da 1e17 wei (0.1 ETH) × mint adedi.
Infura upload ile Pinata pin ayrı adımlardır. Upload başarılı, pin unutulursa gateway'ler zamanla 404 verebilir.
Metadata şekli
nftContractUtils metadata'yı name, description, image (IPFS hash), external_url ve attributes (artist, background, body, eye, mouth) ile kurar. uploadJSON hash döner; bu hash mint'e uri olarak gider.
metadata JSON
name / description / image
attributes[] → traits
↓
uploadJSON → ipfsMetadataHash
mint vs multipleMint
Tekil mint: mint(tokenId, ipfsMetadataHash) + 0.1 ETH. Çoklu: multipleMint(ipfsMetadataHash, num) + 0.1 ETH × num. HomePage select 2–5 arası seçer; Minter container multiplemintNFT'yi çağırır. totalSupply 750 tavanıyla UI'da remaining gösterilir.
UI qty (2..5)
↓
multipleMint(uri, num)
value = 1e17 * num
gasLimit ≈ 300000 (app default)
ADR: IPFS önce, zincir sonra
Karar: metadata ve medya zincire gömülmez; önce IPFS, sonra uri referansı on-chain. Avantaj: ucuz güncelleme yolu (reveal) ve küçük calldata. Risk: pinning ve gateway tek nokta haline gelebilir — Pinata pin + public gateway yedekleri gerekir.
ADR-02 Content-addressed mint
Off-chain: Infura add + Pinata pin
On-chain: store URI hash only
Read path: tokenURI → retrieveJSON
Başarısızlık senaryoları
gasPrice: 0 sabitlenmesi mainnet'te tx'nin stuck/underpriced kalmasına yol açar. Yanlış network (Rinkeby/Infura fallback) mainnet sözleşmesine imza attırmaz. ABI mismatch: frontend ABI'si ile deploy edilen multipleMint imzası uyuşmazsa encode hata verir. Stub adres: All-Stars'ta dört sözleşme aynı adrese bakıyordu.
Fail matrix
gasPrice=0 → stuck / underpriced
wrong chainId → silent wrong net
ABI skew → encode / revert
stub address → call nowhere useful
Bu bölümde en çok karışan eşleştirmeler
❌ Image'ı base64 olarak sözleşmeye yaz
✓ Image'ı IPFS'e koy; zincirde yalnızca CID/URI tut
❌ Upload yeter, pin opsiyonel
✓ Upload + pin birlikte; aksi halde içerik unorphan riski
❌ gasPrice: 0 'otomatik' demektir
✓ gasPrice: 0 çoğu mainnet koşulunda underpriced tx üretir
Kendi sisteminizi denetleme listesi
- Mint öncesi CID Pinata'da (veya eşdeğerde) pinli mi?
- 0.1 ETH × num değeri wei hesabıyla doğrulanıyor mu?
- totalSupply + num ≤ 750 kontrolü UI ve sözleşmede var mı?
- gasPrice / maxFeePerGas mainnet için dinamik mi?
- Deploy edilen ABI ile frontend ABI aynı commit'ten mi?
Bu bölümden aklında kalması gerekenler
- Mint boru hattı: traits → IPFS → pin → contract call → value.
- multipleMint, landing miktar seçicisinin zincir karşılığıdır.
- gasPrice: 0, stub adres ve ABI skew mainnet'in klasik üçlüsüdür.
Metadata'yı zincire gömerseniz mint'i pahalılaştırırsınız; CID'yi pinsiz bırakırsanız koleksiyonu kaybedersiniz.
SSS
Sık sorulan sorular
IPFS CID nedir?
İçeriğin içeriğe dayalı adresi; tokenURI genelde bu hash'e referans verir.
Pinning nedir?
CID'nin kaybolmaması için Pinata gibi bir pinning servisinde tutma.
"Image'ı base64 olarak sözleşmeye yaz" doğru mu?
Image'ı IPFS'e koy; zincirde yalnızca CID/URI tut
Bu bölüm neyi sabitler?
Bu bölüm, metadata boru hattını mint tx'sine bağlar; sonraki bölüm placeholder URI ve owner reveal'i açar. Confident Gorillas mint akışında görsel ve özellikler önce IPFS'e yazılır: Infura add API ile JSON/file upload, Pinata ile pin. Sonra sözleşme mint veya multipleMint çağrılır; value 0.1 ETH × adet. Landing'deki miktar seçici (2–5) doğrudan multipleMint(num) parametresine bağlanır.
Ogrenilen Muhendislik Prensipleri
- Önce içerik adreslensin, sonra uri on-chain saklansın.
- Fiyat, adet ve supply tavanını UI ile sözleşme arasında çift doğrulayın.
- Mainnet tx parametrelerini (gas, chainId, address, ABI) staging'de kanıtlayın.
Okumaya devam et
Okumaya devam et
Seride sonraki yazi
Placeholder URI ve Owner Reveal Hattı
Mint'te placeholder metadata, uridata haritası, reveal(tokenId, uriHash) ve yalnızca owner'ın açabildiği reveal yüzeyi.
Seride sonraki yazi
Koleksiyon Landing ve WIP Whitelist Hunisi
CBD All-Stars mint landing'i: #GETINTHEWIP, 750 slot, indirim hunisi ve MetaMask-only mint yüzeyi nasıl ürünleşir?
Ayni seriden
Mainnet Web3Modal ve Cüzdan Sertleştirmesi
MetaMask-only'den Web3Modal + WalletConnect + Coinbase WalletLink'e geçiş; chainId, gas ve adres sertleştirmesi.