fix(desktop): чистить технические детали ассертов цепи в тостах ошибок #110

Merged
ant merged 1 commits from fix/sanitize-blockchain-error-toast into dev 2026-06-08 07:02:48 +00:00
Owner

Проблема

Пользователю в тост ошибки летел сырой ассерт смарт-контракта, например:

walletop TRANSFER: недостаточно средств на кошельке w.wal.share

Ему не нужны ни scope-префикс операции (walletop TRANSFER:), ни служебное имя кошелька (w.wal.share) — он нажал конкретную кнопку и так понимает, о каком кошельке речь. Достаточно «Недостаточно средств на кошельке».

Решение

Универсальный санитайзер sanitizeBlockchainError (src/shared/lib/utils/), встроенный в единую точку показа ошибок — FailAlert (src/shared/api/alerts.ts). Применяется ко всем тостам ошибок автоматически.

Что чистит:

  • ведущий технический scope-префикс: walletop TRANSFER:, walletop BLOCK:, ledger2::apply:, o.mkt.supply: — распознаёт идентификатор с ./:: либо «слово + ALLCAPS-опкод»; кириллицу не трогает (русские сообщения не ломаются);
  • служебные имена ledger2-кошельков w.wal.share / w.mkt.payout / w.cap.gen …;
  • нормализует пробелы и ставит заглавную первую букву.

Пример → «Недостаточно средств на кошельке». Нетехнические сообщения проходят без изменений (идемпотентность проверена на наборе кейсов).

Разработчикам — полный текст сохранён

  • FailAlert дублирует сырой message в console.error браузера;
  • бэкенд уже пишет полный ассерт (walletop TRANSFER: … w.wal.share) в логи контроллера (graphql-exceptions.filter).

Фронт-only, бэкенд не трогался.

🤖 Generated with Claude Code

## Проблема Пользователю в тост ошибки летел сырой ассерт смарт-контракта, например: > `walletop TRANSFER: недостаточно средств на кошельке w.wal.share` Ему не нужны ни scope-префикс операции (`walletop TRANSFER:`), ни служебное имя кошелька (`w.wal.share`) — он нажал конкретную кнопку и так понимает, о каком кошельке речь. Достаточно «Недостаточно средств на кошельке». ## Решение Универсальный санитайзер `sanitizeBlockchainError` (`src/shared/lib/utils/`), встроенный в **единую точку** показа ошибок — `FailAlert` (`src/shared/api/alerts.ts`). Применяется ко всем тостам ошибок автоматически. Что чистит: - ведущий технический scope-префикс: `walletop TRANSFER:`, `walletop BLOCK:`, `ledger2::apply:`, `o.mkt.supply:` — распознаёт идентификатор с `.`/`::` либо «слово + ALLCAPS-опкод»; кириллицу не трогает (русские сообщения не ломаются); - служебные имена ledger2-кошельков `w.wal.share` / `w.mkt.payout` / `w.cap.gen` …; - нормализует пробелы и ставит заглавную первую букву. Пример → **«Недостаточно средств на кошельке»**. Нетехнические сообщения проходят без изменений (идемпотентность проверена на наборе кейсов). ## Разработчикам — полный текст сохранён - `FailAlert` дублирует **сырой** message в `console.error` браузера; - бэкенд уже пишет полный ассерт (`walletop TRANSFER: … w.wal.share`) в логи контроллера (`graphql-exceptions.filter`). Фронт-only, бэкенд не трогался. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude added 1 commit 2026-06-08 06:42:38 +00:00
[@ant] fix(desktop): чистить технические детали ассертов цепи в тостах ошибок
Typecheck / desktop (pull_request) Successful in 13m28s
Typecheck / controller (pull_request) Successful in 12m29s
f10b49ac8f
Пользователю в тост летел сырой ассерт контракта, напр.
`walletop TRANSFER: недостаточно средств на кошельке w.wal.share`.
Ему не нужны ни scope-префикс операции, ни служебное имя кошелька — он
нажал конкретную кнопку и так понимает, о каком кошельке речь.

Добавлен универсальный санитайзер sanitizeBlockchainError, встроенный в
единую точку показа ошибок FailAlert:
- снимает ведущий технический scope-префикс (`walletop TRANSFER:`,
  `ledger2::apply:`, `o.mkt.supply:`) — распознаёт идентификатор с
  `.`/`::` либо слово+ALLCAPS-опкод, кириллицу не трогает;
- убирает служебные имена ledger2-кошельков (`w.wal.share` и т.п.);
- нормализует пробелы и ставит заглавную первую букву.

Результат для примера выше — «Недостаточно средств на кошельке».
Обычные (нетехнические) сообщения проходят без изменений.

Полный технический текст остаётся разработчикам: FailAlert дублирует
сырой message в console.error, бэкенд пишет его в логи контроллера.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ant merged commit 9553697f2b into dev 2026-06-08 07:02:48 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: C9S/mono#110