Vai al contenuto principale
Change page

Librerie dei contratti intelligenti

Ultima modifica: @Herbie_23(opens in a new tab), 15 novembre 2023

Non devi scrivere ogni contratto intelligente nel tuo progetto da zero. Esistono molte librerie open source di contratti intelligenti che forniscono blocchi di programmazione riutilizzabili per il tuo progetto, che possono salvarti dal dover reinventare la ruota.

Prerequisiti

Prima di saltare alle librerie dei contratti intelligenti, è una buona idea avere una buona comprensione della struttura di un contratto intelligente. Consulta l'anatomia dei contratti intelligenti, se ancora non l'hai fatto.

Cosa contiene una libreria

Solitamente, puoi trovare due tipi di blocchi di programmazione nelle librerie dei contratti intelligenti: comportamenti riutilizzabili che puoi aggiungere ai tuoi contratti e implementazioni di vari standard.

Comportamenti

Scrivendo i contratti intelligenti, è possibile che ti troverai a scrivere sempre gli stessi schemi, come assegnare un indirizzo admin per svolgere le operazioni protette in un contratto, o aggiungere un pulsante d'emergenza pause nel caso di un problema imprevisto.

Le librerie dei contratti intelligenti, solitamente, forniscono implementazioni riutilizzabili di questi comportamenti come librerie(opens in a new tab) o tramite ereditarietà(opens in a new tab) in Solidity.

Ad esempio, di seguito è riportata una versione semplificata del contratto Ownable(opens in a new tab) della libreria dei contratti di OpenZeppelin(opens in a new tab), 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}
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}
Copia

Un altro esempio noto è SafeMath(opens in a new tab) o DsMath(opens in a new tab). 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 facilitare la componibilità e l'interoperabilità, la community di Ethereum ha definito diversi standard nella 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 di contratti intelligenti includono implementazioni per gli ERC più popolari. Ad esempio, l'onnipresente standard per token fungibile ERC20 si può trovare in HQ20(opens in a new tab), DappSys(opens in a new tab) e OpenZeppelin(opens in a new tab). 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(opens in a new tab) 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 compilare i contratti, cercherà le librerie dei contratti intelligenti nei tuoi node_modules, quindi puoi fare quanto segue:

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}
Copia

Indipendentemente dal metodo utilizzato, includendo una libreria, tieni sempre d'occhio la versione della lingua. 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 la libreria di un contratto intelligente per il tuo progetto ha diversi benefici. 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 dei contratti intelligenti open source, inoltre, sono 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(opens in a new tab) per maggior sicurezza.

Tuttavia, l'uso delle librerie dei contratti intelligenti comporta il rischio di includere codice con cui non sei familiare nel tuo 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 dovrebbe essere la tua preoccupazione principale, quando sviluppi i contratti intelligenti!

OpenZeppelin Contracts: La libreria più popolare per lo sviluppo sicuro di contratti intelligenti.

DappSys - Blocchi di programmazione sicuri, semplici e flessibili per contratti intelligenti

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

thirdweb Solidity SDK - Fornisce gli strumenti necessari per costruire contratti intelligenti personalizzati in modo efficiente

Letture consigliate

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

Questo articolo è stato utile?