NFT dinamici: un cambio di paradigma per il Web3

AYP
Phala Italia
10 min readNov 7, 2023

--

Cosa sono gli NFT dinamici?

I token non fungibili (NFT) sono emersi come un concetto rivoluzionario nel mondo digitale. Consentire il possesso e lo scambio di risorse digitali uniche sulla blockchain. Tuttavia, le risorse digitali statiche sono solo la punta dell’iceberg nell’evoluzione degli NFT. Ecco gli NFT dinamici (dNFT), una nuova generazione di NFT che possono evolversi e interagire con i dati del mondo reale.

A differenza degli NFT tradizionali, che hanno metadati fissi una volta coniati, i dNFT hanno la capacità di cambiare nel tempo. Sono codificati con una logica di smart contract che consente loro di aggiornare i propri metadati in base a input o condizioni esterne. Questo dinamismo consente ai dNFT di rappresentare risorse digitali che possono cambiare ed evolversi, riflettendo i cambiamenti del mondo reale o la progressione degli eventi virtuali.

NFT dinamici: ridefinire le esperienze digitali

Gli NFT dinamici stanno ridefinendo le esperienze digitali in vari settori sbloccando nuove potenzialità di coinvolgimento e innovazione. Esploriamo alcuni esempi di come gli NFT dinamici stanno trasformando diversi settori:

  1. Arte digitale: un artista potrebbe progettare un NFT che si adatti all’ora del giorno o al tempo, passando da una scena diurna luminosa a una notte stellata con l’avvicinarsi del tramonto.
  2. Web3 Social: Lens Garden è un NFT dinamico nell’ecosistema del protocollo Lens, che premia gli utenti con punti experienza per attività come staking, partecipazione alla governance o contributi alla comunità. Man mano che gli XP si accumulano, l’NFT sblocca nuove funzionalità.
  3. Gaming: I dNFT nei giochi possono evolversi con l’utilizzo che ne fanno i giocatori. Ad esempio, un NFT con la spada potrebbe iniziare dal livello base e salire di livello, acquisendo abilità o cambiando aspetto man mano che i giocatori avanzano.
  4. Risorse nel mondo reale (RWA): il settore immobiliare può utilizzare i dNFT per rappresentare in modo univoco le proprietà. Un NFT potrebbe mostrare le variazioni di valore di una proprietà e aggiornarsi automaticamente con prezzi di mercato, caratteristiche o tour virtuali dopo la ristrutturazione.

Questi esempi dimostrano il potere di trasformazione degli NFT dinamici nell’arte digitale, nelle interazioni sociali, nelle esperienze di gioco e nelle transazioni immobiliari. Adottando gli NFT dinamici le industrie possono creare esperienze coinvolgenti che spostano i confini delle tradizionali interazioni digitali.

Quali sfide stanno frenando gli NFT dinamici?

Gli NFT dinamici hanno un potenziale immenso, ma la loro implementazione deve affrontare sfide significative a causa dei limiti intrinseci della tecnologia blockchain. Questi includono:

  1. Metadati immutabili: una volta coniati, i metadati di un NFT diventano immutabili. Ciò pone sfide per gli NFT dinamici che necessitano di metadati adattabili.
  2. Natura deterministica e dati esterni: le blockchain non possono accedere direttamente ai dati esterni, cruciali per gli NFT dinamici. Inoltre, senza un metodo sicuro per integrare i dati del mondo reale, l’affidabilità degli NFT dinamici potrebbe essere compromessa. Mantenere l’integrità dei dati fuori catena è vitale per la loro affidabilità.
  3. Sfide nei giochi onchain: progettare giochi onchain incentivati è problematico a causa della loro natura deterministica. Soluzioni come la stagionalità e nuovi metodi di governance necessitano di ulteriore ricerca e sviluppo.

Come costruire NFT dinamici

