Полный узел Zebra
Кратко
- Zebra (
zebrad) — это полный узел Zcash, написанный на Rust и поддерживаемый Zcash Foundation.
- Он проверяет блоки и транзакции, хранит состояние цепочки и взаимодействует с другими узлами через одноранговую сеть.
- Zebra и zcashd реализовывали один и тот же протокол и могли взаимодействовать друг с другом. После прекращения поддержки zcashd роль консенсуса выполняет Zebra.
- Его можно запустить двумя способами: с помощью Docker-образа
zfnd/zebra или собрать из исходного кода.
- Рекомендуемые характеристики оборудования: 4 ядра CPU, 16 ГБ RAM и 300 ГБ дискового пространства. Минимальные требования: 2 ядра и 4 ГБ RAM при тех же 300 ГБ дискового пространства.
Основное объяснение
Zebra — первый узел Zcash, полностью написанный на Rust. Он работает в одноранговой сети Zcash, где проверяет и транслирует транзакции, а также хранит состояние блокчейна. Наличие второй независимой реализации делает инфраструктуру сети менее зависимой от какой-либо одной кодовой базы.
Zebra и zcashd
Исходный узел Zcash, zcashd, был разработан Electric Coin Company на основе кодовой базы Bitcoin. Zebra был написан с нуля на Rust — языке с безопасным управлением памятью — с упором на безопасность и эффективность.
Обе реализации следуют одному протоколу, поэтому могли взаимодействовать друг с другом. zcashd достиг остановки по окончании поддержки 18 июля 2026 года и больше не запускается, поэтому используемыми реализациями узла остаются Zebra и Zakura. Более широкую картину см. в разделе Полные узлы.
Запуск Zebra
Вы можете запустить Zebra с помощью Docker-образа или собрать его вручную. См. раздел «Системные требования».
Использование Docker
Чтобы запустить последний релиз и синхронизировать его с вершиной цепочки, выполните следующую команду:
Code-highlight
docker run zfnd/zebra:latest
Полные инструкции см. в документации Docker.
Сборка Zebra
Для сборки Zebra требуются Rust, libclang и компилятор C++.
- Убедитесь, что у вас установлена последняя стабильная версия Rust, поскольку Zebra тестируется исключительно с ней.
- Необходимые зависимости для сборки включают:
- libclang (также известный как libclang-dev или llvm-dev)
- clang или другой компилятор C++ (например, g++ для всех платформ либо Xcode для macOS)
- protoc (компилятор Protocol Buffers) с флагом --experimental_allow_proto3_optional, добавленным в Protocol Buffers v3.12.0 (выпущенной 16 мая 2020 года).
Установка и запуск
В Linux x86_64 или aarch64 с glibc 2.34 или новее (Ubuntu 22.04+, Debian 12+, RHEL 9+, Amazon Linux 2023) можно пропустить зависимости для сборки и установить подписанный предварительно собранный двоичный файл:
Code-highlight
cargo binstall zebrad
Те же двоичные файлы прикреплены к каждому релизу GitHub как zebrad-<version>-<target>.tar.gz; для каждого указаны контрольная сумма SHA-256, аттестация происхождения сборки Sigstore и подпись Cosign. На более старых платформах используйте Docker-образ или соберите из исходного кода.
Чтобы собрать из исходного кода, получите код и соберите двоичный файл релиза:
Code-highlight
git clone https://github.com/ZcashFoundation/zebra.git
cd zebra
cargo build --release --bin zebrad
Запустите узел с помощью:
Code-highlight
target/release/zebrad start
Руководство по установке: zebra.zfnd.org/user/install.html
Дополнительные конфигурации и возможности
Инициализация файла конфигурации
- Создайте файл конфигурации с помощью команды:
Code-highlight
zebrad generate -o ~/.config/zebrad.toml
- Сгенерированный файл zebrad.toml будет размещён в каталоге настроек Linux по умолчанию. Сведения о расположениях по умолчанию для других ОС см. в документации.
Настройка индикаторов выполнения
- Настройте tracing.progress_bar в файле zebrad.toml, чтобы отображать ключевые показатели в терминале с помощью индикаторов выполнения. Примечание: существует известная проблема, при которой оценки индикаторов выполнения могут становиться чрезвычайно большими.
Настройка майнинга
Пользовательские возможности сборки
-
Расширьте функциональность Zebra с помощью дополнительных возможностей Cargo, таких как метрики Prometheus, мониторинг Sentry, экспериментальная поддержка Elasticsearch и другие.
-
Объединяйте несколько возможностей, перечисляя их как параметры флага --features при установке.
-
Некоторые возможности отладки и мониторинга отключены в релизных сборках для оптимизации производительности. Полный список экспериментальных возможностей и возможностей для разработчиков см. в документации API.
Системные требования и конфигурация сети
Рекомендуемые требования
- CPU: 4 ядра CPU
- RAM: 16 ГБ
- Дисковое пространство: 300 ГБ свободного места для компиляции двоичных файлов и хранения кэшированного состояния цепочки
- Сеть: сетевое подключение 100 Мбит/с с минимум 300 ГБ загрузок и выгрузок в месяц
Минимальные требования
- CPU: 2 ядра CPU
- RAM: 4 ГБ
- Дисковое пространство: 300 ГБ свободного места
Выполнение набора тестов Zebra может занять более часа в зависимости от характеристик вашей машины. Более медленные системы могут собирать и запускать Zebra. Точные границы производительности не были установлены путём тестирования.
Требования к диску
- Zebra использует приблизительно 300 ГБ для кэшированных данных Mainnet и 10 ГБ для кэшированных данных Testnet. Ожидайте, что использование диска будет со временем увеличиваться.
- База данных периодически очищается, а также при завершении работы или перезапуске. Изменения фиксируются с помощью транзакций базы данных. Незавершённые изменения, вызванные принудительным завершением работы или паникой, откатываются при следующем запуске Zebra.
Требования к сети и порты
- Zebra использует следующие TCP-порты для входящих и исходящих подключений:
- 8233 для Mainnet
- 18233 для Testnet
- Настройка Zebra с определённым listen_addr объявляет этот адрес для входящих подключений. Исходящие подключения необходимы для синхронизации; входящие подключения необязательны.
- Требуется доступ к DNS-сидерам Zcash через системный DNS-резолвер ОС (обычно порт 53).
- Zebra может устанавливать исходящие подключения через любой порт. zcashd предпочитает пиры на портах по умолчанию, чтобы избежать использования для DDoS-атак на другие сети.
Типичное использование сети Mainnet
- Первоначальная синхронизация: для первоначальной синхронизации требуется загрузить 300 ГБ, и ожидается, что этот объём будет расти.
- Текущие обновления: ежедневные выгрузки и загрузки от 10 МБ до 10 ГБ в зависимости от размеров пользовательских транзакций и запросов пиров.
- Zebra запускает первоначальную синхронизацию при каждом изменении версии внутренней базы данных, что может означать полную загрузку цепочки во время обновления версии.
- Предпочтительны пиры с задержкой полного цикла не более 2 секунд. Если задержка превышает этот порог, создайте тикет в репозитории Zebra.
Распространённые ошибки
- Расчёт размера диска только на текущий момент. Кэшированное состояние Mainnet уже занимает около 300 ГБ и продолжает расти.
- Ожидание wallet RPC от
zebrad. Ключи и балансы находятся в Zallet — отдельной программе.
- Запуск только
zebrad с ожиданием подключения лёгких кошельков. Для этого пути нужен индексатор: либо lightwalletd, либо Zaino.
- Восприятие неожиданной повторной синхронизации как ошибки. Изменение версии базы данных намеренно вызывает её.
Связанные страницы
Дополнительное изучение