Przejdź do treści
Słowniksmart-kontraktyethereumdefipodstawy

Smart kontrakt

Program zapisany bezpośrednio w sieci blockchain, który wykonuje się automatycznie po spełnieniu warunków określonych w kodzie. Nie wymaga pośrednika ani zgody żadnej centralnej strony – blockchain jest zarówno jego infrastrukturą, jak i sędzią.

Kod jako umowa

Tradycyjna umowa to dokument opisujący zobowiązania stron, który wymaga egzekwowania przez instytucje – sądy, komorników, banki. Smart kontrakt robi to automatycznie: jeśli spełniony jest warunek A, wykonaj działanie B. Nie ma opóźnień, mediatorów ani ryzyka niewywiązania się drugiej strony z umowy.

Na Ethereum smart kontrakty istnieją jako kod bajtowy (ang. bytecode) – niskopoziomowy format wykonywany przez Ethereum Virtual Machine (EVM). Deweloperzy piszą je zazwyczaj w językach wysokiego poziomu, głównie Solidity (składnia zbliżona do JavaScript) lub Vyper (zbliżony do Pythona), a kompilator przekształca je w kod bajtowy wdrażany do sieci.

Raz wdrożony smart kontrakt jest niemodyfikowalny. Kod pod danym adresem jest stały – nikt, włącznie z autorem, nie może go zmienić. To jednocześnie siła i ryzyko: audytowany kontrakt pozostaje audytowanym, ale błąd w kodzie jest permanentny bez migracji użytkowników do nowego kontraktu.

Wzorce proxy i ryzyko upgrade'u

Wiele protokołów DeFi używa wzorca proxy (ang. proxy pattern), by ominąć niezmienność kontraktów. Użytkownik zawsze wchodzi w interakcję z tym samym adresem proxy, ale ten adres przekierowuje wywołania do oddzielnego kontraktu implementacji. Governance protokołu może podmienić implementację – zmieniając logikę bez zmiany adresu.

To wprowadza istotny kompromis: protokół jest elastyczny i można poprawić błędy, ale ktoś musi mieć uprawnienia do podmiany implementacji. Jeśli tym kimś jest multisig zarządu albo token governance podatny na atak przejęcia głosowania, kontrakt jest technicznie 'niezmieniony', ale logika może się zmienić. 'Niemodyfikowalny kontrakt' i 'trustless protokół' to nie to samo.

Smart kontrakty w praktyce

DeFi lending
Protokoły takie jak Aave czy Compound to zestawy smart kontraktów zarządzające pulami płynnościowymi, parametrami zabezpieczeń, naliczaniem odsetek i uruchamianiem likwidacji – wszystko bez pośrednika.
DEX (zdecentralizowana giełda)
Uniswap, Curve i inne AMM-y to smart kontrakty zarządzające pulami płynności. Wymiana tokenów jest determinowana przez algorytm w kodzie – nie przez ludzkiego animatora rynku.
Tokeny ERC-20
Prawie każdy token na Ethereum to smart kontrakt implementujący standard ERC-20. Definiuje on logikę transferów, sald i zatwierdzeń (ang. approvals).
DAO i governance
Głosowania społeczności, skarby DAO, wykonywanie decyzji governance – to też smart kontrakty. Automatyzują egzekucję wyników głosowania bez potrzeby zaufanego wykonawcy.

Audyty i granice bezpieczeństwa

Audyt (ang. smart contract audit) to profesjonalny przegląd kodu przez wyspecjalizowanych audytorów bezpieczeństwa przed wdrożeniem. Renomowane protokoły DeFi przechodzą zazwyczaj kilka niezależnych audytów, zanim zarządzają znaczącymi środkami. Lista firm audytorskich o ugruntowanej reputacji obejmuje m.in. Trail of Bits, OpenZeppelin, ChainSecurity i Certora.

Audyt znacząco redukuje ryzyko, ale nie eliminuje go. Zaudytowane kontrakty były wielokrotnie hakowane. Trudniejsze do wykrycia niż błędy w kodzie są błędy w logice ekonomicznej – manipulacje oracle'ami, flash loan exploits, nieoczekiwane interakcje między protokołami. Dlatego doświadczeni użytkownicy DeFi zwracają uwagę zarówno na historię audytów, jak i na to, jak długo kontrakt zarządza środkami bez incydentów.

Najczęstsze błędy

  • Zakładanie, że 'zaudytowany' znaczy 'bezpieczny'. Audyt to jeden z elementów due diligence, nie certyfikat bezpieczeństwa.
  • Ignorowanie uprawnień administracyjnych kontraktu. Warto sprawdzić, kto może podmienić implementację, zmienić parametry czy zatrzymać protokół.
  • Nierozróżnianie kontraktów niemodyfikowalnych od proxy. Wiele protokołów wygląda tak samo z poziomu użytkownika, ale ma zupełnie inne modele zaufania.
  • Dawanie nieograniczonych zatwierdzeń (ang. unlimited approvals) kontraktom, z których przestajesz korzystać. To otwiera futurtransakcje bez twojej wiedzy jeśli kontrakt zostanie skompromitowany.

Najczęstsze pytania

Zależy od projektu. Kontrakty czysto niemodyfikowalne (ang. immutable) nie mogą być zmienione przez nikogo. Większość protokołów DeFi używa jednak wzorców proxy z mechanizmem governance, który umożliwia aktualizacje. Niektóre mają też funkcję pauzy, którą może aktywować multisig. Przed wejściem w interakcję warto sprawdzić, jakie uprawnienia administracyjne istnieją.

Ethereum używa modelu opartego na kontach z EVM. Solana używa programów ze zupełnie innym modelem kont (ang. account model) i równoległym wykonywaniem transakcji. Wynik dla użytkownika może być podobny, ale architektura i ryzyko się różnią. Termin 'smart kontrakt' nie jest standaryzowany i nie powinien sugerować, że wszystkie implementacje są równoważne.

Zatwierdzenie to zgoda na to, by smart kontrakt mógł przenosić twoje tokeny w twoim imieniu (do określonego limitu lub bez limitu). Nieograniczone zatwierdzenia danych kontraktom powinny być cofane gdy z nich nie korzystasz. Serwisy takie jak revoke.cash pozwalają zarządzać aktywnymi zatwierdzeniami.

Każdy węzeł sieci musi dostać identyczny wynik dla tych samych danych wejściowych – bo muszą zgodzić się co do stanu. To wyklucza generowanie losowości bez zewnętrznych wyroczni (ang. oracles), wywołania sieciowe i zmiennoprzecinkowe obliczenia. Smart kontrakty operują na arytmetyce całkowitoliczbowej i dostępie do stanu blockchain w momencie wywołania.