[Эпик 9] Устойчивость COOPOS RPC: failover-пул + finalized-only + M-of-N консенсус (9.4/9.6/9.7) #138

Closed
claude wants to merge 1 commits from feat/coopid-epic-9 into feat/coopid-epic-6
Owner

Серверный блок устойчивости CoopID (Stories 9.4/9.6/9.7), stacked на feat/coopid-epic-6.

9.4 RpcPool: health-aware sticky-primary + failover + backoff(1/2/4/8с) + health-check(get_info/10с); BLOCKCHAIN_RPC_LIST реально используется; прикладные 4xx не вызывают failover. Write-path/TaPoS — на текущем здоровом узле.
9.6 finalized-only чтения ключа в verify-хэндшейке: live-снимку доверяем только если смена active-permission ≤ границы LIB, иначе degraded-сверка против chain_manifests_cache (KeyNotFinalized). Только auth-v2, не capital/chairman.
9.7 M-of-N консенсус на записи кэша ключей: ≥2 RPC согласны → пишем; расходятся → инцидент coopid.chain.divergent_rpc + кэш замораживаем (логин не валим — уже проверен против живого финализированного узла).

Отклонения от буквы AC (обоснования в spec-epic9-resilience.md): round-robin→sticky+failover (read-after-write); консенсус только на записи кэша; расхождение не валит логин; KeyNotFinalized теперь триггерит на login (меняет отложенное решение 4.5, авторизовано 9.6); single-node — консенсус no-op.

Легаси-токены НЕ затронуты (меняется только чтение ключей цепи в verify). Новых npm-зависимостей нет; GraphQL-схема не менялась (codegen/SDK не нужны).

Тесты: 55/55 unit (rpc-pool, chain-finality, verify-timestamp). ESLint 0. Полный tsc — на CI (локально OOM>1G).

Серверный блок устойчивости CoopID (Stories 9.4/9.6/9.7), stacked на feat/coopid-epic-6. **9.4** RpcPool: health-aware sticky-primary + failover + backoff(1/2/4/8с) + health-check(get_info/10с); BLOCKCHAIN_RPC_LIST реально используется; прикладные 4xx не вызывают failover. Write-path/TaPoS — на текущем здоровом узле. **9.6** finalized-only чтения ключа в verify-хэндшейке: live-снимку доверяем только если смена active-permission ≤ границы LIB, иначе degraded-сверка против chain_manifests_cache (KeyNotFinalized). Только auth-v2, не capital/chairman. **9.7** M-of-N консенсус на записи кэша ключей: ≥2 RPC согласны → пишем; расходятся → инцидент coopid.chain.divergent_rpc + кэш замораживаем (логин не валим — уже проверен против живого финализированного узла). Отклонения от буквы AC (обоснования в spec-epic9-resilience.md): round-robin→sticky+failover (read-after-write); консенсус только на записи кэша; расхождение не валит логин; KeyNotFinalized теперь триггерит на login (меняет отложенное решение 4.5, авторизовано 9.6); single-node — консенсус no-op. Легаси-токены НЕ затронуты (меняется только чтение ключей цепи в verify). Новых npm-зависимостей нет; GraphQL-схема не менялась (codegen/SDK не нужны). Тесты: 55/55 unit (rpc-pool, chain-finality, verify-timestamp). ESLint 0. Полный tsc — на CI (локально OOM>1G).
claude added 1 commit 2026-06-14 10:33:54 +00:00
ant added this to the CoopID project 2026-06-15 13:17:41 +00:00
Author
Owner

Схлопнут в единый PR #148 (coopID → dev). Ветка сохранена как резерв, ничего не потеряно.

Схлопнут в единый PR #148 (coopID → dev). Ветка сохранена как резерв, ничего не потеряно.
claude closed this pull request 2026-06-15 13:26:47 +00:00

Pull request closed

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#138