Oyun Kitabı
BareNFT : Rôles, Pausable et URI de jeton (Barenft Roles Pausable Et Uri DE Jeton)
BareNFT propose un mint (to, id, uri) contrôlé par rôle avec ERC721 Enumerable/Burnable/Pausable et AccessControl. URI par jeton et compromis de pause.
Protocole de marché Bare Crypto Solidity
Partie 2 de 5
BareNFT sans Hardhat/Foundry avec Remix IDE et OpenZeppelin v4.1 Importations GitHub, réserve, enchères au Royaume-Uni et architecture d'émission BareToken contrôlée par NFT ; ADR, faible RNG et compromis entre les autorités d’urgence.
Du préréglage à l'au-delà : qui frappe, qui arrête
BareNFT dérive du framework OpenZeppelin ERC721PresetMinterPauserAutoId, mais fournit mint(to, tokenId, tokenURI) avec tokenId fourni en externe au lieu d'AutoId. MINTER_ROLE et PAUSER_ROLE sont séparés via AccessControlEnumerable ; Un URI personnalisé pour chaque jeton est combiné avec le baseURI, offrant une flexibilité aux métadonnées, ainsi qu'un modèle de confiance dans lequel l'autorité de la Monnaie seule façonne la collection.```text Deployer ├─ DEFAULT_ADMIN_ROLE ├─ MINTER_ROLE ──> mint(to, id, uri) └─ PAUSER_ROLE ──> pause / unpause | v ERC721Enumerable + Burnable + Pausable | v tokenURI = baseURI + per-token path
## Concepts à la première mention```text
📦 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.
```La séparation des rôles augmente la sécurité ; Mais si DEFAULT_ADMIN_ROLE est dans une main, la distinction MINTER/PAUSER reste cosmétique, non opérationnelle.
## ADR : ouvrez tokenId au lieu de AutoId
Décision : laissez la signature mint être mint (adresse à, uint256 tokenId, string tokenURI) ; Sélectionne l’ID de l’opérateur au lieu du compteur. Raison : les numéros de catalogue des collections, la liste des réserves et l'historique des enchères sont indexés via tokenId. Coût : annule _mint en cas d'ID en conflit ; la coordination de la monnaie hors chaîne devient obligatoire. Il s'agit d'un ADR « d'autorité de catalogue d'opérateur » plutôt que d'un « incrément automatique en chaîne ».
## Rôle, pause et hook de transfert
pause() demande PAUSER_ROLE ; _beforeTokenTransfer appelle la chaîne Enumerable + Pausable. Lorsque Pause est activé, safeTransferFrom sur BareNFTReserve ou BareNFTAucction s'arrête également : le frein d'urgence verrouille toutes les sorties de dépôt simultanément. Il s'agit d'un outil puissant en cas d'incident et cela signifie également que l'opérateur peut geler l'ensemble du marché.```text
PAUSER_ROLE
pause()
|
v
_beforeTokenTransfer
|
+-- marketplace escrow transfer BLOCKED
+-- peer-to-peer transfer BLOCKED
```## Échec : surface de menthe non autorisée et décalage d'URI
setMintingCurrency semble pouvoir être appelé publiquement ; mintingPrice n’est jamais défini – surface de tarification incomplète. Scénario de performance : Enumerable + _beforeTokenTransfer à chaque transfert augmente le coût du gaz sur un marché secondaire très fréquenté. Du côté de l'URI, la combinaison baseURI + chemin interrompt toute la collection lorsque la passerelle IPFS change ; La flexibilité par jeton dépend de la discipline de fonctionnement baseURI. L'infiltration de MINTER_ROLE empoisonne l'historique des listes de réserve avec une fausse pièce d'identité.
## Les confrontations les plus déroutantes de cet épisode```text
❌ 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
Liste de contrôle de votre propre système
- DEFAULT_ADMIN, MINTER et PAUSER sont-ils dans le même portefeuille ou séparés ?
- Avec quelle transmission les annonces/enchères ouvertes peuvent-elles être placées pendant la pause ?
- Les anciens jetons seront-ils brisés lorsque la combinaison tokenURI sera remplacée par baseURI ?
- Comment l'interface utilisateur se comporte-t-elle si une tentative est faite pour créer deux fois le même tokenId ?
- Qui peut appeler des halffaces comme setMintingCurrency ?
Choses à retenir de cette section
- BareNFT apporte l'autorité de catalogue à la chaîne avec mint (to, id, uri) contrôlé par rôle.
- Pausable est un coupe-circuit mondial sur les marchés de dépôt fiduciaire : le compromis doit être clairement écrit.
- La flexibilité de l'URI par jeton dépend de la dette opérationnelle de baseURI.
La séparation des rôles est un système de verrouillage ; Si l’administrateur est dans une main, ce n’est qu’une étiquette.
FAQ
Frequently asked questions
Qu’est-ce que le contrôle d’accès ?
Modèle d'autorisation basé sur les rôles ; Séparation menthe/pause à grain plus fin que Ownable.
Qu'est-ce que ERC721Pausable ?
Frein d'urgence qui arrête les transferts ; Il verrouille également les inscriptions et le dépôt des enchères.
"AccessControl = Ownable simplement" est-il correct ?
AccessControl sépare la menthe et la pause ; Ownable combine tout avec un seul propriétaire
Que corrige cette section ?
Cette section corrige les limites des rôles BareNFT, la décision d'URI par jeton et les effets secondaires de la pause sur le marché. BareNFT dérive du framework OpenZeppelin ERC721PresetMinterPauserAutoId, mais fournit mint(to, tokenId, tokenURI) avec tokenId fourni en externe au lieu d'AutoId. MINTER_ROLE et PAUSER_ROLE sont séparés via AccessControlEnumerable ; Un URI personnalisé pour chaque jeton est combiné avec le baseURI, offrant une flexibilité aux métadonnées, ainsi qu'un modèle de confiance dans lequel l'autorité de la Monnaie seule façonne la collection.
Principes d'ingénierie appris
- La signature Mint (auto-id vs open id) doit être sélectionnée avec le modèle d'index de catalogue et de marché.
- La pause doit être conçue et communiquée comme une pause globale dans les protocoles de dépôt.
- Les métadonnées ADR doivent inclure baseURI, le chemin par jeton et la broche de passerelle ensemble.
Continuer la lecture
Continuer la lecture
Suivant en série
BareNFTReserve : Escrow, RandomBuy et RNG faible
CreateNewListing, buy et randomBuy réservés au propriétaire — keccak256 (revealNonce, block.difficulty, msg.sender) % 3.…
Suivant en série
Remix + OpenZeppelin : Livraison sans casque
Comment le protocole Bare Crypto a-t-il été compilé et déployé sans Hardhat/Foundry avec les importations Remix IDE et OpenZeppelin v4.…
Même série
BareNFTAucure : réclamation, remboursement et pouvoirs d'urgence
Enchères britanniques : offre, réclamation, annulation, retour sous réserve et compromis de transfert d'urgence du propriétaire/transferFunds.