Русскоязычный журнал про Zcash Русскоязычный журнал

Узел Zcash Zebra: установка, настройка и история версий

27 мая 2022

Полностью проверено и обновлено 13 августа 2026 года. Инструкция проверена для Zebra 6.3.0.

Автор: ruzcash

Узел Zcash Zebra: установка, настройка и история версий

Zebra — это полноценный узел Zcash, написанный на Rust. Он подключается к одноранговой сети, проверяет блоки и транзакции, передаёт их другим участникам и хранит собственное состояние блокчейна. Zebra не является кошельком: для хранения и отправки ZEC нужен отдельный кошелёк или связка с другими компонентами инфраструктуры.

Важно: номер актуальной версии лучше проверять перед установкой. Релизы Zebra имеют высоту окончания поддержки, поэтому однажды установленный узел нельзя оставлять без обновлений на годы. На 13 августа 2026 года последняя стабильная версия — 6.3.0. Обновление Ironwood уже активировано в основной сети на блоке 3 428 143. Начиная с Zebra 6.3.0 высоту и расчётное время окончания поддержки установленной версии можно узнать через RPC-метод getdeprecationinfo.

Как установить Zebra: быстрый выбор

Раньше эта статья сразу начиналась со сборки из исходников. Сейчас начинать с компиляции уже не обязательно. Для большинства пользователей проще взять официальный Docker-образ или подписанный исполняемый файл для Linux, проверить запуск и только потом переходить к тонкой настройке.

СистемаСамый простой путьЧто важно знать
Linux x86_64Docker или готовый исполняемый файлИсполняемый файл требует glibc 2.34 или новее
Linux ARM64Docker или готовый файл для ARM64ARM64 теперь официальный вариант
Raspberry Pi 5Готовый файл для ARM64 или DockerНужен SSD/NVMe; 8 GB RAM ниже рекомендации
macOS Intel / Apple SiliconDocker DesktopНативно — сборка из исходников, Tier 3
Windows x86_64Docker Desktop или WSL2Нативно — сборка MSVC, Tier 3

Tier 3 не означает, что Zebra обязательно не запустится. Это означает, что Zcash Foundation не выпускает для этой системы готовый исполняемый файл и не даёт тех же гарантий автоматического тестирования, что для Linux.

Системные требования

Официальные рекомендации для Mainnet:

  • 4 или более CPU-ядер;
  • 16 GB оперативной памяти;
  • не менее 300 GB свободного дискового пространства;
  • соединение от 100 Mbps и примерно 300 GB трафика в месяц.

Минимум — 2 CPU-ядра, 4 GB RAM и около 300 GB диска. Но официальный минимум описывает возможность запуска, а не комфортную эксплуатацию на несколько лет. Я бы выбирал SSD или NVMe от 512 GB. База продолжает расти, а во время обновления иногда нужен дополнительный запас для миграции или старого формата состояния.

Zebrad успешно работает на Raspberry Pi 5 с 8 GB RAM и 512 GB NVMe. Сам ARM64 больше не считается экспериментальным: для него есть официальный исполняемый файл и многоплатформенный Docker-образ. Однако конкретный Raspberry Pi всё равно остаётся машиной ниже рекомендованной конфигурации, поэтому первая синхронизация и тяжёлые RPC-запросы могут выполняться дольше.

Mainnet использует 8233/tcp для P2P и 8232 для RPC. На Testnet это 18233 и 18232. Для синхронизации достаточно исходящих соединений. Если вы хотите помогать сети входящими подключениями, откройте только P2P-порт. RPC, порт метрик 9999 и адрес проверки состояния 8080 лучше оставлять на 127.0.0.1 или в закрытой внутренней сети.

Способ 1. Docker

Docker — самый короткий и одинаково понятный способ. Он подходит для Linux, а через Docker Desktop — для macOS и Windows. Ниже я фиксирую номер релиза, чтобы сегодня команда не означала один образ, а завтра другой.

docker pull zfnd/zebra:6.3.0

docker run -d \
  --name zebra \
  --restart unless-stopped \
  -p 8233:8233 \
  -v zebrad-cache:/home/zebra/.cache/zebra \
  zfnd/zebra:6.3.0

Том zebrad-cache сохраняет состояние между перезапусками и заменой контейнера. Без постоянного тома удаление контейнера приведёт к новой синхронизации с нуля.

docker logs -f zebra
docker exec zebra zebrad --version
docker ps --filter name=zebra

На macOS и Windows Docker запускает Linux-контейнер. Это самый простой практический путь, но официальная Tier 1-платформа Zebra всё равно Linux. Каталог Docker должен находиться на диске, где хватает места для всей цепочки.

Способ 2. Готовый исполняемый файл для Linux

Каждый релиз Zebra содержит готовые исполняемые файлы в архивах для Linux x86_64 и ARM64. Они собираются на Ubuntu 22.04 и требуют glibc 2.34 или новее: обычно это Ubuntu 22.04+, Debian 12+, RHEL 9+ или Amazon Linux 2023.

