Języki programowania nie pomagają rozwojowi DeFi – kody zabezpieczeń są zbyt często łamane
Programowanie zorientowane na zasoby sprawia, iż podstawowe funkcje są natywne dla języka programowania. Jednak DeFi potrzebuje znacznie więcej, aby poprawić bezpieczeństwo tworzonych projektów.
Finanse zdecentralizowane (DeFi) gwałtownie się rozwijają. Całkowita wartość zablokowana, miara pieniędzy zarządzana przez protokoły DeFi, wzrosła z 10 miliardów dolarów do nieco ponad 40 miliardów dolarów w ciągu ostatnich dwóch lat, po osiągnięciu szczytowego poziomu 180 miliardów dolarów.
Słoń w pokoju?
Tylko w samym 2021 roku z powodu hacków i exploitów utracono ponad 10 miliardów dolarów. Dzisiejsze języki programowania inteligentnych kontraktów nie zapewniają odpowiednich funkcji do tworzenia zasobów i zarządzania nimi – znanych również jako „tokeny”. Aby DeFi stało się głównym nurtem, języki programowania muszą zapewniać funkcje zorientowane na zasoby, aby tworzenie inteligentnych kontraktów DeFi było bardziej bezpieczne i intuicyjne.
Obecne języki programowania DeFi nie mają pojęcia o zasobach
Rozwiązania, które mogą pomóc w ograniczeniu wieloletnich włamań do DeFi, obejmują kod audytu. Do pewnego stopnia audyty działają. Spośród 10 największych hacków DeFi w historii (daj lub bierz), dziewięć projektów nie zostało poddanych audytowi. Ale poświęcenie większej ilości środków na ten problem jest jak umieszczenie większej liczby silników w samochodzie z kwadratowymi kołami: może jechać nieco szybciej, ale głównego problemu nie rozwiązuje.
Co jest problemem
Języki programowania używane dzisiaj w DeFi, takie jak Solidity, nie mają pojęcia, czym jest zasób. Aktywa takie jak tokeny i tokeny niepodlegające wymianie (NFT) istnieją tylko jako zmienna (liczby, które mogą się zmieniać) w inteligentnym kontrakcie, takim jak ERC-20 Ethereum. Zabezpieczenia i walidacje, które definiują, jak zmienna powinna się zachowywać, np. nie powinna być wydana dwa razy, nie powinna zostać opróżniona przez nieautoryzowanego użytkownika, iż transfery powinny zawsze być bilansowane i netto do zera — wszystkie muszą być zaimplementowane przez dewelopera od zera, za każdą inteligentną umowę.
W miarę jak inteligentne kontrakty stają się coraz bardziej złożone, pojawiają się również wymagane zabezpieczenia i walidacje. Ludzie są ludźmi. Błędy się zdarzają. Pieniądze się gubią.
Przykład: Compound, jeden z najbardziej bluechipowych protokołów DeFi, został wykorzystany we wrześniu 2021 roku na kwotę 80 milionów dolarów. Dlaczego? Inteligentna umowa zawierała „>” zamiast „>=”.
Efekt domina
Aby inteligentne kontrakty współdziałały ze sobą, na przykład użytkownik zamieniał token na inny, do każdego z inteligentnych kontraktów wysyłane są komunikaty w celu zaktualizowania ich listy zmiennych wewnętrznych.
Rezultatem jest złożony akt równoważenia. Zapewnienie, iż wszystkie interakcje z inteligentną umową są prawidłowo obsługiwane, leży całkowicie w gestii programisty DeFi. Ponieważ w Solidity i Ethereum Virtual Machine (EVM) nie ma wbudowanych barier ochronnych, programiści DeFi muszą sami zaprojektować i wdrożyć wszystkie wymagane zabezpieczenia i walidacje.
Dlatego programiści DeFi spędzają prawie cały swój czas na upewnianiu się, iż ich kod jest bezpieczny. I sprawdzanie go dwukrotnie — i trzykrotnie — do tego stopnia, iż niektórzy programiści zgłaszają, iż spędzają do 90% czasu w walidacji i testowaniu, a tylko 10% swojego czasu w tworzeniu funkcji.
Biorąc pod uwagę, iż większość czasu programistów poświęca się na walkę z niezabezpieczonym kodem, w połączeniu z niedoborem programistów, aż dziwne jak gwałtownie i jak mocno DeFi tak się rozwinęło?
Najwyraźniej istnieje zapotrzebowanie na samodzielne, niewymagające pozwolenia i zautomatyzowane formy programowalnego pieniądza, pomimo wyzwań i zagrożeń związanych z ich dzisiejszym dostarczaniem. Teraz wyobraź sobie, ile innowacji można by uwolnić, gdyby programiści DeFi mogli skupić swoją produktywność na funkcjach, a nie na awariach. Ten rodzaj innowacji, który może pozwolić raczkującej branży o wartości 46 miliardów dolarów na zakłócenie rozwoju branży tak dużej, jak, no cóż, 468 bilionów dolarów światowych finansów.
Innowacje i bezpieczeństwo
Aby DeFi był zarówno innowacyjne, jak i bezpieczne, należy dać programistom łatwy sposób tworzenia zasobów i interakcji z nimi oraz uczynienia zasobów i ich intuicyjnym zachowaniem funkcją natywną. Wszelkie utworzone aktywa powinny zawsze zachowywać się w sposób przewidywalny i zgodny ze zdrowym rozsądkiem zasad finansowych.
W paradygmacie programowania zorientowanego na zasoby tworzenie zasobu jest tak proste, jak wywołanie funkcji natywnej. Platforma wie, czym jest zasób: .initial_supply_fungible(1000) tworzy wymienny token ze stałą podażą 1000 (poza podażą dostępnych jest również wiele innych opcji konfiguracji tokenów), podczas gdy funkcje takie jak .take i .put pobierają tokeny i umieszczają je gdzie indziej.
W miejsce programistów piszących złożoną logikę nakazującą inteligentnym kontraktom aktualizowanie list zmiennych z całym sprawdzaniem błędów, które pociąga za sobą, w programowaniu zorientowanym na zasoby, należy w prowadzić operacje które będą intuicyjne i fundamentalne dla DeFi jako natywne funkcje języka. Tokenów nie będzie można wówczas zgubić ani ukraść, ponieważ programowanie zorientowane na zasoby gwarantuje, iż to będzie to nie możliwe.
W ten sposób uzyskamy zarówno innowacyjność, jak i bezpieczeństwo w DeFi. I w ten sposób może zmienić się postrzeganie mainstreamowej publiczności z takiej, w której DeFi jest dzikim zachodem, na taką, w której DeFi to miejsce, w którym można bezpiecznie odłożyć swoje oszczędności by ich nie stracić.