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.

Bare Crypto Solidity marketplace protocol diagram

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

  1. Liegen DEFAULT_ADMIN, MINTER und PAUSER in einer Wallet oder getrennt?
  2. Welche offenen Listings/Auktionen blockieren bei Pause?
  3. Bricht ein baseURI-Wechsel aeltere tokenURI-Joins?
  4. Wie verhaelt sich die UI bei doppeltem Mint derselben tokenId?
  5. Wer darf halbfertige Flaechen wie setMintingCurrency aufrufen?

Was aus diesem Teil bleiben sollte

  1. BareNFT legt Katalog-Autoritaet on-chain ueber role-gated mint(to, id, uri).
  2. Pausable ist ein globaler Kill-Switch fuer Escrow-Marketplaces — Trade-off dokumentieren.
  3. 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

Nachster Teil der Serie

Aus derselben Serie

Paylaş