Пример для x86_64:

mkdir -p ~/zebra-install && cd ~/zebra-install

curl -LO https://github.com/ZcashFoundation/zebra/releases/download/v6.3.0/zebrad-6.3.0-x86_64-unknown-linux-gnu.tar.gz
curl -LO https://github.com/ZcashFoundation/zebra/releases/download/v6.3.0/SHA256SUMS

sha256sum --ignore-missing -c SHA256SUMS
tar xzf zebrad-6.3.0-x86_64-unknown-linux-gnu.tar.gz

mkdir -p ~/.local/bin
install -m 0755 zebrad ~/.local/bin/zebrad
~/.local/bin/zebrad --version

На ARM64 замените x86_64 на aarch64. Официальная инструкция также показывает проверку происхождения сборки через GitHub Attestations и Cosign. Для серьёзного узла лучше проверить не только SHA256, но и происхождение сборки.

Отдельная оговорка про новый установщик. На 13 августа 2026 года scripts/install-zebra.sh и в теге v6.3.0, и в ветке main всё ещё закреплён на Zebra 6.2.0. Встроенная в него SHA256 для Linux x86_64 не совпадает с опубликованной контрольной суммой архива 6.2.0, поэтому проверка останавливает установку. Я пока не ставлю команду этого установщика в начало статьи и не советую обходить проверку. Надёжнее использовать Docker или архив со страницы выпуска.

Способ 3. cargo binstall

Если Rust и cargo-binstall уже установлены, Zebra Book предлагает одну команду:

cargo binstall zebrad
zebrad --version

На поддерживаемом Linux этот способ скачивает готовый исполняемый файл выпуска. Если подходящего артефакта нет, внимательно смотрите вывод: незаметно превращать установку готового файла в долгую сборку на слабом компьютере не стоит.

macOS и Windows

Для macOS и Windows официальных готовых исполняемых файлов Zebra 6.3.0 нет. Поэтому простой путь — Docker Desktop. На Windows также удобно использовать WSL2 с современным Ubuntu и выполнять Linux-инструкцию внутри него.

Нативная сборка относится к Tier 3. На macOS понадобятся Xcode Command Line Tools, Rust, libclang и компилятор C++. На Windows — Rust MSVC toolchain, Visual Studio Build Tools с C++ и LLVM/libclang. Эти пути возможны, но их лучше выбирать, если вы готовы разбирать ошибки конкретной системы.

Полная установка Zebra из исходников

Этот раздел сохраняю для разработчиков, нестандартных систем и тех, кому действительно нужна собственная сборка. Для обычного узла она больше не является первым шагом.

Для сборки zebrad 6.3.0 нужны Rust 1.91 или новее, компилятор C++ и libclang. protoc остаётся необязательным и нужен только в специальных сценариях разработки. Собирать ветку main в пользовательской инструкции не стоит: между выпусками там находится будущий код. Фиксируем стабильный тег.

1. Зависимости на Debian и Ubuntu

sudo apt update
sudo apt install -y build-essential clang libclang-dev llvm-dev git curl pkg-config

Названия пакетов зависят от дистрибутива. На Arch Linux обычно нужны rust, clang и protobuf. Для своей системы сверяйтесь с актуальным руководством по установке.

2. Rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
rustup update stable
rustc --version
cargo --version

Если rustc ниже 1.91, текущий релиз не соберётся.

3. Стабильный тег и сборка

git clone --depth 1 --branch v6.3.0 https://github.com/ZcashFoundation/zebra.git
cd zebra
cargo build --release --locked --bin zebrad
./target/release/zebrad --version
./target/release/zebrad start

Исполняемый файл находится в zebra/target/release/zebrad. Если вы собираетесь запускать его из любого каталога, можно установить копию в ~/.local/bin:

mkdir -p ~/.local/bin
install -m 0755 ./target/release/zebrad ~/.local/bin/zebrad
export PATH="$HOME/.local/bin:$PATH"

Строку export PATH=... можно добавить в ~/.bashrc или ~/.zshrc, а затем выполнить source ~/.bashrc либо открыть новый терминал.

Возможные ошибки при сборке

Не найден libclang. На Debian/Ubuntu установите одновременно clang и libclang-dev. Если библиотека находится в нестандартном каталоге, укажите LIBCLANG_PATH. Команда ldconfig -p | grep libclang подходит только для Linux.

Ошибка при перегенерации protobuf-кода. Для обычной сборки стабильного тега protoc не требуется. Если вы меняете .proto или сборка прямо просит этот компилятор, проверьте protoc --version и установите protobuf-compiler.

GCC 15 и RocksDB. На Ubuntu 25+, Arch Linux и других новых системах при соответствующей ошибке сборки официальный README Zebra рекомендует временно задать:

export CXXFLAGS="$CXXFLAGS -include cstdint"

Используйте эту переменную только при ошибке RocksDB. Не добавляйте её навсегда в профиль командной оболочки.

Старый Rust.

rustup update stable
rustup default stable
rustc --version
cargo --version

Не хватает памяти. На ARM или небольшом VPS уменьшите количество параллельных задач:

CARGO_BUILD_JOBS=1 cargo build --release --locked --bin zebrad

Swap может помочь закончить сборку, но не превращает маломощную систему в рекомендуемый сервер. Если компиляция упирается в RAM много часов, готовый файл для ARM64 обычно разумнее.

Первый запуск и проверка узла

Для обычного Mainnet-узла конфигурационный файл не обязателен:

zebrad start

После запуска начнётся синхронизация. Не оценивайте её по одной минуте: узел сначала ищет соседние узлы, проверяет локальное состояние и только затем выходит на рабочую скорость. На быстром современном сервере полная синхронизация может занимать часы, на Raspberry Pi — заметно дольше.

Базовая проверка:

zebrad --version
ss -ltnp | grep 8233
df -h

Если узел работает как сервис, дополнительно проверяем сам сервис и последние сообщения, а не только наличие процесса:

systemctl status zebra.service
journalctl -u zebra.service -n 100 --no-pager

Для окончательной проверки полезно увидеть одновременно версию, активный сервис, ответ RPC, число соседних узлов и актуальную высоту. Сам по себе запущенный процесс ещё не доказывает, что узел подключён к правильной цепочке и продолжает синхронизацию.

Как обновлять Zebra

Перед заменой исполняемого файла остановите узел и дождитесь чистого завершения. Не убивайте процесс через несколько секунд только потому, что большая база закрывается не мгновенно.

Docker

docker pull zfnd/zebra:6.3.0
docker stop zebra
docker rm zebra

docker run -d \
  --name zebra \
  --restart unless-stopped \
  -p 8233:8233 \
  -v zebrad-cache:/home/zebra/.cache/zebra \
  zfnd/zebra:6.3.0

Состояние остаётся в томе. Перед командой убедитесь, что старый контейнер действительно использовал тот же том.

Готовый исполняемый файл или cargo-binstall

Остановите сервис, проверьте новый архив, замените исполняемый файл, снова проверьте zebrad --version и запустите сервис. Для cargo-binstall повторите cargo binstall zebrad, но внимательно прочитайте, какую версию он собирается установить.

Исходники

git fetch --tags
git checkout v6.3.0
cargo build --release --locked --bin zebrad
./target/release/zebrad --version

Переход на новую основную версию требует отдельного чтения описания выпуска. Например, Zebra 6 перевела базу в формат 28. Миграция не требует синхронизации с нуля, но после неё нельзя безопасно запустить старый исполняемый файл на той же базе. Перед серьёзным переходом сделайте резервную копию, если хотите сохранить возможность отката.

Если включён локальный RPC с cookie-аутентификацией, после обновления дополнительно проверьте срок поддержки версии:

COOKIE="$(cat ~/.cache/zebra/.cookie)"

curl --user "$COOKIE" \
  --header 'content-type: application/json' \
  --data-binary '{"jsonrpc":"2.0","id":"eos","method":"getdeprecationinfo","params":[]}' \
  http://127.0.0.1:8232/

unset COOKIE

Метод getdeprecationinfo появился в Zebra 6.3.0. Он показывает высоту и расчётное время остановки установленного выпуска, но не обновляет узел автоматически.

Установка Zebra с помощью ИИ-агента

Отдельно стоит сказать про ИИ-агентов. Сейчас они вполне справляются с обычной установкой Zebra на Linux: могут проверить архитектуру и свободное место, подобрать актуальный релиз, подготовить Docker или systemd и разобрать ошибки по журналу.

Но агенту всё равно нужно заранее задать границы доступа. Приватные ключи ему не нужны, а версию, контрольную сумму, открытые порты, пользователя сервиса, соседние узлы и высоту узла после установки лучше проверить отдельно. Хороший запрос выглядит примерно так:

Сначала только проверь систему и покажи план. Используй официальный стабильный
выпуск Zebra и проверь SHA256 или подтверждение происхождения сборки. Не удаляй существующую базу,
не меняй её владельца рекурсивно и не открывай RPC, метрики или проверку состояния наружу.
После установки покажи: zebrad --version, состояние сервиса, слушающие порты,
число соседних узлов, текущую высоту и последние ошибки журнала.

ИИ ускоряет рутинную работу и поиск причины ошибки, но не отменяет ответственность оператора. Особенно осторожно нужно относиться к командам удаления базы, форматирования диска, скачивания снимка состояния и запуску скрипта прямо из интернета.

История узла Zebra

