Pieniądze za nic dzięki inteligentnym kontraktom

Co to jest „przekroczenie zakresu liczb całkowitych” i dlaczego warto o nim wiedzieć?

Interesuje Cię temat inteligentnych kontraktów? Wiesz, co to jest „przekroczenie zakresu liczb całkowitych”? Terminologia ta pochodzi ze świata programowania, jednak inteligentny kontrakt to przecież program. Dziś wyjaśniamy, dlaczego są one powiązane.

Mówiąc wprost, jeśli liczba całkowita bez znaku jest przechowywana w pojedynczej, bajtowej komórce pamięci, może przyjąć jedynie wartości z przedziału 0-255. Oznacza to, że jeśli nie określono innych warunków, 255 + 1 = 0. Co gorsza, 0 – 1 = 255. Większość nowoczesnych procesorów tak właśnie przetwarza te dane.

W wielu współczesnych językach programowania program sam kontroluje, czy podczas wykonywania działań arytmetycznych nastąpiło przepełnienie. Wystąpienie takiej sytuacji z pewnością nie jest po myśli programisty, więc najlepiej wtedy przerwać działanie programu i upewnić się, że w przyszłości błąd ten nie wystąpi.

A co wspólnego z tym wszystkim mają inteligentne kontrakty?

W inteligentnych kontraktach dla Ethereum podobna kontrola nie jest zapewniana podczas przetwarzania finansów. Innymi słowy, jeśli nie masz tokenów i wyślesz jednego znajomemu, dostaniesz trylion tokenów. Oczywiście działanie programu powinno zostać wówczas zatrzymane, a niepoprawna transakcja anulowana.

Dlaczego programiści Ethereum implementowali swoje obliczenia arytmetyczne w ten sposób, pozostaje tajemnicą. Jednak aby uniwersalne reguły matematyczne miały zastosowanie do inteligentnych kontraktów, każdy programista działający w tym obszarze musi dodać ponad 100 linijek kodu zawierających normalne funkcje dodawania, mnożenia itd.

W przeciwnym razie, mając trylion zaksięgowany na swoim koncie, nie mają żadnych ograniczeń. Oszust mógłby wejść na giełdę kryptowalut i kupić cały zasób waluty bitcoin lub ether. Cena nie miałaby tu znaczenia.

Scenariusz ten nie jest czysto teoretyczny — taka sytuacja wielokrotnie już miała miejsce z różnymi walutami. Zwykle o problemie w kodzie dowiadujemy się, gdy ktoś dokona jakiejś sztuczki i zniknie z pełnymi kieszeniami. Jednak nawet wtedy nic nie można zrobić: inteligentne kontrakty są jak wyryte w kamieniu, nie można ich zmieniać ani aktualizować.

Przepełnienie a Bitcoin

Prawda jest taka, że problem związany z przekroczeniem zakresu liczb całkowitych nie dotyczy tylko waluty Ethereum. Dawno temu podobny problem miał Bitcoin.

W efekcie przekroczenia zakresu liczb całkowitych 15 sierpnia 2010 roku dwa portfele bitcoinowe zawierały 184 mld bitcoinów. Oczywiście dla założycieli nie był to mile widziany rozwój sytuacji. Kod szybko został zmodyfikowany, błąd wyeliminowany, historia finansowa wycofana, a Satoshi Nakamoto udawał, że nic się nie stało.

Co oznacza wycofanie historii? Przykład: jeśli kupiłem bitcoiny warte 10 000 dolarów w tym konkretnie dniu, takie wycofanie mogłoby sprawić, że moje bitcoiny wróciłyby z powrotem do sprzedawcy — odmiennie niż moje dolary, których bym nie odzyskał. A jeśli takie wycofanie nastąpiłoby teraz, konsekwencje byłyby kolosalne, ponieważ każdy dzień to transakcje bitcoinów oscylujące wokół 5 mld dol.

Ten i inne przypadki pokazują, że łańcucha bloków nie można zmienić tylko w sytuacji, gdy wszystko idzie zgodnie z planem. W przeciwnym razie zarówno plan, jak i blockchain mogą zostać zmienione.

Powrót do inteligentnych kontraktów

Decyzja programistów Ethereum wydaje się dosyć dziwna — wygląda na to, że przygotowali oni pułapki dla programistów inteligentnych kontraktów. Aby ochronić siebie lub swoich inwestorów przed potencjalną nieoczekiwaną utratą wszystkich swoich pieniędzy, należy mieć duże doświadczenie i być bardzo skupionym. To kolejny powód, dla którego kod inteligentnego kontraktu wymaga dokładnej weryfikacji. W ramach usługi Kaspersky Token Offering Security nasi eksperci analizują kod inteligentnych kontraktów w poszukiwaniu luk i nieudokumentowanych funkcji. Więcej informacji na ten temat znajduje się na naszej stronie Token Offering Security.

Porady