In questo articolo, cercherò di spiegarti come risolvere il problema dell’interazione dei dati tra Web3 ed Ethereum, utilizzando la tecnologia alla base di GraphQL, creando uno standard per la blobkchain di Ethereum.
Che cosa è GraphQL
Prima di iniziare è meglio fare una piccola introduzione su che cosa sia GraphQL.
GraphQL è un linguaggio per query, altamente flessibile e “runtime system” per le API web. GraphQL sta andando, pian piano, a sostituire i precedenti modelli, quali SOAP e REST. E’ comunque un linguaggio già ampiamente evoluto e strutturato, infatti nasce nel 2012 dagli sviluppatori di Facebook.
GraphQL è un linguaggio query che permette un facile accesso ad un’ API, poichè, li dove altri sistemi di API, più rigidi, permettono l’accesso ad una sola singola risorsa, le query di GrapghQL permettono invece un maggiore grado di flessibilità, dimostrando inoltre, concretamente, che non esiste un vero limite al numero di risorse che si possono interrogare.
GrapghQL fornisce diversi runtime system server, per l’esecuzione delle query, mettendo a disposizione diverse librerie per diversi linguaggi di programmazione, quali GO, Java e JavaScript, PHP, Pytho, Ruby etc….
Le caratteristiche di GraphQL sono molte e varie, ma questo non è l’argomento di questo articolo, ti invito quindi alla lettura extra di altri links specifici sull’argomento GraphQL | A query language for your API
Ethereum plus GraphQL
Ethereum plus GraphQL, abbreviato in “EthQL” è un nuovo progetto collaborativo, realizzato per far avanzare l’adozione dello standard GraphQL, standardizzandolo per l’uso della blockchain di Ethereum.
Innanzitutto, stabiliamo un contesto per impostare il problema. Che cos’è “Web3”? E cos’è “Ethereum”?
Se hai già un minimo di familiarità con l’architettura web tradizionale, saprai che nel sistema “tipico” il funzionamento di un’applicazione web e’ composto da un sistema centrale (ced, e/o server farm) che gestisce gli Application Server, i dati (DB) e, l’interazione tra utente e applicazione avviene in questo modo: Il client contatta il server, viene aperto un canale di comunicazione in cui il client manda la richiesta dei dati a cui vuole accedere. Il server verifica eventualmente le credenziali di accesso (li dove viene richiesto) e risponde al client inviando le pagine di risposta elaborate con i dati richiesti etc….
Ma questa architettura sta invecchiando. Molte di queste applicazioni moderne sono costruite su un’architettura che ha quasi 30 anni, così l’avanzamento tecnico ha progressivamente costretto ad un’ integrazione forzata di più servizi web attraverso le API, affidando i nostri dati a un numero sempre più ridotto di giganti della tecnologia che ora sono diventati responsabili della protezione e del rispetto dei dati mondiali.
Nel bene e nel male, l’architettura web tradizionale è un sistema basato sulla fiducia; confidare che le nostre app stiano parlando con i server corretti, che i dati siano sicuri, che i dati siano corretti e non siano stati alterati.
Cosa succede se inseriamo in questo vecchio paradigma il ‘Web3’: un web veramente decentralizzato costruito con la sicurezza al centro. Nell’architettura Web3, le applicazioni sono collegate in rete peer-to-peer anziché connesse a un singolo server centralizzato. Di conseguenza, ogni client invia richieste individuali ad API esterne contenenti dati necessari al client. Questa rete si basa sulla “verifica”, piuttosto che sulla “fiducia” e poiché non possiede un’unica infrastruttura centralizzata, è più solida. È difficile da hackerare, è meno vulnerabile agli attacchi DDOS, etc. Ciò significa quindi una maggiore resistenza ai tempi di inattività della rete, alle frodi e alle interferenze di terzi, come il Phishing.
Web3 è una nuovo paradigma per un World Wide Web decentralizzato, creata per la prossima generazione di applicazioni in rete. Qualsiasi applicazione basata su blockchain è costruita su una piattaforma Web3. Mentre la tecnologia blockchain/web3 è, ad oggi, ancora emergente, molti settori hanno trascorso negli ultimi anni la prototipazione di applicazioni basate su blockchain. La finanza decentralizzata (DeFi) è il caso d’uso corrente più popolare, ma ogni aspetto del lavoro moderno, dall’efficienza aziendale al settore immobiliare, ha almeno un’applicazione blockchain prototipata, o in fase di studio.
Ethereum: una piattaforma Web3 con token programmabili
Quando pensi a “Ethereum”, probabilmente pensi immediatamente alla criptovaluta. Un “errore” che deriva dall’uscita della blockchain e del suo stretto rapporto iniziale con i Bitcoin. Certamente, le implementazioni più famose della prima tecnologia blockchain sono state la creazione di criptovalute come Bitcoin, Ethereum e Litecoin. Ma Ethereum è più di una criptovaluta. È una piattaforma peer-to-peer aperta che consente agli sviluppatori di creare applicazioni decentralizzate. Consentire a tali applicazioni di emettere token programmabili è semplicemente una funzionalità della piattaforma.
La piattaforma è connessa a una rete globale, non centrale, di migliaia di nodi. I programmi scritti per l’esecuzione su Ethereum sono chiamati Smart Contracts e consentono di trasferire valore, salvare dati o eseguire bit di logica che interagiscono con la blockchain.
L’arrivo di Infura nell’ecosistema di Ethereum
Ci tengo a darti questa piccola chicca, in quanto è ben chiaro quanto dispendioso possa essere lo sviluppo di dApp, tra lo sviluppo del codice, la creazione di nodi locali per i test delle transazioni e tutto il resto. Per questo motivo ti presento un progetto che nasce proprio per essere un “focal point” dello sviluppo web3 su ethereum.
Infura è una società di infrastrutture Web3 con la missione di fornire agli sviluppatori gli strumenti e le infrastrutture migliori per creare ed eseguire applicazioni sul Web decentralizzato. Fondata nel 2016, sono stati uno dei primi partecipanti al Web3. Poiché Ethereum aveva già una solida reputazione e una fiorente comunità, è stato semplice decidere di iniziare da lì. Oggi, forniscono accesso (gateway) alle reti Ethereum e Interplanetary File System (IPFS) attraverso API di facile utilizzo. Utilizzando Infura, gli sviluppatori risparmiano tempo, denaro e risorse. Possono connettersi istantaneamente a Web3 e concentrarsi completamente sulla costruzione del software.
Il problema con JSON RPC
Comunque si scelga di portare avanti il proprio progetto, per ottimizzare le loro applicazioni, gli sviluppatori devono essere in grado di leggere i dati di Ethereum. Ciò è attualmente possibile principalmente utilizzando un protocollo open source leggero chiamato JSON RPC 2.0.
Per far funzionare correttamente tutto ciò, sono necessari due livelli di protocollo di rete: il livello peer-to-peer sottostante e il livello operativo esterno.
Lo strato peer-to-peer (P2P) è focalizzato sul mantenimento dei dati sincronizzati e si occupa dei meccanismi di consenso. Il livello “operativo” invece è progettato per consentire alle applicazioni di interagire con il nodo: inviare transazioni, interrogare i dati e interfacciarsi con le funzioni amministrative. JSON-RPC 2.0 è il protocollo utilizzato in quel livello operativo, ed è progettato per scalare un certo numero di protocolli di trasporto (HTTP, WebSocket e IPC) e fornire una semplice interfaccia per l’ interazione con un nodo di rete. Sfortunatamente, questo protocollo non è stato inizialmente ideato per appositamente per eseguire query sul nodo, ed il suo utilizzo nell’invio di richieste dati ha prodotto alcuni problemi. Poichè, nel tentativo di ridurre la quantità di congestione della rete per produrre app veloci ed efficienti, la difficoltà di ottenere dati dalla blockchain in modo efficiente rende complessa la scrittura di app Web3 efficienti.
GraphQL: un modo migliore per eseguire query sulla Blockchain
Per migliorare e semplificare l’esperienza dell’utente per gli sviluppatori, abbiamo bisogno di un modo fortemente tipizzato e standardizzato per interagire ed interrogare i dati dalla blockchain. L’uso di GraphQL come interfaccia alternativa a JSON RPC può risolvere una serie di problemi chiave:
- Standardizzare il tipo restituito fornendo uno schema fortemente tipizzato che potrebbe avere implementazioni standard;
- Offrire un modo esplicito e coerente per modellare i dati sulla blockchain;
- Aumentare l’efficienza eliminando il recupero eccessivo e il recupero insufficiente;
- Estendere e sovrapporre facilmente funzionalità aggiuntive, mantenendo l’API principale.
EthQL – Specifico, preciso ed efficiente
EthQL quindi è un tool sviluppato appositamente da Infura, come strumento di tipo GraphQL, che può essere utilizzato per esplorare e interrogare la blockchain di Ethereum.
Facciamo un’esempio dell’uso di EthQL:
query {
block(number:1) {
hash
}
}
query
significa “avvia la query” e la query stessa va tra le parentesi graffeblock
è una delle entità che possiamo scegliere come target per le query e corrisponde al blocco di una blockchain(number:1)
significa “primo blocco”.- le informazioni che dobbiamo estrarre possono essere specificate con attributi in questo corpo
hash
è la combinazione unica di lettere e numeri che indica la validità e l’unicità del blocco in questione
Come possiamo vedere dall’immagine, il browser di EthQL funziona in modo che, il lato sinistro dello schermo contiene la query mentre il risultato è stampato a destra.
In un’altro esempio, questa query chiede di fornire ” l’hash dell’ultimo blocco Ethereum”.
Proviamo adesso ad effettuare il controllo del saldo di un conto: ecco dunque la sintassi necessaria per fare la verifica del saldo di un’indirizzo
query {
account(address:"0xbE2B28F870336B4eAA0aCc73cE02757fcC428dC9") {
balance
transactionCount
code
}
}
Come ultimo esempio (poichè le possibilità d’interazione fornite da EthQL sono davvero tantissime, motivo per cui ti invito ad andare sul sito del progetto a leggere con attenzione le specifiche tecniche del linguaggio), vediamo come sia possibile rilevare nuove transazioni di uno specifico account:
query {
block(number:6033927) {
transactionsInvolving(participants:["0xbE2B28F870336B4eAA0aCc73cE02757fcC428dC9", "0x65e2c5175e2e618f48e70343b14c31b280e42d90"]) {
from {address}
to {address}
}
}
}
Conclusione
EthQL è un nuovo strumento interessante per la ricerca nella blockchain di Ethereum. Lo strumento, attualmente ancora in versione alfa, sarà senza dubbio molto utile in molti ambiti, non ultimo anche quello forense digitale. Per ulteriori esempi di sintassi in GraphiQL vedere [qui](Queries and Mutations | GraphQL) e per un elenco completo dei tipi di dati disponibili in EthQL e dei loro possibili campi e attributi, eseguire una query __schema
sull’oggetto:
query {
__schema {
types {
name
kind
description
fields {
name
description
}
}
}
}
Commenti