Biblioteci de contracte inteligente
Nu este nevoie să scrii de la zero fiecare contract inteligent din proiect. Există multe biblioteci de contracte inteligente open source disponibile care oferă elemente de construcție reutilizabile pentru proiectul tău, care te pot scuti de nevoia de a reinventa roata.
Condiții prealabile
Înainte de a folosi bibliotecile cu contracte inteligente, este o idee bună să ai o înțelegere bună a structurii unui contract inteligent. Treci prin anatomia contractelor inteligente, dacă nu ai făcut-o deja.
Ce conține o bibliotecă
De obicei, poți găsi două tipuri de elemente de bază în bibliotecile de contracte inteligente: comportamente reutilizabile pe care le poți adăuga la contractele tale și implementări de diferite standarde.
Comportamente
Atunci când scrii contracte inteligente, există șanse mari să te regăsești scriind modele similare de mai multe ori, cum ar fi atribuirea unei adrese de administrator pentru a efectua operațiuni protejate într-un contract sau adăugarea unui buton de pauză de urgență în cazul unei probleme neașteptate.
Bibliotecile de contracte inteligente oferă de obicei implementări reutilizabile ale acestor comportamente sub formă de biblioteci sau prin moștenire în Solidity.
Ca un exemplu, în continuare este prezentată o versiune simplificată a contractului Ownable
din biblioteca de contracte OpenZeppelin, care creează o adresă „address” ca proprietar al unui contract și oferă un modificator pentru restricționarea accesului la o metodă, numai proprietarului respectiv.
1contract Ownable {2 address public owner;34 constructor() internal {5 owner = msg.sender;6 }78 modifier onlyOwner() {9 require(owner == msg.sender, "Ownable: apelantul nu este proprietarul");10 _;11 }12}13Afișează totCopiere
Pentru a utiliza un bloc de construcție ca acesta în contractul tău, ar trebui mai întâi să îl imporți, apoi să îl extinzi în propriile contracte. Acest lucru îți va permite să utilizezi modificatorul furnizat de contractul de bază Ownable
pentru a-ți asigura propriile funcții.
1import ".../Ownable.sol"; // Calea către biblioteca importată23contract MyContract is Ownable {4 // Următoarea funcție poate fi apelată numai de către proprietar5 function secured() onlyOwner public {6 msg.sender.transfer(1 ether);7 }8}9Copiere
Un alt exemplu popular este SafeMath sau DsMath. Acestea sunt biblioteci (spre deosebire de contractele de bază), care oferă funcții aritmetice cu verificări de depășire de număr întreg, care nu sunt furnizate de limbaj. Este o practică bună să utilizezi oricare dintre aceste biblioteci în loc de operații aritmetice native pentru a-ți proteja contractul împotriva valorilor numerice peste maximul permis, care pot avea consecințe dezastruoase!
Standarde
Pentru a facilita combinabilitatea și interoperabilitatea, comunitatea Ethereum a definit mai multe standarde sub formă de ERC-uri. Poți citi mai multe despre acestea în secțiunea standarde.
Atunci când incluzi un ERC ca parte a contractelor tale, este bine să cauți implementări standard, mai degrabă decât să încerci să le lansezi pe cele proprii. Multe biblioteci de contracte inteligente includ implementări pentru cele mai populare ERC-uri. De exemplu, tokenul fungibil standard ERC20 omniprezent poate fi găsit în HQ20, DappSys și OpenZeppelin. În plus, unele ERC-uri oferă, de asemenea, implementări canonice ca parte a ERC-ului însuși.
Merită menționat faptul că unele ERC-uri nu sunt independente, ci sunt completări la alte ERC-uri. De exemplu, ERC2612 adaugă o extensie la ERC20 pentru a-i îmbunătății posibilitate de întrebuințare.
Cum se adaugă o bibliotecă
Consultă întotdeauna documentația bibliotecii pe care o incluzi pentru instrucțiuni specifice despre cum să o introduci în proiectul tău. Mai multe biblioteci de contracte Solidity sunt ambalate folosind npm
, astfel încât să le poți instala numai cu comandanpm install
. Majoritatea instrumentelor pentru compilarea contractelor vor căuta în node_modules
pentru bibliotecile de contracte inteligente, astfel încât să poți face următoarele:
1// Aceasta va încărca @openzeppelin/contracts library din node_modules2import "@openzeppelin/contracts/token/ERC721/ERC721.sol";34contract MyNFT is ERC721 {5 constructor() ERC721("MyNFT", "MNFT") public { }6}7Copiere
Indiferent de metoda pe care o utilizezi, atunci când incluzi o bibliotecă, urmărește întotdeauna versiunea limbajului. De exemplu, nu poți utiliza o bibliotecă pentru Solidity 0.6 dacă scrii contractele în Solidity 0.5.
Când se folosește
Utilizarea unei biblioteci de contracte inteligente pentru proiectul tău are mai multe avantaje. În primul rând, îți economisește timpul oferindu-ți elemente de construcție gata de utilizat pe care le poți include în sistem, mai degrabă decât să le codifici singur.
Securitatea este, de asemenea, un avantaj major. Bibliotecile de contracte inteligente open source sunt, de asemenea, adesea examinate intens. Având în vedere că multe proiecte depind de ele, există un stimulent puternic din partea comunității de a le ține sub revizuire constantă. Este mult mai comun să găsești erori în codul aplicației decât în bibliotecile de contracte reutilizabile. Unele biblioteci sunt supuse, de asemenea, la audituri externe pentru securitate suplimentară.
Totuși, folosirea bibliotecilor de contracte inteligente prezintă riscul includerii de coduri cu care nu ești familiarizat în proiect. Este tentant să imporți un contract și să-l incluzi direct în proiectul tău, dar fără o bună înțelegere a acțiunii acelui contract, este posibil să introduci din greșeală o problemă în sistem, din cauza unui comportament neașteptat. Asigură-te întotdeauna că citești documentația codului pe care îl imporți, apoi revizuiește codul însuși înainte de a-l face parte din proiectul tău!
În cele din urmă, atunci când decizi să incluzi o bibliotecă, ia în considerare utilizarea sa generală. O bibliotecă adoptată pe scară largă are avantajele de a avea o comunitate mai mare și mai mulți ochi care caută probleme. Securitatea ar trebui să fie preocuparea ta principală atunci când construiești aplicații cu contracte inteligente!
Instrumente corelate
Contractele OpenZeppelin - Cea mai populară bibliotecă pentru dezvoltarea de contracte inteligente sigure.
DappSys - Blocuri de construcții sigure, simple, flexibile pentru contracte inteligente.
HQ20 - Un proiect Solidity cu contracte, biblioteci și exemple pentru a te ajuta să construiți aplicații distribuite complet-funcționale pentru lumea reală.
Tutoriale corelate
- Considerații de securitate pentru programatorii Ethereum – Un tutorial privind considerațiile de securitate atunci când construiești contracte inteligente, inclusiv utilizarea de biblioteci.
- Înțelege contractul inteligent token ERC-20 -Tutorial privind standardul ERC20, oferit de mai multe biblioteci.
Referințe suplimentare
Cunoști o resursă comunitară care te-a ajutat? Editează această pagină și adaug-o!