Librerie di smart contract
Non è necessario scrivere da zero ogni smart contract del tuo progetto. Sono disponibili molte librerie di smart contract open source che forniscono blocchi di costruzione riutilizzabili per il tuo progetto, evitandoti di dover reinventare la ruota.
Prerequisiti
Prima di tuffarti nelle librerie di smart contract, è una buona idea avere una buona comprensione della struttura di uno smart contract. Vai all'anatomia degli smart contract se non l'hai ancora fatto.
Cosa c'è in una libreria
Di solito puoi trovare due tipi di blocchi di costruzione nelle librerie di smart contract: comportamenti riutilizzabili che puoi aggiungere ai tuoi contratti e implementazioni di vari standard.
Comportamenti
Quando scrivi smart contract, c'è una buona probabilità che ti ritroverai a scrivere schemi simili più e più volte, come assegnare un indirizzo admin per eseguire operazioni protette in un contratto, o aggiungere un pulsante di pausa di emergenza in caso di un problema imprevisto.
Le librerie di smart contract di solito forniscono implementazioni riutilizzabili di questi comportamenti come librerie (opens in a new tab) o tramite ereditarietà (opens in a new tab) in Solidity.
Come esempio, di seguito è riportata una versione semplificata del contratto Ownable (opens in a new tab) dalla libreria OpenZeppelin Contracts (opens in a new tab), che designa un indirizzo come proprietario di un contratto e fornisce un modificatore per limitare l'accesso a un metodo solo a quel proprietario.
contract Ownable {
address public owner;
constructor() internal {
owner = msg.sender;
}
modifier onlyOwner() {
require(owner == msg.sender, "Ownable: caller is not the owner");
_;
}
}
Per utilizzare un blocco di costruzione come questo nel tuo contratto, dovrai prima importarlo e poi estenderlo nei tuoi contratti. Questo ti consentirà di utilizzare il modificatore fornito dal contratto Ownable di base per proteggere le tue funzioni.
import ".../Ownable.sol"; // Percorso della libreria importata
contract MyContract is Ownable {
// La seguente funzione può essere chiamata solo dal proprietario
function secured() onlyOwner public {
msg.sender.transfer(1 ether);
}
}
Un altro esempio popolare è SafeMath (opens in a new tab) o DsMath (opens in a new tab). Queste sono librerie (al contrario dei contratti di base) che forniscono funzioni aritmetiche con controlli di overflow, che non sono forniti dal linguaggio. È buona norma utilizzare una di queste librerie invece delle operazioni aritmetiche native per proteggere il tuo contratto dagli overflow, che possono avere conseguenze disastrose!
Standard
Per facilitare la componibilità e interoperabilità, la community di Ethereum ha definito diversi standard sotto forma di ERC. Puoi leggere di più al riguardo nella sezione degli standard.
Quando includi un ERC come parte dei tuoi contratti, è una buona idea cercare implementazioni standard piuttosto che cercare di crearne di tue. Molte librerie di smart contract includono implementazioni per gli ERC più popolari. Ad esempio, l'onnipresente standard per token fungibile ERC-20 può essere trovato in HQ20 (opens in a new tab), DappSys (opens in a new tab) e OpenZeppelin (opens in a new tab). Inoltre, alcuni ERC forniscono anche implementazioni canoniche come parte dell'ERC stesso.
Vale la pena menzionare che alcuni ERC non sono a sé stanti, ma sono aggiunte ad altri ERC. Ad esempio, l'ERC-2612 (opens in a new tab) aggiunge un'estensione all'ERC-20 per migliorarne l'usabilità.
Come aggiungere una libreria
Fai sempre riferimento alla documentazione della libreria che stai includendo per istruzioni specifiche su come includerla nel tuo progetto. Diverse librerie di contratti Solidity sono pacchettizzate usando npm, quindi puoi semplicemente usare npm install per ottenerle. La maggior parte degli strumenti per la compilazione dei contratti cercherà le librerie di smart contract nel tuo node_modules, quindi puoi fare quanto segue:
// Questo caricherà la libreria @openzeppelin/contracts dai tuoi node_modules
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract MyNFT is ERC721 {
constructor() ERC721("MyNFT", "MNFT") public { }
}
Indipendentemente dal metodo che utilizzi, quando includi una libreria, tieni sempre d'occhio la versione del linguaggio. Ad esempio, non puoi usare una libreria per Solidity 0.6 se stai scrivendo i tuoi contratti in Solidity 0.5.
Quando usarle
L'utilizzo di una libreria di smart contract per il tuo progetto presenta diversi vantaggi. Innanzitutto, ti fa risparmiare tempo fornendoti blocchi di costruzione pronti all'uso che puoi includere nel tuo sistema, piuttosto che doverli programmare tu stesso.
Anche la sicurezza è un grande vantaggio. Le librerie di smart contract open source sono spesso esaminate attentamente. Dato che molti progetti dipendono da esse, c'è un forte incentivo da parte della community a mantenerle sotto costante revisione. È molto più comune trovare errori nel codice dell'applicazione che nelle librerie di contratti riutilizzabili. Alcune librerie sono anche sottoposte ad audit esterni (opens in a new tab) per una maggiore sicurezza.
Tuttavia, l'uso di librerie di smart contract comporta il rischio di includere nel tuo progetto codice con cui non hai familiarità. È allettante importare un contratto e includerlo direttamente nel tuo progetto, ma senza una buona comprensione di ciò che fa quel contratto, potresti inavvertitamente introdurre un problema nel tuo sistema a causa di un comportamento imprevisto. Assicurati sempre di leggere la documentazione del codice che stai importando e poi rivedi il codice stesso prima di renderlo parte del tuo progetto!
Infine, quando decidi se includere una libreria, considera il suo utilizzo complessivo. Una libreria ampiamente adottata ha il vantaggio di avere una community più ampia e più occhi che la esaminano alla ricerca di problemi. La sicurezza dovrebbe essere il tuo obiettivo principale quando costruisci con gli smart contract!
Strumenti correlati
OpenZeppelin Contracts - La libreria più popolare per lo sviluppo sicuro di smart contract.
- Documentazione (opens in a new tab)
- GitHub (opens in a new tab)
- Forum della community (opens in a new tab)
DappSys - Blocchi di costruzione sicuri, semplici e flessibili per smart contract.
HQ20 - Un progetto Solidity con contratti, librerie ed esempi per aiutarti a costruire applicazioni distribuite complete per il mondo reale.
thirdweb Solidity SDK - Fornisce gli strumenti necessari per costruire smart contract personalizzati in modo efficiente
Tutorial correlati
- Considerazioni sulla sicurezza per gli sviluppatori di Ethereum – Un tutorial sulle considerazioni di sicurezza durante la creazione di smart contract, incluso l'uso delle librerie.
- Comprendere lo smart contract del token ERC-20 - Tutorial sullo standard ERC-20, fornito da diverse librerie.
Letture consigliate
Conosci una risorsa della community che ti è stata utile? Modifica questa pagina e aggiungila!