Zebra является современной реализацией узла для подключения к одноранговой сети Zcash, полностью написанной на языке программирования Rust. Каждый пользователь, установивший и запустивший собственный узел Zcash, способствует повышению устойчивости сети за счёт проверки и передачи транзакций, а также более распределённого поддержания состояния блокчейна. Мировое распределение узлов лежит в основе любой децентрализованной сети.

Первоначальная реализация узла Zcash носит название zcashd и была разработана Electric Coin Company как форк Bitcoin Core на C++. Zebra стала независимой реализацией, созданной с нуля на безопасном для памяти языке Rust. Поскольку zcashd и zebrad реализуют один сетевой протокол, они способны напрямую взаимодействовать в общей сети.

Работа над Zebra началась задолго до стабильной версии: проект был объявлен как совместная инициатива Zcash Foundation и Parity Technologies ещё в 2018 году, а первая alpha появилась в 2019-м. До версии 1.0 команда несколько лет доводила до полноценного состояния консенсус, сеть, хранение состояния, RPC и совместимость с инфраструктурой Zcash.

14 августа 2023 года было объявлено о переносе основного внимания в развитии протокола с zcashd на Zebra:

«Рады сообщить, что мы договорились о переносе основной работы по протоколу Zcash с zcashd на Zebra!

Наши команды будут сотрудничать, чтобы определить, какую функциональность необходимо добавить в Zebra для решения задач и поддержки ключевых пользователей, переходящих на Zebra. ECC продолжит модернизацию основных протоколов Zcash, используя Zebra, и продолжит поддержку zcashd во время перехода».

Историческое объявление Electric Coin Company, 14 августа 2023 года

Старый текст этой статьи связывал завершение перехода с NU7 и ожидал его в 2026 году. Реальный переход закончился раньше: zcashd остановился на блоке 3 417 100, а 28 июля 2026 года Ironwood активировался на блоке 3 428 143. Сеть продолжила работу на Zebra и Zakura. Прежняя оценка остаётся в истории статьи, а теперь известен и итог.

Что улучшилось в поколениях Zebra 1–6

Версия Zebra и Network Upgrade Zcash — не одно и то же. Они связаны, но их номера не совпадают. Начиная с Zebra 3, номер основной версии означает несовместимое изменение для операторов или разработчиков, а не автоматически новый NU.

Zebra 1.0.0 — 14 июня 2023 года

Zebra 1.0.0 стала первой стабильной и прошедшей аудит версией. Узел мог работать в Mainnet, подключаться к P2P-сети, проверять и передавать транзакции и хранить состояние цепочки. Стабильный zebrad появился в crates.io и официальном Docker-образе.

Главным результатом была не отдельная RPC-команда, а появление второго полноценного клиента Zcash. Ошибка в одной кодовой базе больше не обязательно означала ту же ошибку во всех узлах сети.

Zebra 2.0.1 — 30 октября 2024 года

Рабочей вехой поколения 2 нужно называть 2.0.1. Версия 2.0.0 содержала неправильные зависимости и могла остановиться при активации NU6, поэтому её быстро заменили.

В 2.0.1 появилась полноценная поддержка NU6 на Mainnet, были учтены рекомендации аудита Least Authority, а RPC получил cookie-аутентификацию по умолчанию. Для оператора это важный рубеж: локальный RPC перестал быть интерфейсом, который нормально оставлять без защиты даже на доверенной машине.

Zebra 3.0.0 — 17 ноября 2025 года

Zebra 3 стала большим эксплуатационным обновлением: NU6.1, адреса /healthy и /ready, ARM64, новые RPC, SBOM и подтверждение происхождения Docker-сборок.

Полная синхронизация в тестах Zcash Foundation сократилась примерно с 24+ до 15–16 часов, прежде всего благодаря исправлению работы с RocksDB и пакетной проверке Sapling и Orchard. Появилась слоёная конфигурация через значения по умолчанию, TOML и переменные окружения вида ZEBRA_SECTION__KEY.

С этого момента основные версии стали обозначать любые несовместимые изменения. Поэтому переход с 2.x на 3.x требовал прочитать описание миграции, даже если оператор не связывал обновление с новым NU.

Zebra 4.0.0 — 21 января 2026 года

Zebra 4 развила наблюдаемость: OpenTelemetry, автоматическая настройка Grafana, AlertManager и готовые Docker Compose-сценарии. Конфигурационные файлы стали однозначно разбираться как TOML, а RPC продолжил приближаться к ожидаемому поведению zcashd.

Линия 4.x оказалась ещё и большой серией выпусков с исправлениями безопасности. В 4.3–4.5 исправлялись проблемы консенсуса, обработки входных данных, RPC, сетевого поведения и DoS. Практический вывод простой: даже если в описании выпуска нет заметных новых возможностей, откладывать обновление безопасности узла не стоит.

Zebra 5.0.0 — 2–3 июня 2026 года

Zebra 5.0.0 была частью экстренной реакции на критическую проблему Orchard Action circuit. Версия 4.5.3 временно отключила Orchard Actions, а NU6.2 в Zebra 5 активировала исправленную схему и снова включила Orchard.

