Вики ZooBC
Основы ZooBC

Блоки и время

ZooBC добавляет блок в свою цепочку примерно каждые 15 секунд, в любой сети. Протокол измеряет время в блоках: когда в правиле сказано «сутки», имеются в виду 5 760 блоков. Если знать этот пересчёт, большинство чисел в этой вики читается легко.

Блок каждые 15 секунд

Интервал в 15 секунд — параметр генезиса каждой цепочки (min_block_interval), одинаковый в devnet, testnet и mainnet. После каждого блока жеребьёвка по порядку называет узлы, которые могут создать следующий (жеребьёвка). Узлу, выбранному первым, принадлежит первый раунд, рассчитанный на 15 секунд после предыдущего блока. Если он опаздывает или не в сети, узел, выбранный на следующий раунд, может создать блок через 15 секунд, и так далее, поэтому отсутствующий производитель задерживает один блок, а не останавливает цепочку (раунды, время и окна).

Блок, пришедший меньше чем через 13 секунд после родителя, отклоняется как «созданный слишком быстро», так что ни один производитель не может ускорить цепочку.

Пустые блоки тоже идут в счёт

Блоки продолжают появляться независимо от того, отправляет ли кто-нибудь транзакции. Блок без транзакций всё равно выполняет работу:

  • он несёт квитанции — подписанные доказательства того, что узлы ретранслировали данные друг другу, которые питают оценку участия;
  • начиная с версии 0.5.8 он несёт новые монеты, запланированные на его время, — coinbase, — в точности как полный блок.

Выпуск новых ZBC следует часам, а не числу блоков: coinbase блока — это то, что 15-летний график выпускает между меткой времени предыдущего блока и его собственной (предложение и эмиссия). Медленная серия блоков не выпустит за сутки меньше, а всплеск быстрых блоков не выпустит больше.

Блок каждые 15 секунд, даже когда в нём нет транзакций: 5 760 блоков в сутки, 40 320 в неделю. Spine-цепочка создаёт 1 блок в сутки.
Блок каждые 15 секунд, даже когда в нём нет транзакций: 5 760 блоков в сутки, 40 320 в неделю. Spine-цепочка создаёт 1 блок в сутки.

Сроки, отсчитываемые в блоках

Поскольку интервал фиксирован, протокол записывает сроки числом блоков. Вот основные пересчёты вместе с некоторыми сроками, которые встречаются в этой вики (значения mainnet):

БлоковВремяГде встречается
12030 минутзадержка, после которой вступает в силу смена ключа узла (ключи узла)
2401 часодна эпоха доказательств хранения (пул децентрализованного хранения)
7203 часапредел отката (финальность и откат)
2 88012 часовединица часов оценки, пока узлов меньше 2 880 (пропущенные ходы, приостановка и исключение)
5 7601 суткиокно явки узла в очереди (очередь)
11 5202 сутокожидание по умолчанию, прежде чем самообновляющийся узел установит релиз (релизы и обновления)
40 3201 неделяпериод охлаждения стейка узла при выходе (выход из реестра)
172 80030 днейодин период снимков, он же период аренды аккаунтов и голосований по ценам (аренда аккаунтов и их удаление, голосования по ценам)

Некоторые пределы, наоборот, отсчитываются в секундах, потому что сравнивают метки времени. Например, транзакция по умолчанию может быть включена в блок в течение часа после её собственной метки времени (срок действия и метки времени).

Spine-цепочка: один блок в сутки

Рядом с основной цепочкой каждый узел ведёт spine-цепочку — медленную сопутствующую цепочку контрольных точек, которая не несёт транзакций (spine-цепочка). В testnet и mainnet она создаёт один блок в сутки (каждые 86 400 секунд), а в devnet — один в час. Каждый spine-блок соподписывают зарегистрированные узлы, и он называет блок основной цепочки на глубине 760 блоков (3 часа 10 минут), что даёт основной цепочке нижнюю границу, которую не может пересечь ни одна реорганизация (финальность и откат).

Сроки в devnet

Devnet, сеть для разработки, сохраняет 15-секундный блок, но сокращает многие из перечисленных сроков, например предел отката (60 блоков) и период снимков (240 блоков), чтобы их действие проявлялось за минуты или часы. Testnet и mainnet используют одни и те же значения. Полное сравнение — в статье devnet, testnet и mainnet.

См. также