# 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/`.