feat(marketplace): drop blocked-механику в ledger2 — резерв под Order через отдельный кошелёк w.mkt.order #41

Merged
ant merged 9 commits from feat/marketplace2-drop-blocked into marketplace2 2026-05-28 11:56:04 +00:00
Owner

Цель

Переводит marketplace2-сторону ledger2 на ту же модель, что dev уже сделал для wallet/withdraw (w.wal.wpend): убрать механику BLOCK/UNBLOCK/BURN_BLOCKED на одном кошельке, ввести отдельный USER_SHARED-кошелёк-резерв w.mkt.order под Order, переписать 3 marketplace-операции на TRANSFER/BURN.

Подготовка к merge devmarketplace2. Архитектурное решение согласовано с тобой 2026-05-28 — это marketplace-аналог dev-коммита feat(ledger2): убрать механику blocked из L3-кошельков.

Что меняется

C++ ledger2

  • wallets.hpp: новый USER_SHARED-кошелёк MARKETPLACE_ORDER_LOCK = "w.mkt.order"_n; реестр 15→16; mapping 7→8 (program_id=2 Marketplace).
  • operations.hpp: 3 операции marketplace переписаны:
    • BLOCK_FOR_ORDER (o.mkt.block): BLOCKTRANSFER w.mkt.member → w.mkt.order
    • UNBLOCK_ON_CANCEL (o.mkt.unblk): UNBLOCKTRANSFER w.mkt.order → w.mkt.member
    • CONSUME_BY_MEMBER (o.mkt.consum): BURN_BLOCKEDBURN на w.mkt.order

Operation_id'ы сохранены (o.mkt.block/o.mkt.unblk/o.mkt.consum) — изменилась только реализация в OPERATION_REGISTRY, не имена; внешние op_code в blockchain_actions читаются без сдвига смысла.

Enum WalletOp НЕ модифицируется — значения BLOCK/UNBLOCK/BURN_BLOCKED остаются в enum для legacy wallet/withdraw flow, который мигрирует следующим merge devmarketplace2.

C++ marketplace .cpp (5 файлов)

Комментарии в p.mkt.supply/{createorder,cancelorder,declineorder,expireorder,signiss2}.cpp обновлены под reserve-flow. Сами вызовы Ledger2::apply(coopname, op, ...) идентичны — сигнатура не меняется.

Controller / GraphQL DTO

  • MarketplaceMemberWallet.wallets: теперь 4 кошелька (был 3) — добавлен w.mkt.order с label «Резерв | Стол Заказов».
  • Поле .blocked остаётся в DTO (для wallet/withdraw + legacy), но для marketplace-кошельков всегда 0 — резерв выражается через .available отдельного кошелька.
  • Description'ы @Field обновлены, без story-ссылок (бизнес-словарь).

Cooptypes / SDK / Zeus

Regen:

  • cooptypes/ledger2/wallets.generated.ts: wallets=16, mapping=8 (из C++).
  • controller/schema.gql, controller/zeus/index.ts, sdk/zeus/index.ts: только description-only diff, никаких breaking changes в типах GraphQL/Zeus.

Invariants

  • I5 (BlockedConsistencyReserveConsistency): сверяет Σ TRANSFER(member→order) − Σ TRANSFER(order→member) − Σ BURN(order) = balance(w.mkt.order).
  • I6 (NoOrphanedBlocksNoOrphanedReserves): проверка парности по process_hash (consum без block, unblk без block, block+unblk+consum = двойное закрытие) — логика та же, op_code'ы те же.
  • Фикстуры в spec.ts обновлены.

YAML standards

  • p.mkt.supply.standard.yaml: обновлены описания операций block/unblk/consum под reserve-модель. Бизнес-словарь: «блокировка» → «резерв», «разблокировка» → «снятие резерва», «заблокированная сумма списывается» → «резерв сжигается».

Desktop

Не требует правок — единственное место (OnSiteDecisionDialog.vue) использует только текстовый комментарий с w.mkt.member.available, который семантически корректен после миграции (возврат через o.mkt.return восстанавливает именно .available членского, не резерв).

Что НЕ требует ledger2::migrate-свёртки

marketplace2 ещё не на проде — на prod-блокчейне нет живых данных с w.mkt.member.blocked > 0. Свёртка не нужна (подтверждено).

