Как защитить изменение лимита ICRC-2 от параллельного списания
Между чтением лимита и отправкой нового значения данные на экране могут устареть. В ICRC-2 для такого случая предусмотрено поле expected_allowance.
Передайте значение, которое видел пользователь
Запросите icrc2_allowance для конкретной пары счетов владельца и получателя полномочий. При изменении лимита с 80 до 100 передайте 80 как ожидаемое значение. Если до этого спишут 30, проверка не пройдёт. Покажите актуальный остаток и дайте пользователю заново определить итоговый лимит.
read allowance = 80
spender consumes 30 → current allowance = 50
approve(amount = 100, expected_allowance = 80) → AllowanceChanged
Учитывайте абсолютное значение
Сумма approve задаёт новый размер лимита целиком. Автоматический повтор с ожидаемым значением 50 проведёт изменение при условиях, которых пользователь не видел. Если позднее отклонится transfer_from, проверьте также expires_at и фактический баланс владельца.