La creazione di NFT dinamici richiede una combinazione di sviluppo di smart contract, integrazione dei dati e implementazione front-end. Ecco i passaggi chiave coinvolti nella creazione di NFT dinamici:

  1. Progettazione del contratto dell’NFT: si parte progettando e implementando lo smart contract che governerà il comportamento dell’NFT.
  2. Calcolo off-chain: esegui calcoli off-chain utilizzando fonti di dati esterne per generare nuovi metadati basati su dati dinamici o in tempo reale. Ciò potrebbe comportare il recupero di dati da API, oracoli o altre fonti esterne.
  3. Carica nuovi metadati su IPFS: una volta generati i nuovi metadati, caricali su IPFS (InterPlanetary File System) o su un sistema di archiviazione decentralizzato simile. Ciò garantisce che i metadati aggiornati siano accessibili e possano essere associati all’NFT.
  4. Aggiorna l’hash nel contratto: infine, aggiorna l’hash dei metadati nello smart contract per riflettere i metadati appena caricati su IPFS. Ciò consente agli utenti di recuperare e verificare gli ultimi metadati associati all’NFT dinamico.

Seguendo questi passaggi, puoi creare avvincenti NFT dinamici che si evolvono e rispondono ai dati del mondo reale, fornendo un’esperienza coinvolgente e interattiva per collezionisti e utenti.

Phat Contract: il futuro degli NFT dinamici

Phat Contract, sviluppato da Phala Network, offre una soluzione a queste sfide colmando il divario tra ambienti on-chain e off-chain. È un programma off-chain che gli sviluppatori possono utilizzare per implementare un’ampia gamma di funzionalità per le loro applicazioni decentralizzate (dApp).

Come Phat Contract risolve il problema

Phat Contract è un potente framework di smart contract che fornisce una gamma di funzionalità chiave per aiutare gli sviluppatori a creare facilmente NFT dinamici. Ecco alcuni modi in cui le funzionalità di Phat Contract apportano benefici agli NFT dinamici:

  1. Integrazione dinamica dei dati: La funzionalità di integrazione dinamica dei dati di Phat Contract consente agli sviluppatori di integrare facilmente fonti di dati esterne nei loro smart contract. Ciò consente agli NFT dinamici di recuperare dati in tempo reale da API o oracoli e utilizzarli per aggiornare i propri metadati o attributi, creando un’esperienza più coinvolgente per gli utenti.
  2. Logica flessibile: la logica flessibile di Phat Contract consente agli sviluppatori di definire regole e calcoli complessi all’interno dei loro smart contract. Ciò semplifica la creazione di NFT dinamici che rispondono ai cambiamenti nei dati del mondo reale, come i prezzi di mercato o le condizioni meteorologiche.
  3. Sicuro e scalabile: Phat Contract si basa su una tecnologia blockchain sicura e scalabile, garantendo che gli NFT dinamici creati con Phat Contract siano sicuri e possano scalare per soddisfare la domanda. Ciò è fondamentale per gli NFT che richiedono elevati livelli di sicurezza e affidabilità come quelli che rappresentano beni di alto valore come immobili o oggetti da collezione.

Sfruttando queste funzionalità, Phat Contract fornisce una potente soluzione per la creazione di NFT dinamici in grado di trasformare le esperienze digitali in vari settori. Con Phat Contract, gli sviluppatori possono creare facilmente NFT coinvolgenti e interattivi che rispondono a dati del mondo reale, fornendo agli utenti un’esperienza unica e coinvolgente.

Sfruttando queste funzionalità, Phat Contract consente agli sviluppatori di creare NFT dinamici in grado di adattarsi ed evolversi sulla base di dati ed eventi del mondo reale. Ciò supera i limiti dei tradizionali NFT statici, aprendo un mondo di possibilità per l’innovazione degli NFT.

Esempi di NFT dinamici

Collezioni di NFT aggiornabili

Il concetto di NFT aggiornabili è rivoluzionario e Phat Contract è in prima linea in questa innovazione. Diamo un’occhiata al lavoro svolto dallo sviluppatore Paco Yang su GitHub. Ha creato un progetto Next.js che getta le basi per una raccolta NFT aggiornabile.

Per gli sviluppatori Web3, questo caso d’uso dimostra come creare NFT che non siano statici ma possano evolversi nel tempo. Ciò apre una nuova serie di possibilità per la creazione di NFT, rendendoli più interattivi e coinvolgenti per gli utenti.

