title |
---|
Informazioni su The Graph |
Questa pagina spiega cos'è iThe Graph e come si può iniziare.
Il Graph è un protocollo decentralizzato per l'indicizzazione e query delle dati della blockchain. Il Graph permette di effettuare query dei dati difficili da effettuare query direttamente.
I progetti con smart contract complessi come Uniswap e le iniziative NFT come Bored Ape Yacht Club memorizzano i dati sulla blockchain di Ethereum, rendendo davvero difficile leggere qualcosa di diverso dai dati di base direttamente dalla blockchain.
Nel caso di Bored Ape Yacht Club, possiamo eseguire operazioni di lettura di base sul contratto, come ottenere il proprietario di una certa Ape, l'URI del contenuto di un'Ape in base al suo ID o la fornitura totale, poiché queste operazioni di lettura sono programmate direttamente nello smart contract, ma non sono possibili query e operazioni più avanzate del mondo reale, come l'aggregazione, la ricerca, le relazioni e il filtraggio non banale. Ad esempio, se volessimo effettuare query delle scimmie possedute da un certo indirizzo e filtrare in base a una delle sue caratteristiche, non saremmo in grado di ottenere queste informazioni interagendo direttamente con il contratto stesso.
Per ottenere questi dati, si dovrebbe elaborare ogni singolo evento di transferimento
mai emesso, leggere i metadati da IPFS utilizzando l'ID del token e l'hash di IPFS, e poi aggregarli. Anche per questo tipo di domande relativamente semplici, ci vorrebbero ore o addirittura giorni per un'applicazione decentralizzata (dapp) in esecuzione in un browser per ottenere una risposta.
Si potrebbe anche creare un proprio server, elaborare le transazioni, salvarle in un database e creare un endpoint API per effettuare query dai dati. Tuttavia, questa opzione richiede molte risorse, necessita di manutenzione, presenta un singolo punto di guasto e infrange importanti proprietà di sicurezza necessarie per la decentralizzazione.
L'indicizzazione dei dati della blockchain è molto, molto difficile.
Le proprietà della blockchain, come la finalità, le riorganizzazioni della chain o i blocchi non selezionati, complicano ulteriormente questo processo e rendono non solo dispendioso in termini di tempo, ma anche concettualmente difficile recuperare i risultati corretti delle query dai dati della blockchain.
Il Graph risolve questo problema con un protocollo decentralizzato che indicizza e consente di effettuare query in modo efficiente e performante i dati della blockchain. Queste API (i "subgraph" indicizzati) possono essere interrogate con un'API GraphQL standard. Oggi esiste un hosted service e un protocollo decentralizzato con le stesse funzionalità. Entrambi sono supportati dall'implementazione open source di Graph Node.
The Graph impara cosa e come indicizzare i dati di Ethereum in base alle descrizioni dei subgraph, note come manifesto del subgraph. La descrizione del subgraph definisce gli smart contract di interesse per un subgraph, gli eventi di quei contratti a cui prestare attenzione e come mappare i dati degli eventi ai dati che The Graph memorizzerà nel suo database.
Una volta scritto un subgraph manifest
, si usa la Graph CLI per memorizzare la definizione in IPFS e dire all'Indexer di iniziare l'indicizzazione dei dati per quel subgraph.
Questo diagramma fornisce maggiori dettagli sul flusso di dati una volta che è stato distribuito un subgraph manifest, che tratta le transazioni Ethereum:
Il flusso segue questi passi:
- Una dapp aggiunge dati a Ethereum attraverso una transazione su uno smart contract.
- Lo smart contract emette uno o più eventi durante l'elaborazione della transazione.
- Graph Node scansiona continuamente Ethereum alla ricerca di nuovi blocchi e dei dati del vostro subgraph che possono contenere.
- Graph Node trova gli eventi Ethereum per il vostro subgraph in questi blocchi ed esegue i gestori di mappatura che avete fornito. La mappatura è un modulo WASM che crea o aggiorna le entità di dati che Graph Node memorizza in risposta agli eventi Ethereum.
- La dapp effettua query del Graph Node per ottenere dati indicizzati dalla blockchain, utilizzando il GraphQL endpoint del nodo. Il Graph Node a sua volta traduce le query GraphQL in query per il suo archivio dati sottostante, al fine di recuperare questi dati, sfruttando le capacità di indicizzazione dell'archivio. La dapp visualizza questi dati in una ricca interfaccia utente per gli utenti finali, che li utilizzano per emettere nuove transazioni su Ethereum. Il ciclo si ripete.
Nelle sezioni che seguono si approfondirà come definire i subgraph, come distribuirli e come effettuare query dai dati dagli indici creati da Graph Node.
Prima di iniziare a scrivere il proprio subgraph, si potrebbe dare un'occhiata al Graph Explorer ed esplorare alcuni dei subgraph già distribuiti. La pagina di ogni subgraph contiene un playground che consente di effettuare query dai dati di quel subgraph con GraphQL.