Исходный код
Один репозиторий под лицензией MIT: узел, кошелёк, командная строка, наборы параметров и эталонные векторы, определяющие протокол. Всё, на чём работает сеть, лежит здесь.
Ничто на этом сайте не стоит больше того, что вы можете проверить, никого не спрашивая, и проверка начинается здесь. Анонимный автор не может предложить вам репутацию; взамен предлагается дерево исходников, которое можно прочитать, собрать и сравнить с бинарниками, которые вам вручили.
Склонируйте его#
git clone https://gitlab.com/zycord-group/zycord-node.git
cd zycord-node
Или сначала почитайте его в браузере: gitlab.com/zycord-group/zycord-node.
Канонические расположения этого проекта — включая это самое — закреплены в подписанном заверении в ветке анонса под ключом проекта E724 39CE DD85 11F9 D607 550B 87FD 60D5 EB4A 0B29. Дерево, размещённое где-либо ещё, — это копия: она может быть честной, может быть устаревшей, может быть враждебной, и эта страница не скажет вам, какая именно. Сверьтесь с подписанным списком, прежде чем доверять зеркалу, и собирайте с тега, хеш которого проверили сами.
Что в нём лежит#
| Каталог | Что содержит |
|---|---|
spec/ | Протокол. Наборы параметров, эталонные векторы и предварительно развёрнутые образы библиотеки. Реализация, проходящая векторы, — равный участник, а не форк. |
core/ | Код, критичный для консенсуса, только стандартная библиотека: модель ячеек, бесстостояние действительности, свёртка (fold), адаптированная под сертификаты EVM и RandomX за флагом сборки. |
node/ | Узел вокруг этого ядра — хранилище, мемпул, майнер, пиринговый слой, синхронизация, RPC только на чтение, Stratum. |
wallet/ | Управление ключами и сборщики сертификатов. Это образец, а не консенсус. |
cmd/ | zycordd — узел; zcd — командная строка и кошелёк. |
sim/ | Симулятор и фаззинг-обвязки, вторая, нарочно наивная свёртка (fold), которую фаззят против настоящей, и хаос-прогон, гоняющий настоящие узлы через настоящие сокеты. |
contracts/ | Эталонные контракты на Solidity. |
packaging/ | Установочный скрипт и пакеты под платформы — их можно прочитать до того, как запускать. |
docs/ | Архитектура, справочник по протоколу, руководство по эксплуатации и техническое описание. |
Протокол — это векторы#
Код на Go в этом дереве — это одна из реализаций, и намеренно не то самое
определение. Сеть определяют
наборы параметров и эталонные
векторы: каждое правило свёртки (fold), блока и действительности как случай
(состояние до, блок) → (состояние после, комиссии), положительный и отрицательный. Пишите свой
узел на любом языке — если он проходит корпус, он равный участник, и эта реализация не имеет над ним старшинства.
Высоты активации лежат там же. h1_bond и h1_vm — это
параметры, зафиксированные в генезис-блоке, а не выпуск: машина вкомпилирована в каждый бинарник и
отклоняется ниже своей высоты, так что эра наступает потому, что цепочка дошла до некоторого числа, и никогда потому,
что операторов попросили обновиться.
Соберите его#
make build # no cgo, reproducible, development engine only
make build-randomx # the network binary: mainnet and the public testnet
Подключиться к сети может только сборка с RandomX. Сборка по умолчанию побайтово
воспроизводима и запускает локальный devnet; обе намеренно пишут разные файлы, так что бинарник, который
не может говорить с mainnet, никогда не спутать с тем, который может. Тулчейн Go закреплён на
go1.26.2, и сборка отказывается идти под чем-либо иным, потому что один и тот же исходник,
собранный двумя выпусками Go, — это два разных бинарника.
Пересборка опубликованного тега и сравнение хешей — это и есть проверка, заменяющая доверие к издателю: полная процедура в разделе Проверка загрузки, а Установка описывает сборку для обычного использования.
Ошибки и безопасность#
Ошибки, вопросы и патчи идут в трекер задач, а CONTRIBUTING.md говорит, что нужно изменению, прежде чем его примут.
Уязвимость идёт по процессу раскрытия из SECURITY.md, а не в трекер. Проекту нужен отчёт, а не презумпция невиновности, и дефект, найденный до mainnet, не стоит никому ничего.
Лицензия#
MIT — на всё дерево. Форкайте, поставляйте, продавайте, переименовывайте — лицензия просит
указание авторства и больше ничего. Единственное, чего она вам не даст, — это сеть: её решают
узлы, принимающие ваши блоки, а принимают они их по правилам из
spec/.