синхронизация с солана
This commit is contained in:
@@ -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.
|
||||
Reference in New Issue
Block a user