Tutorial Solidity: cos'è una ABI e come generarla?

in abisolidity •  6 years ago 


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 una call, 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 con name e type
  • name in cui viene inserito il nome della variabile o funzione
  • outputs valori di ritorno di una funzione
  • payable la funzione è payable? Tipo booleano
  • stateMutability: nonpayable o view
  • type, che può assumere il valore di function, constructor o fallback. 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
Se hai scritto il tuo primo Smart Contract e vuoi portarlo su una Blockchain (testnet o mainnet) dovrai eseguire una transazione Ethereum, con il parametro 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:

  1. Entra nel tuo Smart Contract e selezionalo dal menù a tendina
  2. Premi "Details"
    cos'è abi smart contracts
    Tasto "Dettagli" nella scheda "Compile"
  3. Cerca e copia la sezione ABI attraverso l'icona della clipboard
    tutorial solidity
    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/
Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

This user is on the @buildawhale blacklist for one or more of the following reasons:

  • Spam
  • Plagiarism
  • Scam or Fraud