Вики ZooBC
Работа узла

Ключи узла

Оператор узла ZooBC пользуется двумя ключами. Ключ узла — идентичность машины: он хранится на узле и подписывает всё, что узел делает изо дня в день. Ключ владельца — обычный аккаунт в кошельке оператора: он управляет местом и стейком. Благодаря их разделению взлом сервера не отдаёт злоумышленнику кошелёк оператора.

Ключ узла на сервере подписывает блоки, квитанции, голоса и доказательства хранения; ключ владельца в кошельке подписывает транзакции реестра и получает выигрыши лотереи
Ключ узла на сервере подписывает блоки, квитанции, голоса и доказательства хранения; ключ владельца в кошельке подписывает транзакции реестра и получает выигрыши лотереи

Ключ узла

Ключ узла — 32-байтовый ключ Ed25519, записываемый с префиксом ZNK_. Он хранится в файле конфигурации узла, node.conf, и подписывает:

  • блоки, которые создаёт узел, и доказательство, стоящее за сидом каждого блока (сид блока (VRF));
  • квитанции за блоки и транзакции, которые он получает от своих пиров (квитанции и топология сети);
  • сообщения своим пирам, включая рукопожатие, открывающее каждое соединение;
  • свои подписи в spine-цепочке;
  • аттестации и голоса, например голосования по ценам и вето релизов;
  • доказательства того, что он хранит фрагменты децентрализованного хранилища (пул децентрализованного хранения).

Поскольку node.conf содержит закрытый ключ, узел отказывается запускаться, если файл могут прочитать другие пользователи машины; когда файл принадлежит самому узлу, узел сам устанавливает ему режим 0600.

Собственный аккаунт узла

Те же 32 байта, записанные с префиксом ZBC_, — это обычный аккаунт: собственный аккаунт узла. С него отправляются служебные транзакции узла, такие как доказательства хранения, аттестации и голоса, с комиссией ровно 0 (комиссии). На этом аккаунте каждого генезис-места изначально 10 ZBC.

Две текстовые формы одного ключа совпадают в первых 51 символе после префикса и различаются только в последних пяти, потому что 3-байтовая контрольная сумма в конце охватывает и префикс. Поэтому ручная замена ZNK на ZBC ломает контрольную сумму, и отредактированный текст отклоняется (аккаунты и адреса).

Ключ владельца

Ключ владельца — обычный аккаунт ZBC_ в кошельке оператора. Он подписывает транзакции реестра:

  • NodeRegistration (тип 2), которая регистрирует узел и блокирует его стейк;
  • увеличение стейка;
  • NodeRegistrationUpdate (тип 258), которая переносит место на новый ключ узла;
  • RemoveNodeRegistration (тип 514), которая удаляет узел;
  • ClaimNodeRegistration (тип 770), которая забирает стейк.

Стейк берётся с этого аккаунта, и выигрыши узла в лотерее выплачиваются на него же. Узел никогда не хранит ключ своего владельца.

Как они связаны: доказательство владения

Для регистрации нужны оба ключа. Ключ узла подписывает короткое сообщение, называющее аккаунт владельца и недавний блок, а ключ владельца подписывает транзакцию, которая его несёт. Ни один ключ в одиночку не может зарегистрировать пару, и никто не может зарегистрировать чужой узел на свой аккаунт. То же доказательство требуется, чтобы увеличить стейк и чтобы забрать его. Его точная структура описана в статье регистрация узла.

Оба ключа операторы создают сами. Никто их не выдаёт, и ни у кого больше нет копии.

Перенос места на новый ключ узла

Если ключ узла скомпрометирован или машина заменяется, владелец может перенести место на новый ключ узла без повторной регистрации. NodeRegistrationUpdate несёт новый 32-байтовый ключ с доказательством владения, подписанным новым ключом. Узел сохраняет свой идентификатор, оценку, состояние в очереди и допуск. Изменение вступает в силу через 120 блоков (30 минут) после блока, который его включает.

Ключ узла тоже может забрать стейк

Охраняйте ключ узла так же тщательно, как ключ кошелька. Тот, у кого он есть, может транзакцией ClaimNodeRegistration забрать стейк места на подконтрольный ему аккаунт. Собственная заявка владельца рассматривается как удаление, с тем же 7-дневным периодом охлаждения. Заявка любого другого объявляется и исполняется через 40 320 блоков (7 дней), если только владелец не удалит узел раньше, так что у владельца, который следит за цепочкой, есть неделя, чтобы отреагировать (выход из реестра). Это также путь для владельца, потерявшего доступ к аккаунту владельца: заявка тогда идёт с другого аккаунта, поэтому и она исполняется через 7 дней.

Другие ключи

Нативные ключи можно вывести из фразы восстановления по пути m/44'/883'/n', а тот же 32-байтовый ключ можно также записать как ключ ретранслятора (ZBR_) или ключ шлюза (ZBG_) (ключи и типы аккаунтов). Четыре ролевых ключа протокола (орган выпуска релизов, ключ страниц, казна и маркетмейкер) — отдельные ключи на отдельных устройствах (ZooBC Foundation); оператору не нужен ни один из них.

См. также