SHA256
80 lines
4.0 KiB
Markdown
80 lines
4.0 KiB
Markdown
# Применение 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, наружу ничего не отправляется.
|