Убрать механику blocked из L3-кошельков (резерв возврата → отдельный кошелёк w.wal.wpend) #31

Merged
ant merged 3 commits from feat/remove-l3-blocked into dev 2026-05-24 17:32:05 +00:00
Owner

Что и зачем

Упраздняем субсчёт «заблокировано» на L3-кошельках. Раньше резерв средств под заявку на возврат паевого делался блокировкой внутри w.wal.share (available→blocked). Теперь резерв — это перевод на отдельный кошелёк-резерв w.wal.wpend (COOPERATIVE). Все движения — только переводы и сжигание; BLOCK/UNBLOCK удалены.

Слой контрактов

  • wallets.hpp: новый кошелёк WITHDRAW_PENDING (w.wal.wpend, COOPERATIVE), реестр 14→15.
  • operations.hpp: из WalletOp удалены BLOCK/UNBLOCK/BURN_BLOCKED. Числовые значения ISSUE=0/TRANSFER=1/BURN=4/NONE=5 сохранены, чтобы исторические op_code в blockchain_actions читались без сдвига смысла. Переключены 3 операции возврата:
    • o.wal.wthreq → TRANSFER w.wal.sharew.wal.wpend (0/0)
    • o.wal.wthdec → TRANSFER w.wal.wpendw.wal.share (0/0)
    • o.wal.wthcpl → BURN w.wal.wpend (Dr 80 / Cr 51)
  • walletop.cpp / revert.cpp: удалены кейсы и валидации блокировки.
  • migrate(): свёртка blocked → available по всем коопам (cooperatives2). Сигнатура без аргументов — выполняется автоматически при деплое. Идемпотентно.
  • capital (balances.cpp / importcontr.cpp): больше не читают blocked.
  • p.wal.wthdrw.standard.yaml: стандарт приведён к модели «резерв на кошельке».

