diff --git a/VERSION.properties b/VERSION.properties index 49d7b524..b922a061 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.12.20 +client.version=1.12.21 server.version=1.10.8 diff --git a/shine-solana-arweave-viewer-v2/README.md b/shine-solana-arweave-viewer-v2/README.md new file mode 100644 index 00000000..21236b1a --- /dev/null +++ b/shine-solana-arweave-viewer-v2/README.md @@ -0,0 +1,45 @@ +# 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/`. diff --git a/shine-solana-arweave-viewer-v2/history/v1/README.md b/shine-solana-arweave-viewer-v2/history/v1/README.md new file mode 100644 index 00000000..01f0fcab --- /dev/null +++ b/shine-solana-arweave-viewer-v2/history/v1/README.md @@ -0,0 +1,11 @@ +# SHiNE Solana Arweave Viewer + +Основной рабочий файл: + +- `index.html` + +Подробное описание работы, параметров и готовых ссылок: + +- `КАК_ЭТО_РАБОТАЕТ.md` + +Viewer собран как автономный single-file HTML и запускается одним файлом без соседних зависимостей. diff --git a/shine-solana-arweave-viewer-v2/history/v1/index.html b/shine-solana-arweave-viewer-v2/history/v1/index.html new file mode 100644 index 00000000..72484911 --- /dev/null +++ b/shine-solana-arweave-viewer-v2/history/v1/index.html @@ -0,0 +1,2358 @@ + + + + + + SHiNE Solana Arweave Viewer + + + + + +
+
+
SHiNE prototype viewer
+

SHiNE Solana Arweave Viewer

+

+ Статическая страница для прямого чтения shine_users из Solana, + с настройками RPC и gateway, которые можно передавать через URL и сохранять в браузере. +

+
+ +
+
+
+

Настройки доступа

+

Параметры можно сохранить локально и переиспользовать при следующем открытии.

+
+ +
+ + + + + + + + + + + + +
+ Быстрые действия +
+ + + +
+
+ +
+ Проверка доступности +
+ + + + +
+
+
+ +
Готово к проверке и загрузке.
+
+ +
+
+

Текущее состояние

+

Короткая сводка по найденной записи пользователя.

+
+
+
+ Логин + +
+
+ PDA + +
+
+ Версия записи + +
+
+ Блокчейн + +
+
+ Arweave TX + +
+
+ Последний блок + +
+
+
+ +
+
+

Полезные ссылки

+

Ссылки формируются из текущих настроек и содержимого PDA.

+
+ +
+ +
+
+

Содержимое PDA

+

Распарсенные данные записи пользователя из программы shine_users.

+
+
Пока ничего не загружено.
+
+ +
+
+

Содержимое блокчейна

+

Viewer скачивает закреплённый блокчейн пользователя из Arweave и локально собирает каналы без сервера SHiNE.

