Wprowadzenie do inteligentnych kontraktów
Czym jest inteligentny kontrakt?
"Inteligentny kontrakt" to po prostu program działający na blockchainie Ethereum. Jest to zbiór kodu (jego funkcji) i danych (jego stanu), który znajduje się pod określonym adresem na blockchainie Ethereum.
Inteligentne kontrakty to rodzaj konta Ethereum. Oznacza to, że mają saldo i mogą być celem transakcji. Nie są one jednak kontrolowane przez użytkownika, lecz wdrażane do sieci i działają zgodnie z zaprogramowaniem. Konta użytkowników mogą następnie wchodzić w interakcje z inteligentnym kontraktem, wysyłając transakcje, które wykonują funkcję zdefiniowaną w inteligentnym kontrakcie. Inteligentne kontrakty mogą definiować zasady, podobnie jak zwykły kontrakt, i automatycznie egzekwować je za pomocą kodu. Domyślnie inteligentnych kontraktów nie można usunąć, a interakcje z nimi są nieodwracalne.
Wymagania wstępne
Jeśli dopiero zaczynasz lub szukasz mniej technicznego wprowadzenia, polecamy nasze wprowadzenie do inteligentnych kontraktów.
Zanim zagłębisz się w świat inteligentnych kontraktów, upewnij się, że przeczytałeś o kontach, transakcjach i wirtualnej maszynie Ethereum.
Cyfrowy automat sprzedający
Być może najlepszą metaforą inteligentnego kontraktu jest automat sprzedający, jak opisał to Nick Szabo (opens in a new tab). Przy odpowiednich danych wejściowych gwarantowany jest określony wynik.
Aby otrzymać przekąskę z automatu:
pieniądze + wybór przekąski = wydana przekąska
Ta logika jest zaprogramowana w automacie sprzedającym.
Inteligentny kontrakt, podobnie jak automat sprzedający, ma w sobie zaprogramowaną logikę. Oto prosty przykład tego, jak wyglądałby ten automat, gdyby był inteligentnym kontraktem napisanym w języku Solidity:
pragma solidity 0.8.7;
contract VendingMachine {
// Zadeklaruj zmienne stanu kontraktu
address public owner;
mapping (address => uint) public cupcakeBalances;
// Gdy kontrakt 'VendingMachine' zostanie wdrożony:
// 1. ustaw adres wdrażający jako właściciela kontraktu
// 2. ustaw saldo babeczek wdrożonego inteligentnego kontraktu na 100
constructor() {
owner = msg.sender;
cupcakeBalances[address(this)] = 100;
}
// Pozwól właścicielowi zwiększyć saldo babeczek inteligentnego kontraktu
function refill(uint amount) public {
require(msg.sender == owner, "Only the owner can refill.");
cupcakeBalances[address(this)] += amount;
}
// Pozwól każdemu na zakup babeczek
function purchase(uint amount) public payable {
require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");
require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");
cupcakeBalances[address(this)] -= amount;
cupcakeBalances[msg.sender] += amount;
}
}
Podobnie jak automat sprzedający eliminuje potrzebę zatrudniania sprzedawcy, inteligentne kontrakty mogą zastąpić pośredników w wielu branżach.
Niewymagający pozwoleń
Każdy może napisać inteligentny kontrakt i wdrożyć go do sieci. Musisz tylko nauczyć się kodować w języku inteligentnych kontraktów i mieć wystarczająco dużo ETH, aby wdrożyć swój kontrakt. Wdrożenie inteligentnego kontraktu jest technicznie transakcją, więc musisz zapłacić za gaz w taki sam sposób, w jaki płacisz za gaz przy zwykłym transferze ETH. Jednak koszty gazu za wdrożenie kontraktu są znacznie wyższe.
Ethereum posiada przyjazne dla programistów języki do pisania inteligentnych kontraktów:
- Solidity
- Vyper
Muszą one jednak zostać skompilowane przed wdrożeniem, aby wirtualna maszyna Ethereum mogła zinterpretować i przechować kontrakt. Więcej o kompilacji
Kompozycyjność
Inteligentne kontrakty są publiczne na Ethereum i można je traktować jako otwarte API. Oznacza to, że możesz wywoływać inne inteligentne kontrakty we własnym inteligentnym kontrakcie, aby znacznie rozszerzyć jego możliwości. Kontrakty mogą nawet wdrażać inne kontrakty.
Dowiedz się więcej o kompozycyjności inteligentnych kontraktów.
Ograniczenia
Same inteligentne kontrakty nie mogą uzyskiwać informacji o zdarzeniach z „prawdziwego świata”, ponieważ nie mogą pobierać danych ze źródeł pozałańcuchowych. Oznacza to, że nie mogą reagować na zdarzenia w świecie rzeczywistym. Jest to celowe działanie. Poleganie na zewnętrznych informacjach mogłoby zagrozić konsensusowi, który jest ważny dla bezpieczeństwa i decentralizacji.
Jednak dla aplikacji blockchain ważne jest, aby mogły korzystać z danych pozałańcuchowych. Rozwiązaniem są wyrocznie (oracles), czyli narzędzia, które pobierają dane pozałańcuchowe i udostępniają je inteligentnym kontraktom.
Kolejnym ograniczeniem inteligentnych kontraktów jest ich maksymalny rozmiar. Inteligentny kontrakt może mieć maksymalnie 24 KB, w przeciwnym razie zabraknie mu gazu. Można to obejść, stosując wzorzec diamentu (The Diamond Pattern) (opens in a new tab).
Kontrakty multisig
Kontrakty multisig (z wieloma podpisami) to konta inteligentnych kontraktów, które wymagają wielu ważnych podpisów do wykonania transakcji. Jest to bardzo przydatne w celu uniknięcia pojedynczych punktów awarii dla kontraktów przechowujących znaczne ilości etheru lub innych tokenów. Multisigi dzielą również odpowiedzialność za wykonanie kontraktu i zarządzanie kluczami między wiele stron i zapobiegają sytuacji, w której utrata pojedynczego klucza prywatnego prowadzi do nieodwracalnej utraty środków. Z tych powodów kontrakty multisig mogą być używane do prostego zarządzania DAO. Multisigi wymagają N podpisów z M możliwych akceptowalnych podpisów (gdzie N ≤ M i M > 1) w celu wykonania. Powszechnie używane są N = 3, M = 5 i N = 4, M = 7. Multisig 4/7 wymaga czterech z siedmiu możliwych ważnych podpisów. Oznacza to, że środki można nadal odzyskać, nawet jeśli trzy podpisy zostaną utracone. W tym przypadku oznacza to również, że większość posiadaczy kluczy musi wyrazić zgodę i złożyć podpis, aby kontrakt został wykonany.
Zasoby dotyczące inteligentnych kontraktów
OpenZeppelin Contracts - Biblioteka do bezpiecznego tworzenia inteligentnych kontraktów.
- openzeppelin.com/contracts/ (opens in a new tab)
- GitHub (opens in a new tab)
- Forum społeczności (opens in a new tab)
Dalsza lektura
- Coinbase: Czym jest inteligentny kontrakt? (opens in a new tab)
- Chainlink: Czym jest inteligentny kontrakt? (opens in a new tab)
- Wideo: Po prostu wyjaśnione - Inteligentne kontrakty (opens in a new tab)
- Cyfrin Updraft: Platforma do nauki i audytu Web3 (opens in a new tab)
Samouczki: Podpisy inteligentnych kontraktów (EIP-1271) na Ethereum
- EIP-1271: Podpisywanie i weryfikacja podpisów inteligentnych kontraktów – Jak EIP-1271 umożliwia inteligentnym kontraktom weryfikację podpisów, wraz z omówieniem implementacji Safe.
Ostatnia aktualizacja strony: 25 lutego 2026