Регистрация узла
Регистрация — шаг, который превращает узел, только следящий за цепочкой, в кандидата на место. Владелец отправляет одну транзакцию, которая называет ключ узла, блокирует стейк и доказывает, что владелец и ключ узла связаны друг с другом. Затем узел встаёт в публичную очередь. Создавать блоки он начинает только после допуска.
Транзакция регистрации
NodeRegistration (тип 2) несёт ключ узла, аккаунт владельца, стейк и доказательство владения. Владелец подписывает её, как любую другую транзакцию. Стейк и комиссия списываются с аккаунта владельца; минимальная комиссия — это базовая комиссия за действие 0,025 ZBC (2 500 000 атомарных единиц) плюс плата за байты транзакции (комиссии).
Никто не проверяет оператора, нет ни теста оборудования, ни этапа одобрения. Единственные проверки — правила, которые каждый узел применяет одинаково.
Доказательство владения
Доказательство связывает один ключ узла с одним владельцем. Это сообщение, подписанное ключом узла, со следующей структурой для обычного владельца ZBC_:
| Поле | Байт |
|---|---|
| тип аккаунта владельца | 4 |
| ключ владельца | 32 |
| хеш недавнего блока | 32 |
| высота этого блока | 4 |
| подпись Ed25519 ключом узла | 64 |
Первые 72 байта подписываются как есть, без предварительного хеширования, поэтому всё доказательство занимает 136 байт. Каждый узел проверяет четыре условия:
- подпись проверяется ключом узла;
- аккаунт в сообщении в точности, байт в байт, совпадает с отправителем транзакции;
- блок с этим хешем существует в собственной цепочке проверяющего узла;
- блоку не больше 720 блоков (3 часа).
Поскольку доказательство называет недавний блок, его нельзя подготовить задолго заранее или использовать повторно позже. То же доказательство требуется при увеличении стейка и при заявке на узел, а новый ключ узла подписывает такое доказательство, когда место переносится на него (ключи узла).
Сколько блокировать
Наименьший стейк, с которым узел может встать в очередь, — большее из двух значений:
- минимум очереди, который в mainnet начинается со 100 ZBC. Это одна из цен, по которым голосуют места (голосования по ценам): он может составлять от одной атомарной единицы до 250 ZBC и меняется не чаще раза в период снимков, причём каждый голос ограничен ростом на 20 % или снижением вдвое.
- половина медианного стейка узлов, уже стоящих в очереди, которая следует за спросом.
Проверка применяется только при входе. Узлы, которые уже ждут, сохраняют своё место, когда минимум растёт. Любой может заблокировать больше минимума, чтобы продвинуться в очереди, упорядоченной по стейку, умноженному на время ожидания, а узел в очереди может позже увеличить свой стейк, сохранив накопленное время ожидания (очередь).
После регистрации
Зарегистрированный узел ставится в очередь. Оценки участия у него пока нет, и раз в сутки он должен показывать, что находится в сети (очередь). Когда таймер допуска доходит до него, он становится зарегистрированным с оценкой по умолчанию 20 % (темп допуска) и начинает зарабатывать, когда становится зрелым (зрелость и доходы).
Отзыв узла до допуска стоит 10 % его стейка (выход из реестра). Ключ узла, место которого было удалено, может зарегистрироваться снова; он начинает новую запись в очереди и не наследует пропущенных ходов из прошлого.