Playbook

BareNFT: Roles, Pausable y Token URI (Barenft Roles Pausable Y Token Uri)

BareNFT ofrece mint (a, id, uri) controlado por roles con ERC721 Enumerable/Burnable/Pausable y AccessControl. URI por token y compensaciones de pausa.

Protocolo de mercado de solidez criptográfica desnuda

Parte 2 de 5

BareNFT sin Hardhat/Foundry con Remix IDE y OpenZeppelin v4.1 Importaciones de GitHub, reserva, subasta en el Reino Unido y arquitectura de emisión BareToken controlada por NFT; ADR, RNG débil y compensaciones de autoridad de emergencia.

Bare Crypto Solidity marketplace protocol diagram

Del preset al más allá: quién acuña, quién para

BareNFT se deriva del marco OpenZeppelin ERC721PresetMinterPauserAutoId, pero proporciona mint(to, tokenId, tokenURI) con tokenId suministrado externamente en lugar de AutoId. MINTER_ROLE y PAUSER_ROLE se separan mediante AccessControlEnumerable; Un URI personalizado para cada token se combina con el URI base, lo que proporciona flexibilidad de metadatos, así como un modelo de confianza en el que la autoridad de la moneda es la única que da forma a la colección.```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


## Conceptos en la primera mención```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 separación de roles aumenta la seguridad; Pero si DEFAULT_ADMIN_ROLE está en una mano, la distinción MINTER/PAUSER sigue siendo cosmética, no operativa.

## ADR: Abrir tokenId en lugar de AutoId

Decisión: dejar que la firma mint sea mint(address to, uint256 tokenId, string tokenURI); Selecciona ID de operador en lugar de contador. Motivo: los números de catálogo de la colección, el listado de reserva y el historial de subastas se indexan mediante tokenId. Costo: revierte _mint en ID en conflicto; La coordinación de la menta fuera de la cadena se vuelve obligatoria. Este es un ADR de "autoridad de catálogo de operadores" en lugar de un "incremento automático en cadena".

## Rol, pausa y gancho de transferencia

pausa() solicita PAUSER_ROLE; _beforeTokenTransfer llama a la cadena Enumerable + Pausable. Cuando Pausa está activada, safeTransferFrom en BareNFTReserve o BareNFTAuction también se detiene: el freno de emergencia bloquea todas las salidas de depósito en garantía simultáneamente. Esta es una poderosa herramienta para incidentes y también significa que el operador puede congelar todo el mercado.```text
PAUSER_ROLE
   pause()
     |
     v
_beforeTokenTransfer
     |
     +-- marketplace escrow transfer BLOCKED
     +-- peer-to-peer transfer BLOCKED
```## Fallo: superficie menta no autorizada y compensación de URI

setMintingCurrency parece ser invocable públicamente; mintingPrice nunca se establece: superficie de fijación de precios incompleta. Escenario de rendimiento: Enumerable + _beforeTokenTransfer con cada transferencia aumenta el costo del gas en el concurrido mercado secundario. En el lado del URI, la combinación baseURI + ruta rompe toda la colección cuando cambia la puerta de enlace IPFS; La flexibilidad por token depende de la disciplina operativa de baseURI. La infiltración de MINTER_ROLE envenena el historial del listado de reserva con una identificación falsa.

## Los enfrentamientos más confusos de este episodio.```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

Lista de verificación de su propio sistema

  1. ¿DEFAULT_ADMIN, MINTER y PAUSER están en la misma billetera o están separados?
  2. ¿Con qué tx se pueden realizar listados/subastas abiertas durante la pausa?
  3. ¿Se romperán los tokens antiguos cuando la combinación tokenURI cambie a baseURI?
  4. ¿Cómo se comporta la interfaz de usuario si se intenta acuñar el mismo tokenId dos veces?
  5. ¿Quién puede llamar medias caras como setMintingCurrency?

Cosas para recordar de esta sección

  1. BareNFT aporta autoridad de catálogo a la cadena con mint(to,id,uri) controlado por roles.
  2. Pausable es un interruptor global en los mercados de depósitos en garantía: la compensación debe escribirse claramente.
  3. La flexibilidad de URI por token depende de la deuda operativa de baseURI.

La separación de roles es un esquema de bloqueo; Si el administrador está en una mano, es sólo una etiqueta.

FAQ

Frequently asked questions

¿Qué es el control de acceso?

Modelo de permiso basado en roles; Separación de menta/pausa de grano más fino que Ownable.

¿Qué es ERC721Pausable?

Freno de emergencia que detiene los traslados; También bloquea el listado y el depósito en garantía de la subasta.

¿Es correcto "AccessControl = Ownable simplemente"?

AccessControl separa mint y pausa; Ownable combina todo con un solo dueño

¿Qué soluciona esta sección?

Esta sección corrige los límites de las funciones de BareNFT, la decisión de URI por token y los efectos secundarios de la pausa en el mercado. BareNFT se deriva del marco OpenZeppelin ERC721PresetMinterPauserAutoId, pero proporciona mint(to, tokenId, tokenURI) con tokenId suministrado externamente en lugar de AutoId. MINTER_ROLE y PAUSER_ROLE se separan mediante AccessControlEnumerable; Un URI personalizado para cada token se combina con el URI base, lo que proporciona flexibilidad de metadatos, así como un modelo de confianza en el que la autoridad de la moneda es la única que da forma a la colección.

Principios de ingeniería aprendidos

  • Se debe seleccionar la firma Mint (identificación automática versus identificación abierta) junto con el catálogo y el modelo de índice del mercado.
  • La pausa debe diseñarse y comunicarse como una pausa global en los protocolos de custodia.
  • El ADR de metadatos debe incluir baseURI, ruta por token y pin de puerta de enlace juntos.

Continuar leyendo

Continuar leyendo

Siguiente en la serie

Siguiente en la serie

Misma serie

Paylaş