+
+
Сначала загрузите PDA пользователя, затем нажмите «Показать содержимое».
+ +
+
+
+ + diff --git a/shine-solana-arweave-viewer-v2/history/v1/КАК_ЭТО_РАБОТАЕТ.md b/shine-solana-arweave-viewer-v2/history/v1/КАК_ЭТО_РАБОТАЕТ.md new file mode 100644 index 00000000..0fb69106 --- /dev/null +++ b/shine-solana-arweave-viewer-v2/history/v1/КАК_ЭТО_РАБОТАЕТ.md @@ -0,0 +1,114 @@ +# SHiNE Solana Arweave Viewer: как это работает + +## Что лежит в папке + +Основной и единственный рабочий файл viewer: + +- `index.html` + +Это автономный single-file viewer: + +- весь HTML внутри одного файла; +- все стили внутри этого же файла; +- весь JavaScript внутри этого же файла; +- локальная копия `solana-web3` тоже встроена внутрь этого же файла. + +Для запуска viewer достаточно открыть один `index.html`. + +## Что делает viewer + +Viewer открывается как обычная HTML-страница и работает полностью в браузере. + +Он умеет: + +- принимать логин пользователя SHiNE; +- принимать `Solana RPC` через форму или через URL-параметр; +- принимать `Arweave gateway` через форму или через URL-параметр; +- сохранять эти значения в `localStorage`; +- вычислять `user_pda` по логину для программы `shine_users`; +- читать `PDA` напрямую из `Solana`; +- распарсивать содержимое записи `shine_users`; +- показывать ключи, лимиты, номер записи, блокчейн пользователя и `Arweave tx id`; +- строить прямую ссылку на `Arweave`, если `tx id` есть в записи. + +## Какие URL-параметры поддерживаются + +Viewer понимает такие параметры: + +- `login` +- `solanaRpc` +- `arweaveGateway` + +Пример: + +```text +index.html?login=aidartest&solanaRpc=https%3A%2F%2Fsolana-rpc.publicnode.com&arweaveGateway=https%3A%2F%2Farweave.net +``` + +## Предустановленные адреса + +### Solana RPC + +- `https://solana-rpc.publicnode.com` +- `https://public.rpc.solanavibestation.com/` + +### Arweave gateway + +- `https://arweave.net` + +## Почему одна из RPC может не работать + +Адрес: + +- `https://public.rpc.solanavibestation.com/` + +может возвращать браузерную ошибку `403` с текстом про `Origin is not whitelisted`. + +Это означает, что проблема обычно не в SHiNE viewer, а в CORS-политике самого RPC. +Для HTML-страницы, открытой прямо в браузере, это обычно не лечится со стороны клиента. + +Практически для viewer лучше использовать: + +- `https://solana-rpc.publicnode.com` + +## Ссылки на загруженный файл в Arweave + +Основная ссылка: + +- `https://isvg77xrihxyzqnjex3j4uldyao7xbsfda4uhoydtigeugovjvza.arweave.net/RKpv_vFB74zBqSX2nlFjwB37hkUYOUO7A5oMShnVTXI` + +Та же ссылка с тестовым логином `aidartest`: + +- `https://isvg77xrihxyzqnjex3j4uldyao7xbsfda4uhoydtigeugovjvza.arweave.net/RKpv_vFB74zBqSX2nlFjwB37hkUYOUO7A5oMShnVTXI?login=aidartest` + +Та же ссылка с тестовым логином `aidartest` и явным рабочим RPC: + +- `https://isvg77xrihxyzqnjex3j4uldyao7xbsfda4uhoydtigeugovjvza.arweave.net/RKpv_vFB74zBqSX2nlFjwB37hkUYOUO7A5oMShnVTXI?login=aidartest&solanaRpc=https%3A%2F%2Fsolana-rpc.publicnode.com` + +## Что будет, если поставить devnet RPC + +Официальный публичный `Solana devnet RPC`: + +- `https://api.devnet.solana.com` + +Если подставить `devnet` RPC, viewer начнёт читать именно сеть `devnet`, а не `mainnet`. + +Но это не означает автоматически, что вся система SHiNE "стала тестовой". +Для реальной работы в `devnet` должны совпасть сразу несколько условий: + +- программа `shine_users` должна быть задеплоена в `devnet`; +- в `devnet` должен существовать нужный `PDA` для логина; +- формат записи должен совпадать; +- данные пользователя должны реально лежать в этой тестовой сети. + +Если этого нет, viewer просто не найдёт запись. + +## Источник по devnet RPC + +Официальная документация Solana: + +- `https://solana.com/docs/references/clusters` + +Там указан devnet endpoint: + +- `https://api.devnet.solana.com` diff --git a/shine-solana-arweave-viewer-v2/index.html b/shine-solana-arweave-viewer-v2/index.html new file mode 100644 index 00000000..9a598cc7 --- /dev/null +++ b/shine-solana-arweave-viewer-v2/index.html @@ -0,0 +1,3231 @@ + + + + + + SHiNE Arweave Viewer v2 — Frame v1 + + + + + +
+
+ + + + + +
+ +
+ + +
+ +
Готово к загрузке.
+ +
+
+
Viewer читает новый формат Arweave: ?login=...&channel=... или ?key=...&channel=...
+
+ + +
+
+ + diff --git a/shine-solana-arweave-viewer-v2/КАК_ЭТО_РАБОТАЕТ.md b/shine-solana-arweave-viewer-v2/КАК_ЭТО_РАБОТАЕТ.md new file mode 100644 index 00000000..652117f7 --- /dev/null +++ b/shine-solana-arweave-viewer-v2/КАК_ЭТО_РАБОТАЕТ.md @@ -0,0 +1,39 @@ +# Как работает Viewer v2 + +Viewer рассчитан на новый архив SHiNE: **один пользовательский блок = один ANS-104 DataItem**. + +### Режим 1: login + channel + +`?login=&channel=` + +Viewer читает Solana PDA пользователя, получает `blockchainKey`, затем ищет Arweave DataItem этого владельца с тегами `App=test5590` и `c=`. + +### Режим 2: key + channel + +`?key=&channel=` + +Viewer пропускает Solana и сразу выполняет поиск в Arweave. + +### Режим без channel + +`?login=` или `?key=` + +Viewer получает все доступные DataItem владельца с `App=test5590`, разбирает их и показывает восстановленные каналы. + +### Новый блок + +Payload DataItem: + +```text +uint16be frameCode = 0x0001 +bytes[32] prevHash = SHA-256(previous Frame v1) +int32be blockSize +int32be blockNumber +int64be timestamp seconds +uint16be type +uint16be subType +uint16be version +bytes[N] body +``` + +Подпись пользователя, owner и tags находятся в оболочке ANS-104 DataItem, а не в SHiNE Frame v1.