Что НЕ входит в scope (отдельные задачи)

  1. TS-сторона cooptypes Эпик 11 Story 11.1cooptypes/ledger2/operations.ts содержит только 2 legacy marketplace операции (o.mkt.supply/o.mkt.recv) вместо 13 новых. Это известный блокер Эпика 4. 4 теста в marketplace-ledger2-invariants.spec.ts + весь marketplace-process-trace-coverage.spec.ts падают из-за этого pre-existing baseline.
  2. Wallet/withdraw flow — dev уже мигрировал (w.wal.wpend); придёт следующим merge dev → marketplace2.
  3. Удаление BLOCK/UNBLOCK/BURN_BLOCKED из enum WalletOp — это работа dev (см. dev-коммит 0969505a71c); enum чистится одновременно при merge dev → marketplace2 после этого PR.

Проверки

  • tsc --noEmit (controller): 0 ошибок
  • jest tests/unit/marketplace/marketplace-member-wallet-resolver.test.ts: 4/4 passed
  • jest src/application/ledger2/invariants/marketplace-ledger2-invariants.spec.ts: 32/36 passed (4 fail — pre-existing baseline, см. п.1 выше; те же тесты падали до этого PR)
  • vue-tsc --noEmit --skipLibCheck (desktop): 0 новых ошибок (2 pre-existing q-tab :name="null")
  • CDT compile C++ контрактов не выполнен — CDT не установлен локально; контракт пересоберётся в CI/при следующей сборке.

Коммиты

fd458a4e35c docs(marketplace): update p.mkt.supply.standard.yaml — reserve wallet model
1f02f8d7cf4 refactor(marketplace): rewrite I5/I6 invariants for w.mkt.order reserve model
fb94c7ff11d feat(marketplace): expose w.mkt.order as 4th wallet in marketplaceMemberWallet DTO + regen
07584c8e787 docs(marketplace-cpp): update p.mkt.supply action comments for reserve-wallet flow
c4a42f72432 feat(ledger2): add w.mkt.order reserve wallet, replace marketplace BLOCK/UNBLOCK with TRANSFER

Жду ревью.

