синхронизация с солана

This commit is contained in:
2026-07-21 13:19:40 +03:00
commit 02a849089c
22 changed files with 3100 additions and 0 deletions
+83
View File
@@ -0,0 +1,83 @@
# 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.