Przejdź do głównej zawartości
Change page

Biblioteki inteligentnych kontraktów

Ostatnia edycja: @Beas(opens in a new tab), 15 sierpnia 2023

Nie musisz pisać każdego inteligentnego kontraktu w swoim projekcie od zera. Istnieje wiele bibliotek open source inteligentnych kontraktów. Można w nich znaleźć elementy do utworzenia Twojego projektu, więc nie musisz wymyślać koła od nowa.

Warunki wstępne

Przed przejściem do bibliotek inteligentnych kontraktów warto dobrze poznać strukturę inteligentnego kontraktu. Zapoznaj się z anatomią inteligentnego kontraktu, jeśli jeszcze tego nie zrobiłeś.

Co jest w bibliotece

W bibliotekach inteligentnych kontraktów zwykle można znaleźć dwa rodzaje elementów konstrukcyjnych: zachowania wielokrotnego użytku, które możesz dodać do swoich kontraktów, oraz implementacje różnych standardów.

Zachowania

Podczas pisania inteligentnych kontraktów masz sporą szansę, że będziesz w nieskończoność zapisywać podobne wzorce, na przykład przypisywanie adresu administratora w celu wykonania chronionych operacji w kontrakcie lub dodawanie awaryjnego przycisku pauzy na wypadek nieoczekiwanego problemu.

Biblioteki kontraktów inteligentnych zazwyczaj zapewniają wielokrotne implementacje tych zachowań jako bibliotek(opens in a new tab) lub przez dziedziczenie(opens in a new tab) w Solidity.

Jako przykład poniżej znajduje się uproszczona wersja kontraktu Ownable(opens in a new tab) z biblioteki kontraktów OpenZeppelin(opens in a new tab), która projektuje adres jako właściciela kontraktu oraz udostępnia modyfikator do ograniczania dostępu do metody tylko do tego właściciela.

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}
Pokaż wszystko
Kopiuj

Aby w kontrakcie użyć takiego bloku konstrukcyjnego, musisz go najpierw zaimportować, a następnie rozszerzyć na własny kontrakt. Pozwoli to na użycie modyfikatora dostarczonego przez kontrakt bazowy Ownable do zabezpieczenia własnych funkcji.

1import ".../Ownable.sol"; // ścieżka do zaimportowanego kontraktu
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}
Kopiuj

Innym popularnym przykładem jest SafeMath(opens in a new tab) lub DsMath(opens in a new tab). Są to biblioteki (w przeciwieństwie do kontraktów podstawowych), które zapewniają niedostarczane przez język funkcje arytmetyczne z kontrolą przepełnienia. Dobrą praktyką jest używanie którejkolwiek z tych bibliotek zamiast rodzimych operacji arytmetycznych w celu ochrony kontraktu przed przepełnieniami, co może mieć katastrofalne skutki!

Standardy

Aby ułatwić komponowalność i interoperacyjność, społeczność Ethereum zdefiniowała kilka standardów w postaci ERC . Więcej o nich można przeczytać w sekcji standardy.

W przypadku uwzględniania ERC w swoich kontraktach lepiej poszukać implementacji standardu niż próbować wdrożyć własną. Wiele bibliotek kontraktów inteligentnych zawiera implementacje dla najpopularniejszych ERC. Na przykład wszechobecny standard tokenów wymiennych ERC20 można znaleźć w HQ20(opens in a new tab), DappSys(opens in a new tab) i OpenZeppelin(opens in a new tab). Ponadto niektóre ERC zapewniają również implementacje kanoniczne w ramach samego ERC.

Warto wspomnieć, że niektóre ERC nie są samodzielne, ale stanowią uzupełnienie innych ERC. Na przykład ERC2612(opens in a new tab) dodaje rozszerzenie do ERC20 w celu poprawy jego użyteczności.

Jak dodać bibliotekę

Zawsze zapoznaj się z dokumentacją dołączanej biblioteki, aby uzyskać szczegółowe instrukcje, jak uwzględnić ją w swoim projekcie. Kilka bibliotek kontraktów Solidity jest spakowanych za pomocą aplikacji npm, więce można po prostu użyć polecenia npm install. Większość narzędzi do kompilowania kontraktów będzie szukać bibliotek kontraktów inteligentnych w Twoich node_modules, więc możesz wykonać następujące czynności:

1// to spowoduje wczytanie biblioteki @openzeppelin/contracts library z node_modules
2import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
3
4contract MyNFT is ERC721 {
5 constructor() ERC721("MyNFT", "MNFT") public { }
6}
Kopiuj

Niezależnie od używanej metody, dołączając bibliotekę, zawsze uważaj na wersję językową. Na przykład, nie możesz użyć biblioteki dla Solidity 0.6, jeśli piszesz swoje kontrakty w Solidity 0.5.

Kiedy użyć

Korzystanie z biblioteki inteligentnych kontraktów w projekcie ma kilka zalet. Przede wszystkim oszczędza czas, dostarczając gotowe do użycia bloki konstrukcyjne, które możesz dołączyć do swojego systemu, zamiast samodzielnie je kodować.

Dużym plusem jest także bezpieczeństwo. Biblioteki inteligentnych kontraktów typu open source są również często poddawane szczegółowej analizie. Biorąc pod uwagę, że wiele projektów od nich zależy, społeczność ma silną motywację do ciągłego ich sprawdzania. Znacznie częściej można znaleźć błędy w kodzie aplikacji niż w bibliotekach kontraktów wielokrotnego użytku. Niektóre biblioteki przechodzą również kontrole zewnętrzne(opens in a new tab) w celu dodatkowego zabezpieczenia.

Jednak korzystanie z bibliotek inteligentnych kontraktów niesie ze sobą ryzyko włączenia do projektu kodu, którego nie znasz. Zaimportowanie kontraktu i włączenie go bezpośrednio do projektu jest kuszące, ale bez dobrego zrozumienia tego, co robi ten kontrakt, możesz nieumyślnie wprowadzić problem do swojego systemu z powodu nieoczekiwanego zachowania. Zawsze upewnij się, że przeczytałeś dokumentację importowanego kodu, a następnie przejrzyj sam kod przed włączeniem go do swojego projektu!

Na koniec, podejmując decyzję o włączeniu biblioteki, weź pod uwagę jej ogólne wykorzystanie. Biblioteka przyjęta powszechnie ma zalety wynikające z większej społeczności i większej liczby osób wyszukujących w niej problemy. Bezpieczeństwo powinno być Twoim głównym celem podczas tworzenia za pomocą inteligentnych kontraktów!

Kontrakty OpenZeppelin — najpopularniejsza biblioteka do bezpiecznego tworzenia inteligentnych kontraktów.

DappSys — bezpieczne, proste, elastyczne elementy konstrukcyjne do inteligentnych kontraktów.

HQ20 — projekt Solidity z kontraktami, bibliotekami i przykładami, które pomogą Ci stworzyć w pełni wyposażone aplikacje zdecentralizowane dla świata rzeczywistego.

Dalsza lektura

Znasz jakieś zasoby społeczności, które Ci pomogły? Wyedytuj tę stronę i dodaj je!

Czy ten artykuł był pomocny?