Sysvar Cluster Data
Solana предоставляет различные данные о состоянии кластера программам через учетные записи sysvar
. Эти учетные записи заполняются по известным адресам, опубликованным вместе с макетами учетных записей в solana-program
crate, и описаны ниже. .
Программа может получить доступ к системной переменной двумя способами.
Первый — запросить sysvar во время выполнения с помощью функции sysvar get()
:
let clock = Clock::get()
Следующие системные переменные поддерживают get
:
- Clock
- EpochSchedule
- Fees
- Rent
Второй проход sysvar программе в качестве учетной записи, включив ее адрес в качестве одной из учетных записей в «Инструкцию», а затем десериализовав данные во время выполнения. Доступ к учетным записям sysvars всегда только для чтения.
let clock_sysvar_info = next_account_info(account_info_iter)?;
let clock = Clock::from_account_info(&clock_sysvar_info)?;
Первый метод более эффективен и не требует, чтобы учетная запись sysvar была передана программе или указана в «Инструкции», которую обрабатывает программа.
Часы
Системная переменная Clock содержит данные о времени кластера, включая текущий слот, эпоху и предполагаемую временную метку Unix настенных часов. Он обновляется каждый слот.
-
Адрес:
SysvarC1ock11111111111111111111111111111111
-
Макет: Часы
-
Поля:
slot
: текущий слотepoch_start_timestamp
: временная метка Unix первого слота в эту эпоху. В первом слоте эпохи эта метка времени идентичнаunix_timestamp
(ниже).эпоха
: текущая эпохаleader_schedule_epoch
: самая последняя эпоха, для которой уже создано расписание лидера.unix_timestamp
: метка времени Unix для этого слота.
Каждый слот имеет расчетную продолжительность, основанную на Proof of History. Но на самом деле интервалы могут заканчиваться быстрее или медленнее, чем это предполагается. В результате временная метка слота Unix создается на основе ввода оракула от голосующих валидаторов. Эта временная метка рассчитывается как взвешенная медиана оценок временных меток, предоставленных голосами, ограниченная ожидаемым временем, прошедшим с начала эпохи.
Более явно: для каждого слота самая последняя метка времени голосования, предоставленная каждым валидатором, используется для генерации оценки метки времени для текущего слота (считается, что интервалы, прошедшие с момента метки времени голосования, равны Bank::ns_per_slot). Каждая оценка метки времени связана со ставкой, делегированной этой учетной записи для голосования, для создания распределения меток времени по доле. Медианная метка времени используется как
unix_timestamp
, если только время, прошедшее с моментаepoch_start_timestamp
, не отклонилось от ожидаемого истекшего времени более чем на 25%.
Расписание эпох
Системная переменная EpochSchedule содержит константы планирования эпохи, которые устанавливаются в генезисе, и позволяет вычислять количество слотов в данной эпохе, эпоху для данного слота и т. д. (Примечание: расписание эпохи отличается от лидерного расписания
)
- Адрес:
SysvarEpochSchedu1e111111111111111111111111
- Макет: EpochSchedule
Сборы
Системная переменная Fees содержит калькулятор комиссий для текущего слота. Он обновляется каждый слот в зависимости от регулятора ставки.
- Адрес:
SysvarFees111111111111111111111111111111111
- Макет: Сборы
Инструкции
Системная переменная «Instructions» содержит сериализованные инструкции в сообщении, пока это сообщение обрабатывается. Это позволяет инструкциям программы ссылаться на другие инструкции в той же транзакции. Подробнее читайте на инструкции самоанализа.
- Адрес:
Sysvar1nstructions1111111111111111111111111
- Макет: Инструкции
Недавние блок-хэши
Системная переменная RecentBlockhashes содержит активные недавние хэши блоков, а также связанные с ними калькуляторы комиссий. Он обновляется каждый слот. Записи упорядочены по убыванию высоты блока, поэтому первая запись содержит хэш самого последнего блока, а последняя запись содержит хеш старого блока.
- Адрес:
SysvarRecentB1ockHashes11111111111111111111
- Макет: RecentBlockhashes
Аренда
Системная переменная Rent содержит арендную ставку. В настоящее время ставка статична и задана в генезисе. Процент сжигания арендной платы изменяется при ручной активации функции.
- Адрес:
SysvarRent111111111111111111111111111111111
- Макет: Аренда
Слотовые хэши
Системная переменная SlotHashes содержит самые последние хэши родительских банков слота. Он обновляется каждый слот.
- Адрес:
SysvarS1otHashes1111111111111111111111111111
- Макет: SlotHashes
История слотов
Системная переменная SlotHistory содержит битовый вектор слотов за последнюю эпоху. Он обновляется каждый слот.
- Адрес:
SysvarS1otHistory111111111111111111111111111
- Макет: SlotHistory
История ставок
Системная переменная StakeHistory содержит историю активаций и деактиваций ставок на уровне кластера за эпоху. Он обновляется в начале каждой эпохи.
- Адрес:
SysvarStakeHistory1111111111111111111111111
- Макет: StakeHistory