Files
SHiNE-server/shine-solana-arweave-viewer-v2

SHiNE Arweave Viewer v2 — ANS-104 / Frame v1

Новая версия viewer для формата, где каждый пользовательский блок хранится в Arweave как отдельный ANS-104 DataItem, а data DataItem содержит один SHiNE Frame v1.

Основной файл: index.html.

Быстрый запуск

Через логин (ключ берётся из Solana PDA):

index.html?login=aidarkc&channel=books

Напрямую через blockchain public key, без Solana:

index.html?key=<BASE58_BLOCKCHAIN_PUBLIC_KEY>&channel=books

Дополнительные параметры:

&arweaveGateway=https://arweave.net
&solanaRpc=https://api.mainnet-beta.solana.com

channel можно не передавать. Тогда viewer ищет все DataItem пользователя с App=test5590 и строит список каналов из найденных блоков.

Что делает viewer

  1. Если передан login, вычисляет PDA user_login=<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=<channel>.
  5. Загружает payload каждого DataItem через gateway /<DataItemId>.
  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/.