Files

2.1 KiB

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+

Настройка

export HELIUS_API_KEY="your_key"
export SOLANA_PROGRAM_ID="your_program_id"
export SQLITE_PATH="./data/solana.db"
export SOLANA_COMMITMENT="confirmed"

Запуск

mvn clean compile exec:java

Ожидаемый лог:

Database initialized: ...
Connecting to Helius WebSocket...
WebSocket connected
Subscription request sent for program: ...
Subscribed successfully. Subscription id: ...

После создания или изменения PDA:

Account update: ...
Saved account ...

Проверка SQLite

sqlite3 data/solana.db
.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.