Przede wszystkim, moje największe współczucie dla zespołu @Balancer oraz wszystkich dotkniętych tym atakiem. Zawsze jest to trudny dzień, gdy dochodzi do poważnego włamania w DeFi, nie mówiąc już o protokole OG. Więcej niż koszt dolarowy skradzionych funduszy, to naprawdę szkodzi wizerunkowi całego kryptowalutowego i DeFi jako całości i cofa naszą branżę o kilka miesięcy. Faktem jest, że Solidity jest po prostu zbyt niebezpiecznym językiem, aby mógł być tym, który hostuje przyszłość finansów. Solidity ma zbyt dużą powierzchnię, co czyni go podatnym na ataki, a deweloperzy polegają na ręcznych kontrolach wszystkiego, od kontroli dostępu po precyzyjne obliczenia, i to właśnie dlatego języki pierwsze w aktywach, takie jak Move, zostały wynalezione. Po przeprowadzeniu małego dochodzenia, oto jak Balancer został zhakowany: Napastnicy wykorzystali błędy zaokrągleń w wymianach w stabilnych pulach, aby zniekształcić inwariant puli, kluczową stałą matematyczną, która reprezentuje zrównoważoną płynność. Zaczęli od wymian z pożyczek flash BPT (Tokeny Puli Balancera) na aktywa podstawowe, takie jak cbETH, przesuwając salda do dokładnych granic zaokrągleń (np. skalowane do 9). Następnie wymieniali aktywa, takie jak wstETH na cbETH, z wybranymi kwotami (np. ~8.918 zaokrąglone w dół do 8 z powodu skalowania punktu stałego), niedoszacowując zmian rezerw i sztucznie deflatując inwariant (D). To zrujnowało cenę BPT (D / totalSupply), pozwalając napastnikom na odwrócenie wymiany, aby tanio wyemitować nadmiar BPT, spalić go, aby wypłacić aktywa podstawowe po "normalnych" stawkach i zatrzymać różnicę, zasadniczo kradnąc od dostawców płynności. Zyski gromadziły się w wewnętrznych saldach Vaultu i były wypłacane za pomocą manageUserBalance z WITHDRAW_INTERNAL, bez potrzeby bezpośredniego obejścia autoryzacji, ponieważ błąd matematyczny subsydiował kradzież. To utrata precyzji w ręcznych bibliotekach punktów stałych Solidity, która prowadzi do ogromnych wycieków. Sposób, w jaki Move całkowicie by ominął ten atak, polega na wbudowaniu bezpieczeństwa w rdzeń: Aktywa są traktowane jako zasoby z liniowymi typami, które wymuszają ścisłą konserwację (brak niezamierzonych duplikatów, strat lub utrat), a matematyka używa dokładnych liczb całkowitych u64/u128 z wbudowanymi przerwami na przepełnienie, bez zmiennoprzecinkowych, bez podatnych na ataki błędów zaokrągleń w złożonych obliczeniach. W DEX opartym na Move, funkcje wymiany atomowo sprawdzałyby i aktualizowały inwarianty za pośrednictwem VM, przerywając w przypadku jakiejkolwiek nierównowagi, takiej jak: public entry fun swap(pool: &mut LiquidityPool, in: Coin, out_amt: u64): Coin { assert!(coin::value(&in) >= calculate_required_in(pool, out_amt), E_INSUFFICIENT_INPUT); coin::merge(&mut pool.coin_x_reserve, in); let out = coin::extract(&mut pool.coin_y_reserve, out_amt); assert!(check_invariant(pool), E_INVARIANT_VIOLATION); out } Dodatkowo, atomowe transakcje eliminują ryzyko reentrancy. Dlatego ekosystemy Move mają znacznie mniej exploitów w porównaniu do EVM. Czas, aby twórcy DeFi przyjęli języki takie jak Move, które priorytetowo traktują bezpieczeństwo od podstaw, abyśmy mogli w końcu zbudować odporną przyszłość finansową bez zapobiegawczych opóźnień jak ten.