Как запустить наблюдение за аккаунтом Solana и сохранить актуальное состояние
Между чтением начального состояния и подпиской могут произойти изменения. Если сначала открыть поток, начальный снимок можно согласовать с уже полученными обновлениями.
Копите события, пока загружается снимок
Отправьте этот кадр WebSocket с адресом аккаунта и дождитесь подтверждения подписки. Складывайте accountNotification в буфер. Через HTTP вызовите getAccountInfo с тем же адресом и finalized, сохраните result.context.slot и value.
{
"jsonrpc": "2.0",
"id": 1,
"method": "accountSubscribe",
"params": [
"ACCOUNT_PUBLIC_KEY",
{
"encoding": "base64",
"commitment": "finalized"
}
]
}
Сравните слот снимка со слотами обновлений
Пусть снимок получен для слота 100 с балансом 25 лампортов, а в буфере есть состояния из 99 и 102. Начните с 25 и примените состояние из 102. Запись из 99 относится к более раннему состоянию. При равных слотах одного номера недостаточно для установления порядка внутри слота. Для спорного состояния представления запросите новый финализированный снимок.
После разрыва повторите подписку и чтение снимка. Так восстанавливается представление текущего состояния. Для аудита всех исторических переходов понадобятся и данные о транзакциях или блоках.