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.

NFT mint and mainnet architecture diagram

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

  1. 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

  1. Connect sonrası chainId === 1 assert ediliyor mu?
  2. Mint send'den önce provider null değil mi?
  3. gasPrice: 0 production build'de kalmış mı?
  4. nft/reserve/auction adresleri birbirinden farklı ve mainnet mi?
  5. WalletConnect / WalletLink connector'ları gerçekten test cihazda denendi mi?

Bu bölümden aklında kalması gerekenler

  1. 1.8 geçişi: MetaMask-only → Web3Modal çoklu cüzdan facade.
  2. Mainnet sertleştirmesi adres, ağ, gas, ABI ve secret disiplinidir.
  3. 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

Ayni seriden

Ayni seriden

Paylaş