## Цель Переводит marketplace2-сторону ledger2 на ту же модель, что dev уже сделал для wallet/withdraw (`w.wal.wpend`): убрать механику `BLOCK`/`UNBLOCK`/`BURN_BLOCKED` на одном кошельке, ввести отдельный USER_SHARED-кошелёк-резерв `w.mkt.order` под Order, переписать 3 marketplace-операции на `TRANSFER`/`BURN`. Подготовка к merge `dev` → `marketplace2`. Архитектурное решение согласовано с тобой 2026-05-28 — это marketplace-аналог dev-коммита `feat(ledger2): убрать механику blocked из L3-кошельков`. ## Что меняется ### C++ ledger2 - `wallets.hpp`: новый USER_SHARED-кошелёк `MARKETPLACE_ORDER_LOCK = "w.mkt.order"_n`; реестр 15→16; mapping 7→8 (program_id=2 Marketplace). - `operations.hpp`: 3 операции marketplace переписаны: - `BLOCK_FOR_ORDER` (o.mkt.block): `BLOCK` → `TRANSFER w.mkt.member → w.mkt.order` - `UNBLOCK_ON_CANCEL` (o.mkt.unblk): `UNBLOCK` → `TRANSFER w.mkt.order → w.mkt.member` - `CONSUME_BY_MEMBER` (o.mkt.consum): `BURN_BLOCKED` → `BURN` на `w.mkt.order` **Operation_id'ы сохранены** (`o.mkt.block`/`o.mkt.unblk`/`o.mkt.consum`) — изменилась только реализация в `OPERATION_REGISTRY`, не имена; внешние op_code в blockchain_actions читаются без сдвига смысла. **Enum `WalletOp` НЕ модифицируется** — значения `BLOCK`/`UNBLOCK`/`BURN_BLOCKED` остаются в enum для legacy `wallet/withdraw` flow, который мигрирует следующим merge `dev` → `marketplace2`. ### C++ marketplace .cpp (5 файлов) Комментарии в `p.mkt.supply/{createorder,cancelorder,declineorder,expireorder,signiss2}.cpp` обновлены под reserve-flow. Сами вызовы `Ledger2::apply(coopname, op, ...)` идентичны — сигнатура не меняется. ### Controller / GraphQL DTO - `MarketplaceMemberWallet.wallets`: теперь 4 кошелька (был 3) — добавлен `w.mkt.order` с label «Резерв \| Стол Заказов». - Поле `.blocked` остаётся в DTO (для wallet/withdraw + legacy), но для marketplace-кошельков всегда `0` — резерв выражается через `.available` отдельного кошелька. - Description'ы @Field обновлены, без story-ссылок (бизнес-словарь). ### Cooptypes / SDK / Zeus Regen: - `cooptypes/ledger2/wallets.generated.ts`: wallets=16, mapping=8 (из C++). - `controller/schema.gql`, `controller/zeus/index.ts`, `sdk/zeus/index.ts`: только description-only diff, никаких breaking changes в типах GraphQL/Zeus. ### Invariants - `I5` (`BlockedConsistency` → `ReserveConsistency`): сверяет `Σ TRANSFER(member→order) − Σ TRANSFER(order→member) − Σ BURN(order) = balance(w.mkt.order)`. - `I6` (`NoOrphanedBlocks` → `NoOrphanedReserves`): проверка парности по process_hash (consum без block, unblk без block, block+unblk+consum = двойное закрытие) — логика та же, op_code'ы те же. - Фикстуры в spec.ts обновлены. ### YAML standards - `p.mkt.supply.standard.yaml`: обновлены описания операций block/unblk/consum под reserve-модель. Бизнес-словарь: «блокировка» → «резерв», «разблокировка» → «снятие резерва», «заблокированная сумма списывается» → «резерв сжигается». ### Desktop Не требует правок — единственное место (`OnSiteDecisionDialog.vue`) использует только текстовый комментарий с `w.mkt.member.available`, который семантически корректен после миграции (возврат через `o.mkt.return` восстанавливает именно `.available` членского, не резерв). ## Что НЕ требует ledger2::migrate-свёртки marketplace2 ещё не на проде — на prod-блокчейне нет живых данных с `w.mkt.member.blocked > 0`. Свёртка не нужна (подтверждено). ## Что НЕ входит в scope (отдельные задачи) 1. **TS-сторона cooptypes Эпик 11 Story 11.1** — `cooptypes/ledger2/operations.ts` содержит только 2 legacy marketplace операции (`o.mkt.supply`/`o.mkt.recv`) вместо 13 новых. Это известный блокер Эпика 4. 4 теста в `marketplace-ledger2-invariants.spec.ts` + весь `marketplace-process-trace-coverage.spec.ts` падают из-за этого pre-existing baseline. 2. **Wallet/withdraw flow** — dev уже мигрировал (`w.wal.wpend`); придёт следующим merge dev → marketplace2. 3. **Удаление `BLOCK`/`UNBLOCK`/`BURN_BLOCKED` из enum WalletOp** — это работа dev (см. dev-коммит `0969505a71c`); enum чистится одновременно при merge dev → marketplace2 после этого PR. ## Проверки - `tsc --noEmit` (controller): **0 ошибок** - `jest tests/unit/marketplace/marketplace-member-wallet-resolver.test.ts`: **4/4 passed** - `jest src/application/ledger2/invariants/marketplace-ledger2-invariants.spec.ts`: **32/36 passed** (4 fail — pre-existing baseline, см. п.1 выше; те же тесты падали до этого PR) - `vue-tsc --noEmit --skipLibCheck` (desktop): **0 новых ошибок** (2 pre-existing q-tab `:name="null"`) - CDT compile C++ контрактов **не выполнен** — CDT не установлен локально; контракт пересоберётся в CI/при следующей сборке. ## Коммиты ``` fd458a4e35c docs(marketplace): update p.mkt.supply.standard.yaml — reserve wallet model 1f02f8d7cf4 refactor(marketplace): rewrite I5/I6 invariants for w.mkt.order reserve model fb94c7ff11d feat(marketplace): expose w.mkt.order as 4th wallet in marketplaceMemberWallet DTO + regen 07584c8e787 docs(marketplace-cpp): update p.mkt.supply action comments for reserve-wallet flow c4a42f72432 feat(ledger2): add w.mkt.order reserve wallet, replace marketplace BLOCK/UNBLOCK with TRANSFER ``` Жду ревью.
claude added 5 commits 2026-05-28 07:09:41 +00:00
Вводит USER_SHARED-кошелёк w.mkt.order (MARKETPLACE_ORDER_LOCK) — резерв
средств пайщика под конкретный Order. Заменяет механику BLOCK/UNBLOCK
на отдельных balance-полях кошелька w.mkt.member на пару кошельков:

- o.mkt.block   (BLOCK_FOR_ORDER):   TRANSFER w.mkt.member → w.mkt.order
- o.mkt.unblk   (UNBLOCK_ON_CANCEL): TRANSFER w.mkt.order → w.mkt.member
- o.mkt.consum  (CONSUME_BY_MEMBER): BURN с w.mkt.order  (вместо BURN_BLOCKED w.mkt.member)

Operation_id'ы (o.mkt.block / o.mkt.unblk / o.mkt.consum) сохранены —
изменилась только реализация в OPERATION_REGISTRY, не имена; внешние
op_code в blockchain_actions читаются без сдвига смысла.

Параметр Ledger2::apply(coopname, op, amount, ...) не меняется — сигнатура
вызовов в .cpp идентична, отдельная правка реализаций следующим коммитом
ограничивается обновлением doc-комментариев.

