Что проходит эта проверка условия в cairo-lang?
Я рассматриваю задачу аукциона Paradigm ctf 2022 в Каире . Уязвимость заключается в 5 цитируемых строках. Здесь он проверяет, меньше или равна сумма unlocked_balance. Обе переменные — uint256.
let (current_balance) = _balances.read(account=caller)
let (locked_balance) = _lockedBalancesOf.read(account=caller)
let (unlocked_balance) = uint256_sub(current_balance, locked_balance)
let (enough_balance) = uint256_le(amount, unlocked_balance)
assert enough_balance = 1
Решение отправляетamount = { low: 2**128+1, high: 0 }
и проходит проверку сunlocked_balance = 0
.
Мой вопрос в том, как это работает, чтоuint256_le({ low: 2**128+1, high: 0 }, 0) == 1
? Это известная уязвимость в cairo-lang?