Как запустить наблюдение за аккаунтом 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 относится к более раннему состоянию. При равных слотах одного номера недостаточно для установления порядка внутри слота. Для спорного состояния представления запросите новый финализированный снимок.

После разрыва повторите подписку и чтение снимка. Так восстанавливается представление текущего состояния. Для аудита всех исторических переходов понадобятся и данные о транзакциях или блоках.

Документация