Non-Fungible Tokens ” cada token es único, como un certificado de propiedad digital
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Base64.sol"; contract CryptoArt is ERC721, Ownable { uint256 private _tokenId; struct NFTData { string rarity; string palette; uint256 power; } mapping(uint256 => NFTData) public nftData; constructor() ERC721("CryptoArt", "CART") Ownable(msg.sender) {} function safeMint(address to) external onlyOwner { uint256 id = ++_tokenId; nftData[id] = NFTData("Rare", "Neon", 85); _safeMint(to, id); } function tokenURI(uint256 id) public view override returns (string memory) { return string.concat("data:application/json;base64,", Base64.encode(abi.encodePacked( '{"name":"CryptoArt #', Strings.toString(id), '","attributes":[{"trait_type":"Rarity","value":"', nftData[id].rarity, '"}]}' )) ); } }