Introduzione
Nel mondo degli NFT (Non-Fungible Tokens), le royalties rappresentano una delle funzionalità più interessanti e utili per gli artisti e i creatori di contenuti. Le royalties consentono ai creatori di ricevere una percentuale sulle vendite future dei loro NFT, garantendo così un flusso di entrate continuo anche dopo la vendita iniziale. In questo tutorial, esploreremo come implementare un sistema di royalties in un contratto ERC-721 utilizzando Solidity.
Codice completo
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyNFT is ERC721, Ownable {
struct RoyaltyInfo {
address recipient;
uint256 percentage; // Percentuale in base 100
}
mapping(uint256 => RoyaltyInfo) private _royalties;
constructor() ERC721("MyNFT", "MNFT") {}
function mintNFT(address recipient, uint256 tokenId, address royaltyRecipient, uint256 royaltyPercentage) public onlyOwner {
require(royaltyPercentage <= 10000, "Royalty percentage too high"); // Max 100%
_mint(recipient, tokenId);
_royalties[tokenId] = RoyaltyInfo(royaltyRecipient, royaltyPercentage);
}
function getRoyaltyInfo(uint256 tokenId) public view returns (address, uint256) {
RoyaltyInfo memory royalty = _royalties[tokenId];
return (royalty.recipient, royalty.percentage);
}
function _transfer(address from, address to, uint256 tokenId) internal override {
super._transfer(from, to, tokenId);
// Logica per gestire le royalties durante la vendita
// Qui potremmo implementare la logica per trasferire le royalties
}
} Spiegazione
Analizziamo il codice riga per riga per comprendere come gestire le royalties negli NFT ERC-721:
- Importazioni: Utilizziamo le librerie di OpenZeppelin per semplificare la creazione del nostro contratto ERC-721 e per gestire i permessi con
Ownable. - Struct RoyaltyInfo: Definiamo una struttura per memorizzare le informazioni sulle royalties, inclusi il destinatario e la percentuale.
- Mapping: Creiamo un mapping che associa ogni token ID alle relative informazioni sulle royalties.
- Funzione mintNFT: Questa funzione consente di coniare un nuovo NFT. Accetta l´indirizzo del destinatario, l´ID del token, l´indirizzo del destinatario delle royalties e la percentuale di royalties. Verifichiamo che la percentuale non superi il 100% (10000 in base 100).
- Funzione getRoyaltyInfo: Permette di recuperare le informazioni sulle royalties per un determinato token ID.
- Funzione _transfer: Qui potremmo implementare la logica per gestire il trasferimento delle royalties durante la vendita. Attualmente, chiamiamo solo la funzione di trasferimento di base.
Best practice
- Controllo delle percentuali: Assicurati di implementare controlli per evitare che le percentuali di royalties superino il 100%.
- Trasparenza: Rendi le informazioni sulle royalties facilmente accessibili. Utilizza funzioni pubbliche per consentire a chiunque di visualizzarle.
- Test del contratto: Scrivi test approfonditi per assicurarti che le royalties vengano gestite correttamente durante le transazioni.
- Considera le commissioni di rete: Quando implementi il trasferimento delle royalties, considera le commissioni di rete e come queste possano influenzare il pagamento delle royalties.
Riepilogo
In questo tutorial, abbiamo esplorato come implementare un sistema di royalties in un contratto ERC-721 utilizzando Solidity. Abbiamo creato un contratto NFT che consente di coniare token con royalties associate e di recuperare queste informazioni. Le royalties rappresentano un modo efficace per garantire che i creatori possano beneficiare delle vendite future dei loro lavori.