Это важная историческая веха: не обычный список новых функций, а скоординированное обновление консенсуса. В 5.1 дополнительно исправили старую причину зависания синхронизации, а в 5.2 окно локального отката увеличили с 99 до 1000 блоков.

Zebra 6.0.0 — 10 июля 2026 года

Zebra 6 добавила поддержку NU6.3 Ironwood: новый защищённый пул, транзакции v6 и связанные правила консенсуса. Появились подписанные исполняемые файлы для Linux, уведомления о новых блоках, возобновляемая передача данных индексатору и дополнительные средства защиты сети и временного пула транзакций.

Формат базы изменился на 28. Миграция выполняется без полной синхронизации с начала, но после неё нельзя безопасно запустить старый исполняемый файл на той же базе.

17 июля вышли 6.1.0 и 6.2.0. Первая добавила getstandardfee и несколько исправлений безопасности. Вторая принесла экспериментальный zcashd-compat для бирж и операторов, которые переносили инфраструктуру со старого zcashd.

В 6.2.1 усилили защиту от перегрузки процессора со стороны соседних узлов. Версия 6.2.2 сделала ответы getblock, getblockheader и gettxout согласованными при смене вершины цепочки, исключила пароль Elasticsearch из журнала и убрала возможность исполнения текста журнала как команды в zebrad-log-filter. В 6.2.3 укрепили набор подключений и синхронизацию, а компонент совместимости обновили до zebra-compat-v1.1.0, необходимого для работы после Ironwood.

Zebra 6.3.0 вышла 10 августа 2026 года. В ней появились новые DNS-серверы начального поиска узлов seeder.zec.rocks и seeder.testnet.zec.rocks, RPC-метод getdeprecationinfo и более подробные метрики подключений. Выпуск также исправил несколько способов нарушить синхронизацию или повлиять на блокировку честных узлов. Это не новое поколение Zebra, а актуальный выпуск в рамках поколения 6.

Что Zebra даёт сети Zcash

  • независимую реализацию правил консенсуса;
  • раннее обнаружение неоднозначностей спецификации и несовпадений между клиентами;
  • современную асинхронную и параллельную архитектуру;
  • меньше рисков ошибок ручного управления памятью;
  • новую аудиторию разработчиков Rust и повторно используемые библиотеки;
  • более распределённую P2P-сеть при запуске узлов независимыми операторами.

При этом не нужно преувеличивать. Zebra стала основной современной реализацией правил консенсуса Zcash, но не заменила все части старого монолитного zcashd одной командой. Кошелёк, ZMQ, lightwalletd, индексатор и майнинг — разные сценарии, для которых нужны свои компоненты и настройки.

Настройка zebrad.toml

Если значения по умолчанию подходят, отдельный файл создавать не нужно. Это самый безопасный начальный вариант: значения по умолчанию развиваются вместе с Zebra, а старый пользовательский файл не фиксирует случайно параметры трёхлетней давности.

Файл нужен, когда вы меняете каталог состояния, включаете RPC, метрики, проверки состояния или другой дополнительный сценарий. Сгенерировать текущий шаблон на Linux можно так:

mkdir -p ~/.config
zebrad generate -o ~/.config/zebrad.toml

Везде используется имя zebrad.toml, а не zebra.toml. На macOS стандартный каталог отличается, поэтому надёжнее либо посмотреть путь в документации dirs, либо явно передать файл:

zebrad -c /полный/путь/zebrad.toml start

Конфигурация накладывается слоями: встроенные значения по умолчанию, затем TOML, затем переменные окружения. Например, ZEBRA_RPC__LISTEN_ADDR=127.0.0.1:8232 переопределяет rpc.listen_addr.

Минимальный безопасный пример

[state]
cache_dir = "/var/lib/zebra"

[rpc]
listen_addr = "127.0.0.1:8232"
cookie_dir = "/var/lib/zebra"
enable_cookie_auth = true

Этот пример рассчитан на отдельного пользователя и systemd-раздел ниже, где каталог /var/lib/zebra создаётся с правильными правами. При ручном запуске от своего имени можно не задавать оба каталога и оставить пользовательские значения по умолчанию. Если RPC не нужен, удалите секцию [rpc] полностью: он выключен по умолчанию.

