Oyun Kitabı
Mainnet Web3Modal ve Cüzdan Sertleştirmesi (Mainnet Web3modal Cuzdan Sertlestirmesi)
MetaMask-only'den Web3Modal + WalletConnect + Coinbase WalletLink'e geçiş; chainId, gas ve adres sertleştirmesi.
NFT Koleksiyon Mint ve Mainnet Sertleştirmesi
Bolum 4 / 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.
Mainnet, tek cüzdan varsayımını kırar
Gorillas mainnet 1.8, All-Stars/1.4 döneminin window.ethereum.enable() yolunu bırakır. Web3Modal cacheProvider ile açılır; WalletConnect (Infura id) ve custom Coinbase WalletLink (chainId: 1) providerOptions'a eklenir. ConnectWeb3 → ethers Web3Provider → address; contract instance'lar artık modal provider üzerinden konuşur.
Before (All-Stars / early)
window.ethereum only → Web3
After (mainnet 1.8)
Web3Modal
├─ WalletConnect (Infura)
├─ WalletLink / Coinbase (chainId 1)
└─ injected (MetaMask)
↓
provider → ethers Web3Provider
↓
getNftContract(Web3(provider))
Bu bölüm seriyi mainnet hazırlık checklist'i ile kapatır: cüzdan çeşitliliği, ağ doğrulama, gas ve adres/ABI disiplini.
Kavramlar ilk geçtiği yerde
📦 Web3Modal
Çoklu cüzdan bağlantı UI'si; providerOptions ile WalletConnect/WalletLink enjekte edilir.
📦 WalletConnect
QR / mobil cüzdan köprüsü; Infura (veya RPC) id ister.
📦 WalletLink
Coinbase Wallet connector; appName, networkUrl, chainId ile kurulur.
📦 cacheProvider
Son başarılı provider'ı hatırlama; reconnect UX'i, stale session riski.
RPC / Infura project id yapılandırmadır; playbook'ta secret tutulmaz. Anahtarlar env'de, repo'da değil.
Neden MetaMask-only yetmez?
Landing FAQ hâlâ MetaMask diyebilir; mainnet kullanıcıları Coinbase Wallet ve mobil WalletConnect ister. Tek enjekte yol, dönüşüm hunisini keser. 1.8 kararı: modal ile çoklu connector, network: 'mainnet'.
User segments
Desktop MetaMask
Mobile WC
Coinbase WalletLink
↓
one ConnectWeb3() API
Bağlantı yaşam döngüsü
ConnectWeb3: web3Modal.connect() → Web3Provider → getAddress. DisconnectWeb3: clearCachedProvider + provider.disconnect + reload. getNetwork provider üzerinden netId okur. Contract getter'lar initialState.provider ile Web3.eth.Contract kurar — eski appWeb3() Infura fallback'i mainnet imza yolu olmamalı.
connect → address
getNetwork → chainId check
mint/reveal only if chainId OK
disconnect → clear cache → reload
ADR: Web3Modal as wallet facade
Karar: mint/reveal util'leri doğrudan window.ethereum'a bağlanmasın; modal facade address ve provider versin. Artı: connector eklemek ürün kararı olur. Eksi: ethers + web3 çift yığını ve cacheProvider stale state. Mitigasyon: mint öncesi chainId assert, disconnect'te cache temizliği.
ADR-04 Web3Modal facade
UI → ConnectWeb3 / DisconnectWeb3
Utils → provider from modal state
Guard → chainId === 1 before send
Reject → wrong net / no provider
Mainnet failure playbook
- Stub contract addresses production'da — tx 'başarılı' görünür, state yanlış. 2) Wrong network — Rinkeby/Goerli'de imza, mainnet supply değişmez. 3) gasPrice: 0 — mempool'da underpriced. 4) ABI mismatch — multipleMint/reveal encode hatası. 5) Pinata/Infura key'lerin client bundle'a gömülmesi — secret sızıntısı (asla commit etmeyin).
Hardening checklist
✓ real mainnet addresses
✓ chainId === 1 gate
✓ dynamic gas / tip
✓ ABI ↔ deployment lock
✓ secrets in env only
Bu bölümde en çok karışan eşleştirmeler
❌ window.ethereum yeter, modal lüks
✓ Mainnet dönüşümü için çoklu connector ürün gereksinimidir
❌ cacheProvider = her zaman bağlı kal
✓ Stale provider'ı disconnect + clearCachedProvider ile temizle
❌ Infura/Pinata anahtarlarını constants'a yaz
✓ Anahtarlar env/secret store'da; client'a minimum scope
Kendi sisteminizi denetleme listesi
- Connect sonrası chainId === 1 assert ediliyor mu?
- Mint send'den önce provider null değil mi?
- gasPrice: 0 production build'de kalmış mı?
- nft/reserve/auction adresleri birbirinden farklı ve mainnet mi?
- WalletConnect / WalletLink connector'ları gerçekten test cihazda denendi mi?
Bu bölümden aklında kalması gerekenler
- 1.8 geçişi: MetaMask-only → Web3Modal çoklu cüzdan facade.
- Mainnet sertleştirmesi adres, ağ, gas, ABI ve secret disiplinidir.
- Disconnect ve cache temizliği, reconnect UX'inin parçasıdır.
Cüzdan bağlamak özellik değildir; yanlış ağda imza attırmak sessiz bir üretim olayıdır.
SSS
Sık sorulan sorular
Web3Modal nedir?
Çoklu cüzdan bağlantı UI'si; providerOptions ile WalletConnect/WalletLink enjekte edilir.
WalletConnect nedir?
QR / mobil cüzdan köprüsü; Infura (veya RPC) id ister.
"window.ethereum yeter, modal lüks" doğru mu?
Mainnet dönüşümü için çoklu connector ürün gereksinimidir
Bu bölüm neyi sabitler?
Bu bölüm seriyi mainnet hazırlık checklist'i ile kapatır: cüzdan çeşitliliği, ağ doğrulama, gas ve adres/ABI disiplini. Gorillas mainnet 1.8, All-Stars/1.4 döneminin window.ethereum.enable() yolunu bırakır. Web3Modal cacheProvider ile açılır; WalletConnect (Infura id) ve custom Coinbase WalletLink (chainId: 1) providerOptions'a eklenir. ConnectWeb3 → ethers Web3Provider → address; contract instance'lar artık modal provider üzerinden konuşur.
Ogrenilen Muhendislik Prensipleri
- Mint util'lerini tek bir wallet facade arkasına alın.
- Her send öncesi chainId, address ve gas'ı doğrulayın.
- Secret'ları bundle'dan çıkarın; connector'ları gerçek cihazlarda 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.
Ayni seriden
IPFS (InterPlanetary File System) Metadata, Mint ve Multiple Mint
Infura IPFS + Pinata pin, metadata JSON, mint(tokenId, uri) ve multipleMint: 0.1 ETH × n, 750 supply.
Ayni seriden
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?