Files
SHiNE-server/docs/Blockchain/CODEX_APPLY_ANS104_TEST5590_PATCH.md

80 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Применение patch: Turbo + direct Arweave для `App=test5590`
## Что меняется
- `arweave.blocks.publish.mode=turbo|arweave|none` вместо boolean publisher switch.
- `turbo`: каждый готовый user-signed ANS-104 DataItem отправляется в Turbo отдельно.
- `arweave`: сохранён прямой L1 fallback — несколько user DataItems собираются в standard ANS-104 bundle.
- `none`: наружу ничего не публикуется.
- Importer всегда ищет только individual `App=test5590` DataItems.
- `App=test5590-batch` больше не используется.
- Channel tag: `c_test5590=<canonical_channel_slug>` вместо `c=...`.
- Удалены `blocks.arweave_root_tx_id` и `arweave_block_import_queue.root_tx_id`.
- Схема PostgreSQL: v25.
## Минимальная настройка Turbo
```properties
arweave.blocks.publish.mode=turbo
arweave.blocks.publish.turbo.uploadUrl=https://turbo.ardrive.io/tx
```
Для действующего free tier маленьких DataItem этого может быть достаточно.
Если upload платный и расходы должны идти с server Turbo Credits:
```properties
arweave.blocks.publish.turbo.walletJwkPath=/home/player/SHiNE/secrets/turbo-wallet.json
# либо вместо JWK сразу публичный адрес:
# arweave.blocks.publish.turbo.paidByAddress=<server payer address>
```
JWK не отправляется Turbo: из него вычисляется публичный address для `x-paid-by`.
Для чужого signed DataItem платные Turbo Credits требуют действующего Credit Share Approval от server payer к signer-адресу DataItem. Если его нет, Turbo вернёт HTTP 402, а блок останется pending для повторной попытки.
## Direct Arweave fallback
```properties
arweave.blocks.publish.mode=arweave
arweave.blocks.publish.walletJwkPath=/home/player/SHiNE/secrets/arweave-wallet.json
arweave.blocks.publish.gateway=https://arweave.net
```
Root bundle больше не получает `App=test5590-batch`; child DataItems уже содержат `App=test5590` и именно их индексирует importer.
## Отключение публикации
```properties
arweave.blocks.publish.mode=none
```
Это не отключает `arweave.blocks.sync.enabled`: read/import и publish независимы.
## Importer
```properties
arweave.blocks.sync.enabled=true
arweave.blocks.sync.gateway=https://turbo-gateway.com
arweave.blocks.sync.maxDataItemBytes=8388608
```
Importer:
1. GraphQL `App=test5590`;
2. `/ar-io/offsets/<dataItemId>`;
3. range `GET /raw/<rootTxId>`;
4. проверка exact signed DataItem ID + signature;
5. обычный `AddBlock` import.
## Миграция БД
При старте schema v24 автоматически применит `migration_v25.sql`, которая удаляет два root-tx поля и ставит version 25.
## Проверка после применения
1. Создать новый channel/post и проверить signed tag `c_test5590=<canonical slug>`.
2. В `mode=turbo` убедиться, что `blocks.data_item_id` совпадает с Turbo response `id` и pending становится false.
3. На втором сервере включить sync и убедиться, что DataItem находится GraphQL-запросом `App=test5590` и импортируется без прямой server-to-server связи.
4. Переключить первый сервер в `mode=arweave`, создать ещё несколько блоков и убедиться, что тот же importer второго сервера видит child DataItems без знания root bundle ID.
5. Проверить `mode=none`: новые локальные блоки остаются pending, наружу ничего не отправляется.