# SHiNE Arweave Viewer v2 — ANS-104 / Frame v1 Новая версия viewer для формата, где каждый пользовательский блок хранится в Arweave как отдельный ANS-104 DataItem, а `data` DataItem содержит один `SHiNE Frame v1`. Основной файл: `index.html`. ## Быстрый запуск Через логин (ключ берётся из Solana PDA): ```text index.html?login=aidarkc&channel=books ``` Напрямую через blockchain public key, без Solana: ```text index.html?key=&channel=books ``` Дополнительные параметры: ```text &arweaveGateway=https://arweave.net &solanaRpc=https://api.mainnet-beta.solana.com ``` `channel` можно не передавать. Тогда viewer ищет все DataItem пользователя с `App=test5590` и строит список каналов из найденных блоков. ## Что делает viewer 1. Если передан `login`, вычисляет PDA `user_login=` программы `SHiNEPr1APdAgNBteUyBXcNovaHctpSjUu8oH2ZJdN6` и читает `blockchainKey`. 2. Если передан `key`, использует его напрямую и не обращается к Solana. 3. Из Ed25519/Solana public key вычисляет Arweave owner address как `base64url(SHA-256(pubkey32))`. 4. Делает Arweave GraphQL запрос по owner + `App=test5590`; при наличии `channel` добавляет тег `c=`. 5. Загружает payload каждого DataItem через gateway `/`. 6. Разбирает payload как SHiNE Frame v1 (`frameCode=0x0001`, header 56 bytes). 7. Дедуплицирует повторно опубликованные одинаковые пользовательские блоки по SHA-256 Frame v1. 8. Восстанавливает канал/сообщения тем же body parser, который использовал старый viewer. ## Важно При фильтрации по конкретному `channel` viewer получает только блоки с соответствующим тегом `c`. Поэтому он не заявляет полную проверку глобальной `prevHash`-цепочки пользователя: между двумя блоками одного канала могут существовать блоки других каналов. SHA-256 каждого загруженного Frame вычисляется локально. Старый `shine-solana-arweave-viewer/` не изменяется; новая версия лежит отдельно в `shine-solana-arweave-viewer-v2/`. ## Проверка данных (v3.3) Нижняя строка показывает краткий итог доступных проверок. Нажатие на неё или `⋮ → Проверка данных` открывает отдельный экран: - локально вычисленный SHA-256 каждого SHiNE Frame; - `prevHash` общей цепочки, когда предыдущий глобальный блок загружен; - `prevLineHash` канальной цепочки, когда указанный предыдущий блок загружен; - наличие DataItem в выборке Arweave owner соответствующего blockchain key; - разрывы «нет данных» отдельно от доказанных несовпадений; - честный статус ANS-104 signature: gateway payload/GraphQL не содержит сырой подписи, поэтому она не помечается как локально перепроверенная. `○ нет данных` не является ошибкой. `⚠` появляется только при фактическом несовпадении доступных хэшей.