Актуальные темы
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
Прежде всего, мои искренние соболезнования команде @Balancer, а также всем, кто пострадал от этой атаки.
Всегда тяжело, когда происходит значительный взлом DeFi, особенно от OG-протокола. Больнее всего не столько стоимость украденных средств, сколько то, что это действительно вредит имиджу всего крипто- и DeFi-сообщества и отбрасывает нашу индустрию на несколько месяцев назад.
Факт в том, что Solidity — это слишком небезопасный язык, чтобы действительно быть тем, который будет хостить будущее финансов. У Solidity слишком большая поверхность, что делает его уязвимым для взломов, при этом разработчики полагаются на ручные проверки всего, от контроля доступа до точной математики, и именно поэтому языки, ориентированные на активы, такие как Move, были изначально придуманы.
После небольшого расследования я выяснил, как был взломан Balancer: злоумышленники использовали ошибки округления в обменах стабильных пулов, чтобы исказить инвариант пула, ключевую математическую константу, представляющую сбалансированную ликвидность. Они начали с обменов BPT (токены пула Balancer) на базовый актив, такой как cbETH, подталкивая балансы к точным границам округления (например, масштабированным до 9). Затем они обменивались между активами, такими как wstETH и cbETH, с заранее рассчитанными суммами (например, ~8.918 округлено до 8 из-за фиксированной точности), недооценивали изменения резервов и искусственно снижали инвариант (D).
Это обрушило цену BPT (D / totalSupply), позволив злоумышленникам обратным обменом создать избыточные BPT по низкой цене, сжечь их, чтобы вывести базовые активы по "нормальным" ставкам, и забрать разницу, по сути, украсть у поставщиков ликвидности. Прибыль накапливалась во внутренних балансах Vault и выводилась через manageUserBalance с WITHDRAW_INTERNAL, без необходимости в прямом обходе авторизации, так как математическая ошибка субсидировала кражу. Это потеря точности в ручных фиксированных библиотеках Solidity, которая приводит к массовым утечкам.
Способ, которым Move мог бы полностью обойти этот взлом, заключается в том, что безопасность встроена в саму суть: активы рассматриваются как ресурсы с линейными типами, которые обеспечивают строгую сохранность (без непреднамеренных дубликатов, потерь или утечек), а математика использует точные целые числа u64/u128 с встроенными прерываниями переполнения, без дробных чисел, без уязвимых ошибок округления в сложных расчетах.
В DEX на основе Move функции обмена атомарно проверяли бы и обновляли инварианты через ВМ, прерываясь при любом дисбалансе, например:
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
}
Кроме того, атомарные транзакции устраняют риски повторного входа. Вот почему в экосистемах Move гораздо меньше взломов по сравнению с EVM.
Пришло время строителям DeFi принять такие языки, как Move, которые придают приоритет безопасности с самого начала, чтобы мы наконец могли построить устойчивое финансовое будущее без предотвратимых неудач, подобных этой.
Топ
Рейтинг
Избранное

