Работа узла
Узел ZooBC — это программа ZooBC, работающая на компьютере. Он хранит копию цепочки, проверяет каждый блок и каждую транзакцию по тем же правилам, что и любой другой узел, и предоставляет публичный HTTP API. Запустить узел может любой, и даже узел, который только следит за цепочкой, уже позволяет владельцу проверять всё, никому не доверяя. Создание блоков — отдельный шаг: узел делает это, только когда занимает место в реестре узлов.
Что работает на узле
Узел — это один процесс, запускаемый командой zoobc-node --start node.conf, с одной базой данных SQLite. Он слушает три порта:
| Порт | Назначение | |
|---|---|---|
| 8001 | одноранговая сеть | |
| 8080 | HTTP API, который также отдаёт [[web-wallet | веб-кошелёк]] |
| 8545 | RPC-адаптер в стиле Ethereum, которым пользуется [[metamask | MetaMask]], по умолчанию только на собственной машине узла (loopback) |
Узел никогда не строит генезис-блок. Блок 0 уже должен быть в его базе данных, и хеш этого блока — идентичность цепочки (см. Генезис-блок). Если узел обнаруживает, что застрял на ветви, с которой не может уйти («застрявший» узел), он отбрасывает свою цепочку и восстанавливается из снимков, закреплённых в spine-цепочке, потому что настройка auto_resync по умолчанию включена. Релиз может также поставлять пин релиза — известный spine-блок, с которым должна совпадать собственная spine-цепочка узла. Новые версии приходят через программу обновления, которая работает рядом с узлом и которой управляет владелец (релизы и обновления).
От включения до создания блоков
- Оператор создаёт два ключа: ключ узла для машины и ключ владельца в кошельке (ключи узла).
- Владелец отправляет регистрацию, которая блокирует стейк и несёт доказательство того, что два ключа связаны друг с другом (регистрация узла).
- Узел ждёт в публичной очереди, упорядоченной по стейку, умноженному на время ожидания (очередь).
- Таймер допуска впускает узлы по одному, в медленном темпе, который задаёт протокол (темп допуска).
- После допуска узел участвует в жеребьёвке на создание блоков (жеребьёвка), ретранслирует блоки и транзакции назначенным ему пирам (квитанции и топология сети) и, после короткого периода созревания, получает долю вознаграждений (зрелость и доходы).
Каждая цепочка начинается с 11 генезис-мест, принадлежащих ZooBC Foundation. Все остальные входят через очередь, и никто не выбирает, кого впустить. Ни одно место не выдаётся вручную, и ни одно нельзя выиграть вычислительной мощностью, как в Proof of Work.
Как остаться в реестре
Место удерживается выполнением работы. Зарегистрированный узел, пропустивший ход, на который был выбран, по любой причине становится отсутствующим до тех пор, пока не создаст свой следующий собственный блок. Пока он отсутствует, он ничего не зарабатывает, а его оценка участия падает на 5 пунктов (из 100) за единицу оценки, которая в сети меньше чем из 2 880 узлов равна 12 часам. Квитанции, которые он подписывает, и пинги не прекращают это состояние; его прекращает только собственный следующий блок.
На четвёртом пропущенном ходе подряд узел к тому же приостанавливается: он выходит из жеребьёвки производителей, но сохраняет место. Когда он снова в сети, его программа отправляет пинг — небольшую транзакцию без комиссии, которую может отправить только приостановленный узел, — и он возвращается в жеребьёвку на испытательный срок. Если оценка достигает нуля, узел исключается. Подробности — в статье пропущенные ходы, приостановка и исключение; все способы, которыми может закончиться место, — в статье выход из реестра, а все числа — в статье параметры узла в mainnet.
См. также
Статьи по этой теме
- Выход из реестра
Как заканчивается место (удаление владельцем, исключение при нулевой оценке, заявка с ключом узла) и когда владелец получает весь стейк обратно, а когда теряет его десятую часть. - Зрелость и доходы
Что зарабатывает зарегистрированный узел, как лотерея coinbase распределяет вознаграждения каждого блока по оценке участия и почему новый узел должен созреть, прежде чем что-либо заработать. - Ключи узла
Ключ узла, которым подписывается работа узла, и ключ владельца, который управляет его местом и стейком: где хранится каждый, что подписывает каждый и как они связаны. - Очередь
Как зарегистрированные новички ждут места: порядок по стейку, умноженному на время ожидания, ежедневная проверка явки и сколько стоит выход из очереди. - Параметры узла в mainnet
Справочная таблица значений mainnet, которые управляют регистрацией узлов, очередью, допуском, живучестью, доходами, выходом, обновлениями и процессом узла, — по одной строке на каждое. - Регистрация узла
Как владелец регистрирует узел: транзакция NodeRegistration, доказательство владения, связывающее ключ узла и владельца, и наименьший стейк, который принимает очередь. - Реестр узлов и его места
Хранящийся в цепочке список узлов, которым разрешено создавать блоки: что записано о каждом месте, почему производство блоков определяют места, а не монеты, и как его может прочитать любой. - Релизы и обновления
Как новые версии узла объявляются в цепочке, как программа обновления рядом с каждым узлом безопасно их устанавливает и как включается набор новых правил консенсуса. - Темп допуска
Почему ZooBC допускает новичков в реестр по одному и медленно, формула, задающая задержку между допусками, и расписание, которое она даёт в mainnet.