#[ink::contract(env = pink::PinkEnvironment)]
mod phala_nft_collection {
#[ink(storage)]
pub struct PhalaNftCollection {
owner: AccountId,
name: String,
description: String,
total_nfts: u32,
nfts: Mapping<u32, Nft>,
// JS code to dynamically compute NFT metadata
compute_formula: Option<String>,
}
impl PhalaNftCollection {
#[ink(constructor)]
pub fn create(name: String, description: Option<String>) -> Self {
Self {
name: name.clone(),
description: description.unwrap_or(String::from("")),
owner: Self::env().caller(),
nfts: Mapping::new(),
total_nfts: 0,
compute_formula: None,
}
}
#[ink(message)]
pub fn mint(&mut self, token_id: u32, account: AccountId) -> Result<u32, Error> {
// Mint NFT ...
}
#[ink(message)]
pub fn levelup(&mut self, token_id: u32, account: AccountId) -> Result<u32, Error> {
// Levelup the NFT data ...
}
#[ink(message)]
pub fn get_nft_metadata(&self, token_id: u32) -> Result<NftMetadata, Error> {
// Return the NFT metadata ...
}
}
}

Un altro caso d’uso interessante è presentato da Keshav Sharma nel suo progetto PokeLens sulla comprensione di LensAPI Oracle di Phala Network. Nel suo post, Keshav spiega come Phat Contract può essere utilizzato per creare NFT dinamici che cambiano in base ai dati Lens recuperati dalle API.

L’idea è quella di creare uno smart contract che premi l’utente con un NFT evoluto se raggiunge dei checkpoint. Ci sono tre checkpoint — Livello 0, Livello 1 e Livello 2.

  • Livello 0: ovvero Pichu è il minimo che può essere richiesto da un account se il profilo Lens ha meno di 10 follower totali, 50 post totali, 50 commenti totali, 10 mirror totali e 10 raccolte totali.
  • Livello 1: ovvero Pikachu può evolversi dal precedente se il profilo ha tra 10 e 50 follower totali, 50–100 post e commenti totali e 10–20 mirror e raccolte totali.
  • Livello 2: ovvero Raichu può essere acquisito se il profilo supera i 50 follower totali, 100 post e commenti totali e 20 mirror e raccolte totali.

Giochi on-chain

Phat Contract viene utilizzato anche per creare giochi completamente on-chain. Ad esempio, lo sviluppatore Shubham Patel ha utilizzato Phat Contract per creare un gioco chiamato “Lens-Phite”. Questo gioco sfrutta la potenza di Phat Contract per eseguire calcoli complessi off-chain in tempo reale, fornendo un’esperienza di gioco senza soluzione di continuità.

Per gli sviluppatori Web3, questo caso d’uso mostra come creare esperienze di gioco coinvolgenti interamente on-chain. Ciò non solo fornisce trasparenza e sicurezza, ma apre anche nuove possibilità di interazione e coinvolgimento dei giocatori.

Per esempio, il codice sotto rappresenta il corpo della funzione fetchLensApiStats(lensApi: string, profileId: string) dove il gioco Lens Phite è in grado di effettuare una batchHttpRequest per ottenere informazioni dalle API Lens e Railway API e recuperare i 3 attacchi disponibili e le proprietà circa la natura degli NFT del combattente dal suo profilo Lens. Queste proprietà dinamiche consentono al gioco Lens Phite di avere attacchi forti in base a quanto l’utente interagisce sul protocollo Lens creando un meccanismo di progressione che vive all’interno e all’esterno dell’applicazione di gioco.

let headers = {
"Content-Type": "application/json",
"User-Agent": "phat-contract",
};
let query = JSON.stringify({
query: `query Profile {
profile(request: { profileId: \"${profileId}\" }) {
stats {
totalFollowers
totalFollowing
totalPosts
totalComments
totalMirrors
totalPublications
totalCollects
}
}
}`,
});
let body = stringToHex(query);
// In Phat Function runtime, we not support async/await, you need use `pink.batchHttpRequest` to
// send http request. The function will return an array of response.
//
let [response1,response2] = pink.batchHttpRequest(
[
{
url: lensApi,
method: "POST",
headers,
body,
returnTextBody: true,
},
{
url:`https://node-api-production-bfa7.up.railway.app/api/products?lens_id=${profileId}`,
method:"GET",
headers,
returnTextBody:true
}
],
10000
);

if (response1.statusCode !== 200) {
console.log(
`Fail to read Lens api with status code: ${response1.statusCode}, error: ${
response1.error || response1.body
}}`
);
throw Error.FailedToFetchData;
}
let respBody = response1.body;
let resBody2 = response2.body;
let aa = [];
aa.push(respBody,resBody2);