Основные разделы конфигурации

  • [consensus] — синхронизация по контрольным точкам и параметры проверки консенсуса. Обычному узлу лучше оставить значения по умолчанию.
  • [network] — Mainnet/Testnet, адрес P2P, внешний адрес, начальные узлы, размер набора подключений и сетевой кеш.
  • [state] — каталог и сохранение базы, удаление старых форматов и резервная копия неподтверждённого состояния.
  • [sync] — параллелизм загрузки и проверки. Значения по умолчанию подобраны разработчиками и не требуют копирования в каждый конфиг.
  • [mempool] — лимит стоимости транзакций и политика временного пула транзакций. eviction_memory_time хранит ID вытесненной транзакции в списке отклонённых, а не задаёт обычное время жизни транзакции во временном пуле.
  • [rpc] — адрес RPC, cookie-аутентификация, размер ответа и адрес индексатора.
  • [metrics] — адрес для метрик Prometheus.
  • [health] — адреса /healthy и /ready.
  • [tracing] — уровень логов, файл, journald, индикатор синхронизации и OpenTelemetry.
  • [mining] — адрес получения награды за блок и дополнительные данные майнера.
  • [notify] — команда при смене вершины цепочки.
  • [zcashd_compat] — экспериментальный вспомогательный режим, появившийся в Zebra 6.2.0.

Полный набор полей меняется между релизами. Актуальная точка отсчёта — сгенерированный вашим бинарником файл и ZebradConfig.

Мой старый вариант конфигурации

Этот пример был частью статьи и моего эксперимента с Raspberry Pi. Я сохраняю его как историческую справку, но не рекомендую копировать в актуальную Zebra 6.3.0.

[consensus]
checkpoint_sync = true

[mempool]
eviction_memory_time = "1h"
tx_cost_limit = 1000000

[mining]

[network]
crawl_new_peer_interval = "1m 1s"
initial_mainnet_peers = ["dnsseed.z.cash:8233"]
max_connections_per_ip = 4
network = "Mainnet"
peerset_initial_target_size = 15

[rpc]
listen_addr = "127.0.0.1:8232"
debug_force_finished_sync = false

[state]
cache_dir = "/home/ruzcash/.cache/zebra"
delete_old_database = false
ephemeral = false

[sync]
checkpoint_verify_concurrency_limit = 1000
download_concurrency_limit = 50
full_verify_concurrency_limit = 20

[tracing]
progress_bar = "summary"
buffer_limit = 128000
force_use_color = true
use_color = true
use_journald = false
filter = "warn"

Что здесь устарело:

  • initial_mainnet_peers заменяет актуальные начальные узлы одним адресом. В Zebra 6.3.0 такая строка также отключает новые DNS-источники seeder.zec.rocks;
  • max_connections_per_ip = 4 снижает сетевую безопасность; значение по умолчанию и минимум — 1;
  • tx_cost_limit = 1000000 слишком мал по сравнению с текущим значением по умолчанию 80 000 000;
  • peerset_initial_target_size = 15 подходит только как осознанное ограничение трафика; значение по умолчанию — 25;
  • delete_old_database = false может сохранять старые базы размером в сотни гигабайт;
  • sync, buffer и часть остальных значений просто замораживают старые значения по умолчанию;
  • filter = "warn" скрывает полезные эксплуатационные сообщения;
  • force_use_color = true добавляет escape-последовательности в journal.

Полезный принцип из старого раздела остаётся правильным: сохраняйте только параметры, которые действительно хотите изменить.


Дополнительные сценарии использования

Публичный P2P-узел и NAT

Открытый порт 8233 позволяет другим узлам подключаться к вам. Если Zebra находится за NAT, настройте port forwarding на роутере. В новых версиях есть network.external_addr, которым можно явно объявить внешний адрес:

[network]
listen_addr = "[::]:8233"
external_addr = "203.0.113.10:8233"

Замените пример своим реальным адресом. Не копируйте документационный IP. Firewall должен пропускать 8233/tcp, но не обязан публиковать RPC.

Локальный RPC и cookie-auth

[rpc]
listen_addr = "127.0.0.1:8232"
cookie_dir = "/var/lib/zebra"
enable_cookie_auth = true

После запуска cookie обычно находится в каталоге состояния Zebra. Пример запроса:

COOKIE="$(sudo -u zebra cat /var/lib/zebra/.cookie)"

curl --user "$COOKIE" \
  --header 'content-type: application/json' \
  --data-binary '{"jsonrpc":"2.0","id":"check","method":"getblockchaininfo","params":[]}' \
  http://127.0.0.1:8232/

unset COOKIE

Путь задаётся отдельным параметром rpc.cookie_dir, а не state.cache_dir. При ручном запуске без этой строки Linux-default обычно находится в ~/.cache/zebra/.cookie. Не показывайте содержимое cookie в скриншотах. RPC — чувствительный интерфейс: привязка к 0.0.0.0 без отдельной сетевой защиты не является быстрым способом «дать доступ приложению».

Метрики и проверка состояния

[metrics]
endpoint_addr = "127.0.0.1:9999"

[health]
listen_addr = "127.0.0.1:8080"
min_connected_peers = 1
ready_max_blocks_behind = 2
ready_max_tip_age = "5m"

/healthy показывает, что процесс работает и имеет соседние узлы, а /ready — что узел достаточно близок к вершине цепочки для обслуживания запросов. Эти адреса и метрики Prometheus не имеют собственной аутентификации. Для Docker, Kubernetes и Grafana публикуйте их только внутри защищённой сети.

