NFT sta per Non Fungible Token, ossia è un token non fungibile. Questa è una differenza sostanziale con le cryptovalute: essendo, queste ultime, denaro a tutti gli effetti sono fungibili, ossia,in parole povere "una crypto vale l’altra". Supponi di avere una banconota da cinque euro. Se la dessi ad un amico, e lui ti restituisse un'altra banconota dello stesso valore.. cambierebbe qualcosa? No: questo avviene, appunto, perchè il denaro è fungibile, questi tokens non lo sono.
Gli NFT sono dei certificati digitali, che attestano l’originalità e la proprietà univoca di un bene fisico o digitale.
È questo uno dei motivi per i quali hanno assunto rilevanza, ad esempio, nell’acquisto di opere d’arte digitali: l’opera in sè, infatti, potrebbe essere facilmente riproducibile e il suo proprietario potrebbe venire usurpato, in qualsiasi momento, del suo diritto; così facendo, il proprietario dell’opera coniata, dunque, ha potere assoluto nel rivendicare il suo diritto di proprietà.
Questa relazione tra il proprietario e il token è protetta dalla blockchain di Ethereum, dove nessuno può modificare il record di proprietà o duplicare un nuovo token.
Ti abbiamo incuriosito parlando di NFT e vorresti costruirne uno? Proviamoci insieme!
Come si costruisce un NFT?
Gli unici prerequisiti sono avere VSC e Node installati nel tuo computer, se non li hai clicca qui:
Altra cosa di cui abbiamo bisogno per iniziare è il wallet virtuale Metamask:
Questo servirà per interagire con il blockchain di Ethereum tramite un’estensione sul browser.
Sei pront*? Iniziamo!
Per prima cosa abbiamo bisogno di disporre anche di una minima quantità di Ethereum al fine di fare dei test; non ci sarà bisogno di metterne di reali, perchè a questo scopo ci faremo aiutare da un faucet di ETH, ossia una pagina web che ne distribuisce piccole quantità.
- Dalla home su Metamask vai su reti 🡪 show/hide test networks 🡪 fai switch su test network ON e scegli una rete di test.
- Copia e incolla il codice sulla pagina web della rete, io ho usato la rete di test Goerli.
Il prossimo step è quello di interagire con il network di Ethereum, e per farlo occorre connettersi a un client di Ethereum. Useremo il provider di Alchemy, e creiamo la nostra app usando la versione free.
Copiamo la chiave API e salviamola sul note: view details 🡪 view key
Il progetto prende forma
Inizializziamo il progetto dalla nostra bash:
mkdir nft-project
cd nft-project
Creiamo un’altra directory all’interno del nostro progetto e chiamiamo node.js:
mkdir ethereum
cd ethereum
npm init
Installiamo Hardhat, un Ethereum development environment (n.b.: per chi ha Windows ho avuto qui la necessità di aprire Powershell perchè il comando non veniva riconosciuto nella bash):
npm install –save-dev hardhat
npx hardhat
E selezioniamo l’opzione: ‘Create an empty hardhat.config.js’ .
Torniamo indietro nella root directory del nostro progetto e usiamo Next.js per inizializzare la web app cd ..
mkdir web
cd web
npx create-next-app@latest
Next.js è un framework di sviluppo Web open source basato su Node.Js
fonte: Wikipedia.
Definire le variabili
Lanciamo i seguenti comandi per creare un file di enviroment dentro la cartella ethereum, riprendendo da dove eravamo rimasti e apriamo VSC per andare a modificare il file di environment.
cd ..
cd Ethereum
touch .env
npm install dotenv –save
Quando definiamo le variabili, una variabile sarà l’alchemy key che abbiamo salvato in precedenza, una la Metamask private key, e l’ultima l’indirizzo Metamask.
Nel nostro file .env dovranno essere scritte così
DEV_API_URL=ALCHEMY_KEY
PRIVATE_KEY=METAMASK_PRIVATE_KEY
PUBLIC_KEY=METAMASK_ADDRESS
Come settare lo smart contract?
Lo smart contract è il contratto digitale dove gli accordi tra gli utilizzatori sono settati nel codice. Per farlo torniamo nella bash per creare due nuove directories all’interno di ethereum, una per i contratti e una per gli scripts, poi installiamo Open Zeppelin, una libreria open source in tema di smart contracts.
mkdir contracts
mkdir scripts
npm install @openzeppelin/contracts
All’interno della cartella ‘contracts’ creiamo il file del nostro primo contratto con il comando touch.
touch myFirstContract.sol
L’estensione .sol si riferisce al Solidity Language, il linguaggio degli smart contracts. Se non ce l’hai, installa il compiler su VSC, inoltre ti consigliamo questo indirizzo dove puoi consultare un esempio di contratto smart.
Costruire i Metadata del nostro NFT
I metadata sono gli elementi descrittivi dell’NFT; ai fini del nostro tutorial, immagazzineremo i metadata dell’NFT semplicemente da fare in modo che la nostra API restituisca il file JSON. Nel nostro progetto aperto su VSC creiamo una nuova cartella su web 🡪 pages 🡪 api 🡪 e la chiamiamo erc721 dal nome della forma più usata di NFT, l’ERC-721 appunto, detta anche forma standard. All’interno creiamo un file JS dove inseriamo i metadata.
Per esempi esplicativi della struttura del Metadata di un ERC721 consulta questa documentazione di Opensea.
Lanciamo poi il seguente comando dalla directory web/my-app :
npm run dev
Fase di deploy e considerazioni finali
Poichè la nostra app è solamente in locale, può essere utile scaricare un tool come ngrok per esporla ad un accesso pubblico.
Per il deploy useremo il nostro indirizzo ngrok, che verrà inserito nella funzione baseURI dello smart contract come nell’esempio:
function _baseURI() internal pure override returns (string memory) { return "API_URL.ngrok.io/api/erc721/"; } |
Per compilare usiamo hardhat e per rendere il processo più semplice, ti suggerisco di usare ethers.js, una libreria che ambisce a diventare la più completa per interagire con la Blockchain di Ethereum. Una volta installata ethers.js, lanciamo il comando dalla cartella Ethereum:
npx hardhat compile
Creo infine un file deploy.js su ethereum/scripts/deploy.js.
Per maggiori info sulla fase di deploy è possibile consultare il tutorial di Hardhat dove è disponibile un modello di script di deploy. A questo punto, una volta messo in run lo script di deploy, se tutti i passaggi sono stati eseguiti correttamente, nel tuo terminale apparirà l’indirizzo del network di test dove sarà visibile la tua NFT!
Oltre a questi brevi cenni sul deploy, in questo tutorial su come costruire NFT, non ci occuperemo della coniazione della NFT ma essere arrivati fino a qui è già una grandissima soddisfazione. Dallo spunto iniziale offerto, si può partire per creare il tuo token personalizzato, arricchendolo dei metadati che preferisci e con lo smart contract che meglio credi.
Vuoi ulteriori info sugli NFT? Dai uno sguardo al nostro video a riguardo!