ZYCORD docs
Русский
ZycordДокументацияУстановка

Установка

Как получить файлы на машину и понять, что именно вы получили. Настоящая эксплуатация узла — это Запуск узла; эта страница про установку.

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 заблокирован» нажмите Всё равно открыть; подтвердите и пройдите аутентификацию.

Не следуйте старым советам щёлкнуть с Control и выбрать «Открыть»

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 ещё не существует. Генезис-блок ещё не появился.