ERC-721 representa ativos únicos (cada tokenId é distinto). Na BrightCity Chain Testnet, use para credenciais, certificados de vistoria, licenças digitais ou registro único de equipamento urbano.

Por que usar ERC-721?

Cada token tem ID e metadata próprios. Adequado para “um documento, um ativo”.
Histórico de transferências na chain. Útil para auditoria e trilhas de custódia.
Compatível com carteiras EVM e ferramentas que já suportam ERC-721.
Transfer e eventos customizados podem alimentar indexadores via eth_getLogs.

Recursos comuns

  • tokenURI / baseURI: metadata off-chain (JSON)
  • Ownable / AccessControl: quem pode mintar
  • EIP-2981 (opcional): royalties em revenda

Metadata

Cada token referencia um JSON (URI). Campos usuais:
{
  "name": "Vistoria Predial #1042",
  "description": "Vistoria concluída em 2026-03-01",
  "image": "https://assets.example.com/vistoria-1042.png",
  "attributes": [
    { "trait_type": "Status", "value": "Aprovada" },
    { "trait_type": "Município", "value": "Lisboa" }
  ]
}
CampoObrigatórioDescrição
nameSimNome exibido
descriptionSimDescrição curta
imageSimURL da imagem (PNG, WEBP)

Deploy via código

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract CityCredential is ERC721, Ownable {
    uint256 private _nextTokenId;

    constructor() ERC721("City Credential", "CRED") Ownable(msg.sender) {}

    function safeMint(address to) external onlyOwner returns (uint256) {
        uint256 tokenId = _nextTokenId++;
        _safeMint(to, tokenId);
        return tokenId;
    }
}
Compile com evmVersion: "berlin" e publique com Deploy de contratos.

Mint e consulta

// ethers.js (exemplo)
const tx = await contract.safeMint(recipientAddress);
await tx.wait();

const owner = await contract.ownerOf(0);
const uri = await contract.tokenURI(0);
Indexe eventos Transfer para histórico completo. Veja Boas práticas para integradores.

Próximos passos

ERC-1155

Lotes e itens empilháveis

Deploy na testnet

Publicar o contrato

Visão geral

Todos os padrões ERC