Nfts Sunflower

SmartContract

Smart Contract NFT (com Link Externo e Pagamento de Dividendos)
Link para o site https://ntftokenpv.cloud no metadado da NFT.
Função para depósito de dividendos em USDT realizado por um agente externo (owner do contrato).
Função para retirada de dividendos pelo proprietário do NFT.
Estrutura do Contrato
//SPDX-License-Identifier: MIT pragma solidity ^0.8.0;
import “@openzeppelin/contracts/token/ERC721/ERC721.sol”;
import “@openzeppelin/contracts/access/Ownable.sol”;
import “@openzeppelin/contracts/security/ReentrancyGuard.sol”;
contract SunflowerNFTDividend is ERC721, Ownable, ReentrancyGuard {
string public baseTokenURI;
uint256 public nextTokenId = 1;
// Armazena dividendos por tokenId
mapping(uint256 => uint256) public dividends;
event DividendDeposited(uint256 indexed tokenId, uint256 amount);
event DividendWithdrawn(uint256 indexed tokenId, address indexed to, uint256 amount);
constructor(string memory _baseTokenURI) ERC721(“SunflowerNFT”, “SNFT”) {
baseTokenURI = _baseTokenURI;
}
function _baseURI() internal view override returns (string memory) {
return baseTokenURI;
}
// Mint controlado pelo owner (pode ser adaptado)
function mint(address to) external onlyOwner {
_safeMint(to, nextTokenId);
nextTokenId++;
}
// Deposita dividendos para um NFT específico
function depositDividend(uint256 tokenId) external payable onlyOwner nonReentrant {
require(_exists(tokenId), “Token inexistente”);
require(msg.value > 0, “Valor zero”);
dividends[tokenId] += msg.value;
emit DividendDeposited(tokenId, msg.value);
}
// O proprietário do NFT pode sacar seus dividendos
function withdrawDividend(uint256 tokenId) external nonReentrant {
require(ownerOf(tokenId) == msg.sender, “Não é o dono”);
uint256 amount = dividends[tokenId];
require(amount > 0, “Sem dividendos”);
dividends[tokenId] = 0;
(bool sent, ) = msg.sender.call{value: amount}(“”);
require(sent, “Falha no envio”);
emit DividendWithdrawn(tokenId, msg.sender, amount);
}
}
Observações Importantes:
O contrato utiliza funções de segurança (Ownable, ReentrancyGuard) para evitar vulnerabilidades comuns.
O depósito de dividendos é feito manualmente pelo owner; pode ser adaptado para aceitar outros agentes.
O saque de dividendos é feito pelo proprietário do NFT, garantindo descentralização e transparência.