LEDGER2_WALLET_REGISTRY: 15 → 16 (USER_SHARED 6 → 7).
LEDGER2_USER_SHARED_PROGRAM_MAPPING: 7 → 8 (w.mkt.order → program_id=2).

Это marketplace-сторона миграции, повторяющая подход dev для wallet/withdraw
(WITHDRAW_PENDING кошелёк-резерв; ADR — общий принцип «убрать blocked,
заменить на пары TRANSFER в выделенные кошельки»). Enum WalletOp в этом PR
НЕ модифицируется — значения BLOCK/UNBLOCK/BURN_BLOCKED остаются для legacy
wallet/withdraw flow, который мигрирует следующим merge dev → marketplace2.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Семантика in-code не меняется: Ledger2::apply(coopname, op, amount, ...)
вызывается с теми же operation_id (o.mkt.block / o.mkt.unblk / o.mkt.consum),
изменения только в doc-блоках и inline-комментариях:

- createorder.cpp: "BLOCK на w.mkt.member" → "TRANSFER w.mkt.member → w.mkt.order"
- cancelorder.cpp: "сумма остаётся на .available" → уточнено, что снятие резерва
- declineorder.cpp: "резерв возвращается заказчику" → уточнено через TRANSFER
- expireorder.cpp: тот же flow
- signiss2.cpp: actual<ordered → снятие части резерва (UNBLOCK_ON_CANCEL),
                actual>ordered → доп. резерв (BLOCK_FOR_ORDER),
                CONSUME_BY_MEMBER теперь BURN с w.mkt.order

Поведенческих изменений в C++ нет — вся семантика выражена через изменения
в OPERATION_REGISTRY (предыдущий коммит). Этот коммит — только документация
точки вызовов, чтоб не путать читателя.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
DTO `MarketplaceMemberWallet.wallets` теперь возвращает массив из 4 USER_SHARED-кошельков
пайщика для Стола заказов:

  1. w.wal.share  — Паевой   | Цифровой Кошелёк
  2. w.wal.member — Членский | Цифровой Кошелёк
  3. w.mkt.member — Членский | Стол Заказов (свободные средства программы)
  4. w.mkt.order  — Резерв   | Стол Заказов (под конкретный Order; новый, 2026-05-28)

Поле `blocked` остаётся в DTO для wallet/withdraw flow и legacy данных, но для
marketplace-кошельков (w.mkt.member, w.mkt.order) всегда `0` после миграции
с BLOCK/UNBLOCK на пары TRANSFER — резерв выражается через `.available`
отдельного кошелька w.mkt.order. Обновлены description'ы @Field и @Query на
бизнес-словаре (без story-ссылок).

Regen:
- cooptypes/ledger2/wallets.generated.ts: wallets=16, mapping=8 (из C++).
- controller/schema.gql, controller/zeus/index.ts, sdk/zeus/index.ts:
  только description-only diff в MarketplaceMemberWallet/Entry, никаких
  breaking changes в типах GraphQL/zeus.

Unit-тесты marketplace-member-wallet-resolver.test.ts обновлены под 4-й
кошелёк (4/4 passed, runInBand).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Инвариант I5 переименован: `BlockedConsistency` → `ReserveConsistency`.
Считает резерв через пары TRANSFER + BURN в новой модели:

  Σ TRANSFER(w.mkt.member → w.mkt.order)    // o.mkt.block  — резерв входит
  − Σ TRANSFER(w.mkt.order → w.mkt.member)  // o.mkt.unblk  — резерв снят
  − Σ BURN(w.mkt.order)                     // o.mkt.consum — резерв сожжён
    = Σ balance(w.mkt.order у пайщиков)

Раньше I5 сверялся с suma blocked у w.mkt.member-кошельков (поле `.blocked`).
Поле `.blocked` для marketplace-кошельков теперь deprecated (всегда 0) —
резерв выражается через `.available` отдельного кошелька w.mkt.order.

Инвариант I6 переименован: `NoOrphanedBlocks` → `NoOrphanedReserves`.
Логика парности по process_hash (consum без block, unblk без block,
block+unblk+consum = двойное закрытие) не меняется — op_code'ы
o.mkt.block/unblk/consum сохранены.

Фикстуры в spec.ts переписаны под новую модель: walletFrom/walletTo
для block теперь w.mkt.member → w.mkt.order, для unblk наоборот,
для consum — walletFrom=w.mkt.order (BURN).

