Playbook
BareNFT: Rollen, Pausable und Token-URI (Barenft Rollen Pausable Token Uri)
BareNFT kombiniert ERC721 Enumerable/Burnable/Pausable mit AccessControl und role-gated mint(to, id, uri). Trade-offs von Per-Token-URI und Pause.
Bare Crypto Solidity Marketplace-Protokoll
Teil 2 von 5
BareNFT, Reserve-Escrow, englische Auktion und NFT-gated BareToken-Emissionen in Remix IDE mit OpenZeppelin-v4.1-GitHub-Imports — ohne Hardhat/Foundry — inkl. ADRs, schwacher RNG und Notfall-Trade-offs.
Ueber das Preset hinaus: wer mintet, wer friert ein
BareNFT basiert auf dem OpenZeppelin-ERC721PresetMinterPauserAutoId-Geruest, ersetzt AutoId aber durch explizites mint(to, tokenId, tokenURI). MINTER_ROLE und PAUSER_ROLE sind ueber AccessControlEnumerable getrennt; jeder Token speichert einen eigenen URI-Pfad, kombiniert mit baseURI — flexible Metadaten unter einem Trust-Modell, in dem der Minter die Sammlung formt.
Deployer
├─ DEFAULT_ADMIN_ROLE
├─ MINTER_ROLE ──> mint(to, id, uri)
└─ PAUSER_ROLE ──> pause / unpause
|
v
ERC721Enumerable + Burnable + Pausable
|
v
tokenURI = baseURI + per-token path
Dieser Teil fixiert BareNFT-Rollengrenzen, die Per-Token-URI-Entscheidung und Pause-Nebenwirkungen auf dem Marketplace.
Begriffe, dort definiert, wo sie zuerst auftauchen
📦 AccessControl
Rollenbasierte Rechte; feinere Mint/Pause-Trennung als Ownable.
📦 ERC721Pausable
Notfallbremse fuer Transfers, die auch Listing- und Auktions-Escrow sperrt.
📦 Per-Token-URI
Eigener Metadaten-Pfad je tokenId, kombiniert mit baseURI.
📦 Role-gated Mint
Nur MINTER_ROLE darf mint(to, id, uri) aufrufen.
Rollentrennung hilft nur, wenn DEFAULT_ADMIN_ROLE nicht alle Rollen in einer Wallet als Kosmetik haelt.
ADR: explizite tokenId statt AutoId
Entscheidung: Mint-Signatur ist mint(address to, uint256 tokenId, string tokenURI); der Operator waehlt IDs statt eines Zaehlers. Begruendung: Katalognummern, Reserve-Listings und Auktionshistorie indexieren nach tokenId. Kosten: kollidierende IDs reverten in _mint; Off-Chain-Mint-Koordination wird Pflicht. Das ist ein ADR 'Operator-Katalog-Autoritaet' statt On-Chain-Auto-Increment.
Rollen, Pause und Transfer-Hook
pause() verlangt PAUSER_ROLE; _beforeTokenTransfer verkettet Enumerable und Pausable. Waehrend Pause stoppt auch safeTransferFrom aus BareNFTReserve oder BareNFTAuction — maechtiges Incident-Werkzeug und globale Marktsperre durch den Operator.
PAUSER_ROLE
pause()
|
v
_beforeTokenTransfer
|
+-- marketplace escrow transfer BLOCKED
+-- peer-to-peer transfer BLOCKED
Fehlerfall: halbfertige Mint-Fee-Flaeche und URI-Drift
setMintingCurrency ist ohne klare Rollenpruefung aufrufbar; mintingPrice wird nie gesetzt — eine halbfertige Gebuehrenflaeche. Performance: Enumerable plus _beforeTokenTransfer erhoeht Gas im belebten Secondary Market. Metadaten: baseURI + path bricht die ganze Sammlung bei Gateway-Wechsel; Per-Token-Flexibilitaet haengt an baseURI-Ops. Ein geleakter MINTER_ROLE kann Fake-IDs minten und Reserve-Listing-Historie vergiften.
Die am häufigsten verwechselten Zuordnungen
❌ AccessControl ist nur Ownable mit Extra-Schritten
✓ AccessControl trennt Mint und Pause; Ownable buendelt jede Macht in einem Owner
❌ Pause stoppt nur Peer-Transfers; Marketplaces sind fine
✓ Escrow-safeTransferFrom revertiert unter Pause ebenfalls; der ganze Markt sperrt
❌ Per-Token-URI bedeutet dezentralisierte Metadaten
✓ URI vertraut weiterhin Minter und baseURI-Operator; Pin und Gateway-Politik sind separat
Checkliste zur Prüfung des eigenen Systems
- Liegen DEFAULT_ADMIN, MINTER und PAUSER in einer Wallet oder getrennt?
- Welche offenen Listings/Auktionen blockieren bei Pause?
- Bricht ein baseURI-Wechsel aeltere tokenURI-Joins?
- Wie verhaelt sich die UI bei doppeltem Mint derselben tokenId?
- Wer darf halbfertige Flaechen wie setMintingCurrency aufrufen?
Was aus diesem Teil bleiben sollte
- BareNFT legt Katalog-Autoritaet on-chain ueber role-gated mint(to, id, uri).
- Pausable ist ein globaler Kill-Switch fuer Escrow-Marketplaces — Trade-off dokumentieren.
- Per-Token-URI-Flexibilitaet erbt baseURI-Operationsschuld.
Rollentrennung ist ein Schliessplan; haelt ein Admin jeden Schluessel, ist es nur ein Label.
FAQ
Häufige Fragen
Was ist AccessControl?
Rollenbasierte Rechte; feinere Mint/Pause-Trennung als Ownable.
Was ist ERC721Pausable?
Notfallbremse fuer Transfers, die auch Listing- und Auktions-Escrow sperrt.
Stimmt es, dass „AccessControl ist nur Ownable mit Extra-Schritten“?
AccessControl trennt Mint und Pause; Ownable buendelt jede Macht in einem Owner
Was legt dieser Teil fest?
Dieser Teil fixiert BareNFT-Rollengrenzen, die Per-Token-URI-Entscheidung und Pause-Nebenwirkungen auf dem Marketplace. BareNFT basiert auf dem OpenZeppelin-ERC721PresetMinterPauserAutoId-Geruest, ersetzt AutoId aber durch explizites mint(to, tokenId, tokenURI). MINTER_ROLE und PAUSER_ROLE sind ueber AccessControlEnumerable getrennt; jeder Token speichert einen eigenen URI-Pfad, kombiniert mit baseURI — flexible Metadaten unter einem Trust-Modell, in dem der Minter die Sammlung formt.
Gelernte Engineering-Prinzipien
- Mint-Signatur (Auto-ID vs. explizite ID) zusammen mit Katalog- und Marketplace-Index waehlen.
- Pause als globalen Stopp fuer Escrow-Protokolle entwerfen und kommunizieren.
- Metadata-ADR muss baseURI, Per-Token-Pfad und Gateway-Pin gemeinsam abdecken.
Weiterlesen
Weiterlesen
Nachster Teil der Serie
BareNFTReserve: Escrow, RandomBuy und schwache RNG
Owner-only createNewListing, buy und randomBuy mit keccak256(revealNonce, block.difficulty, msg.sender) % 3 — schwache RNG, Owner-Marketplace-ADR…
Nachster Teil der Serie
Remix + OpenZeppelin: Lieferung ohne Hardhat
Wie das Bare-Crypto-Protokoll in Remix IDE mit OpenZeppelin-v4.1-GitHub-Imports — ohne Hardhat/Foundry — gebaut wurde, inkl. ADR und Trade-offs.
Aus derselben Serie
BareNFTAuction: Claim, Rueckerstattung und Notfallrechte
Englische Auktion: Bid, Claim, Cancel, Reserve-Unterschreitung und Owner-Emergency transferNft/transferFunds Trade-offs.