fix(native-delta): декодировать нативные строки ABI вместо JSON.parse #7
Reference in New Issue
Block a user
Delete Branch "dev"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Native-delta события молча терялись: deserializeNativeDelta делал JSON.parse бинарных ABI-байт state_history. Фикс — ABI-decode через ship-ABI (type=имя таблицы, variant *_v0) + распаковка variant + прокидка ship-ABI + warn вместо catch {}. Live mono-ai-1: 30/30 (было 0/90). Unit: 52/52 + 205/205. Релиз: ship-reader 0.3.0, parser2 1.1.1; merge в main → release.yml publish npm.
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>