V první řadě vyjadřuji největší soustrast týmu @Balancer a všem, kterých se tento exploit dotkl. Je to vždy těžký den, když dojde k významnému hacku DeFi, jako je tento, natož z OG protokolu. Více než dolarové náklady na ukradené prostředky to skutečně poškozuje image celého kryptoměny a DeFi jako celku a vrací naše odvětví o několik měsíců zpět. Faktem je, že solidnost je prostě příliš nejistý jazyk na to, aby byl skutečně tím, který hostí budoucnost financí. Solidity má příliš velkou plochu, díky které je náchylná k hackerským útokům, protože vývojáři se spoléhají na ruční kontroly všeho od řízení přístupu až po přesnou matematiku, a to je přesně důvod, proč byly jazyky založené na aktivech, jako je Move, vůbec vynalezeny. Po troše pátrání byl Balancer hacknut takto: Útočníci využívali zaokrouhlovací chyby ve stabilních výměnách poolů k narušení invariantu poolu, což je klíčová matematická konstanta, která představuje vyváženou likviditu. Začali s bleskově zapůjčenými swapy BPT (Balancer Pool Tokens) za podkladové aktivum, jako je cbETH, a posouvali zůstatky na přesné hranice zaokrouhlení (např. škálované na 9). Poté přepínali mezi aktivy jako wstETH na cbETH s vytvořenými částkami (např. ~8,918 zaokrouhleno dolů na 8 kvůli škálování s pevnou desetinnou čárkou), podhodnocovali změny rezerv a uměle vyfukovali invariant (D). To snížilo cenu BPT (D / totalSupply), což útočníkům umožnilo reverzní swap, aby levně vytěžili přebytečný BPT, spálili jej, aby si vybrali podkladová aktiva za "normální" sazby, a rozdíl si strčili do kapsy, čímž v podstatě kradli poskytovatelům likvidity. Zisky se hromadily v interních zůstatcích trezoru a byly vybírány prostřednictvím manageUserBalance s WITHDRAW_INTERNAL, aniž by bylo potřeba přímé obcházení autentizace, protože krádež byla dotována matematickou chybou. Jedná se o ztrátu přesnosti v manuálních knihovnách Solidity s pevnou řádovou čárkou, která kaskádovitě vede do masivních odtoků. Způsob, jakým by Move tento hack zcela obešel, spočívá v tom, že by v jádru zapekl bezpečnost: S aktivy se zachází jako se zdroji s lineárními typy, které vynucují přísné zachování (žádné nezamýšlené podvody, poklesy nebo ztráty), a matematika používá přesná celá čísla u64/u128 s vestavěnými přerušeními přetečení, bez plovoucích čísel, bez zneužitelných zaokrouhlovacích skluzů ve složitých výpočtech. V decentralizované jednotce DEX založené na přesunu by funkce prohození atomicky kontrolovaly a aktualizovaly invarianty prostřednictvím virtuálního počítače, přičemž by se přerušily při jakékoli nerovnováze, například: veřejný vstup zábavný swap(pool: &mut LiquidityPool, in: Coin, out_amt: u64): Mince { tvrdit! (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); tvrdit! (check_invariant(skupina), E_INVARIANT_VIOLATION); ven } Atomové transakce navíc zabíjejí riziko opětovného přístupu. To je důvod, proč mají ekosystémy Move mnohem méně exploitů ve srovnání s EVM. Je načase, aby tvůrci DeFi přijali jazyky jako Move, které upřednostňují bezpečnost od základů, abychom mohli konečně vybudovat odolnou finanční budoucnost bez překážek, kterým lze předejít, jako je tento.