Как отличить старое значение контракта Stellar от отставания RPC

Кеш несколько часов показывает одно значение контракта. Чтобы понять причину, сравните номер последнего изменения записи с высотой, до которой дошёл сервер.

Прочитайте запись вместе с высотой наблюдения

Передайте в LEDGER_KEY_XDR ключ данных контракта, закодированный как XDR LedgerKey в base64. Одного адреса контракта недостаточно для выбора конкретной записи. В STELLAR_RPC укажите адрес сервера. Команда извлекает ключ и номера реестров, опуская содержимое записи.

jq -n --arg k "$LEDGER_KEY_XDR" '{jsonrpc:"2.0",id:4,method:"getLedgerEntries",params:{keys:[$k]}}' |
  curl -sS -H 'Content-Type: application/json' --data-binary @- "$STELLAR_RPC" |
  jq 'if .error then .error else .result | {latestLedger,entries:[.entries[]? | {key,lastModifiedLedgerSeq}]} end'

Сопоставьте два замера в одной сети

Допустим, latestLedger вырос с 880 до 890, а lastModifiedLedgerSeq для того же ключа остался равен 852. Сервер продвинулся на десять реестров и по-прежнему видит последнее изменение записи на высоте 852. Пересобирать этот элемент кеша с каждым новым реестром избыточно. Если в следующий раз ключ отсутствует в ответе, обработайте это как отдельное состояние. Возврат старого значения из кеша скроет тот факт, что последнее чтение его не подтвердило.

developers.stellar.org getLedgerEntries