Biblioteki inteligentnych kontraktów
Nie musisz pisać każdego inteligentnego kontraktu w swoim projekcie od zera. Dostępnych jest wiele bibliotek inteligentnych kontraktów typu open source, które zapewniają bloki konstrukcyjne wielokrotnego użytku dla Twojego projektu, co pozwala uniknąć wymyślania koła na nowo.
Wymagania wstępne
Zanim przejdziesz do bibliotek inteligentnych kontraktów, warto dobrze zrozumieć strukturę inteligentnego kontraktu. Przejdź do sekcji anatomia inteligentnego kontraktu, jeśli jeszcze tego nie zrobiłeś.
Co znajduje się w bibliotece
W bibliotekach inteligentnych kontraktów zazwyczaj można znaleźć dwa rodzaje bloków konstrukcyjnych: zachowania wielokrotnego użytku, które można dodać do swoich kontraktów, oraz implementacje różnych standardów.
Zachowania
Podczas pisania inteligentnych kontraktów istnieje duża szansa, że będziesz wielokrotnie pisać podobne wzorce, takie jak przypisywanie adresu admin do wykonywania chronionych operacji w kontrakcie lub dodawanie przycisku awaryjnej pauzy w przypadku nieoczekiwanego problemu.
Biblioteki inteligentnych kontraktów zazwyczaj dostarczają implementacje tych zachowań wielokrotnego użytku jako biblioteki (opens in a new tab) lub poprzez dziedziczenie (opens in a new tab) w języku Solidity.
Jako przykład, poniżej znajduje się uproszczona wersja kontraktu Ownable (opens in a new tab) z biblioteki OpenZeppelin Contracts (opens in a new tab), która wyznacza adres jako właściciela kontraktu i zapewnia modyfikator ograniczający dostęp do metody tylko dla tego właściciela.
contract Ownable {
address public owner;
constructor() internal {
owner = msg.sender;
}
modifier onlyOwner() {
require(owner == msg.sender, "Ownable: caller is not the owner");
_;
}
}
Aby użyć takiego bloku konstrukcyjnego w swoim kontrakcie, musisz go najpierw zaimportować, a następnie rozszerzyć go w swoich własnych kontraktach. Pozwoli to na użycie modyfikatora dostarczonego przez bazowy kontrakt Ownable do zabezpieczenia własnych funkcji.
import ".../Ownable.sol"; // Ścieżka do zaimportowanej biblioteki
contract MyContract is Ownable {
// Poniższa funkcja może być wywołana tylko przez właściciela
function secured() onlyOwner public {
msg.sender.transfer(1 ether);
}
}
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 bazowych), które dostarczają funkcje arytmetyczne ze sprawdzaniem przepełnienia, czego nie zapewnia sam język. Dobrą praktyką jest używanie jednej z tych bibliotek zamiast natywnych operacji arytmetycznych, aby chronić swój kontrakt przed przepełnieniem, które może mieć katastrofalne skutki!
Standardy
Aby ułatwić kompozycyjność i interoperacyjność, społeczność Ethereum zdefiniowała kilka standardów w postaci ERC. Możesz przeczytać o nich więcej w sekcji standardy.
Włączając ERC jako część swoich kontraktów, warto poszukać standardowych implementacji, zamiast próbować tworzyć własne. Wiele bibliotek inteligentnych kontraktów zawiera implementacje najpopularniejszych standardów ERC. Na przykład wszechobecny standard tokena zamiennego ERC-20 można znaleźć w HQ20 (opens in a new tab), DappSys (opens in a new tab) i OpenZeppelin (opens in a new tab). Dodatkowo, niektóre ERC dostarczają również kanoniczne implementacje jako część samego ERC.
Warto wspomnieć, że niektóre ERC nie są samodzielne, ale stanowią dodatki do innych ERC. Na przykład ERC-2612 (opens in a new tab) dodaje rozszerzenie do ERC-20 w celu poprawy jego użyteczności.
Jak dodać bibliotekę
Zawsze odwołuj się do dokumentacji dołączanej biblioteki, aby uzyskać szczegółowe instrukcje dotyczące sposobu włączenia jej do projektu. Kilka bibliotek kontraktów Solidity jest pakowanych przy użyciu npm, więc możesz po prostu użyć na nich npm install. Większość narzędzi do kompilacji kontraktów będzie szukać bibliotek inteligentnych kontraktów w Twoim node_modules, więc możesz wykonać następujące czynności:
// Spowoduje to załadowanie biblioteki @openzeppelin/contracts z twojego node_modules
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract MyNFT is ERC721 {
constructor() ERC721("MyNFT", "MNFT") public { }
}
Niezależnie od używanej metody, dołączając bibliotekę, zawsze zwracaj uwagę na wersję języka. Na przykład nie możesz użyć biblioteki dla Solidity 0.6, jeśli piszesz swoje kontrakty w Solidity 0.5.
Kiedy używać
Używanie biblioteki inteligentnych kontraktów w Twoim projekcie ma kilka zalet. Przede wszystkim oszczędza czas, dostarczając gotowe do użycia bloki konstrukcyjne, które możesz włączyć do swojego systemu, zamiast musieć kodować je samodzielnie.
Bezpieczeństwo to również duży plus. Biblioteki inteligentnych kontraktów typu open source są często poddawane szczegółowej analizie. Biorąc pod uwagę, że wiele projektów od nich zależy, społeczność ma silną motywację, aby poddawać je ciągłemu przeglądowi. 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ż zewnętrzne audyty (opens in a new tab) w celu zapewnienia dodatkowego bezpieczeństwa.
Jednak korzystanie z bibliotek inteligentnych kontraktów niesie ze sobą ryzyko włączenia do projektu kodu, z którym nie jesteś zaznajomiony. Kuszące jest zaimportowanie kontraktu i włączenie go bezpośrednio do projektu, ale bez dobrego zrozumienia, co ten kontrakt robi, 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, zanim uczynisz go częścią swojego projektu!
Na koniec, decydując się na włączenie biblioteki, weź pod uwagę jej ogólne wykorzystanie. Szeroko przyjęta biblioteka ma tę zaletę, że posiada większą społeczność i więcej osób szukających w niej problemów. Bezpieczeństwo powinno być Twoim głównym celem podczas budowania z użyciem inteligentnych kontraktów!
Powiązane narzędzia
OpenZeppelin Contracts - Najpopularniejsza biblioteka do bezpiecznego tworzenia inteligentnych kontraktów.
- Dokumentacja (opens in a new tab)
- GitHub (opens in a new tab)
- Forum społeczności (opens in a new tab)
DappSys - Bezpieczne, proste i elastyczne bloki konstrukcyjne dla inteligentnych kontraktów.
HQ20 - Projekt w języku Solidity zawierający kontrakty, biblioteki i przykłady, które pomogą Ci budować w pełni funkcjonalne aplikacje rozproszone dla prawdziwego świata.
thirdweb Solidity SDK - Zapewnia narzędzia potrzebne do wydajnego budowania niestandardowych inteligentnych kontraktów
Powiązane samouczki
- Kwestie bezpieczeństwa dla programistów Ethereum – Samouczek dotyczący kwestii bezpieczeństwa podczas budowania inteligentnych kontraktów, w tym korzystania z bibliotek.
- Zrozumienie inteligentnego kontraktu tokena ERC-20 – Samouczek dotyczący standardu ERC-20, dostarczanego przez wiele bibliotek.
Dalsza lektura
Znasz zasób społeczności, który Ci pomógł? Edytuj tę stronę i dodaj go!