Oyun Kitabı
BareToken: NFT (Non-Fungible Token)-Gated Emisyon ve Istismar (Baretoken Nft Gated Emisyon Ve İstismar)
Hashmasks-tarzi NFT-gated claim: ~10e18/gun, INITIAL_ALLOTMENT, 10 yillik emissionEnd. Acik mint yuzeyi ve abuse senaryolari.
Bare Crypto Solidity Marketplace Protokolu
Bolum 5 / 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.
NFT (Non-Fungible Token) tut, gunluk emisyon claim et — ama kapilar acik mi?
BareToken, Hashmasks-benzeri bir ERC20 emisyon motorudur: emissionPerDay ~ 10 * 10^18, INITIAL_ALLOTMENT 1830e18, emissionEnd = start + 10 yil. claim(tokenIndices) yalniz BareNFT sahibi icin accumulated mint eder; _lastClaim per tokenId takip edilir. Ancak acik mint(address,value), kafasikaristik spender/burner rolleri ve burn'un address(this) uzerinden calismasi, emisyon ekonomisini abuse'a acar.
BareNFT ownerOf(tokenId) == msg.sender
|
accumulated(tokenId)
lastClaim → now * emissionPerDay / day
+ INITIAL_ALLOTMENT (first claim)
|
claim([ids]) → _mint ERC20
|
abuse doors: public mint(), role confusion, burn quirk
Bu bolum, NFT-gated emisyon ADR'sini, 10 yillik ufku ve abuse senaryolarini sabitler.
Kavramlar ilk geçtiği yerde
📦 NFT-gated emission
ERC20 claim hakkının ERC721 sahipligine baglanmasi.
📦 INITIAL_ALLOTMENT
Ilk claim'de eklenen sabit bonus (1830e18); pre-reveal carpanina bagli.
📦 emissionEnd
start + 86400*365*10; on yillik emisyon ufku.
📦 Per-token lastClaim
Her NFT indeksinin kendi emisyon saat dilimini tasimasi.
Hashmasks-tarzi model NFT'ye nakit akisi baglar; public mint veya yanlis rol, ekonomiyi tek tx ile bozar.
ADR: Hashmasks-tarzi 10 yillik emisyon
Karar: BareToken, NFT sahiplerine gunluk ~10e18 biriktirip claim ile mint etsin; ilk claim INITIAL_ALLOTMENT eklesin; emisyon 10 yilda bitsin. Gerekce: koleksiyon tutma tesviki ve uzun vadeli token arz egrisi. Bedel: sozlesme, BareNFT adresine (setBareAddress bir kez) ve sahiplik dogrularina siki bagli; IBareToken.isMintedBeforeReveal arayuzu koleksiyon tarafinda beklenir.
Claim muhasebesi ve diyagram
accumulated, lastClaim (veya emissionStart) ile simdi arasindaki saniyeleri emissionPerDay / SECONDS_IN_A_DAY ile carpar; emissionEnd'den sonrasi sifir. Ilk claim'de INITIAL_ALLOTMENT (+ PRE_REVEAL_MULTIPLIER) eklenir. claim dizi icinde duplicate index ve ownerOf kontrolleri yapar, _lastClaim gunceller, toplam miktari mint eder.
emissionStart ──10y──> emissionEnd
per NFT:
lastClaim[i]
|
v
qty = dt * 10e18 / 86400
+ (first ? 1830e18 : 0)
claim(ids) → mint to holder
Abuse ve performans senaryolari
Public mint(to, value) rol kontrolu olmadan arz basabilir — emisyon modelini aninda kirar. isSpender MINTER_ROLE'e bakar ama _addSpender BURNER_ROLE yazar; rol semantiği karisik. burn, account'u address(this) yapar — kullanici bakiyesini yakmaz, kontrat bakiyesini hedefler. Abuse: flash-borrow tarzı sahiplik ile claim penceresi (ayni blokta al-claim-sat) lastClaim'i sifirlamadan onceki birikimi kacirabilir veya UI varsayimlarini bozar. Performans: buyuk tokenIndices dizisi ve O(n^2) duplicate kontrolu claim gazini sisirir; whale toplu claim'leri blok limitine yaklasabilir.
Bu bölümde en çok karışan eşleştirmeler
❌ NFT-gated claim = arz guvenli
✓ Public mint veya yanlis rol varsa gated claim ekonomiyi kurtaramaz
❌ INITIAL_ALLOTMENT her claim'de tekrar eklenir
✓ Yalniz lastClaim == emissionStart iken bir kez eklenir
❌ burn(msg.sender bakiyesini yakar)
✓ Bu implementasyonda burn hesabi address(this)'e cevrilir — quirky ve tehlikeli
Kendi sisteminizi denetleme listesi
- mint(address,value) kimlerce cagrilabilir, rol var mi?
- setBareAddress bir kez mi kilitli, yoksa degistirilebilir mi?
- Ilk claim'de INITIAL_ALLOTMENT UI'da nasil gosteriliyor?
- Ayni blokta NFT al-claim-sat senaryosu lastClaim'i nasil etkiler?
- Buyuk tokenIndices claim'inde duplicate kontrol gaz maliyeti ne?
Bu bölümden aklında kalması gerekenler
- BareToken, Hashmasks-tarzi NFT-gated gunluk emisyon + 10 yillik ufuk ADR'sidir.
- Public mint ve rol/burn quirk'leri, gated modeli tek basina guvence altina almaz.
- Claim gaz ve flash-ownership abuse, emisyon tasariminin parçasi olarak test edilmelidir.
Kapili emisyon bir hikayedir; acik mint kapisi varsa hikaye tek transaction'da biter.
SSS
Sık sorulan sorular
NFT-gated emission nedir?
ERC20 claim hakkının ERC721 sahipligine baglanmasi.
INITIAL_ALLOTMENT nedir?
Ilk claim'de eklenen sabit bonus (1830e18); pre-reveal carpanina bagli.
"NFT-gated claim = arz guvenli" doğru mu?
Public mint veya yanlis rol varsa gated claim ekonomiyi kurtaramaz
Bu bölüm neyi sabitler?
Bu bolum, NFT-gated emisyon ADR'sini, 10 yillik ufku ve abuse senaryolarini sabitler. BareToken, Hashmasks-benzeri bir ERC20 emisyon motorudur: emissionPerDay ~ 10 * 10^18, INITIAL_ALLOTMENT 1830e18, emissionEnd = start + 10 yil. claim(tokenIndices) yalniz BareNFT sahibi icin accumulated mint eder; _lastClaim per tokenId takip edilir. Ancak acik mint(address,value), kafasikaristik spender/burner rolleri ve burn'un address(this) uzerinden calismasi, emisyon ekonomisini abuse'a acar.
Ogrenilen Muhendislik Prensipleri
- NFT-gated emisyon ADR'si mint/burn/role yuzeylerini ayni tehdit modelinde kapsamalidir.
- Ilk allotment ve gunluk oran, UI ve on-chain muhasebede ayni formulle gosterilmelidir.
- Claim batch boyutu ve ownership-flash senaryolari performans ve abuse testi olarak yazilmalidir.
Okumaya devam et
Okumaya devam et
Seride sonraki yazi
BareNFTAuction: Claim, Iade ve Acil Yetkiler
Ingiliz artirmali acik artirma: bid, claim, cancel, rezerv altinda iade ve owner emergency transferNft/transferFunds trade-offlari.
Ayni seriden
BareNFTReserve: Escrow, RandomBuy ve Zayif RNG
Owner-only createNewListing, buy ve randomBuy — keccak256(revealNonce, block.difficulty, msg.sender) % 3.…
Ayni seriden
BareNFT: Roller, Pausable ve Token URI
BareNFT, ERC721 Enumerable/Burnable/Pausable ve AccessControl ile role-gated mint(to,id,uri) sunar. Per-token URI ve pause trade-offlari.