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

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 wydane

Ta 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;
2
3contract VendingMachine {
4
5 // Zadeklaruj zmienne stanu kontraktu
6 address public owner;
7 mapping (address => uint) public cupcakeBalances;
8
9 // Gdy kontrakt „VendingMachine” jest wdrażany:
10 // 1. ustaw adres wdrażający jako właściciela kontraktu
11 // 2. ustaw saldo babeczek we wdrożonym inteligentnym kontrakcie na 100
12 constructor() {
13 owner = msg.sender;
14 cupcakeBalances[address(this)] = 100;
15 }
16
17 // Zezwól właścicielowi na zwiększenie salda babeczek w inteligentnym kontrakcie
18 function refill(uint amount) public {
19 require(msg.sender == owner, "Tylko właściciel może uzupełnić.");
20 cupcakeBalances[address(this)] += amount;
21 }
22
23 // Zezwól każdemu na zakup babeczek
24 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ż wszystko

Podobnie 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

Więcej o językach

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.

Dalsza lektura

Czy ten artykuł był pomocny?