ВНИМАНИЕ — pre-existing baseline:
`marketplace-process-trace-coverage.spec.ts` и 4 теста в `*-invariants.spec.ts`,
которые опираются на `MARKETPLACE_OPERATION_CODES` (фильтр через
`Ledger2.LEDGER2_OPERATION_REGISTRY.contract === 'marketplace'`), падают
с pre-existing проблемой: `cooptypes/ledger2/operations.ts` содержит только
2 legacy marketplace-операции (`o.mkt.supply`/`o.mkt.recv`) вместо 13 новых.
Это известный блокер Эпика 11 Story 11.1 (синхронизация TS-стороны cooptypes
с C++ operations.hpp) — выходит за scope этого PR.

Проверено: 32/36 тестов в marketplace-ledger2-invariants.spec.ts passed
(те же 4 теста были сломаны на pre-state baseline).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Обновлены описания операций o.mkt.block / o.mkt.unblk / o.mkt.consum
в стандарте процесса под reserve-wallet модель (введён 2026-05-28):

- Заголовок раздела ledger2 (комментарий перед секциями): добавлен новый
  USER_SHARED-кошелёк w.mkt.order, обновлено описание w.mkt.member.
- o.mkt.block:  BLOCK → TRANSFER w.mkt.member → w.mkt.order; L3 теперь
  пара движений на двух кошельках вместо split available/blocked на одном.
- o.mkt.unblk:  UNBLOCK → TRANSFER w.mkt.order → w.mkt.member; зеркало 12c.
- o.mkt.consum: REVOKE → BURN с w.mkt.order; резерв сжигается без получателя
  при подписании АПП выдачи (signiss2).
- Список ledger2-кошельков в Секции 6 — упомянут w.mkt.order.

Бизнес-словарь: «блокировка» → «резерв», «разблокировка» → «снятие резерва»,
«заблокированная сумма списывается» → «резерв сжигается». Сами op_code
(o.mkt.block / o.mkt.unblk / o.mkt.consum) и amount_ref / triggered_by /
human_name (последний обновлён для consistency) — сохранены, чтобы
бухгалтер мог пройти по тем же шагам процесса в журнале операций.

p.mkt.return.standard.yaml и p.mkt.wroff.standard.yaml не требуют правок —
эти flow используют ISSUE/NONE, без BLOCK/UNBLOCK/REVOKE.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
ant requested changes 2026-05-28 07:20:33 +00:00
@@ -92,2 +92,2 @@
inline constexpr eosio::name BLOCK_FOR_ORDER = "o.mkt.block"_n; ///< Блокировка членского взноса заказчика под конкретный Order (BLOCK на MARKETPLACE_MEMBER, без Dr/Cr).
inline constexpr eosio::name UNBLOCK_ON_CANCEL = "o.mkt.unblk"_n; ///< Разблокировка членского взноса при отмене Order'а (UNBLOCK на MARKETPLACE_MEMBER, без Dr/Cr). Сумма остаётся на .available и может быть потрачена на следующий заказ в программе.
inline constexpr eosio::name BLOCK_FOR_ORDER = "o.mkt.block"_n; ///< Резервирование членского взноса заказчика под конкретный Order (TRANSFER MARKETPLACE_MEMBER → MARKETPLACE_ORDER_LOCK, без Dr/Cr — оба кошелька на 86). Имя o.mkt.block сохранено для совместимости op_code в blockchain_actions; семантика — резерв через отдельный кошелёк, не BLOCK.
inline constexpr eosio::name UNBLOCK_ON_CANCEL = "o.mkt.unblk"_n; ///< Снятие резерва при отмене Order'а (TRANSFER MARKETPLACE_ORDER_LOCK MARKETPLACE_MEMBER, без Dr/Cr). Сумма возвращается на .available членского и может быть потрачена на следующий заказ в программе. Имя o.mkt.unblk сохранено для совместимости op_code.
Owner

Надо чуть-чуть упростить всю эту механику. Во-первых, по самому процессу, пользуясь случаем, да, и в рамках этого пиара надо будет стандарт поправить. То есть первое, мы не используем 91-й счет для транзита, мы используем сразу 86-й. То есть без 91-го проводка проводится, то есть упрощается процесс. Это что касается поставщика, когда носит имущество. А, нет, когда заказчик получает имущество. Ну, короче, без. 91-го там идет. Где он там есть, он без него. И без транзита, без этого, который там. Короче, попроще. Второй момент. Значит, здесь у нас, когда идет блокировказ, она идет сразу же на кошелек Marketplace. Вот этот вот блог, который ты написал. Сразу же туда. То есть, по сути, не так, как в стандарте написано. В стандарте у нас там вообще три операции. Сперва на кошелек главных членских, потом главного Marketplace, а потом уже дальше блокируем. Сейчас мы не блокируем, и мы не переводим сквозь главный членский, мы сразу же отправляем на блок. Затем, в случае отмены блока, мы возвращаем обратно на главный членский. Вот в этом случае мы идем на w.wal.member. То есть, обратно. Только на членский. Вот таким образом мы все это упрощаем. Поэтому от BLOCK ON CANCEL, ну, здесь не надо вообще этого. Она возвращается, сумма возвращается на AVAILABLE кошелька w.wal.member, то есть, главный членский. Вот туда. А когда поступает, она идет не сквозь него, а сразу же на market block. Надо внести все эти изменения и в стандарты, и в код.

