Aiuta ad aggiornare questa pagina

🌏

C'è una nuova versione di questa pagina, ma al momento è solo in inglese. Aiutaci a tradurre l'ultima versione.

Questa pagina è incompleta. Se conosci bene l'argomento, modificala e condividi un po' del tuo sapere.

Librerie degli Smart Contract

Ultima modifica: , Invalid DateTime
Edit page

Non è necessario scrivere da zero ogni Smart Contract del progetto. Sono disponibili molte librerie di Smart Contract che forniscono blocchi di programmazione riutilizzabili per il progetto.

Prerequisiti

Prima di iniziare a leggere delle librerie degli Smart Contract, è utile conoscere la struttura di questi contratti. Consulta Anatomia degli Smart Contract se ancora non l'hai fatto.

Cosa contiene una libreria

Nelle librerie degli Smart Contract trovi solitamente due tipi di blocchi di programmazione: comportamenti riutilizzabili che puoi aggiungere ai contratti e implementazioni di vari standard.

Comportamenti

È probabile che durante la scrittura degli Smart Contract si finisca a scrivere sempre gli stessi schemi, ad esempio per assegnare a un admin l'indirizzo per effettuare operazioni protette in un contratto o per aggiungere un pulsante di pausa di emergenza nell'evento di un problema imprevisto.

Le librerie degli Smart Contract solitamente forniscono implementazioni riutilizzabili di tali comportamenti comelibrerie o tramite eredità in Solidity.

Ad esempio, di seguito è riportata una versione semplificata del contratto Ownable della libreria dei contratti di OpenZeppelin, che imposta un indirizzo come proprietario di un contratto e fornisce un modificatore per consentire l'accesso a un metodo solo a quel proprietario.

1contract Ownable {
2 address public owner;
3
4 constructor() internal {
5 owner = msg.sender;
6 }
7
8 modifier onlyOwner() {
9 require(owner == msg.sender, "Ownable: caller is not the owner");
10 _;
11 }
12}
13
Mostra tutto
📋 Copia

Per usare un blocco di programmazione come questo in un contratto, devi prima importarlo e poi eseguirne estensioni nei tuoi contratti. In questo modo potrai usare il modificatore fornito dal contratto di base di Ownable per proteggere le funzioni che utilizzi.

1import ".../Ownable.sol"; // Percorso della libreria importata
2
3contract MyContract is Ownable {
4 // The following function can only be called by the owner
5 function secured() onlyOwner public {
6 msg.sender.transfer(1 ether);
7 }
8}
9
📋 Copia

Un altro esempio noto è SafeMath o DsMath. Sono librerie (e non contratti di base) che forniscono funzioni aritmetiche con controlli dell'overflow che non vengono offerti dal linguaggio. È buona pratica usare una di queste librerie al posto delle operazioni aritmetiche native per proteggere un contratto dagli overflow, che possono avere conseguenze disastrose.

Standard

Per promuovere la componibilità e l'interoperabilità, la community di Ethereum ha definito diversi standard sotto forma di ERC. Puoi leggere di più nella sezione dedicata agli standard.

Se desideri includere un ERC all'interno di un contratto, è consigliabile cercare implementazioni standard anziché crearne di proprie. Molte librerie degli Smart Contract includono implementazioni per gran parte degli ERC più popolari. Per esempio, l'onnipresente standard per token fungibile ERC20 si può trovare in HQ20, DappSys e OpenZeppelin. Inoltre, alcuni ERC forniscono implementazioni canoniche come parte dello stesso ERC.

Vale la pena ricordare che alcuni ERC non sono singoli, ma sono aggiunte di altri ERC. Per esempio, ERC2612 aggiunge un'estensione a ERC20 per migliorarne l'utilizzabilità.

Come aggiungere una libreria

Consulta sempre la documentazione della libreria che decidi di utilizzare per avere istruzioni specifiche su come includerla nel tuo progetto. Molte librerie dei contratti Solidity sono create con npm, quindi puoi usare semplicemente npm install per installarle. Gran parte degli strumenti per la compilazione dei contratti cercherà librerie di Smart Contract in node_modules, quindi puoi usare il codice seguente:

1// Questo caricherà la libreria @openzeppelin/contracts da node_modules
2import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
3
4contract MyNFT is ERC721 {
5 constructor() ERC721("MyNFT", "MNFT") public { }
6}
7
📋 Copia

Indipendentemente dal metodo utilizzato, per includere una libreria controlla sempre la versione del linguaggio. Ad esempio non puoi usare una libreria per Solidity 0.6 se stai scrivendo i contratti in Solidity 0.5.

Quando usare una libreria

Usare una libreria per Smart Contract in un progetto offre diversi vantaggi. Prima di tutto, fa risparmiare tempo perché fornisce blocchi di programmazione pronti all'uso che puoi includere nel sistema e che non devi programmare autonomamente.

Anche la sicurezza è un importante vantaggio. Le librerie open source per Smart Contract sono infatti spesso molto controllate. Dato che molti progetti dipendono da esse, c'è un forte incentivo da parte della community a revisionarle costantemente. È molto più comune trovare errori nel codice di un'applicazione che nelle librerie riutilizzabili dei contratti. Inoltre alcune librerie sono sottoposte a audit esterni per maggior sicurezza.

Tuttavia, usando librerie per Smart Contract si corre il rischio di includere codice che non si conosce nel progetto. La tentazione di importare un contratto e includerlo direttamente nel progetto è forte, ma se non si sa cosa fa il contratto, si potrebbe inavvertitamente inserire un problema nel sistema a causa di un comportamento imprevisto. Leggi sempre la documentazione del codice che importi e quindi controlla il codice direttamente prima di renderlo parte del tuo progetto.

Infine, per decidere se includere una libreria, considera l'uso generale che ne vorresti fare. Una libreria ampiamente adottata ha il vantaggio di avere alla base una community più grande e più occhi che la controllano alla ricerca di problemi. La sicurezza deve essere la tua preoccupazione principale quando sviluppi con gli Smart Contract.

OpenZeppelin Contracts - La libreria più popolare per lo sviluppo sicuro di Smart Contract.

DappSys - Blocchi di programmazione sicuri, semplici e flessibili per Smart Contract

HQ20 - Progetto in Solidity con contratti, librerie ed esempi per creare applicazioni complete distribuite per il mondo reale.

Letture consigliate

Conosci una risorsa della community che ti è stata utile? Modifica questa pagina e aggiungila!