15 Commits

Author SHA1 Message Date
coopops 5319209cb2 fix(block-time): брать on-chain timestamp блока из signed_block header, не wall-clock
CI / Typecheck (pull_request) Has been cancelled
CI / Unit tests (pull_request) Has been cancelled
CI / Integration tests (pull_request) Has been cancelled
CI / Build (pull_request) Has been cancelled
CI / Lint (pull_request) Has been cancelled
block_time во всех событиях равнялся времени запуска парсера (new Date()),
одинаковому для всех блоков — point-in-time запросы («был ли ключ активен в
момент T») были невозможны.

ship-reader: decodeBlocksResult теперь декодит r.block (fetch_block:true уже
запрашивал, но байты игнорились) как block_header и берёт timestamp; ShipBlock
получает блок-уровневое поле blockTime; убран new Date()-сид в BlockStream.
parser2: BlockProcessor берёт block.blockTime — общий для всех событий блока,
включая trace-less genesis; фейковый new Date()-фолбэк убран, пустое время
логируется warn'ом.

ship-reader 0.3.0→0.3.1, parser2 1.1.1→1.1.2.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 11:57:14 +00:00
coopops 39eabb737b fix(native-delta): декодировать нативные строки ABI, а не JSON.parse
CI / Typecheck (pull_request) Has been cancelled
CI / Unit tests (pull_request) Has been cancelled
CI / Integration tests (pull_request) Has been cancelled
CI / Lint (pull_request) Has been cancelled
CI / Build (pull_request) Has been cancelled
deserializeNativeDelta делал JSON.parse(rowRaw), но rowRaw нативных таблиц —
это ABI-сериализованные байты state_history, а не JSON. Каждая native-строка
всегда падала на десериализации, а BlockProcessor глотал ошибку в catch {} →
поток native-delta событий был всегда пустой (permission/account/resource_*).

Фикс:
- WharfkitDeserializer.deserializeNativeDelta декодит через Serializer.decode
  с ship-ABI (type = имя таблицы, это variant *_v0) и распаковывает variant
  [typeName, row] → плоскую строку.
- Deserializer/streamNativeDeltas/ShipClient прокидывают ship-ABI до метода
  (ShipClient.abi getter); адаптер parser2 передаёт this.client.abi.
- BlockProcessor больше не глушит ошибку молча — warn с block_num/table/err.
- Тесты native-rows переписаны под ABI-байты + регресс-гард «JSON теперь бросает».

