История ключей (HF15)
DLT-нода стартует со снапшота и не хранит прошлых блоков, поэтому сама по себе не может сказать, какой ключ был у аккаунта в прошлом. Аккаунт мог что-то подписать, сменить ключи и заявить, что подпись не его. С HF15 консенсус навсегда хранит каждый ключ, который перестал действовать у аккаунта, — прошлое доказывается по текущему состоянию цепи.
Что записывается
При смене ключей аккаунта нода пишет по строке на каждого члена старого authority каждой роли, которая действительно изменилась:
| Поле | Значение |
|---|---|
account | Чей это был ключ |
role | master, active, regular или memo |
key | Ключ; нулевой ключ, если членом был аккаунт |
auth_account | Аккаунт-член (account_auths); пусто для ключа |
weight | Вес этого члена; 0 для memo |
weight_threshold | Требуемый вес роли; 0 для memo |
valid_until_block | Последний блок, в котором ключ ещё действовал (включительно); смена — в следующем блоке |
valid_until_time | Время этого блока |
Если старая authority роли была пустой (ни ключей, ни аккаунтов), нода всё равно пишет для этой роли одну строку-маркер: key — нулевой ключ, auth_account пустой, weight = 0. Она нужна, чтобы кулдаун ротации работал и при переходе «пусто → заполнено»; такие строки видны и в get_key_history_by_key по нулевому ключу.
Строка значит: у аккаунта A был ключ B в роли R с весом D из требуемых E до блока F во время G. «С какого момента» — блок, следующий за valid_until_block предыдущей строки той же роли (или неизвестно для ключей, которые стояли на момент активации HF15: более ранней истории взять неоткуда). Текущие ключи — в самом аккаунте.
Строки пишут все пути смены ключей: account_update, восстановление аккаунта, прямая продажа и закрытие аукциона. Роль, authority которой не изменился, ничего не пишет — повторная отправка того же authority сменой не считается. Строки не удаляются никогда. Это отдельная вещь от истории master для восстановления, которая хранится только 30 дней.
Лимит частоты
С HF15 реальная смена active, regular или memo_key через account_update разрешена не чаще раза в час для каждой роли — как уже было у master. Лимит у каждой роли свой: смена regular не мешает сменить active в тот же час. Восстановление и продажа аккаунта не ограничены.
Read-API
database_api.get_key_history(account, from, limit)— история одного аккаунта.database_api.get_key_history_by_key(key, limit)— у кого был ключ и до какого момента.