Индикатор синхронизации

Готовые сборки Zebra уже содержат индикатор синхронизации. Для краткого режима:

[tracing]
progress_bar = "summary"

Для подробного — detailed. Он показывает соседние узлы, высоту, загрузку и проверку блоков, завершённое состояние и временный пул транзакций. Оценка оставшегося времени иногда получается нереалистичной, поэтому лучше смотреть не на одну цифру, а на изменение высоты за несколько минут.

Отдельного значения disabled у этого параметра нет: чтобы выключить индикатор, просто не задавайте progress_bar. При его включении обычные логи перенаправляются в файл журнала Zebra, поэтому для сервиса с systemd и journald я бы оставил параметр выключенным.

Подробный индикатор синхронизации Zebra
Подробный режим индикатора синхронизации

Testnet

[network]
network = "Testnet"
listen_addr = "[::]:18233"

[rpc]
listen_addr = "127.0.0.1:18232"
enable_cookie_auth = true

Mainnet- и Testnet-состояние не нужно смешивать в одном каталоге. Для Regtest и собственной тестовой сети Zebra поддерживает отдельные параметры активаций, контрольных точек и потоков финансирования, но это уже среда разработки, а не обычный публичный узел.

Серверная часть для lightwalletd

Zebra может служить серверной частью для lightwalletd. Официальный Docker Compose-пример настраивает RPC и отключает cookie-auth, потому что lightwalletd пока не умеет использовать cookie Zebra. Это допустимо только внутри изолированной сети контейнеров; выставлять такой RPC в интернет нельзя.

Для нового стека Zcash также развивается связка Zebra, Zaino и Zallet. Zebra отвечает за консенсус и состояние сети, Zaino — за индексирование и обслуживание клиентов, Zallet — за кошелёк.

Майнинг и getblocktemplate

[rpc]
listen_addr = "127.0.0.1:8232"
enable_cookie_auth = true

[mining]
miner_address = "ВАШ_ZCASH_АДРЕС"

Zebra предоставляет getblocktemplate и submitblock. Адрес должен соответствовать выбранной сети. Пул или майнер должен обращаться к локальному защищённому RPC, а не к открытому порту в интернете.

Уведомления о новых блоках

[notify]
block_notify_command = "/usr/local/bin/on-zebra-tip %s"

Каждый %s заменяется хешем новой вершины цепочки. Скрипт запускается при изменении лучшей цепочки, поэтому он должен быть быстрым, безопасным и не зависеть от пользовательского профиля командной оболочки.

Автозапуск Zebra через systemd

Для постоянного Linux-узла лучше использовать отдельного системного пользователя. Ниже пример для исполняемого файла /usr/local/bin/zebrad, конфигурации /etc/zebra/zebrad.toml и состояния /var/lib/zebra.

sudo useradd --system --user-group --home /var/lib/zebra --create-home --shell /usr/sbin/nologin zebra
sudo install -d -o root -g zebra -m 0750 /etc/zebra
sudo install -d -o zebra -g zebra -m 0750 /var/lib/zebra

ZEBRAD_BIN="$(command -v zebrad)"
test -x "$ZEBRAD_BIN"
if test "$ZEBRAD_BIN" != "/usr/local/bin/zebrad"; then
  sudo install -o root -g root -m 0755 "$ZEBRAD_BIN" /usr/local/bin/zebrad
fi
sudo install -o root -g zebra -m 0640 "$HOME/.config/zebrad.toml" /etc/zebra/zebrad.toml

Перед копированием отредактируйте ~/.config/zebrad.toml: для этого unit подходят показанные выше state.cache_dir и rpc.cookie_dir в /var/lib/zebra. Если command -v zebrad уже показывает /usr/local/bin/zebrad, повторно копировать исполняемый файл не нужно.

Создайте /etc/systemd/system/zebra.service:

[Unit]
Description=Zcash Zebra node
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=zebra
Group=zebra
WorkingDirectory=/var/lib/zebra
ExecStart=/usr/local/bin/zebrad -c /etc/zebra/zebrad.toml start
Restart=on-failure
RestartSec=10
TimeoutStopSec=300
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

Пути должны соответствовать вашему способу установки. Если исполняемый файл собран в домашнем каталоге, не копируйте пользователя zebra механически: сначала проверьте права на бинарник, конфиг и каталог состояния.

sudo systemctl daemon-reload
sudo systemctl enable --now zebra.service
sudo systemctl status zebra.service
sudo journalctl -u zebra.service -n 100 --no-pager

Перезагрузка компьютера для проверки не нужна. Сначала убедитесь, что сервис стабильно работает сейчас, и только затем проверьте автозапуск при плановой перезагрузке.

Дополнительные установщики и оболочки

Zebra Launcher

