# 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.