Контракты wallet/src/withdraw/* НЕ менялись — операции вызываются по тем же operation_code, изменилась только их семантика в реестре.

cooptypes / SDK

  • operations.ts: WalletOp без BLOCK/UNBLOCK/BURN_BLOCKED; 3 операции возврата переключены. wallets.generated.ts регенерирован (gen:from-cpp) — добавлен w.wal.wpend.
  • selectors: убран blocked из programWalletSelector/ledger2WalletSelector.

Backend (controller)

  • Убрано поле blocked из GraphQL DTO ProgramWallet и Ledger2Wallet. TypeORM-колонка и внутренние интерфейсы оставлены deprecated (без DB-миграции).

Frontend (desktop)

  • Убраны все поля «Заблокировано»: WalletProgramWidget, WalletWidget (карточка переименована в «Минимальный неснижаемый остаток»), ParticipantWalletsPage, CoopWalletsPage, CapitalWalletsCardsWidget, ContributorsListWidget, optimistic blocked_delta.

Что НЕ входит (осознанные границы)

  • Поле blocked физически оставлено в C++-структурах таблиц wallets2/userwallets (deprecated, всегда 0 после migrate). Удаление поля = небезопасная смена layout таблицы на живых коопах честь/восход → отдельный cleanup-деплой.
  • Legacy soviet::progwallets (blockbal/unblockbal) и donor-marketplace — отдельный трек (Эпик 4 проекта «Цифровой Кошелёк»).
  • Legacy ledger v1 chart-of-accounts «Заблокированные средства» — другая подсистема (laccount), не трогалась.

⚠️ Требует шага CI/деплоя

  1. Regen GraphQL schema + zeus client (generate-schema + generate-client) — привести controller/schema.gql и sdk/src/zeus в соответствие с удалённым полем blocked (локально не запускалось). schema.gql в этом PR НЕ трогался.
  2. Предусловие миграции: на момент деплоя не должно быть заявок на возврат «в полёте» (pending/authorized) — их blocked свернётся в available, а completewthd не найдёт резерва. Незавершённые заявки довести до complete/decline ДО деплоя.

🤖 Generated with Claude Code

## Что и зачем Упраздняем субсчёт «заблокировано» на L3-кошельках. Раньше резерв средств под заявку на возврат паевого делался блокировкой внутри `w.wal.share` (available→blocked). Теперь резерв — это **перевод на отдельный кошелёк-резерв `w.wal.wpend`** (COOPERATIVE). Все движения — только переводы и сжигание; BLOCK/UNBLOCK удалены. ## Слой контрактов - **wallets.hpp**: новый кошелёк `WITHDRAW_PENDING` (`w.wal.wpend`, COOPERATIVE), реестр 14→15. - **operations.hpp**: из `WalletOp` удалены BLOCK/UNBLOCK/BURN_BLOCKED. Числовые значения ISSUE=0/TRANSFER=1/BURN=4/NONE=5 сохранены, чтобы исторические op_code в blockchain_actions читались без сдвига смысла. Переключены 3 операции возврата: - `o.wal.wthreq` → TRANSFER `w.wal.share`→`w.wal.wpend` (0/0) - `o.wal.wthdec` → TRANSFER `w.wal.wpend`→`w.wal.share` (0/0) - `o.wal.wthcpl` → BURN `w.wal.wpend` (Dr 80 / Cr 51) - **walletop.cpp / revert.cpp**: удалены кейсы и валидации блокировки. - **migrate()**: свёртка `blocked → available` по **всем** коопам (cooperatives2). Сигнатура без аргументов — выполняется автоматически при деплое. Идемпотентно. - **capital** (balances.cpp / importcontr.cpp): больше не читают `blocked`. - **p.wal.wthdrw.standard.yaml**: стандарт приведён к модели «резерв на кошельке». Контракты wallet/src/withdraw/* НЕ менялись — операции вызываются по тем же `operation_code`, изменилась только их семантика в реестре. ## cooptypes / SDK - `operations.ts`: `WalletOp` без BLOCK/UNBLOCK/BURN_BLOCKED; 3 операции возврата переключены. `wallets.generated.ts` регенерирован (`gen:from-cpp`) — добавлен `w.wal.wpend`. - selectors: убран `blocked` из `programWalletSelector`/`ledger2WalletSelector`. ## Backend (controller) - Убрано поле `blocked` из GraphQL DTO `ProgramWallet` и `Ledger2Wallet`. TypeORM-колонка и внутренние интерфейсы оставлены deprecated (без DB-миграции). ## Frontend (desktop) - Убраны все поля «Заблокировано»: WalletProgramWidget, WalletWidget (карточка переименована в «Минимальный неснижаемый остаток»), ParticipantWalletsPage, CoopWalletsPage, CapitalWalletsCardsWidget, ContributorsListWidget, optimistic `blocked_delta`. ## Что НЕ входит (осознанные границы) - Поле `blocked` физически оставлено в C++-структурах таблиц `wallets2`/`userwallets` (deprecated, всегда 0 после migrate). Удаление поля = небезопасная смена layout таблицы на живых коопах честь/восход → отдельный cleanup-деплой. - Legacy `soviet::progwallets` (blockbal/unblockbal) и donor-marketplace — отдельный трек (Эпик 4 проекта «Цифровой Кошелёк»). - Legacy `ledger` v1 chart-of-accounts «Заблокированные средства» — другая подсистема (laccount), не трогалась. ## ⚠️ Требует шага CI/деплоя 1. **Regen GraphQL schema + zeus client** (`generate-schema` + `generate-client`) — привести `controller/schema.gql` и `sdk/src/zeus` в соответствие с удалённым полем `blocked` (локально не запускалось). `schema.gql` в этом PR НЕ трогался. 2. **Предусловие миграции**: на момент деплоя не должно быть заявок на возврат «в полёте» (pending/authorized) — их blocked свернётся в available, а `completewthd` не найдёт резерва. Незавершённые заявки довести до complete/decline ДО деплоя. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude added 1 commit 2026-05-24 16:07:49 +00:00
Упраздняем субсчёт "заблокировано" на кошельках. Резерв средств под заявку
на возврат паевого теперь выражается переводом на отдельный COOPERATIVE-кошелёк
w.wal.wpend, а не блокировкой внутри w.wal.share. Все движения — только переводы
и сжигание, без BLOCK/UNBLOCK.

Контракты (ledger2/wallet/capital):
- wallets.hpp: новый кошелёк WITHDRAW_PENDING (w.wal.wpend, COOPERATIVE).
- operations.hpp: из WalletOp удалены BLOCK/UNBLOCK/BURN_BLOCKED (числовые
  значения ISSUE/TRANSFER/BURN/NONE сохранены для совместимости истории).
  Переключены 3 операции возврата: o.wal.wthreq -> TRANSFER share->wpend;
  o.wal.wthdec -> TRANSFER wpend->share; o.wal.wthcpl -> BURN wpend.
- walletop.cpp/revert.cpp: удалены кейсы и валидации блокировки.
- migrate(): свёртка blocked->available по ВСЕМ коопам (выполняется автоматически
  при деплое; сигнатура без аргументов). Поле blocked в структурах таблиц
  оставлено deprecated — физическое удаление = смена layout таблицы на живых
  коопах, отдельный cleanup-деплой.
- capital balances/importcontr: больше не читают blocked.
- p.wal.wthdrw.standard.yaml: стандарт приведён к модели "резерв на кошельке".

cooptypes/SDK:
- operations.ts: WalletOp без BLOCK/UNBLOCK/BURN_BLOCKED; 3 операции возврата
  переключены; wallets.generated.ts регенерён (добавлен w.wal.wpend).
- selectors: убран blocked из programWalletSelector/ledger2WalletSelector.

Backend (controller): убрано поле blocked из GraphQL DTO ProgramWallet и
Ledger2Wallet. TypeORM-колонка/внутренние интерфейсы оставлены deprecated
(без DB-миграции).

Frontend (desktop): убраны все поля "Заблокировано" — WalletProgramWidget,
WalletWidget, ParticipantWalletsPage, CoopWalletsPage, CapitalWalletsCardsWidget,
ContributorsListWidget, optimistic blocked_delta.

Границы (не в этом PR): legacy soviet::progwallets blockbal/unblockbal и
donor-marketplace; legacy ledger v1 chart-of-accounts "Заблокированные средства";
полное удаление поля blocked из C++-структур таблиц.

Требует CI-шага: regen GraphQL schema + zeus client (generate-schema/-client)
для согласования schema.gql и zeus-типов с удалённым полем blocked.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
claude force-pushed feat/remove-l3-blocked from 39a456e4ca to 0969505a71 2026-05-24 16:07:49 +00:00 Compare
ant requested changes 2026-05-24 16:29:41 +00:00
Dismissed
@@ -48,2 +48,3 @@
static constexpr eosio::name CK_MEMBER = "w.wal.member"_n; ///< ЦК — членская часть пайщика (USER_SHARED)
static constexpr eosio::name WITHDRAWALS_SINK = "w.wal.wthdrw"_n; ///< DEPRECATED 2026-05-21: после переключения o.wal.wthcpl с TRANSFER на BURN_BLOCKED кошелёк больше не получает новых средств. Оставлен в реестре для исторических L2-балансов (накопленные возвраты до перехода). Не использовать в новых операциях.
static constexpr eosio::name WITHDRAWALS_SINK = "w.wal.wthdrw"_n; ///< DEPRECATED 2026-05-21: исторический sink возвратов. Оставлен в реестре для исторических L2-балансов (накопленные возвраты до перехода). Не использовать в новых операциях.
static constexpr eosio::name WITHDRAW_PENDING = "w.wal.wpend"_n; ///< Резерв паевого под заявку на возврат (COOPERATIVE-пул). o.wal.wthreq переводит сюда с w.wal.share, o.wal.wthdec возвращает обратно, o.wal.wthcpl сжигает отсюда. Заменил механику blocked/BLOCK/UNBLOCK 2026-05-24.
Owner

WITHDRAW_PENDING - этот кошелек еще должен быть L3 для отображения пайщику в кошельках на странице его.

WITHDRAW_PENDING - этот кошелек еще должен быть L3 для отображения пайщику в кошельках на странице его.
claude added 1 commit 2026-05-24 16:43:17 +00:00
fix(sdk): синхронизировать schema.gql и zeus с удалением blocked из L3-кошельков
Typecheck / desktop (pull_request) Successful in 13m29s
Typecheck / controller (pull_request) Successful in 13m8s
5c494db262
CI Typecheck падал на @coopenomics/sdk:build (tsc): селекторы
programWalletSelector/ledger2WalletSelector и зависимые capital-селекторы
больше не содержат blocked, но zeus-типы (MakeAllFieldsRequired) всё ещё
требовали его как обязательное поле.

- schema.gql: убран `blocked: String!` из типов Ledger2Wallet и ProgramWallet
  (точечно, без полной регенерации — она тянет несвязанный дрейф схемы).
- zeus (controller/zeus + sdk/src/zeus): убран blocked из Ledger2Wallet и
  ProgramWallet во всех 4 секциях (ValueTypes/ResolverInputTypes/ModelTypes/
  GraphQLTypes). blocked в ChartOfAccountsItem (legacy chart-of-accounts) и
  статус-комментарии (accepted|blocked) сохранены.
- CoopCard.vue: удалён мёртвый закомментированный блок с wallet.blocked.

Проверено локально: sdk typecheck и controller typecheck зелёные.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
claude added 1 commit 2026-05-24 17:11:42 +00:00
chore(controller,sdk): полная регенерация schema.gql и zeus (generate-schema + generate-client)
Typecheck / desktop (pull_request) Successful in 13m28s
Typecheck / controller (pull_request) Successful in 13m9s
7a163389c6
Штатный синк вместо точечной правки: schema.gql приведён в соответствие с
актуальными DTO контроллера (был протухший — накопленный дрейф полей,
не только blocked). zeus перегенерирован из новой схемы; оба
controller/zeus и sdk/src/zeus идентичны.

Результирующие изменения относительно L3-blocked-ветки:
- удалён blocked из Ledger2Wallet/ProgramWallet (цель PR);
- синхронизированы ранее не закоммиченные дрейфы: is_server_init в SystemInit,
  enum-значение AWAITING_AUTHORIZATION, актуализация описаний/ролей @Field.
- blocked сохранён в ChartOfAccountsItem (legacy chart-of-accounts).

Проверено локально: sdk typecheck и controller typecheck зелёные.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ant approved these changes 2026-05-24 17:31:57 +00:00
ant merged commit 72cec26c14 into dev 2026-05-24 17:32:05 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: C9S/mono#31