Πλήρης κόμβος Zebra
Με λίγα λόγια
- Το Zebra (
zebrad) είναι ο πλήρης κόμβος του Zcash, γραμμένος σε Rust και συντηρείται από το Zcash Foundation.
- Επαληθεύει μπλοκ και συναλλαγές, διατηρεί την κατάσταση της αλυσίδας και επικοινωνεί με άλλους κόμβους μέσω του δικτύου peer-to-peer.
- Τα Zebra και zcashd υλοποιούσαν το ίδιο πρωτόκολλο και μπορούσαν να διαλειτουργούν. Από την απόσυρση του zcashd, το Zebra έχει τον ρόλο της συναίνεσης.
- Δύο τρόποι για να το εκτελέσεις: η εικόνα
zfnd/zebra Docker ή η δημιουργία από τον πηγαίο κώδικα.
- Το προτεινόμενο hardware είναι 4 πυρήνες CPU, 16 GB RAM και 300 GB δίσκου. Το ελάχιστο είναι 2 πυρήνες και 4 GB RAM, με τα ίδια 300 GB δίσκου.
Βασική εξήγηση
Το Zebra είναι ο πρώτος κόμβος του Zcash γραμμένος εξ ολοκλήρου σε Rust. Βρίσκεται στο δίκτυο peer-to-peer του Zcash, όπου επαληθεύει και μεταδίδει συναλλαγές και διατηρεί την κατάσταση του blockchain. Η ύπαρξη μιας δεύτερης ανεξάρτητης υλοποίησης κάνει την υποδομή του δικτύου λιγότερο εξαρτημένη από οποιαδήποτε μεμονωμένη βάση κώδικα.
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).
Εγκατάσταση και εκκίνηση
Σε x86_64 ή aarch64 Linux με glibc 2.34 ή νεότερη έκδοση (Ubuntu 22.04+, Debian 12+, RHEL 9+, Amazon Linux 2023), μπορείς να παραλείψεις τις εξαρτήσεις δημιουργίας και να εγκαταστήσεις ένα υπογεγραμμένο προδημιουργημένο binary:
Code-highlight
cargo binstall zebrad
Τα ίδια binaries επισυνάπτονται σε κάθε έκδοση του GitHub ως zebrad-<version>-<target>.tar.gz, το καθένα με άθροισμα ελέγχου SHA-256, βεβαίωση προέλευσης δημιουργίας Sigstore και υπογραφή Cosign. Σε παλαιότερες πλατφόρμες, χρησιμοποίησε την εικόνα Docker ή δημιούργησέ το από τον πηγαίο κώδικα.
Για να το δημιουργήσεις από τον πηγαίο κώδικα, λάβε τον κώδικα και δημιούργησε το binary έκδοσης:
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 σου για να εμφανίζονται βασικές μετρήσεις στο terminal με γραμμές προόδου. Σημείωση: Υπάρχει ένα γνωστό ζήτημα όπου οι εκτιμήσεις της γραμμής προόδου μπορεί να γίνουν υπερβολικά μεγάλες.
Ρύθμιση εξόρυξης
- Το Zebra μπορεί να ρυθμιστεί για εξόρυξη καθορίζοντας μια MINER_ADDRESS και αντιστοίχιση θυρών στο Docker. Περισσότερες λεπτομέρειες μπορείς να βρεις στην τεκμηρίωση υποστήριξης εξόρυξης.
Προσαρμοσμένες δυνατότητες δημιουργίας
-
Επέκτεινε τη λειτουργικότητα του Zebra με επιπρόσθετες δυνατότητες Cargo, όπως μετρήσεις Prometheus, παρακολούθηση Sentry, πειραματική υποστήριξη Elasticsearch και άλλα.
-
Συνδύασε πολλαπλές δυνατότητες καταγράφοντάς τες ως παραμέτρους της σημαίας --features κατά την εγκατάσταση.
-
Ορισμένες δυνατότητες αποσφαλμάτωσης και παρακολούθησης απενεργοποιούνται στις εκδόσεις release για βελτιστοποίηση της απόδοσης. Για την πλήρη λίστα πειραματικών δυνατοτήτων και δυνατοτήτων προγραμματιστών, συμβουλέψου την τεκμηρίωση API.
Απαιτήσεις συστήματος και ρύθμιση δικτύου
Προτεινόμενες απαιτήσεις
- CPU: 4 πυρήνες CPU
- RAM: 16 GB
- Χώρος δίσκου: 300 GB διαθέσιμου χώρου δίσκου για τη μεταγλώττιση binaries και την αποθήκευση της αποθηκευμένης κατάστασης της αλυσίδας
- Δίκτυο: Σύνδεση δικτύου 100 Mbps με τουλάχιστον 300 GB μεταφορτώσεων και λήψεων ανά μήνα
Ελάχιστες απαιτήσεις
- CPU: 2 πυρήνες CPU
- RAM: 4 GB
- Χώρος δίσκου: 300 GB διαθέσιμου χώρου δίσκου
Η σουίτα δοκιμών του Zebra μπορεί να χρειαστεί πάνω από μία ώρα για να ολοκληρωθεί, ανάλογα με τις προδιαγραφές του μηχανήματός σου. Πιο αργά συστήματα μπορούν να μεταγλωττίσουν και να εκτελέσουν το Zebra. Τα ακριβή όρια απόδοσης δεν έχουν καθοριστεί μέσω δοκιμών.
Απαιτήσεις δίσκου
- Το Zebra χρησιμοποιεί περίπου 300 GB για αποθηκευμένα δεδομένα Mainnet και 10 GB για αποθηκευμένα δεδομένα Testnet. Αναμένεται η χρήση δίσκου να αυξάνεται με τον χρόνο.
- Η βάση δεδομένων καθαρίζεται περιοδικά, καθώς και κατά τον τερματισμό ή την επανεκκίνηση. Οι αλλαγές καταχωρούνται χρησιμοποιώντας συναλλαγές βάσης δεδομένων. Οι ελλιπείς αλλαγές που προκαλούνται από αναγκαστικό τερματισμό ή panic αναιρούνται την επόμενη φορά που ξεκινά το Zebra.
Απαιτήσεις δικτύου και θύρες
- Το Zebra χρησιμοποιεί τις ακόλουθες θύρες TCP για εισερχόμενες και εξερχόμενες συνδέσεις:
- 8233 για Mainnet
- 18233 για Testnet
- Η ρύθμιση του Zebra με μια συγκεκριμένη listen_addr ανακοινώνει αυτήν τη διεύθυνση για εισερχόμενες συνδέσεις. Οι εξερχόμενες συνδέσεις απαιτούνται για συγχρονισμό· οι εισερχόμενες συνδέσεις είναι προαιρετικές.
- Απαιτείται πρόσβαση στους DNS seeders του Zcash μέσω του επιλύτη DNS του λειτουργικού συστήματος (συνήθως η θύρα 53).
- Το Zebra μπορεί να πραγματοποιεί εξερχόμενες συνδέσεις σε οποιαδήποτε θύρα. Το zcashd προτιμά peers στις προεπιλεγμένες θύρες για να αποφεύγεται η χρήση του για επιθέσεις DDoS σε άλλα δίκτυα.
Τυπική χρήση δικτύου Mainnet
- Αρχικός συγχρονισμός: Απαιτείται λήψη 300 GB για τον αρχικό συγχρονισμό και αυτό το μέγεθος αναμένεται να αυξηθεί.
- Συνεχείς ενημερώσεις: Ημερήσιες μεταφορτώσεις και λήψεις από 10 MB έως 10 GB, ανάλογα με τα μεγέθη συναλλαγών των χρηστών και τα αιτήματα των peers.
- Το Zebra ξεκινά αρχικό συγχρονισμό σε κάθε αλλαγή έκδοσης της εσωτερικής βάσης δεδομένων, κάτι που μπορεί να σημαίνει πλήρη λήψη της αλυσίδας κατά τις αναβαθμίσεις έκδοσης.
- Προτιμώνται peers με λανθάνουσα κατάσταση μετ’ επιστροφής 2 δευτερολέπτων ή λιγότερο. Αν η λανθάνουσα κατάσταση υπερβαίνει αυτό το όριο, άνοιξε ένα ticket στο αποθετήριο Zebra.
Συνηθισμένα λάθη
- Διαστασιολόγηση του δίσκου για το σήμερα. Η αποθηκευμένη κατάσταση Mainnet είναι ήδη κοντά στα 300 GB και συνεχίζει να αυξάνεται.
- Αναμονή wallet RPCs από το
zebrad. Τα κλειδιά και τα υπόλοιπα βρίσκονται στο Zallet, ένα ξεχωριστό πρόγραμμα.
- Εκτέλεση μόνο του
zebrad και αναμονή να συνδεθούν light wallets. Αυτή η διαδρομή χρειάζεται έναν indexer, είτε το lightwalletd είτε το Zaino.
- Αντιμετώπιση ενός απρόσμενου επανασυγχρονισμού ως σφάλμα. Μια αλλαγή έκδοσης της βάσης δεδομένων τον ενεργοποιεί εκ σχεδιασμού.
Σχετικές σελίδες
Περαιτέρω μάθηση