Wprowadzenie do inteligentnych kontraktów
Strona ostatnio zaktualizowana: 25 lutego 2026
Czym jest inteligentny kontrakt?
„Inteligentny kontrakt" jest po prostu programem, który działa w blockchainie Ethereum. Jest to zbiór kodu (jego funkcje) i danych (jego stan), które znajdują się pod określonym adresem w blockchainie Ethereum.
Inteligentne kontrakty to rodzaj konta Ethereum. Oznacza to, że mają saldo i mogą być celem transakcji. Jednak nie są one kontrolowane przez użytkownika, zamiast tego są wdrażane do sieci i uruchamiane w sposób zaprogramowany. Konta użytkowników mogą następnie wchodzić w interakcję z inteligentnym kontraktem poprzez przesyłanie transakcji, które wykonują funkcję zdefiniowaną w inteligentnym kontrakcie. Inteligentne kontrakty mogą definiować reguły, tak jak zwykłe kontrakty, i automatycznie egzekwować je za pośrednictwem kodu. Inteligentnych kontraktów nie można domyślnie 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.
Przed zagłębieniem się w świat inteligentnych kontraktów, należy zapoznać się z kontami, transakcjami oraz Wirtualną Maszyną Ethereum.
Cyfrowy automat sprzedający
Prawdopodobnie najlepszą metaforą inteligentnego kontraktu jest automat sprzedający, zgodnie z opisem Nicka Szabo (opens in a new tab). Przy odpowiednich danych wejściowych gwarantowany jest określony wynik.
Aby uzyskać przekąskę z automatu do sprzedaży:
1pieniądze + wybór przekąsek = przekąski wydaneTa logika jest zaprogramowana w automacie sprzedającym.
Inteligentny kontrakt, jak automat sprzedający, ma zaprogramowaną logikę. Oto prosty przykład tego, jak wyglądałby ten automat, gdyby był inteligentnym kontraktem napisanym w Solidity:
1pragma solidity 0.8.7;23contract VendingMachine {45 // Zadeklaruj zmienne stanu kontraktu6 address public owner;7 mapping (address => uint) public cupcakeBalances;89 // Gdy kontrakt „VendingMachine” jest wdrażany:10 // 1. ustaw adres wdrażający jako właściciela kontraktu11 // 2. ustaw saldo babeczek we wdrożonym inteligentnym kontrakcie na 10012 constructor() {13 owner = msg.sender;14 cupcakeBalances[address(this)] = 100;15 }1617 // Zezwól właścicielowi na zwiększenie salda babeczek w inteligentnym kontrakcie18 function refill(uint amount) public {19 require(msg.sender == owner, "Tylko właściciel może uzupełnić.");20 cupcakeBalances[address(this)] += amount;21 }2223 // Zezwól każdemu na zakup babeczek24 function purchase(uint amount) public payable {25 require(msg.value >= amount * 1 ether, "Musisz zapłacić co najmniej 1 ETH za babeczkę");26 require(cupcakeBalances[address(this)] >= amount, "Za mało babeczek w magazynie, aby sfinalizować ten zakup");27 cupcakeBalances[address(this)] -= amount;28 cupcakeBalances[msg.sender] += amount;29 }30}Pokaż wszystkoPodobnie jak automat sprzedający eliminuje potrzebę zatrudniania sprzedawcy, inteligentne kontrakty mogą zastąpić pośredników w wielu branżach.
Niewymagający zezwoleń
Każdy może napisać inteligentny kontrakt i wdrożyć go do sieci. Wystarczy nauczyć się programować 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 trzeba zapłacić za gaz w taki sam sposób, w jaki trzeba płacić za gaz przy prostym transferze ETH. Jednak koszty gazu w przypadku wdrożenia kontraktu są znacznie wyższe.
Ethereum ma przyjazne dla deweloperów języki do pisania inteligentnych kontraktów:
- Solidity
- Vyper
Muszą one jednak zostać skompilowane przed ich wdrożeniem, tak aby maszyna wirtualna Ethereum mogła zinterpretować i przechowywać kontrakt. Więcej o kompilacji
Kompozycyjność
Inteligentne kontrakty są publiczne w Ethereum i można je uznać za otwarte API. Oznacza to, że możesz wywoływać inne inteligentne kontrakty w swoim własnym inteligentnym kontrakcie, aby znacznie rozszerzyć zakres możliwości. Kontrakty mogą nawet wdrażać inne kontrakty.
Dowiedz się więcej o kompozycyjności inteligentnych kontraktów.
Ograniczenia
Inteligentne kontrakty nie mogą same uzyskiwać informacji o wydarzeniach "świata rzeczywistego", ponieważ nie mogą pozyskiwać danych ze źródeł spoza łańcucha. Oznacza to, że nie mogą reagować na wydarzenia w prawdziwym świecie. Jest to celowe. Poleganie na informacjach z zewnątrz mogłoby zagrozić konsensusowi, który jest ważny dla bezpieczeństwa i decentralizacji.
Ważna jest jednakże dla aplikacji blockchain możliwość używania danych spoza łańcucha. Rozwiązaniem są wyrocznie, czyli narzędzia, które pobierają dane spoza łańcucha i udostępniają je inteligentnym kontraktom.
Kolejnym ograniczeniem inteligentnych kontraktów jest ich maksymalny rozmiar. Inteligentny kontrakt może mieć maksymalnie 24KB, w przeciwnym razie skończy mu się gaz. Można to obejść, używając wzorca The Diamond Pattern (opens in a new tab).
Kontrakty multisig
Kontrakty multisig (wielopodpisowe) 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 w przypadku kontraktów zawierających znaczne ilości etheru lub innych tokenów. Kontrakty multisig dzielą również odpowiedzialność za wykonanie kontraktu i zarządzanie kluczami między wiele stron i zapobiegają utracie pojedynczego klucza prywatnego, co prowadzi do nieodwracalnej utraty środków. Z tych powodów kontrakty multisig mogą być wykorzystywane do prostego zarządzania DAO. Kontrakty multisig wymagają N podpisów z M możliwych do zaakceptowania podpisów (gdzie N ≤ M i M > 1) w celu wykonania. N = 3, M = 5 i N = 4, M = 7 są powszechnie używane. Kontrakt multisig 4/7 wymaga czterech z siedmiu możliwych ważnych podpisów. Oznacza to, że środki można odzyskać nawet w przypadku utraty trzech podpisów. W tym przypadku oznacza to również, że większość posiadaczy kluczy musi się zgodzić i podpisać, aby kontrakt został wykonany.
Zasoby dotyczące inteligentnych kontraktów
Kontrakty OpenZeppelin - 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)