Un altro esempio viene dallo sviluppatore Koisose, che ha creato un gioco chiamato “Lens Contract Fighter”. Questo gioco mostra come Phat Contract può essere utilizzato per creare giochi on-chain coinvolgenti con funzionalità dinamiche.

Questo caso d’uso può ispirare gli sviluppatori web3 a sfruttare la potenza degli smart contract per creare applicazioni che non solo siano divertenti ma sfruttino anche i vantaggi unici della tecnologia blockchain.

Ludicizzazione: NFT dinamici basati sul meteo

Un’altra affascinante applicazione di Phat Contract è la creazione di NFT dinamici basati sul meteo. Si tratta di NFT che cambiano in base alle condizioni meteorologiche locali. Ciò è reso possibile dalla capacità di Phat Contract di recuperare dati in tempo reale da wttr.in e utilizzare i risultati formattati per aggiornare i metadati di NFT archiviati su IPFS tramite 4Everland S3 API. Ciò rende possibile avere una soluzione end-to-end completamente decentralizzata. Di seguito possiamo dare un’occhiata al diagramma del processo di creazione e aggiornamento dell’NFT dinamico.

Questo è reso possibile dal seguente frammento di codice in TypeScript.

Qui recuperiamo i dati meteo dall’API di wttr.in.

function fetchWeatherApi(apiUrl: string, city: string): any {
const weatherFormat = '?format={"name":"%l","description":"Weather+in+%l","external_url":"https://wrlx-bucket.4everland.store/%l/weather","image":"%x","attributes":[{"trait_type":"timestamp","value":"%T+%Z"},{"trait_type":"city","value":"%l"},{"trait_type":"weather","value":"%C+%t"}]}';
const httpUrl = `${apiUrl}${city}${weatherFormat}`;
let headers = {
"Content-Type": "application/json",
"User-Agent": "phat-contract",
};
let response = pink.httpRequest({
url: httpUrl,
method: "GET",
headers,
returnTextBody: true,
});
let respBody = response.body;
if (typeof respBody !== "string") {
throw Error.FailedToDecode;
}
console.log(respBody);
return JSON.parse(respBody);
}

Successivamente, aggiorniamo lo storage off-chain chiamando il Rust SDK Phat Contract connesso all’API S3 da 4Everland. Puoi vedere che la funzione si chiama invokeContract() dove il callee è l’id del contratto del Rust SDK Phat Contract, selector è numero esadecimale della funzione che stiamo chiamando e input è il parametro della funzione selector codificati SCALE.

function updateS3Storage(city: string, metadata: string) {
let uint8Array = new Uint8Array(metadata.length);
for (let i = 0; i < metadata.length; i++) {
uint8Array[i] = metadata.charCodeAt(i);
}
const endpoint = 'endpoint.4everland.co'
const region = 'us-west-1'
const bucket = 'weather-bucket'
const object_key = `${city}/weather`;
const value = uint8Array;
const bytes = WalkerImpl.encode([
endpoint,
region,
bucket,
object_key,
Array.from(value)
], encodeS3Put)
const decoded = WalkerImpl.decode(bytes, decodeS3Put)
console.info(`input decoded: ${decoded}`)
console.log(bytes);
const delegateOutput = pink.invokeContract({
callee:
"0x6295f7139ce951f25037419c444348591a4c401fb37ab9e5ccc7a1e2165d6cae",
selector: 0x4ea2cb61,
input: bytes,
});

Possiamo visualizzare il processo di minting nel seguente video.

Conclusioni

Per gli sviluppatori web3 questo caso d’uso apre una nuova gamma completamente nuovo di possibilità per la ludicizzazione dei dati del mondo reale. Integrando le informazioni del mondo reale negli NFT, puoi creare esperienze uniche e coinvolgenti per gli utenti.

Gli NFT dinamici non sono più solo un nuovo concetto. Con la potenza di Phat Contract, stanno diventando realtà. Mentre continuiamo a esplorare il potenziale di questa tecnologia, possiamo aspettarci di vedere applicazioni ancora più innovative nel prossimo futuro.

A proposito di Phala

Phala Network è un cloud decentralizzato che offre calcolo sicuro e scalabile per il Web3.

Con Phat Contract, un innovativo modello di programmazione che permette calcolo off-chain trustless, gli sviluppatori possono creare nuovi prodotti Web3.

Twitter Youtube Github Discord Forum Telegram

--

--