Надо чуть-чуть упростить всю эту механику. Во-первых, по самому процессу, пользуясь случаем, да, и в рамках этого пиара надо будет стандарт поправить. То есть первое, мы не используем 91-й счет для транзита, мы используем сразу 86-й. То есть без 91-го проводка проводится, то есть упрощается процесс. Это что касается поставщика, когда носит имущество. А, нет, когда заказчик получает имущество. Ну, короче, без. 91-го там идет. Где он там есть, он без него. И без транзита, без этого, который там. Короче, попроще. Второй момент. Значит, здесь у нас, когда идет блокировказ, она идет сразу же на кошелек Marketplace. Вот этот вот блог, который ты написал. Сразу же туда. То есть, по сути, не так, как в стандарте написано. В стандарте у нас там вообще три операции. Сперва на кошелек главных членских, потом главного Marketplace, а потом уже дальше блокируем. Сейчас мы не блокируем, и мы не переводим сквозь главный членский, мы сразу же отправляем на блок. Затем, в случае отмены блока, мы возвращаем обратно на главный членский. Вот в этом случае мы идем на w.wal.member. То есть, обратно. Только на членский. Вот таким образом мы все это упрощаем. Поэтому от BLOCK ON CANCEL, ну, здесь не надо вообще этого. Она возвращается, сумма возвращается на AVAILABLE кошелька w.wal.member, то есть, главный членский. Вот туда. А когда поступает, она идет не сквозь него, а сразу же на market block. Надо внести все эти изменения и в стандарты, и в код.
@@ -25,6 +25,7 @@ export const LEDGER2_WALLET_REGISTRY: readonly WalletMeta[] = [
{ name: "w.cap.blago", human_name: "ЦПП «Благорост» — единый кошелёк программы у пайщика", kind: "USER_SHARED" },
{ name: "w.cap.preimp", human_name: "Первичный учёт РИД-взносов до перехода на электронный учёт", kind: "USER_SHARED" },
{ name: "w.mkt.member", human_name: "ЦПП «Стол Заказов» — программный членский у пайщика", kind: "USER_SHARED" },
{ name: "w.mkt.order", human_name: "ЦПП «Стол Заказов» — резерв под заказ у пайщика", kind: "USER_SHARED" },
Owner

Не пойму, у тебя здесь w.mkt.order написано!!! А НА КОНТРАКТАХ w.mkt.block. КАК ТАК?"?!?!??! Этот файл АВТО_ГЕНЕРИРУЕМЫЙ! ВОТ И ГЕНЕРИРУЙ ЕГО! Меняй на w.mkt.order в файлах везде чтоб было как ясказал сразу. Не w.mkt.block а w.mkt.order - везде.

Не пойму, у тебя здесь w.mkt.order написано!!! А НА КОНТРАКТАХ w.mkt.block. КАК ТАК?"?!?!??! Этот файл АВТО_ГЕНЕРИРУЕМЫЙ! ВОТ И ГЕНЕРИРУЙ ЕГО! Меняй на w.mkt.order в файлах везде чтоб было как ясказал сразу. Не w.mkt.block а w.mkt.order - везде.
claude added 1 commit 2026-05-28 08:43:33 +00:00
Переделка PR #41 по двум замечаниям ревью @ant 2026-05-28:

(1) Согласованность имён operation_id с кошельком w.mkt.order:
  o.mkt.block / BLOCK_FOR_ORDER   → o.mkt.lock   / LOCK_ORDER
  o.mkt.unblk / UNBLOCK_ON_CANCEL → o.mkt.unlock / UNLOCK_ORDER
  CONSUME_BY_MEMBER оставлено (consume — это про BURN, не про lock).

(2) Упрощение архитектуры — убрать каскады и счёт 91:
  - Удалён кошелёк w.mkt.member (MARKETPLACE_MEMBER) — промежуточного
    программного членского нет; источник и приёмник средств — w.wal.member.
  - Удалены операции o.mkt.assign / o.mkt.recall (каскад createorder
    схлопнут с 3 шагов до 2: conv condi + lock).
  - Удалены парные *2-операции o.mkt.consum2 / o.mkt.return2 / o.mkt.wroff2 —
    счёт 91 (транзит) в marketplace больше не используется.
  - Все 3 «выбытие/возврат имущества» операции — одним вызовом через 86:
    o.mkt.consum: BURN w.mkt.order, Дт 86 / Кт 10 (было: Дт 91 / Кт 10 + 86 / 91)
    o.mkt.return: ISSUE → w.wal.member, Дт 10 / Кт 86 (было: Дт 91 / Кт 86 + 10 / 91)
    o.mkt.wroff:  NONE, Дт 86 / Кт 10 (было: Дт 91 / Кт 10 + 86 / 91)
  - Возврат при cancel/decline/expire — на w.wal.member (универсальный
    членский), а не на бывший w.mkt.member.

Итого marketplace ledger2-операций: было 13 → стало 8.
LEDGER2_WALLET_REGISTRY: 16 → 15. USER_SHARED program-mapping: 8 → 7.

Затронуто:
- C++ ledger2: wallets.hpp, operations.hpp
- C++ marketplace .cpp: createorder, cancelorder, declineorder, expireorder,
  signiss2 (включая special cases недо/переплаты), accretrn, execwroff
- TS controller: marketplace-member-wallet.{dto,resolver,test}.ts — 3 кошелька
  в выдаче вместо 4 (w.mkt.member выпал)
- TS invariants: I5/I6 переписаны под o.mkt.lock/unlock/consum, I4 для
  marketplace тривиально пройден (91 не задевается); 27/29 тестов passed,
  2 fail остаются pre-existing baseline (cooptypes/operations.ts Story 11.1)
- Cooptypes: wallets.generated.ts regen (wallets=15, mapping=7)
- Schema/zeus/sdk: regen, только description-only diff
- YAML p.mkt.supply.standard.yaml: обновлён header под reserve-flow + 6 ops

NOT в scope этого фикса (TODO follow-up):
- Полный rewrite секций операций в p.mkt.{supply,return,wroff}.standard.yaml
  (детальные блоки операций remain с упоминаниями o.mkt.block/unblk/w.mkt.member —
  бизнес-документация для бухгалтера, не влияет на компиляцию контракта)
- Memo-функции в marketplace.hpp для удалённых операций (assign_memo,
  consum_transit_close_memo и т.д.) — мёртвый код, в C++ unused functions OK

Проверки (tsc запрещён локально — см. memory mono-no-local-tsc):
- jest marketplace-member-wallet-resolver: 4/4 passed
- jest marketplace-ledger2-invariants: 27/29 passed (2 pre-existing baseline)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
claude added 1 commit 2026-05-28 10:02:36 +00:00
build-all.sh / build.sh хардкодят dicoop/blockchain:latest (amd64-only) —
на ARM падают «exec format error». Multi-arch образ dicoop/blockchain_v5.1.1:dev
имеет нативный arm64 manifest; команда для marketplace в одну строку
зафиксирована в новой секции «Сборка контрактов на ARM-машине».

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
ant requested changes 2026-05-28 10:10:09 +00:00
@@ -17,4 +17,4 @@
# кошелёк пайщика. Сюда стекаются возвраты из всех
# программ (Стол заказов / Благорост / и т.п.); пайщик
# тратит как «баллы» — может направить на следующий заказ
# в любой программе либо вывести обратно на паевой через
Owner

НЕ МОЖЕТ ОН ВЫВЕСТИ ОБРАТНо на ПАеВОЙ!!!!

НЕ МОЖЕТ ОН ВЫВЕСТИ ОБРАТНо на ПАеВОЙ!!!!
@@ -7,1 +5,3 @@
* - Ledger2::apply(o.mkt.wroff2, item.amount, , hash=proposal.hash) Дт 86 / Кт 91.
* Per-item операция:
* - Ledger2::apply(o.mkt.wroff, item.amount, , hash=proposal.hash) Дт 86 / Кт 10
* (списание со склада через целевое финансирование, одной операцией без транзита 91).
Owner

да убери ты отсюда и от всех мест где ты вот пишешь без транзита 91 просто забудь это похуй всем какой-то он транзит 91 был раньше если его сейчас нет вот мне тоже он мне нужен и никого не путай убери просто без транзита 91 и прекрасно будет

да убери ты отсюда и от всех мест где ты вот пишешь без транзита 91 просто забудь это похуй всем какой-то он транзит 91 был раньше если его сейчас нет вот мне тоже он мне нужен и никого не путай убери просто без транзита 91 и прекрасно будет
claude added 1 commit 2026-05-28 10:23:38 +00:00
Замечания ревью @ant Review 31:

(1) o.mkt.lock теперь идёт **прямо** w.wal.share → w.mkt.order
    с проводкой Дт 80 / Кт 86 — без промежуточного w.wal.member и без
    conditional o.wal.conv. Один шаг ledger2 в createorder.
    - createorder: убран каскад conv+lock; lock сам делает работу
    - signiss2 actual>ordered: убран conv, остался только lock(diff)
    - Достаточность средств: только w.wal.share.available

(2) Убраны из комментариев и YAML фразы «без транзита 91» / «через транзит 91»
    как нерелевантный шум (никого не интересует прошлое):
    - cancelorder.cpp, accretrn.cpp, execwroff.cpp
    - processes.hpp: пересчитан состав операций под новую схему
    - controller TS: marketplace-return-claim.{types,service}.ts,
      marketplace-canonical-blockchain.port.ts, marketplace-order.types.ts,
      marketplace-application.module.ts

(3) Убраны упоминания «может быть выведено пайщиком на паевой» —
    с w.wal.member на w.wal.share вывод НЕ предусмотрен в этой схеме.

Инварианты I5 переписаны под новый источник lock (w.wal.share вместо
w.wal.member). spec.ts фикстуры обновлены: happyPathOrderFlow теперь
4 операции (lock + purch + payout + consum) без conv. 31/33 теста зелёные,
2 fail — pre-existing baseline (Story 11.1 cooptypes).

C++ контракт пересобран через ARM-native CDT (dicoop/blockchain_v5.1.1:dev) —
0 errors, marketplace.wasm + .abi созданы успешно.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
claude added 1 commit 2026-05-28 11:54:29 +00:00
YAML стандарты переписаны под текущую модель (5/1/1 операций), удалены
блоки удалённых операций и упоминания старой схемы:

p.mkt.supply.standard.yaml — 5 операций:
  o.mkt.lock   — TRANSFER w.wal.share → w.mkt.order, Дт 80 / Кт 86
  o.mkt.unlock — TRANSFER w.mkt.order → w.wal.member, без проводки
  o.mkt.purch  — NONE, Дт 10 / Кт 86
  o.mkt.payout — ISSUE → w.mkt.payout, Дт 86 / Кт 51
  o.mkt.consum — BURN w.mkt.order, Дт 86 / Кт 10
  Удалены: o.wal.conv, o.mkt.assign, o.mkt.recall, o.mkt.consum2

p.mkt.return.standard.yaml — 1 операция:
  o.mkt.return — ISSUE → w.wal.member, Дт 10 / Кт 86
  Удалена: o.mkt.return2

p.mkt.wroff.standard.yaml — 1 операция:
  o.mkt.wroff — NONE, Дт 86 / Кт 10
  Удалена: o.mkt.wroff2

Полностью удалены deprecated поля из TS controller (не оставлены даже
как deprecated пометки):
- MarketplaceOrderCreateTxSnapshotDTO.did_convert / did_assign
- MarketplaceOrderCreateTxSnapshot.did_convert / did_assign
- Поле blocked_amount переименовано в locked_amount (везде: DTO, entity,
  service, spec, infrastructure entity)

Зачистка doc-комментариев от удалённых операций в C++ + TS:
- processes.hpp, lib/core/marketplace/marketplace.hpp,
  marketplace/marketplace.hpp, table_marketplace_writeoff_proposals.hpp,
  wallets.hpp (description w.mkt.order под новый flow)
- marketplace-canonical-blockchain.port.ts, marketplace-order-cancel.service.ts,
  marketplace-issuance.service.ts, marketplace-offer.entity.ts,
  marketplace-order.entity.ts, marketplace-return-claim.types.ts
- marketplace-ledger2-invariants.ts: I2 формула, I3 формула, I4 пояснение
- marketplace-process-trace-coverage.spec.ts: EXPECTED_MARKETPLACE_OP_CODES
  и EXPECTED_REGISTRY переписаны под 7 операций (5 supply + 1 return + 1 wroff)
  с актуальными wallet_op / debit / credit

Bulk переименование o.mkt.unblk → o.mkt.unlock, o.mkt.block → o.mkt.lock
в комментариях C++ контракта и TS controller.

Проверки:
- C++ contract пересобран (dicoop/blockchain_v5.1.1:dev arm64): 0 errors,
  marketplace.wasm + .abi созданы
- jest invariants + resolver: 31/33 passed (2 fail — те же pre-existing
  baseline Story 11.1 cooptypes/operations.ts)
- cooptypes regen + schema/zeus/sdk cascade прошли успешно

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
ant merged commit 4f70d8eac8 into marketplace2 2026-05-28 11:56:04 +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#41