Wczoraj wieczorem spojrzałem na kod, który był błędny w Cetus i pierwszą rzeczą, co do get_delta_b której byłem bardzo podejrzliwy, było to, dlaczego ta funkcja konwertuje u256 na u64, co powodowało problem z przechwytywaniem dokładności. Po zapytaniu sztucznej inteligencji jest prawdopodobne, że gdy cetus przeniósł wszystkie formuły uniswap v3, ponieważ uni używa stałego punktu, należy go przekonwertować na liczbę zmiennoprzecinkową bez starannego rozważenia bezpieczeństwa. Tego rodzaju logika biznesowa, która należy do poziomu algorytmu, jest trudna do wykrycia w audytach kodu, chyba że instytucja audytowa ma również badaczy, którzy są zaznajomieni zarówno z algorytmami, jak i kodem. Oto logika, dlaczego sztuczna inteligencja analizuje kod w taki sposób, w jaki to robi:
Na podstawie mojej analizy bazy kodu mogę teraz wyjaśnić, dlaczego autor zdecydował się zaimplementować ją w ten sposób
get_delta_b
funkcje i możliwe przyczyny:
Dlaczego autor funkcji implementuje get_delta_b sposób
Optymalizacja wydajności: ) i maska bitowa bezpośrednio obsługują typy U256. Najprawdopodobniej poprawi to wydajność i zmniejszy obciążenie obliczeniowe. W aplikacjach DeFi, zwłaszcza w scenariuszach handlu o wysokiej częstotliwości, wydajność ma kluczowe znaczenie.
Kod zakomentowany używa u256::get
,U256::SHRW
podczas gdy obecna implementacja wykorzystuje operacje bitowe (>> 64
Oszczędzaj opłaty za gaz: Operacje na blockchainie Sui muszą uiszczać opłaty za gaz, a bardziej złożone operacje będą zużywać więcej gazu. Uproszczenie matematyki może obniżyć koszty transakcji, zwłaszcza w przypadku często używanych podstawowych funkcji AMM.
Zmniejszone zależności: funkcje modułu, a bieżąca implementacja zmniejsza liczbę wywołań tych funkcji, być może w celu zmniejszenia zależności od bibliotek zewnętrznych lub uniknięcia problemów z niektórymi funkcjami zewnętrznymi.
Kod w komentarzach używa więcej u256
Portowanie Solidity to Move: Jeśli chodzi o styl kodu, może to być przeniesienie z kodu Solidity Ethereum na język Move Sui. To użycie manipulacji i maskowania bitów jest powszechne w Solidity, szczególnie w implementacjach AMM, takich jak Uniswap V3.
Radzenie sobie z matematyką stałoprzecinkową: Wynikowy 256-bitowy wynik musi zostać poprawnie przetworzony, a przesunięcie 64 bitów w prawo jest powszechnym sposobem uzyskania prawidłowej pozycji przecinka dziesiętnego.
Matematyka stałoprzecinkowa jest często używana w AMM do radzenia sobie z wartościami dziesiętnymi. full_math_u128::full_mul
Potencjalne problemy
Jednak ta implementacja wprowadza kilka problemów:
Niska czytelność kodu: Użycie zakodowanych na stałe masek i operacji przemieszczenia sprawia, że kod jest trudny do zrozumienia i inspekcji.
Brak sprawdzania pełnych granic: Operacje na bitach i operacje konwersji typów nie mają kompleksowego sprawdzania granic, co może prowadzić do nieoczekiwanego zachowania w skrajnych przypadkach.
Komentowanie kodu współistnieje z kodem implementacji: Zachowanie starszych wersji kodu z komentarzami wskazuje, że kod może być w stanie przejściowym lub nie został odpowiednio przetestowany, co jest niebezpieczne dla krytycznego kodu zajmującego się aktywami finansowymi.
Ryzyko przepełnienia liczb całkowitych: W przypadku dużych wartości operacje i transformacje bitowe mogą prowadzić do przepełnienia liczb całkowitych, a uproszczone implementacje mogą nie mieć odpowiednich mechanizmów ochrony.
streszczenie
Jest prawdopodobne, że głównym powodem implementacji tego kodu przez autora jest optymalizacja wydajności i obniżenie kosztów gazu, przy jednoczesnej obsłudze obliczeń matematycznych stałoprzecinkowych w AMM. Jednak ta optymalizacja, kosztem bezpieczeństwa i czytelności kodu, może zapewnić atakującym luki w zabezpieczeniach, które można wykorzystać, jak widać na przykładzie podanego przez Ciebie incydentu kradzieży Cetus.
W projektach DeFi bezpieczeństwo powinno zawsze mieć pierwszeństwo przed optymalizacją wydajności, szczególnie w przypadku podstawowych funkcji, które obsługują zasoby użytkownika. Lepiej jest korzystać ze sprawdzonych funkcji bibliotecznych, dodawać kompleksowe kontrole granic i przeprowadzać odpowiednie audyty bezpieczeństwa.
Pokaż oryginał26
61,23 tys.
Treści na tej stronie są dostarczane przez strony trzecie. O ile nie zaznaczono inaczej, OKX nie jest autorem cytowanych artykułów i nie rości sobie żadnych praw autorskich do tych materiałów. Treść jest dostarczana wyłącznie w celach informacyjnych i nie reprezentuje poglądów OKX. Nie mają one na celu jakiejkolwiek rekomendacji i nie powinny być traktowane jako porada inwestycyjna lub zachęta do zakupu lub sprzedaży aktywów cyfrowych. Treści, w zakresie w jakim jest wykorzystywana generatywna sztuczna inteligencja do dostarczania podsumowań lub innych informacji, mogą być niedokładne lub niespójne. Przeczytaj podlinkowany artykuł, aby uzyskać więcej szczegółów i informacji. OKX nie ponosi odpowiedzialności za treści hostowane na stronach osób trzecich. Posiadanie aktywów cyfrowych, w tym stablecoinów i NFT, wiąże się z wysokim stopniem ryzyka i może podlegać znacznym wahaniom. Musisz dokładnie rozważyć, czy handel lub posiadanie aktywów cyfrowych jest dla Ciebie odpowiednie w świetle Twojej sytuacji finansowej.