Блоки и время
ZooBC добавляет блок в свою цепочку примерно каждые 15 секунд, в любой сети. Протокол измеряет время в блоках: когда в правиле сказано «сутки», имеются в виду 5 760 блоков. Если знать этот пересчёт, большинство чисел в этой вики читается легко.
Блок каждые 15 секунд
Интервал в 15 секунд — параметр генезиса каждой цепочки (min_block_interval), одинаковый в devnet, testnet и mainnet. После каждого блока жеребьёвка по порядку называет узлы, которые могут создать следующий (жеребьёвка). Узлу, выбранному первым, принадлежит первый раунд, рассчитанный на 15 секунд после предыдущего блока. Если он опаздывает или не в сети, узел, выбранный на следующий раунд, может создать блок через 15 секунд, и так далее, поэтому отсутствующий производитель задерживает один блок, а не останавливает цепочку (раунды, время и окна).
Блок, пришедший меньше чем через 13 секунд после родителя, отклоняется как «созданный слишком быстро», так что ни один производитель не может ускорить цепочку.
Пустые блоки тоже идут в счёт
Блоки продолжают появляться независимо от того, отправляет ли кто-нибудь транзакции. Блок без транзакций всё равно выполняет работу:
- он несёт квитанции — подписанные доказательства того, что узлы ретранслировали данные друг другу, которые питают оценку участия;
- начиная с версии 0.5.8 он несёт новые монеты, запланированные на его время, — coinbase, — в точности как полный блок.
Выпуск новых ZBC следует часам, а не числу блоков: coinbase блока — это то, что 15-летний график выпускает между меткой времени предыдущего блока и его собственной (предложение и эмиссия). Медленная серия блоков не выпустит за сутки меньше, а всплеск быстрых блоков не выпустит больше.
Сроки, отсчитываемые в блоках
Поскольку интервал фиксирован, протокол записывает сроки числом блоков. Вот основные пересчёты вместе с некоторыми сроками, которые встречаются в этой вики (значения mainnet):
| Блоков | Время | Где встречается |
|---|---|---|
| 120 | 30 минут | задержка, после которой вступает в силу смена ключа узла (ключи узла) |
| 240 | 1 час | одна эпоха доказательств хранения (пул децентрализованного хранения) |
| 720 | 3 часа | предел отката (финальность и откат) |
| 2 880 | 12 часов | единица часов оценки, пока узлов меньше 2 880 (пропущенные ходы, приостановка и исключение) |
| 5 760 | 1 сутки | окно явки узла в очереди (очередь) |
| 11 520 | 2 суток | ожидание по умолчанию, прежде чем самообновляющийся узел установит релиз (релизы и обновления) |
| 40 320 | 1 неделя | период охлаждения стейка узла при выходе (выход из реестра) |
| 172 800 | 30 дней | один период снимков, он же период аренды аккаунтов и голосований по ценам (аренда аккаунтов и их удаление, голосования по ценам) |
Некоторые пределы, наоборот, отсчитываются в секундах, потому что сравнивают метки времени. Например, транзакция по умолчанию может быть включена в блок в течение часа после её собственной метки времени (срок действия и метки времени).
Spine-цепочка: один блок в сутки
Рядом с основной цепочкой каждый узел ведёт spine-цепочку — медленную сопутствующую цепочку контрольных точек, которая не несёт транзакций (spine-цепочка). В testnet и mainnet она создаёт один блок в сутки (каждые 86 400 секунд), а в devnet — один в час. Каждый spine-блок соподписывают зарегистрированные узлы, и он называет блок основной цепочки на глубине 760 блоков (3 часа 10 минут), что даёт основной цепочке нижнюю границу, которую не может пересечь ни одна реорганизация (финальность и откат).
Сроки в devnet
Devnet, сеть для разработки, сохраняет 15-секундный блок, но сокращает многие из перечисленных сроков, например предел отката (60 блоков) и период снимков (240 блоков), чтобы их действие проявлялось за минуты или часы. Testnet и mainnet используют одни и те же значения. Полное сравнение — в статье devnet, testnet и mainnet.