Консенсус и блоки
Блокчейн Velum выпускает блоки по очереди среди полных активных узлов, с целевым временем 2 секунды на слот. Реальный темп измеряется: обозреватель и главная страница показывают недавнее среднее. Каждую эпоху (1 800 блоков, около 1 часа30 блоков, около 60 секунд) узлы находят VEL этой эпохи благодаря своей подтверждённой работе.
Очередь
Время делится на слоты по 2 с (целевое значение) от генезиса (slot = floor((ts − генезис) / 2000)). Для каждого слота все узлы вычисляют одинаковую очередь:
активные = зарегистрированные полные узлы с сигналом активности за последние 15 блоков
очередь = активные, отсортированные по sha256(хеш_предыдущего_блока | slot | адрес)
- Первый в очереди (ранг 0) предлагает блок в начале слота.
- Запасные ждут полсекунды за каждую позицию (ранг × 500 мс), прежде чем смогут предложить свой.
- Блок, подписанный раньше своей очереди, отклоняется.
Очередь меняется с каждым блоком (она зависит от предыдущего хеша), поэтому никто не знает заранее, когда чья очередь.
Сигналы активности
Каждый узел периодически подписывает сигнал активности (presence: узел, высота, время). Сигналы попадают в блоки и определяют, кто активен. Они же учитываются в доступности, одном из требований для уровней.
Сеть не останавливается
Если активные узлы одновременно выключатся, каждый пустой слот сдвигает всех остальных на одну позицию вперёд. Через несколько слотов любой зарегистрированный узел сможет продолжить выпуск блоков. Лёгкие узлы никогда не создают блоки: подписанные ими блоки отклоняются.
Эпохи
В последнем блоке каждой эпохи:
- Складывается всё, что можно найти: эмиссия эпохи, 80 % накопленных комиссий и 0,1 %, которые возвращает Резерв сети.
- 15 % находят те, кто создавал и проверял блоки, поровну за каждый блок.
- 85 % находят те, кто открывал мосты: подтверждённые доставки × множитель уровня.
- Высвобождаются действующие фонды токенов (
pool.fund). - Публикуются сложность (проверенная работа / выпущенные VEL) и цена оракула.
- Заявки на бирже с истёкшим
ttlснимаются.
Работа узла не попадает в блокчейн по одной квитанции: каждый узел публикует сводную заявку (work.claim) с корнем Меркла своих квитанций, а в следующую эпоху проверяются 16 случайных квитанций (work.prove). См. Запусти узел.
Об эмиссии — в разделе Монета VEL, об уровнях — в разделе Запусти узел.
Выбор цепочки и реорганизации
Когда два блока претендуют на одну высоту, действует правило:
лучшая = самая высокая цепочка; при равной высоте выигрывает блок с меньшим хешем
Узел, увидевший лучшую ветку, переключается на неё (реорганизация). Благодаря устройству очереди реорганизации короткие: обычно на один-два блока, когда два запасных узла предлагают блоки почти одновременно. Индексатор обозревателя хранит последние состояния, чтобы их отслеживать, и помечает отброшенные блоки как «отброшенная ветка».
Финальность {#finalidad}
В {{chain}} финальность вероятностная: чем больше блоков сверху, тем менее вероятно, что блок будет отброшен.
| Сценарий | Рекомендуемые подтверждения | Примерное время |
|---|---|---|
| Сообщения, небольшие платежи между людьми | 1 | Один блок |
| Магазины и платёжные шлюзы | 6 | Несколько секунд |
| Биржи, обычные суммы | 30 | ≈ 1 мин при целевом темпе |
| Биржи, крупные суммы | Одна эпоха | ≈ 1 ч в основной сети |
Мгновенная финальность с подписями 2/3 валидаторов запланирована для основной сети.
Структура блока
BlockHeader = { chain, height, prev, ts, slot, proposer, txRoot, receiptRoot, presenceRoot, stateRoot }
Block = { header, hash, sig, txs[], receipts[], presence[], rewards[], tokenRewards?[] }
hash = sha256(канонический JSON заголовка)
sig = ed25519 создателя над hash
Корни — это деревья Меркла (SHA-256) транзакций, квитанций и сигналов активности. stateRoot — отпечаток всего состояния после применения блока: два честных узла всегда приходят к одному и тому же значению.