84 lines
2.1 KiB
Markdown
84 lines
2.1 KiB
Markdown
# Helius PDA Sync Test
|
|
|
|
Минимальное Java 21 приложение для проверки realtime-синхронизации:
|
|
|
|
`Solana Program -> Helius WebSocket -> programSubscribe -> SQLite`
|
|
|
|
## Что делает
|
|
|
|
- подключается к Helius WebSocket;
|
|
- подписывается через `programSubscribe` на изменения аккаунтов программы;
|
|
- сохраняет каждый полученный аккаунт в SQLite;
|
|
- обновляет запись только если новый `slot` не старее сохранённого;
|
|
- автоматически переподключается после обрыва соединения.
|
|
|
|
На этом этапе приложение хранит raw `base64` данные PDA и не декодирует Anchor/Borsh.
|
|
|
|
## Требования
|
|
|
|
- Java 21+
|
|
- Maven 3.9+
|
|
|
|
## Настройка
|
|
|
|
```bash
|
|
export HELIUS_API_KEY="your_key"
|
|
export SOLANA_PROGRAM_ID="your_program_id"
|
|
export SQLITE_PATH="./data/solana.db"
|
|
export SOLANA_COMMITMENT="confirmed"
|
|
```
|
|
|
|
## Запуск
|
|
|
|
```bash
|
|
mvn clean compile exec:java
|
|
```
|
|
|
|
Ожидаемый лог:
|
|
|
|
```text
|
|
Database initialized: ...
|
|
Connecting to Helius WebSocket...
|
|
WebSocket connected
|
|
Subscription request sent for program: ...
|
|
Subscribed successfully. Subscription id: ...
|
|
```
|
|
|
|
После создания или изменения PDA:
|
|
|
|
```text
|
|
Account update: ...
|
|
Saved account ...
|
|
```
|
|
|
|
## Проверка SQLite
|
|
|
|
```bash
|
|
sqlite3 data/solana.db
|
|
```
|
|
|
|
```sql
|
|
.headers on
|
|
.mode column
|
|
|
|
SELECT
|
|
address,
|
|
owner,
|
|
lamports,
|
|
slot,
|
|
length(data_base64) AS base64_length,
|
|
updated_at
|
|
FROM program_accounts
|
|
ORDER BY slot DESC;
|
|
```
|
|
|
|
## Первый тест
|
|
|
|
1. Запусти приложение.
|
|
2. Дождись `Subscribed successfully`.
|
|
3. Создай или измени PDA через контракт.
|
|
4. Убедись, что пришёл `programNotification`.
|
|
5. Проверь запись в SQLite.
|
|
|
|
Следующий шаг после проверки realtime: добавить `getProgramAccounts` на старте и декодирование конкретного PDA по IDL.
|