Oyun Kitabı
BareNFT: Roller, Pausable ve Token URI (Barenft Roller Pausable Token Uri)
BareNFT, ERC721 Enumerable/Burnable/Pausable ve AccessControl ile role-gated mint(to,id,uri) sunar. Per-token URI ve pause trade-offlari.
Bare Crypto Solidity Marketplace Protokolu
Bolum 2 / 5
Remix IDE ve OpenZeppelin v4.1 GitHub importlariyla Hardhat/Foundry olmadan BareNFT, rezerv, Ingiliz artirmali acik artirma ve NFT-gated BareToken emisyon mimarisi; ADR, zayif RNG ve acil yetki trade-offlari.
Preset'ten oteye: kim mint eder, kim durdurur
BareNFT, OpenZeppelin ERC721PresetMinterPauserAutoId iskeletinden turetilir ama AutoId yerine disaridan verilen tokenId ile mint(to, tokenId, tokenURI) sunar. MINTER_ROLE ve PAUSER_ROLE AccessControlEnumerable uzerinden ayrilir; her token icin ozel URI, baseURI ile birlestirilerek metadata esnekligi saglar — ayni zamanda mint otoritesinin tek basina koleksiyonu sekillendirdigi bir guven modeli.
Deployer
├─ DEFAULT_ADMIN_ROLE
├─ MINTER_ROLE ──> mint(to, id, uri)
└─ PAUSER_ROLE ──> pause / unpause
|
v
ERC721Enumerable + Burnable + Pausable
|
v
tokenURI = baseURI + per-token path
Bu bolum, BareNFT rol sinirlarini, per-token URI kararini ve pause'un marketplace yan etkilerini sabitler.
Kavramlar ilk geçtiği yerde
📦 AccessControl
Rol bazli izin modeli; Ownable'dan daha ince taneli mint/pause ayrimi.
📦 ERC721Pausable
Transferleri durduran acil fren; listing ve auction escrow'unu da kilitler.
📦 Per-token URI
Her tokenId icin ayri metadata yolu; baseURI ile birlestirilir.
📦 Role-gated mint
Yalniz MINTER_ROLE sahibinin mint(to, id, uri) cagirabilmesi.
Rol ayrimi guvenligi artirir; ama DEFAULT_ADMIN_ROLE tek eldeyse, MINTER/PAUSER ayrimi operasyonel degil kozmetik kalir.
ADR: AutoId yerine acik tokenId
Karar: mint imzasi mint(address to, uint256 tokenId, string tokenURI) olsun; sayac yerine operator ID'yi secer. Gerekce: koleksiyon katalog numaralari, rezerv listing ve auction tarihcesi tokenId uzerinden indekslenir. Bedel: cakisan ID'lerde _mint revert eder; off-chain mint koordinasyonu zorunlu olur. Bu, 'on-chain auto increment' yerine 'operator katalog otoritesi' ADR'sidir.
Rol, pause ve transfer kancasi
pause() PAUSER_ROLE ister; _beforeTokenTransfer, Enumerable + Pausable zincirini cagirir. Pause acikken BareNFTReserve veya BareNFTAuction uzerindeki safeTransferFrom de durur — acil fren, ayni anda tum escrow cikislarini kilitler. Bu guclu bir incident araci ve ayni zamanda operator'un tum pazar yerini dondurabilmesi demektir.
PAUSER_ROLE
pause()
|
v
_beforeTokenTransfer
|
+-- marketplace escrow transfer BLOCKED
+-- peer-to-peer transfer BLOCKED
Basarisizlik: yetkisiz mint yuzeyi ve URI kaymasi
setMintingCurrency disaridan herkesce cagrilabilir gorunur; mintingPrice hic set edilmez — yarim kalmis ucretlendirme yuzeyi. Performans senaryosu: Enumerable + her transferde _beforeTokenTransfer, yogun secondary market'te gas maliyetini artirir. URI tarafinda baseURI + path birlesimi, IPFS gateway degisince tum koleksiyonu kirar; per-token esneklik, baseURI operasyon disiplinine baglidir. MINTER_ROLE sizmasi, sahte ID mint'i ile rezerv listing tarihcesini zehirler.
Bu bölümde en çok karışan eşleştirmeler
❌ AccessControl = Ownable'in sadesi
✓ AccessControl mint ve pause'u ayirir; Ownable tek sahip ile her seyi birlestirir
❌ Pause sadece transferleri durdurur, marketplace etkilenmez
✓ Escrow safeTransferFrom de pause altinda revert eder; tum pazar kilitlenir
❌ Per-token URI merkeziyetsiz metadata demektir
✓ URI hala minter ve baseURI operatorune guvenir; pin ve gateway politikasi ayridir
Kendi sisteminizi denetleme listesi
- DEFAULT_ADMIN, MINTER ve PAUSER ayni cuzdanda mi, yoksa ayrilmis mi?
- Pause aninda acik listing/auction'lar hangi tx ile takilir?
- tokenURI birlesimi baseURI degisince eski tokenlar kirilir mi?
- Ayni tokenId iki kez mint edilmeye calisilirsa UI nasil davranir?
- setMintingCurrency gibi yarim yuzeyler kim tarafindan cagrilabilir?
Bu bölümden aklında kalması gerekenler
- BareNFT, rol-gated mint(to,id,uri) ile katalog otoritesini on-chain'e tasir.
- Pausable, escrow marketplace'lerde global kill switch'tir — trade-off acik yazilmalidir.
- Per-token URI esnekligi, baseURI operasyon borcuna baglidir.
Rol ayrimi bir kilit duzenidir; admin tek eldeyse sadece etikettir.
SSS
Sık sorulan sorular
AccessControl nedir?
Rol bazli izin modeli; Ownable'dan daha ince taneli mint/pause ayrimi.
ERC721Pausable nedir?
Transferleri durduran acil fren; listing ve auction escrow'unu da kilitler.
"AccessControl = Ownable'in sadesi" doğru mu?
AccessControl mint ve pause'u ayirir; Ownable tek sahip ile her seyi birlestirir
Bu bölüm neyi sabitler?
Bu bolum, BareNFT rol sinirlarini, per-token URI kararini ve pause'un marketplace yan etkilerini sabitler. BareNFT, OpenZeppelin ERC721PresetMinterPauserAutoId iskeletinden turetilir ama AutoId yerine disaridan verilen tokenId ile mint(to, tokenId, tokenURI) sunar. MINTER_ROLE ve PAUSER_ROLE AccessControlEnumerable uzerinden ayrilir; her token icin ozel URI, baseURI ile birlestirilerek metadata esnekligi saglar — ayni zamanda mint otoritesinin tek basina koleksiyonu sekillendirdigi bir guven modeli.
Ogrenilen Muhendislik Prensipleri
- Mint imzasi (auto-id vs acik id) katalog ve marketplace indeks modeliyle birlikte secilmelidir.
- Pause, escrow protokollerinde global durdurma olarak tasarlanip iletilmelidir.
- Metadata ADR'si baseURI, per-token path ve gateway pin'ini birlikte kapsamalidir.
Okumaya devam et
Okumaya devam et
Seride sonraki yazi
BareNFTReserve: Escrow, RandomBuy ve Zayif RNG
Owner-only createNewListing, buy ve randomBuy — keccak256(revealNonce, block.difficulty, msg.sender) % 3.…
Seride sonraki yazi
Remix + OpenZeppelin: Hardhat Olmadan Teslimat
Bare Crypto protokolu Remix IDE ve OpenZeppelin v4.1 GitHub importlariyla Hardhat/Foundry olmadan nasil derlenip deploy edildi? ADR ve trade-offlar.
Ayni seriden
BareNFTAuction: Claim, Iade ve Acil Yetkiler
Ingiliz artirmali acik artirma: bid, claim, cancel, rezerv altinda iade ve owner emergency transferNft/transferFunds trade-offlari.