Spesso quando parliamo di Smart Contracts e Solidity ci scontriamo con la parola ABI: in questo piccolo tutorial andremo a spiegare nel dettaglio il significato di ABI, il suo utilizzo e tutti i metodi per generare l'ABI!
ABI: Abstract Binary Interface
Quando parliamo di ABI parliamo della rappresentazione binaria dell'interfaccia di uno Smart Contract. Non è molto facile da capire nella sua definizione, proviamo quindi con un esempio pratico. Di seguito puoi trovare l'ABI di SplitPayment, uno degli Smart Contracts di OpenZeppelin, di cui abbiamo parlato in questo articolo!
Come puoi notare si tratta di uno schema JSON che rappresenta il nostro Smart Contract.
Puoi trovare le variabili e le diverse funzioni dello Smart Contract: ognuna con la propria descrizione. Ecco gli attributi che troverai nella tua ABI:
constant
se true si tratterà di unacall
, cioè una funzione eseguida da un nodo, senza spendere Gas! Se costant dovesse invece essere false, sarebbe una function (con un costo in Gas)inputs
parametri della funzione, ognuno conname
etype
name
in cui viene inserito il nome della variabile o funzioneoutputs
valori di ritorno di una funzionepayable
la funzione è payable? Tipo booleanostateMutability
:nonpayable
oview
type
, che può assumere il valore difunction
,constructor
ofallback
. Sono tre tipi di funzioni che possiamo trovare in uno Smart Contract.
Smart Contract, quando ci serve l'ABI?
L'ABI di uno Smart Contract ci servirà in diverse situazioni:- deploy di uno Smart Contract
- interazione con Web3
data
della funzione new
il bytecode del codice!
Esatto, tutto il codice che hai scritto verrà trasformato in bytes. Da qui nasce il secondo caso in cui ti servirà l'ABI: durante l'interazione tra Web3 e la nostra Blockchain!
Cosa avviene quindi nella Ethereum Virtual Machine quando chiamiamo un metodo del nostro Smart Contract? Andiamo a scoprirlo, sempre con un esempio.
Vogliamo chiamare la funzione claim()
, che si occuperà di ritirare le nostre quote di Ethereum presenti nello Smart Contract! Ecco che entrerà in gioco la nostra ABI!
Andiamo a calcolare l'Hash della funzione claim attraverso la funzione keccak, che eseguirà un SHA3 della firma della funzione, quindi claim()
. Ecco il risultato:
4e71d92d1cab44b435a6dcbe7dcfe75cf72953916cfa3842f5057ce194aa60e2
Un hash di 32 bytes, in formato esadecimale (cifre da 0-9 e A-F), di cui dobbiamo prendere i primi 4! 4e
,71
,d9
e 2d
. Ecco l'identificativo della nostra funzione claim()
!
Come generare e ottenere la nostra ABI?
Ora che hai capito la struttura, l'importanza e le funzioni dell'Abstract Binary Interface ti starai sicuramente chiedendo: come genero l'ABI del mio Smart Contract?
Ti consiglio di utilizzare una funzionalità di Remix IDE! Questo potente strumento di sviluppo ci permette di ottenere la nostra ABI facilmente, ecco come:
- Entra nel tuo Smart Contract e selezionalo dal menù a tendina
- Premi "Details"
Tasto "Dettagli" nella scheda "Compile" - Cerca e copia la sezione ABI attraverso l'icona della clipboard
Ecco la nostra ABI!
Conclusioni
Questo nuovo tutorial Solidity può definirsi concluso: abbiamo capito l'utilità della ABI, abbiamo visto la trasformazione di una funzione in bytecode e infine abbiamo imparato a genere le nostre ABI! Ricorda di entrare nel nostro gruppo Telegram per non perdere neanche un articolo!Posted from my blog with SteemPress : https://www.coiners.it/tutorial-solidity-cose-una-abi-e-come-generarla/
This user is on the @buildawhale blacklist for one or more of the following reasons:
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit