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.
