Добавить тестовые каналы и Arweave-синхронизацию

This commit is contained in:
AidarKC
2026-09-23 11:14:02 +03:00
parent 8b12760dde
commit ef707ec217
80 changed files with 15452 additions and 26 deletions
+57
View File
@@ -0,0 +1,57 @@
# 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=<BASE58_BLOCKCHAIN_PUBLIC_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=<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/`.
## Проверка данных (v3.3)
Нижняя строка показывает краткий итог доступных проверок. Нажатие на неё или `⋮ → Проверка данных` открывает отдельный экран:
- локально вычисленный SHA-256 каждого SHiNE Frame;
- `prevHash` общей цепочки, когда предыдущий глобальный блок загружен;
- `prevLineHash` канальной цепочки, когда указанный предыдущий блок загружен;
- наличие DataItem в выборке Arweave owner соответствующего blockchain key;
- разрывы «нет данных» отдельно от доказанных несовпадений;
- честный статус ANS-104 signature: gateway payload/GraphQL не содержит сырой подписи, поэтому она не помечается как локально перепроверенная.
`○ нет данных` не является ошибкой. `⚠` появляется только при фактическом несовпадении доступных хэшей.
@@ -0,0 +1,26 @@
# SHiNE Arweave Viewer v3
Viewer нового per-action Arweave формата SHiNE.
## URL
- `?login=<login>&channel=<channel>` — получает blockchain key через Solana PDA, затем читает Arweave.
- `?key=<base58>&channel=<channel>` — Arweave запускается напрямую; Solana не является блокирующей зависимостью.
- без параметров — стартовая форма (логин или blockchain key + необязательный канал).
## v3
- переключатель `Канал / Блоки`;
- рекурсивные комментарии скрыты до раскрытия, на любой глубине;
- light/dark тема;
- меню `⋮`: кэш, Solana RPC, Arweave gateway;
- выключение кэша удаляет сохранённые данные каналов;
- одна нижняя status bar, по нажатию — подробный журнал;
- GraphQL читает от новых Arweave записей к старым (`HEIGHT_DESC`);
- до 6 параллельных загрузок Frame;
- отображение известных типов и raw-представление любых неизвестных блоков в режиме `Блоки`;
- лайки намеренно не отображаются.
Кэш использует browser localStorage и сериализует BigInt-поля Frame явно. Тема/RPC/gateway являются настройками и не удаляются при отключении кэша.
## V3.1 — streaming reverse loading
Arweave history is now processed page-by-page in `HEIGHT_DESC` order. The first GraphQL page (up to 100 DataItems) is downloaded, parsed and rendered immediately. Older pages are then fetched and merged in the background. The bottom status line shows the currently available block range while history expands toward the beginning. Each completed page is also persisted when cache is enabled.
@@ -0,0 +1,11 @@
# SHiNE Solana Arweave Viewer
Основной рабочий файл:
- `index.html`
Подробное описание работы, параметров и готовых ссылок:
- `КАК_ЭТО_РАБОТАЕТ.md`
Viewer собран как автономный single-file HTML и запускается одним файлом без соседних зависимостей.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long