Установка
Как получить файлы на машину и понять, что именно вы получили. Настоящая эксплуатация узла — это Запуск узла; эта страница про установку.
Zycord — это две консольные программы и одно настольное приложение:
| Имя | Что это |
|---|---|
zcd | Консольная утилита: ключи, кошельки, генезис-блок, эталонные векторы и zcd ui. |
zycordd | Узел: проверяет, майнит, обслуживает пиров, отвечает на RPC только для чтения. |
| Zycord Wallet | Настольное окно вокруг того же интерфейса кошелька, который отдаёт zcd ui. |
Первый помеченный тегом релиз ещё не опубликован, поэтому сборка из исходного кода сейчас — это способ начать, и читать следует раздел ниже. Пути через менеджеры пакетов и релизные архивы, описанные дальше, — это та форма, в которой проект будет поставляться, когда начнётся выпуск тегов; они задокументированы здесь потому, что манифесты лежат в репозитории и их можно изучить уже сейчас, а не потому, что есть что скачивать. Появятся они на странице релизов.
Сборка из исходного кода#
Версия Go — go1.26.2, и она часть исходного кода. Два выпуска Go
компилируют один и тот же пакет в разный машинный код, поэтому бинарник — это в той же мере результат работы
компилятора, что и репозитория — пересборка другим Go даёт другой файл из
идентичного дерева. Поэтому make build закрепляет её (GOTOOLCHAIN=go1.26.2 в
Makefile) и отказывается собирать под любой другой, вместо того чтобы
выдать вам бинарник, чей хеш не совпадёт, и не объяснить почему.
git clone https://gitlab.com/zycord-group/zycord-node.git
cd zycord-node
make build
Если у вас нет go1.26.2, искать его не придётся: закрепление заставляет команду
go при первом использовании скачать именно этот набор инструментов и сверить его с собственной
базой контрольных сумм Go. Это единственное в этой сборке, что обращается к сети.
Какой бинарник может подключиться к сети#
Это важнейший абзац на странице. RandomX компилируется за тегом сборки, поэтому сборок две, и лишь одна из них может говорить с сетью на RandomX — а это и mainnet, и публичный testnet.
# Default: no cgo, no C toolchain, development engine only.
# Byte-for-byte reproducible. Runs a local devnet and nothing else.
make build # -> bin/zcd, bin/zycordd
# The network binary. cgo, so not reproducible.
make build-randomx # -> bin/zcd-randomx, bin/zycordd-randomx
Две сборки намеренно пишут разные файлы. Раньше они писали одни и те же
два пути, так что запущенная второй заменяла первую, и имя ничего не говорило о том, какой
движок внутри. Запускайте zcd-randomx там, где сеть на RandomX, и zcd
там, где нет; после сборки обоих присутствуют оба.
Бинарник, собранный без тега, отказывается запускаться в сети, чей
pow_engine он не умеет вычислять. В этом отказе весь смысл: не имея запасного движка,
кроме отладочного, такой узел принимал бы один проход BLAKE3 как доказательство работы для
любого встреченного заголовка — каждая подделка действительна, каждая развилка невесома, и ничего в журнале.
Обратное несимметрично: бинарник с тегом несёт оба движка и корректно работает в devnet.
Спросите у бинарника, какой из них у вас в руках:
zcd version
go installИ это не упущение. go install разрешает путь модуля через прокси модулей,
а корневой модуль назван zycord — без хоста, без точки в первом элементе пути,
что набор инструментов отвергает сразу. Имя выбрано намеренно: go.mod не заявляет
никакого хоста, потому что хост — это поверхность идентичности. Клонирование выше — это путь через набор инструментов Go, и оно
в любом случае надёжнее — вы собираете тег, который сами выгрузили, а не то, что отдал прокси.
Два уровня гарантий, названные, а не подразумеваемые#
Как только релизы появятся, наборов архивов будет два, и это непересекающиеся наборы. Вот таблица, которую стоит прочесть, прежде чем решать, какой брать.
| Артефакт | Воспроизводим? | Подключается к mainnet? | Почему |
|---|---|---|---|
zcd, zycordd — собраны из исходного кода через make build | Да, побайтово одинаково | Нет | Чистый Go, CGO_ENABLED=0, -trimpath, без идентификатора сборки — и потому без движка RandomX. Больше не поставляется как загрузка; SHA256SUMS.binaries публикуется, чтобы вы могли собрать и сравнить. |
zcd, zycordd — архив -randomx | Нет | Да | cgo: RandomX написан на C++, поэтому системный набор инструментов C попадает в результат |
| Zycord Wallet, Linux и macOS | Нет | неприменимо | cgo: системный набор инструментов C и платформенный SDK попадают в результат |
| Zycord Wallet, Windows | Да, побайтово одинаково | неприменимо | Без cgo: Wails обращается к WebView2 через чистый Go |
Релизы поставляют только архивы -randomx — релиз,
выдающий архив, который не может подключиться к сети, — это релиз, выдающий заряженный пистолет. Их контрольные суммы
лежат в SHA256SUMS.randomx, и они намеренно не входят в
SHA256SUMS.binaries, потому что сборку с cgo никто не может повторить байт в байт.
SHA256SUMS.binaries перечисляет, какие хеши должна дать сборка, сделанная вами самими. Смысл того, что это сказано вслух, в том, что это ваше решение, а
не предположение, сделанное за вас.
Почему ваша операционная система предупредит вас и почему сертификата нет#
Неподписанный исполняемый файл блокируется SmartScreen в Windows и Gatekeeper в macOS. Обычное решение — сертификат подписи кода. Здесь это решение недоступно по устройству, а не из-за бюджета, и причину стоит понять, прежде чем что-либо устанавливать — пользователя, знающего, почему появляется предупреждение, гораздо труднее обмануть поддельным установщиком.
Сертификат Authenticode — это удостоверяющий центр, подтверждающий проверенную юридическую личность. В этом вся его функция; не существует его версии без юридического имени внутри. Apple Developer ID — та же проблема с другим поставщиком. Zycord публикуется под псевдонимом, и покупка сертификата разрушила бы это немедленно.
Поэтому псевдоним сохраняется. Это не дыра в истории доверия; это выбор другой истории, и для этого проекта — более сильной:
Сертификат утверждает: «это пришло от лица X».
Воспроизводимая сборка утверждает: «это получено из этого исходного кода, и проверить может любой».
Для анонимной сети весомее второе, и это не лозунг: CI
пересобирает zcd дважды при каждой отправке в main и на каждом теге и падает, если
два бинарника различаются хоть байтом. Вам не нужно доверять тому, кто собрал скачанный вами бинарник.
Вы можете собрать его сами и сравнить хеши — и если они совпадут, вопрос о том, кто его собрал,
перестаёт иметь значение. Эта процедура описана в разделе Проверка загруженного файла.
Менеджеры пакетов#
Вместо того чтобы воевать со SmartScreen и Gatekeeper, проект проходит в дверь, которую они оставляют открытой. Менеджер пакетов устанавливает по URL и хешу, не требует подписи и не вызывает ни одного предупреждения. Манифесты лежат в репозитории (packaging/) и доступны для изучения уже сейчас; отдающие их источники будут опубликованы с первым релизом.
Windows — Scoop#
Scoop не снимает метку веб-происхождения; метка попросту никогда не
ставится. Метку веб-происхождения ставят браузеры и оболочечный API Windows для запуска вложений,
а не сырые HTTP-клиенты, а Scoop скачивает через [Net.HttpWebRequest] или
aria2. Проверка репутации приложения в SmartScreen срабатывает на помеченных файлах, запущенных из Проводника; файл,
который никогда не помечался и запущен через прослойку из терминала, до этого пути вовсе не доходит.
Манифест закрепляет URL релиза и SHA-256, поэтому Scoop проверяет загрузку до того, как её
установит.
То, что устанавливает Scoop, работает с --devnet и отвергает mainnet и публичный
testnet — см. таблицу двух уровней выше. Чтобы подключиться к сети в Windows, возьмите
zip -randomx для x86-64 на странице загрузок; для Windows на
ARM такой сборки нет, и она доступна только в devnet. zcd version печатает, какой движок несёт
бинарник.
Windows без Scoop
Переносимый zip выбран намеренно: нет ни установщика .exe, ни
MSI, потому что именно неподписанный установщик запускает худший путь SmartScreen —
полноэкранную блокировку «Windows защитила ваш компьютер». Распакованные файлы запускаются из терминала без
этого. Настольному кошельку нужна среда выполнения WebView2, предустановленная в Windows 11 и
современных Windows 10; если её нет, окно не откроется, и обходной путь — zcd ui в браузере.
macOS — Homebrew#
Оба пакета — это формулы, а не каски, и в этом весь фокус: формула собирает из исходного кода на вашей машине, поэтому бинарник не является скачанным файлом и не имеет атрибута карантина. Gatekeeper его вовсе не видит. Это также означает, что вы вообще не доверяете сборке проекта — Homebrew забирает архив с исходным кодом, проверяет его SHA-256 и компилирует его вашим собственным набором инструментов.
Формула собирает бинарники на чистом Go, поэтому то, что она устанавливает, работает с --devnet
и отвергает mainnet и публичный testnet. Чтобы подключиться к сети на macOS, возьмите
архив -randomx для своей архитектуры или соберите его сами через
make build-randomx.
Каск — это противоположность, и такого этот проект не поставляет: скачанное,
помещённое в карантин .app без подписи, которое работает, только если попросить людей отключить
функцию безопасности. Homebrew намеренно закрывает этот путь —
--no-quarantine объявлен устаревшим в Homebrew 5.x.
macOS из zip-архива релиза
.app внутри находится в карантине, и macOS откажется его открывать.
Чтобы открыть его всё же: дважды щёлкните по нему и закройте отказ; перейдите в Системные настройки →
Конфиденциальность & безопасность, прокрутите до раздела Безопасность; рядом с «Zycord Wallet
заблокирован» нажмите Всё равно открыть; подтвердите и пройдите аутентификацию.
macOS 15 (Sequoia) убрала этот способ. Щелчок с Control больше не переопределяет Gatekeeper, и Системные настройки теперь единственный путь.
У консольного архива такой проблемы нет: zcd и zycordd запускаются
из терминала, где xattr -d com.apple.quarantine снимает проверку первого запуска
одной командой.
Linux#
Никаких привратников. Сначала проверьте контрольную сумму и подпись — см. Проверка загруженного файла — затем:
tar xzf zycord-<version>-linux-amd64-randomx.tar.gz
sudo install -m755 zycord-<version>-linux-amd64-randomx/zcd /usr/local/bin/
sudo install -m755 zycord-<version>-linux-amd64-randomx/zycordd /usr/local/bin/
zcd version # must name randomx-v1
Это единственный архив узла, который поставляет релиз; обычного, который можно было бы взять по
ошибке, больше нет. В Debian и Ubuntu .deb делает больше, чем просто раскладывает файлы — он приносит
unit systemd и непривилегированную учётную запись — и оба пути вместе со скриптом установки
разобраны на странице загрузок. Настольный
кошелёк в Linux поставляется как AppImage, потому что у libwebkit2gtk в каждом
дистрибутиве своё имя пакета.
На сервере#
curl | shНаправлять непроверенный скрипт в оболочку — неверная позиция для программ, которые держат деньги, и она неверна даже тогда, когда скрипт принадлежит этому проекту — вся аргументация этой страницы в том, что вам не должно быть нужно доверять издателю. packaging/install.sh скачивает, проверяет контрольную сумму и подпись и только затем устанавливает. Получите его, прочитайте, затем запустите.
install.sh устанавливает аттестованный архив — тот, что на чистом Go
— потому что именно об этом уровне его обход с проверкой контрольной суммы и подписи, а скрипт, который
проверил бы подпись и затем установил что-то другое, был бы театром. Поэтому бинарники, которые он кладёт
в /usr/local/bin, отвергают mainnet и публичный testnet, и скрипт говорит об этом
последней строкой, которую печатает. Для сервера, который должен подключиться к сети, распакуйте архив
-randomx вручную.
Чтобы пользоваться интерфейсом кошелька на сервере, не открывайте порт наружу. zcd
ui привязывается к петлевому интерфейсу и отвергает любой другой; пробросьте его через ssh. Процедура описана в разделе
Запуск узла.
От чего всё это вас не защищает#
Сказано прямо, потому что страница о безопасности, перечисляющая только свои сильные стороны, — это реклама.
- Вредоносный репозиторий. Воспроизводимые сборки доказывают, что бинарник соответствует своему исходному коду. Они ничего не говорят о том, честен ли исходный код. Прочитайте его — и прогоните эталонные векторы на том бинарнике, которому собираетесь довериться.
- Поддельная страница релизов. Если кто-то поднимет убедительный клон, а вы никогда не проверяете подпись, совпадение хешей с файлом контрольных сумм с той же страницы не доказывает ничего. Якорь — отпечаток ключа проекта
E724 39CE DD85 11F9 D607 550B 87FD 60D5 EB4A 0B29. - Скомпрометированная машина. Кошелёк не может защитить хост, который уже потерян.
- Лгущий узел.
zcdи кошелёк не являются полными узлами; они верят тому, что говорит им узел. Именно поэтому кошелёк отвергает узел, чей идентификатор цепочки расходится с заявленной вами сетью, и поэтому существует--confirm-rpc— см. Кошелёк. - Любой, кто продаёт вам ZCD. Монеты mainnet ещё не существует. Генезис-блок ещё не появился.