Проверено на live mono-ai-1: 30/30 native-дельт декодятся (было 0/90).
ship-reader 0.2.0→0.3.0 (breaking: +abi в Deserializer/streamNativeDeltas),
parser2 1.1.0→1.1.1 (багфикс, публичный API не менялся).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 09:06:13 +00:00
claude fce498ce45 feat(events): полный SHiP action_trace в ActionEvent (transaction_id, creator_action_ordinal, receipt.auth_sequence, …) (#1)
CI / Lint (push) Successful in 9m20s
CI / Typecheck (push) Failing after 11m9s
CI / Unit tests (push) Has been skipped
CI / Integration tests (push) Has been skipped
CI / Build (push) Has been skipped
2026-05-26 04:26:33 +00:00
coopops 0c3c3bc002 [549-27][@ant] config: переключить publish обратно на OIDC trusted publishing и синхронизировать URL репозитория coopenomics/parser→coopenomics/parser2 — npm Trusted Publisher теперь настроен на @coopenomics/parser2 через workflow релиза нового имени репо, NPM_TOKEN больше не нужен и sigstore provenance снова включён; bump до 1.0.3 чтобы Lerna опубликовала новую версию и протестировать OIDC-флоу с новой конфигурацией; URL-ы в README/package.json/examples подтянуты под новое имя github-репо parser2 2026-04-23 16:00:32 +00:00
coopops 167c885a70 [549-27][@ant] refactor: вернуть имя parser2 обратно (полный реверт 549-20) — существующий @coopenomics/parser@2026.x в mono-ai живёт в продакшене (dicoop/cooparser всё ещё деплоится), параллельный publish @coopenomics/parser@1.0.x из этого репо создавал коллизию ожиданий у потребителей; раздельные имена parser2/parser устраняют путаницу. Папка packages/parser→parser2, пакет @coopenomics/parser→@coopenomics/parser2, docker image dicoop/parser→dicoop/parser2, Redis prefix parser:→parser2: (ce:parser:, abi, sub, sync, subs, reparse), метрики parser_*→parser2_*, bin parser2. Версия bumpnута до 1.0.2 для нового публичного пакета @coopenomics/parser2 2026-04-23 14:43:22 +00:00
coopops 42393ff1ef [549-21][@ant] config: добавить publishConfig.access=public в пакеты — npm требует явного access для первой публикации scoped пакетов @coopenomics/* особенно при включённом provenance (Lerna падал с "Can't generate provenance for new or private package") 2026-04-22 10:48:54 +00:00
coopops 3bdd240d8a [549-20][@ant] refactor: переименовать parser2→parser, добавить root README и автопубликацию из main — привести репозиторий к релизной форме под публичным именем @coopenomics/parser до первого npm publish; единое имя папки, Redis key prefix (parser2:→parser:), метрик (parser2_*→parser_*) и комментариев устраняет путаницу в CLI, observability и docs; root README описывает монорепу, архитектурную схему, процесс релиза; ci.yml теперь только на push/PR в main и dev, отдельный release.yml на push в main детектит bump версии, публикует пакеты в npm, тегирует, создаёт GitHub Release через changelogithub и пушит Docker-образ в ghcr 2026-04-22 10:40:35 +00:00
coopops e6e986cb86 [549-19][@ant] refactor: отказаться от abieos в пользу wharfkit-only и расширить unit-покрытие до 80%+ — native binding давал только 2-5× на типичной нагрузке с крупными транзакциями, не оправдывая инфраструктурной возни с нативной компиляцией и GLIBCXX-зависимостями; параллельно закрыты пробелы в тестах (ParserClient, XtrimSupervisor, RedisKeys, ShipProtocol, NativeRowStream, ForkDetector edge cases — +86 тестов) чтобы зафиксировать baseline перед будущими оптимизациями wharfkit 2026-04-22 10:16:57 +00:00
coopops 7ab332efaa fix(ship-reader): конвертировать wharfkit Name объекты в строки — trace.account/name приходили как Name (не string), worker.Serializer.decode пытался синтезировать ABI из Name-класса и падал на abiName 2026-04-22 07:11:54 +00:00
coopops 6db2eddd81 fix(ship-reader): конвертировать block_id и chain_id в строки — wharfkit ABI decoder возвращает Checksum256 объект, а downstream код ожидает hex-строку (blockId.slice()) 2026-04-22 06:20:20 +00:00
coopops 6166afa279 fix(ship-reader): брать global_sequence из receipt — в action_trace_v1 top-level global_sequence отсутствует, только в action_receipt 2026-04-22 06:11:23 +00:00
coopops 7579bc4cf4 fix(ship-reader): распаковывать action receipt variant-tuple — SHiP может отдавать receipt как [variantName, data], BigInt(undefined) ломал decodeBlocksResult 2026-04-22 06:01:53 +00:00
coopops fb21b3fd10 fix: убрать @eosrio/node-abieos из optionalDependencies и обновить CI — устранить рассинхрон lockfile и deprecation warning pnpm/action-setup@v3
- удалён @eosrio/node-abieos из ship-reader/package.json: нативный модуль исключался на CI из-за несовместимости платформы, не попадал в lockfile и ломал --frozen-lockfile
- AbieosDeserializer теперь пробует @coopenomics/abieos, затем @eosrio/node-abieos (оба опциональны, устанавливаются вручную)
- @types/node исправлен с ^3.4.0 на ^20.3.0 (корректная версия)
- pnpm/action-setup обновлён с v3 на v4 во всех jobs (Node 20 deprecation)
- pnpm-lock.yaml регенерирован без abieos specifier

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 20:09:21 +00:00
coopops 7d38acebd0 [549-17][@ant] feat: реализован Epic 6 Native-Deltas End-to-End — эмиссия NativeDeltaEvent для всех нативных таблиц SHiP в единый Redis-стрим
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 19:06:44 +00:00
coopops 399496d51c [549-3][@ant] feat: реализован @coopenomics/coopos-ship-reader v0.1.0 — SHiP-транспортная основа для универсального индексера блокчейна
- ShipClient: connect()/handshake()/streamBlocks() AsyncIterable + ack(n)
- WharfkitDeserializer + AbieosDeserializer (optional, Linux, runtime fallback)
- 24 native-table типа с computeLookupKey() (портировано из Hyperion, MIT)
- RPC helpers getChainInfo()/getRawAbi() с retry
- tsup ESM+CJS build, tsconfig strict + noUncheckedIndexedAccess
- MIT LICENSE, NOTICE (EOS Rio + AntelopeIO attribution), LICENSE-THIRD-PARTY
- 26 unit-тестов: 26/26 pass; GitHub Actions CI pipeline
2026-04-21 17:28:45 +00:00