SHA256
Добавить тестовые каналы и Arweave-синхронизацию
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
# AGENTS.md — SHiNE test channels
|
||||
|
||||
Эта папка — тестовый генератор реальной пользовательской активности SHiNE. Это не часть консенсуса и не отдельный протокол.
|
||||
|
||||
## Назначение
|
||||
Один тестовый пользователь публикует заранее подготовленные POST-блоки сразу в несколько своих каналов. Все POST должны идти через обычный SHiNE `AddBlock`, поэтому сервер проверяет их как обычные пользовательские блоки и затем использует штатную Arweave-публикацию.
|
||||
|
||||
## Почему publisher один
|
||||
У всех каналов одного пользователя одна глобальная blockchain-цепочка (`blockNumber + prevHash`). Нельзя запускать независимый publisher на каждый канал: они могут одновременно построить следующий глобальный блок. `publisher_multi.py` сериализует публикации всех каналов, но хранит отдельные `prevLineNumber/prevLineHash` и позиции очередей.
|
||||
|
||||
## Каналы в примере
|
||||
- `jokes` — короткие анекдоты; часть постов содержит 1–2 изображения.
|
||||
- `mindfulness` — короткие практики осознанности.
|
||||
- `positive` — позитивные и мотивирующие напоминания.
|
||||
- `friends` — советы об общении и дружбе, в духе классических принципов человеческого общения, без выдачи текста за дословные цитаты.
|
||||
- `wisdom` — короткие духовные/созерцательные мысли. Не придумывать цитаты и не приписывать человеку слова без источника.
|
||||
|
||||
## Изображения
|
||||
`prepare/prepare_all_channels.py` проходит все `channels[].queue_file`.
|
||||
Для каждого локального файла:
|
||||
1. вычисляет SHA-256;
|
||||
2. смотрит общий `upload-state.json`;
|
||||
3. если ID уже известен — проверяет `https://gateway/<id>`;
|
||||
4. если файл существует — повторно НЕ загружает;
|
||||
5. если отсутствует/ID неизвестен — загружает через Arweave JWK;
|
||||
6. пишет `.prepared.json`, добавляя постоянные Arweave URL в текст POST и сохраняя `images[]` как служебные метаданные.
|
||||
|
||||
JWK используется только подготовщиком. Не помещать приватный JWK или blockchain key в git/архив.
|
||||
|
||||
## State
|
||||
`multi-state.json` содержит один global head и отдельное состояние каждого канала. Pending DataItem записывается до `AddBlock`; при неопределённом состоянии глобальной цепочки publisher обязан остановиться, а не строить форк.
|
||||
|
||||
## Не менять
|
||||
- SHiNE Frame v1 и его SHA-256.
|
||||
- `prevHash` глобальной цепочки.
|
||||
- `prevLineNumber/prevLineHash` канальной линии.
|
||||
- ANS-104 signing/deepHash без сверки с серверной реализацией.
|
||||
- `App=test5590` и `c=<canonical channel>` без согласованного изменения импортера/Viewer.
|
||||
|
||||
## Viewer
|
||||
Viewer распознаёт Arweave URL в тексте POST и показывает изображения inline. Экран «Проверка данных» независимо считает SHA-256 Frame, проверяет доступные `prevHash` и `prevLineHash`, показывает отсутствие соседнего блока как «нет данных», а доказанное несовпадение — как ошибку. Подпись ANS-104 нельзя помечать локально проверенной, если gateway не предоставил сырую подпись DataItem.
|
||||
Reference in New Issue
Block a user