В 2024 году Zcash Foundation выпустила графический Zebra Launcher для Windows, macOS и Debian. Идея была правильной: запуск узла без командной строки, просмотр логов и редактирование конфигурации через Tauri-приложение.

Но на момент этой проверки последняя версия Launcher — v0.0.0-alpha.4 от декабря 2024 года — содержит zebrad 2.1.0 и прямо помечена как предварительная версия. Для Mainnet 2026 года её использовать нельзя. Историю проекта и отдельную статью на сайте сохраняем, но актуальным установщиком Zebra 6 он сейчас не является.

ZecNode для Raspberry Pi и Linux

ZecNode — активный сторонний проект с графическим интерфейсом, Docker, мониторингом, lightwalletd и отдельным скрытым сервисом Tor перед lightwalletd. Это не проект Zcash Foundation.

Он удобен, но требует больше доверия, чем ручной официальный Docker-запуск: установщик скачивает файлы из ветки main, использует плавающий тег Zebra latest, умеет переносить Docker на выбранный SSD и предлагает снимок состояния. Перед запуском нужно прочитать код, убедиться в выбранном диске и сделать резервную копию. Команду автоматического форматирования диска я намеренно не копирую в эту статью.

Официальный установщик install-zebra.sh

Интерактивный установщик появился в Zebra 6.2.0 и поддерживает обычную установку, Docker, сборку из исходников и zcashd-compat. Это перспективный вариант, но на 13 августа 2026 года скрипт всё ещё закреплён на 6.2.0, а его контрольная сумма Linux x86_64 не совпадает с официальной. Я вернусь к нему после исправления. Не отключайте проверку и не заменяйте фиксированный тег на main.

Экспериментальный zcashd-compat

Zebra 6.2.0 добавила переходный режим для бирж и хранителей, которые зависят от RPC кошелька и ZMQ старого zcashd. Zebra подключается к публичной сети и проверяет правила консенсуса, а жёстко ограниченный вспомогательный процесс zcashd соединяется только с локальной Zebra и продолжает обслуживать старую интеграцию.

Это не способ получить «Zebra с кошельком» для обычного пользователя. Начиная с Zebra 6.2.3 встроенная схема использует zebra-compat-v1.1.0; прежняя версия 1.0.0 останавливается на блоке активации Ironwood. Даже текущий режим не поддерживает операции кошелька Orchard и Ironwood после NU6.3. Для них предназначен новый стек Zallet, Zaino и librustzcash.

Режим совместимости хранит две базы. Официальный минимум составляет 4 логических процессора, 16 ГБ памяти и около 275 ГБ для каждого каталога состояния. Рекомендуются 8 процессоров, 32 ГБ памяти и около 1 ТБ общего дискового пространства. Обычному узлу этот режим не нужен.

Для миграции биржи нужно отдельно прочитать официальное руководство и предупреждения, проверить происхождение вспомогательного исполняемого файла и сначала испытать схему вне рабочей инфраструктуры.

Историческая справка о Tor и Arti

В старой редакции статьи был большой экспериментальный раздел о запуске Zebra через Arti. Я сохраняю саму историю, потому что она показывает одно из направлений разработки приватной сетевой инфраструктуры на Rust.

Arti — реализация Tor на Rust, которую развивает Tor Project. Я пробовал отдельно запускать SOCKS-прокси, задавать ALL_PROXY и связывать его с systemd-сервисом Zebra. Стабильного решения тогда получить не удалось.

Текущее состояние: в Zebra 6.3.0 функция Cargo tor и зависимости arti-client закомментированы. cargo build --all-features Tor не включает, а ALL_PROXY сам по себе не доказывает, что сырые P2P-соединения Zebra проходят через SOCKS.

Поэтому старые команды и unit-файл удалены из рабочей инструкции. В нём долгоживущий arti proxy был помещён в ExecStartPre, комментарии в строках становились частью значений, а daemon-reload был написан с ошибкой. Такая инструкция создавала ложное ощущение анонимизации.

Если штатная Tor-интеграция вернётся, этот раздел нужно будет написать заново по текущей документации и проверить реальный маршрут трафика. Отдельный вспомогательный процесс Arti перед lightwalletd, как в сторонних проектах, — другой сценарий: он скрывает доступ кошелька к вашему серверу, но не превращает P2P Zebra в узел только через Tor.

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


Подпишитесь на рассылку!

Никакого спама!
Только новости и видео PRO.ZCASH

Поделиться статьёй

Если статья была полезна, поделитесь ею. Скопируйте ссылку ниже или выберите социальную сеть: обложка статьи добавится автоматически.

Ссылка для публикации

Комментировать статью

Форма комментария

Связаться через Zcash-сообщение

Автор pro.zcash может получить ваше сообщение по указанному Zcash-адресу.

Для этого нужен кошелёк с поддержкой защищённых транзакций. Просто отсканируйте QR-код справа.

Сообщества pro.zcash