Επαλήθευση προγραμμάτων
Αυτός ο οδηγός προορίζεται να αποτελέσει αναφορά για προγραμματιστές που θέλουν να εφαρμόσουν επαληθευμένες κατασκευές για τα προγράμματά τους στο Solana. Θα καλύψουμε τι είναι οι επαληθευμένες κατασκευές, πώς να τις χρησιμοποιήσετε, ειδικά ζητήματα και βέλτιστες πρακτικές για να διασφαλίσετε την αυθεντικότητα του προγράμματός σας στην αλυσίδα.
Τι είναι οι επαληθευμένες κατασκευές;
Οι επαληθευμένες κατασκευές διασφαλίζουν ότι το εκτελέσιμο πρόγραμμα που αναπτύσσετε στο δίκτυο του Solana αντιστοιχεί στον πηγαίο κώδικα στο αποθετήριό σας. Με αυτόν τον τρόπο, οι προγραμματιστές και οι χρήστες μπορούν να είναι βέβαιοι ότι το πρόγραμμα που εκτελείται στην αλυσίδα αντιστοιχεί ακριβώς στον δημόσιο κώδικα, προωθώντας τη διαφάνεια και την ασφάλεια.
Η διαδικασία επαλήθευσης περιλαμβάνει τη σύγκριση του hash του προγράμματος στην αλυσίδα με το hash του τοπικά κατασκευασμένου προγράμματος από τον πηγαίο κώδικα. Αυτό διασφαλίζει ότι δεν υπάρχουν αποκλίσεις μεταξύ των δύο εκδόσεων.
Αν και μια επαληθευμένη κατασκευή δεν θα πρέπει να θεωρείται πιο ασφαλής από μια μη επαληθευμένη κατασκευή, η κατασκευή επιτρέπει στους προγραμματιστές να επαληθεύσουν οι ίδιοι ότι ο πηγαίος κώδικας αντιστοιχεί σε αυτό που έχει αναπτυχθεί στην αλυσίδα. Χρησιμοποιώντας τον πηγαίο κώδικα, ένας προγραμματιστής μπορεί στη συνέχεια να επικυρώσει τι εκτελεί ο κώδικας κατά την αποστολή μιας συναλλαγής.
Η διαδικασία επαληθευμένων κατασκευών σχεδιάστηκε και συντηρείται από το Ellipsis Labs και το OtterSec. Για περισσότερες λεπτομέρειες, ακολουθήστε τον οδηγό στο αρχικό αποθετήριο επαληθευμένων κατασκευών καθώς και τη διαδικασία επαλήθευσης κατασκευής απευθείας στη σουίτα εργαλείων Anza, μόλις υποστηριχθεί εκεί.
Πώς λειτουργεί;
Η διαδικασία επαλήθευσης γίνεται συγκρίνοντας το hash του προγράμματος στην αλυσίδα με το hash του τοπικά δημιουργημένου προγράμματος από τον πηγαίο κώδικα. Δημιουργείτε το πρόγραμμά σας σε ένα ελεγχόμενο περιβάλλον χρησιμοποιώντας το Solana Verify CLI και το Docker. Αυτό εξασφαλίζει ότι η διαδικασία δημιουργίας είναι ντετερμινιστική και συνεπής σε διαφορετικά συστήματα. Μόλις έχετε το εκτελέσιμο, μπορείτε να το αναπτύξετε στο δίκτυο Solana. Κατά τη διάρκεια της διαδικασίας δημιουργίας, ένα PDA του προγράμματος επαλήθευσης θα δημιουργηθεί. Αυτό το PDA περιέχει όλα τα απαραίτητα δεδομένα για την επαλήθευση του προγράμματος. Το PDA περιέχει τη διεύθυνση του προγράμματος, το git url, το commit hash και τα ορίσματα που χρησιμοποιήθηκαν για τη δημιουργία του προγράμματος.
Χρησιμοποιώντας τα δεδομένα στο PDA, ο καθένας μπορεί να εκτελέσει την εντολή του προγράμματος επαλήθευσης τοπικά και να ελέγξει αν το πρόγραμμα δημιουργήθηκε από τον παρεχόμενο πηγαίο κώδικα. Έτσι, ο καθένας μπορεί να επαληθεύσει μόνος του εντελώς χωρίς εμπιστοσύνη ή μπορεί να εκτελέσει το δικό του API επαλήθευσης που συντηρείται από την OtterSec για να παρέχει ένα εύκολο σημείο πρόσβασης για τους χρήστες ώστε να ελέγχουν την επαλήθευση. Μπορείτε ήδη να δείτε αυτές τις κλήσεις API να χρησιμοποιούνται στον Solana Explorer και στο SolanaFM, μεταξύ άλλων.
Γιατί να χρησιμοποιήσω επαληθευμένες δημιουργίες;
Η χρήση επαληθευμένων δημιουργιών παρέχει τα ακόλουθα οφέλη:
-
Ασφάλεια: Εγγύηση ότι το πρόγραμμα που εκτελείται στην αλυσίδα ταιριάζει με τον πηγαίο κώδικα, αποτρέποντας κακόβουλες αλλοιώσεις.
-
Διαφάνεια: Επιτρέπει σε άλλους χρήστες και προγραμματιστές να επικυρώσουν ότι το πρόγραμμα στην αλυσίδα είναι αξιόπιστο συγκρίνοντάς το με τη δημόσια βάση κώδικα.
-
Εμπιστοσύνη: Αυξάνει την εμπιστοσύνη των χρηστών, καθώς οι επαληθευμένες δημιουργίες αποδεικνύουν ότι η συμπεριφορά του προγράμματός σας στην αλυσίδα είναι ευθυγραμμισμένη με τον δημόσιο κώδικά σας. Όταν δημιουργείτε επαληθεύσιμα προγράμματα, ελαχιστοποιείτε τους κινδύνους που σχετίζονται με την εκτέλεση μη εξουσιοδοτημένου ή κακόβουλου κώδικα. Επίσης, διασφαλίζει ότι συμμορφώνεστε με τις βέλτιστες πρακτικές και δίνετε στους ερευνητές ασφαλείας έναν εύκολο τρόπο να επικοινωνήσουν μαζί σας. Επίσης, τα πορτοφόλια και άλλα εργαλεία μπορούν να επιτρέπουν συναλλαγές από το πρόγραμμά σας πιο εύκολα εφόσον είναι επαληθευμένο.
-
Ανακαλυψιμότητα: Όταν παρέχετε μια επαληθευμένη έκδοση του προγράμματός σας, όλοι μπορούν να βρουν τον πηγαίο κώδικα, την τεκμηρίωση, το SDK ή το IDL του προγράμματος και μπορούν επίσης εύκολα να επικοινωνήσουν μαζί σας μέσω του GitHub σε περίπτωση που υπάρχει κάποιο πρόβλημα.
Πώς δημιουργώ επαληθευμένες εκδόσεις;
Για να δημιουργήσετε επαληθευμένες εκδόσεις, θα πρέπει να ακολουθήσετε τα εξής βήματα:
Περίληψη:
- Καταχωρήστε τον κώδικά σας σε ένα δημόσιο αποθετήριο
- Δημιουργήστε μια επαληθευμένη έκδοση σε docker
- Αναπτύξτε την επαληθευμένη έκδοση
- Επαληθεύστε το αναπτυγμένο πρόγραμμα μέσω του δημόσιου API
Αν επαληθεύσετε το πρόγραμμά σας που δεν έχει δημιουργηθεί σε ένα container docker, πιθανότατα θα αποτύχει επειδή οι εκδόσεις προγραμμάτων Solana δεν είναι ντετερμινιστικές σε διαφορετικά συστήματα.
Εγκαταστήστε το Docker και το Cargo
Εγκαταστήστε τα απαραίτητα εργαλεία και βεβαιωθείτε ότι έχετε εγκαταστήσει το Docker και το Cargo. Το Docker παρέχει ένα ελεγχόμενο περιβάλλον δημιουργίας για να διασφαλίσει τη συνέπεια, και το Cargo χρησιμοποιείται για τη διαχείριση πακέτων Rust.
- Docker: Ακολουθήστε τα βήματα στον ιστότοπο του Docker για να εγκαταστήσετε το Docker για την πλατφόρμα σας. Μόλις εγκατασταθεί, βεβαιωθείτε ότι η υπηρεσία Docker λειτουργεί ακολουθώντας αυτόν τον οδηγό παρακάτω.
- Cargo: Αν δεν έχετε ήδη εγκαταστήσει το Cargo, μπορείτε να το εγκαταστήσετε εκτελώντας την ακόλουθη εντολή:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Εγκαταστήστε το Solana Verify CLI
Το Solana Verify CLI είναι το κύριο εργαλείο που χρησιμοποιείται για την επαλήθευση εκδόσεων. Το Solana Verify CLI συντηρείται επί του παρόντος από την Ellipsis Labs και μπορεί να εγκατασταθεί χρησιμοποιώντας το Cargo.
Μπορείτε να το εγκαταστήσετε εκτελώντας:
cargo install solana-verify
Αν χρειάζεστε μια συγκεκριμένη έκδοση του CLI, μπορείτε να καθορίσετε την έκδοση με:
cargo install solana-verify --version $VERSION
Αν επιθυμείτε, μπορείτε να εγκαταστήσετε μια έκδοση απευθείας από ένα συγκεκριμένο commit:
cargo install solana-verify --git https://github.com/Ellipsis-Labs/solana-verifiable-build --rev 13a1db2
Προετοιμασία έργου
Για να επαληθεύσετε έναντι ενός αποθετηρίου, πρέπει να υπάρχει ένα αρχείο
Cargo.lock
στον ριζικό κατάλογο του αποθετηρίου σας. Εάν έχετε μόνο ένα
πρόγραμμα στο αποθετήριό σας και ένα αρχείο cargo.lock
στον ριζικό κατάλογο,
μπορείτε να προχωρήσετε απευθείας στο επόμενο βήμα και να δημιουργήσετε το
πρόγραμμά σας.
Εάν το πρόγραμμά σας βρίσκεται σε έναν υποφάκελο και έχετε ένα χώρο εργασίας
rust, πρέπει να δημιουργήσετε ένα αρχείο Cargo.toml
χώρου εργασίας στον ριζικό
κατάλογο του αποθετηρίου σας.
Μπορείτε να χρησιμοποιήσετε αυτό το παράδειγμα Cargo.toml
ως πρότυπο:
[workspace]members = ["program/programs/*"]resolver = "2"[profile.release]overflow-checks = truelto = "fat"codegen-units = 1[profile.release.build-override]opt-level = 3incremental = falsecodegen-units = 1
Βεβαιωθείτε ότι το πρόγραμμά σας βρίσκεται στον πίνακα workspace/members
και
ότι το αρχείο Cargo.toml
του προγράμματός σας έχει διαμορφωμένο το σωστό όνομα
lib
.
Σημαντικό είναι το
lib name
και όχι το όνομα του πακέτου!
Κάτι σαν αυτό:
[package]name = "waffle"version = "0.1.0"edition = "2021"[lib]name = "waffle"crate-type = ["cdylib", "lib"][dependencies]solana-program = "2.1.0"
Σε αυτό το αποθετήριο
μπορείτε να δείτε ένα παράδειγμα χώρου εργασίας με ένα πρόγραμμα σε υποφάκελο.
Σημειώστε επίσης ότι όταν το πρόγραμμα βρίσκεται σε υποφάκελο, αργότερα θα
πρέπει να προσθέσετε αυτόν τον φάκελο ως --mount-path
στην εντολή
verify-from-repo
.
Σε αυτό το αποθετήριο μπορείτε να βρείτε ένα παράδειγμα Anchor. Σε αυτό το αποθετήριο μπορείτε να βρείτε ένα παράδειγμα εγγενούς rust.
Με αυτό το αρχείο Cargo.toml
στη θέση του, μπορείτε στη συνέχεια να εκτελέσετε
cargo generate-lockfile
για να δημιουργήσετε ένα αρχείο κλειδώματος και να
συνεχίσετε με τη δημιουργία του προγράμματός σας.
Δημιουργία επαληθεύσιμων προγραμμάτων
Για να δημιουργήσετε επαληθεύσιμα το πρόγραμμα Solana σας, μεταβείτε στον
κατάλογο που περιέχει το αρχείο Cargo.toml
του χώρου εργασίας σας και
εκτελέστε:
solana-verify build
Αυτό θα αντιγράψει το περιβάλλον σας σε ένα container docker και θα το δημιουργήσει με έναν ντετερμινιστικό τρόπο.
Βεβαιωθείτε ότι πραγματικά αναπτύσσετε την επαληθευμένη έκδοση και δεν την αντικαθιστάτε κατά λάθος με
anchor build
ήcargo build-sbf
καθώς αυτά πιθανότατα δεν θα καταλήξουν στο ίδιο hash και η επαλήθευσή σας θα αποτύχει.
Για έργα με πολλαπλά προγράμματα, μπορείτε να δημιουργήσετε ένα συγκεκριμένο πρόγραμμα χρησιμοποιώντας το όνομα της βιβλιοθήκης (όχι το όνομα του πακέτου):
solana-verify build --library-name $PROGRAM_LIB_NAME
Αυτή η διαδικασία εξασφαλίζει ντετερμινιστικές κατασκευές και μπορεί να διαρκέσει κάποιο χρόνο, ειδικά σε ορισμένα συστήματα (π.χ. M1 MacBook) επειδή εκτελείται μέσα σε ένα container docker. Για ταχύτερες κατασκευές, συνιστάται η χρήση ενός μηχανήματος Linux με αρχιτεκτονική x86.
Μόλις ολοκληρωθεί η κατασκευή, μπορείτε να ανακτήσετε το hash του εκτελέσιμου χρησιμοποιώντας την ακόλουθη εντολή:
solana-verify get-executable-hash target/deploy/$PROGRAM_LIB_NAME.so
Ανάπτυξη επαληθεύσιμων προγραμμάτων
Αφού έχετε δημιουργήσει το πρόγραμμά σας και έχετε ανακτήσει το hash του, μπορείτε να το αναπτύξετε στο δίκτυο Solana. Συνιστάται να χρησιμοποιήσετε μια λύση πολλαπλών υπογραφών ή διακυβέρνησης όπως το Squads Protocol για ασφαλείς αναπτύξεις, αλλά μπορείτε επίσης να αναπτύξετε απευθείας με:
solana program deploy -u $NETWORK_URL target/deploy/$PROGRAM_LIB_NAME.so --program-id $PROGRAM_ID --with-compute-unit-price 50000 --max-sign-attempts 100 --use-rpc
Ένα κατάλληλο τέλος χαμηλής προτεραιότητας που μπορείτε να ζητήσετε από τον πάροχο rpc σας, για παράδειγμα το Quicknode.
Για να επαληθεύσετε ότι το αναπτυγμένο πρόγραμμα ταιριάζει με το εκτελέσιμο που δημιουργήσατε, εκτελέστε:
solana-verify get-program-hash -u $NETWORK_URL $PROGRAM_ID
Μπορεί να έχετε διαφορετικές εκδόσεις αναπτυγμένες σε διαφορετικά συμπλέγματα Solana (δηλαδή devnet, testnet, mainnet). Βεβαιωθείτε ότι χρησιμοποιείτε το σωστό URL δικτύου για το επιθυμητό σύμπλεγμα Solana στο οποίο θέλετε να επαληθεύσετε ένα πρόγραμμα. Η απομακρυσμένη επαλήθευση θα λειτουργεί μόνο στο mainnet.
Επαλήθευση έναντι αποθετηρίων
Για να επαληθεύσετε ένα πρόγραμμα έναντι του δημόσιου αποθετηρίου του, χρησιμοποιήστε:
solana-verify verify-from-repo -u $NETWORK_URL --program-id $PROGRAM_ID https://github.com/$REPO_PATH --commit-hash $COMMIT_HASH --library-name $PROGRAM_LIB_NAME --mount-path $MOUNT_PATH
Ενώ εκτελείτε την επαληθευμένη κατασκευή στον κατάλογο του προγράμματός σας, όταν εκτελείτε
verify-from-repo
πρέπει να προσθέσετε τη σημαία--mount-path
. Αυτή θα είναι η διαδρομή προς το φάκελο που περιέχει τοCargo.toml
που περιέχει το όνομα βιβλιοθήκης του προγράμματός σας.
Αυτή η εντολή συγκρίνει το hash του προγράμματος στην αλυσίδα με το hash του εκτελέσιμου που δημιουργήθηκε από τον πηγαίο κώδικα στο καθορισμένο commit hash.
Στο τέλος, η εντολή θα σας ρωτήσει αν θέλετε να ανεβάσετε τα δεδομένα επαλήθευσής σας στην αλυσίδα. Αν το κάνετε αυτό, ο Solana Explorer θα εμφανίσει αμέσως τα δεδομένα επαλήθευσης του προγράμματός σας. Μέχρι να επαληθευτεί από μια απομακρυσμένη κατασκευή, θα εμφανίζεται ως μη επαληθευμένο. Μάθετε πώς μπορείτε να επαληθεύσετε το πρόγραμμά σας μέσω ενός δημόσιου API στο επόμενο βήμα.
Αν θέλετε να κλειδώσετε την επαλήθευση σε μια συγκεκριμένη έκδοση, μπορείτε να
προσθέσετε τη σημαία --commit-hash
στην εντολή.
Επαλήθευση μέσω δημόσιου API
Τέλος, μπορείτε επίσης να επαληθεύσετε απευθείας το πρόγραμμα μέσω οποιουδήποτε εκτελεί το API επαλήθευσης:
solana-verify verify-from-repo --remote -um --program-id PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY https://github.com/Ellipsis-Labs/phoenix-v1
Συνιστάται να χρησιμοποιείτε ένα επί πληρωμή RPC Url επειδή διαφορετικά μπορεί να αντιμετωπίσετε περιορισμούς ρυθμού των δωρεάν RPCs. Έτσι, αντί για
-um
θα πρέπει να χρησιμοποιήσετε--url yourRpcUrl
για πιο αξιόπιστη επαλήθευση.
Η σημαία --remote
στέλνει ένα αίτημα κατασκευής στο API της OtterSec, το οποίο
ενεργοποιεί μια απομακρυσμένη κατασκευή του προγράμματός σας. Μόλις ολοκληρωθεί
η κατασκευή, το σύστημα επαληθεύει ότι το hash του προγράμματός σας στην αλυσίδα
ταιριάζει με το hash του παραγόμενου αρχείου κατασκευής από το αποθετήριό σας.
Η προεπιλογή είναι το OtterSec API.
Βεβαιωθείτε ότι επιλέγετε ναι όταν σας ζητηθεί να ανεβάσετε τα δεδομένα επαλήθευσης στην αλυσίδα. Αυτό χρησιμοποιείται από το API για να επαληθεύσει ότι ανεβάσατε τα δεδομένα επαλήθευσης.
Μπορείτε επίσης να ενεργοποιήσετε μια απομακρυσμένη εργασία χειροκίνητα χρησιμοποιώντας:
solana-verify remote submit-job --program-id <program-id> --uploader <address>
Όπου ο uploader είναι η διεύθυνση που έχει την εξουσιοδότηση να γράψει στο PDA. Αυτή θα πρέπει να είναι η εξουσιοδότηση του προγράμματος στις περισσότερες περιπτώσεις. Αν το πρόγραμμά σας ελέγχεται από ένα multisig, παρακαλώ συνεχίστε στο επαλήθευση multisig μέρος αυτού του οδηγού παρακάτω.
Αυτό θα υποβάλει μια εργασία στο API της OtterSec και μπορείτε στη συνέχεια να επαληθεύσετε την κατάσταση της εργασίας με:
solana-verify remote get-job-status --job-id <job-id>
Μόλις η επαλήθευση ολοκληρωθεί με επιτυχία, κάτι που μπορεί να πάρει λίγο χρόνο, θα μπορείτε να δείτε το πρόγραμμά σας ως επαληθευμένο στο OtterSec API για μεμονωμένα προγράμματα και στον Solana Explorer, SolanaFM, SolScan και τελικά επίσης στον ιστότοπο που διατηρείται από την κοινότητα SolanaVerify.org που συντηρείται από τον 0xDeep και το OtterSec API επαληθευμένων προγραμμάτων και τέλος στο Πίνακα ελέγχου Dune επαληθευμένων προγραμμάτων συμβάλλοντας σε ένα πιο υγιές οικοσύστημα Solana.
Πώς να επαληθεύσετε το πρόγραμμά σας όταν ελέγχεται από ένα Multisig όπως το Squads
Για να λειτουργήσει η απομακρυσμένη επαλήθευση, πρέπει να γράψετε τα δεδομένα επαλήθευσης σε ένα PDA που υπογράφεται από την εξουσιοδότηση του προγράμματος. Αν το πρόγραμμά σας ελέγχεται από ένα multisig, μπορείτε να εξαγάγετε αυτή τη συναλλαγή εγγραφής PDA και να την υποβάλετε μέσω Squads Protocol ή άλλης λύσης multisig της επιλογής σας.
1. Δημιουργήστε το επαληθεύσιμο πρόγραμμα
Πρώτα δημιουργήστε το πρόγραμμα:
solana-verify build
Αυτό θα δημιουργήσει μια επαληθεύσιμη έκδοση χρησιμοποιώντας ένα container
docker με την έκδοση solana που καθορίζεται στο αρχείο Cargo.lock
.
2. Αναπτύξτε το πρόγραμμα
solana config set --url "PayedMainnetRPCAddress" // the public endpoint will be rate limited too muchsolana program deploy target/deploy/verify_squads.so
Για το υπόλοιπο αυτού του οδηγού multisig, θα χρησιμοποιήσουμε ένα παράδειγμα ID
προγράμματος 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD
.
3. Δέσμευση και επαλήθευση έναντι του αποθετηρίου
Μόλις ολοκληρωθεί αυτό, δεσμεύουμε το έργο στο github. Ακολουθεί ένα παράδειγμα: https://github.com/solana-developers/verify-squads
Προαιρετικά: Δείτε αν μπορείτε να επαληθεύσετε τοπικά πρώτα (αυτή η εντολή
χρησιμοποιεί παράδειγμα αναγνωριστικού προγράμματος
6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD
):
solana-verify verify-from-repo https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD
Απλώς για να βεβαιωθείτε ότι οι παράμετροί σας είναι σωστές.
4. Μεταφορά εξουσιοδότησης προγράμματος στο multisig
Εάν δεν έχετε ακόμη μεταφέρει την εξουσιοδότηση των προγραμμάτων σας στο multisig και αντιγράψει την εξουσιοδότηση multisig. Τη χρειάζεστε στο επόμενο βήμα.
5. Εξαγωγή συναλλαγής PDA
Όταν έχετε την εξουσιοδότηση του προγράμματός σας τοπικά, σας ζητείται να
ανεβάσετε τα δεδομένα κατασκευής στην αλυσίδα όταν χρησιμοποιείτε την εντολή
solana-verify verify-from-repo
.
Δεδομένου ότι δεν μπορείτε να το κάνετε αυτό όταν χρησιμοποιείτε ένα multisig, πρέπει να εξαγάγετε τη συναλλαγή PDA χειροκίνητα και στη συνέχεια να ενεργοποιήσετε τη συναλλαγή μέσω του Squads.
solana-verify export-pda-tx https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader <your program authority> --encoding base58 --compute-unit-price 0
Αυτό θα σας επιστρέψει μια συναλλαγή κωδικοποιημένη σε base58. Αν θέλετε μια
συναλλαγή κωδικοποιημένη σε base64 για χρήση σε επιθεωρητή συναλλαγών, μπορείτε
να χρησιμοποιήσετε --encoding base64
.
P6vBfcPaaXb8fZoT3NBAYEcdtEj7tubA1k2gBxmFKZ3UWF5YyrmDMFTvLKALCJoUuRsPAjMckudYruCu3eeWQtuDrFbEMLxLFutnKXac974fnkMivcwUdY66VLjbxQT6ATmcy7F4hBtz1G4P1h6iBJLhb8WtrtgY3i4qq45MUEb7RjuMEfUFXKrNgPdGxkz5xvMHq3dxKRcpmEK5k2DkeW6SUQYBVe19Ga3B9GyhTX8k3CMt9JCEah13WyRnQd8GjoK6sTEvGJym6xDNvmd8yiJYSNcaYwEJsjHEUf4Yh6kAC7ki2KRvVAr3NVe1gjqK9McrwSQjtUatvydTG8Zovcr7PPUEMf3yPMgKXjZLB2QpkH63yTTYdNAnWFuv9E6b6nYRqye5XcNi436yKw5U14fXh65yK34bgYLi9328UT1huJELsJU9BRGnGUmb6GWp6c2WL5BhnzgNTSnt9TXFfEgUMzhvKzpVBxLP44hwqqBdyUhHFysCF37531PnmiESq8x1xou23xJ6FcQbc199754MkqQd7tX9CUznGzAEqHGkzn3VBoJnojsKtgYmiTYbdRsT1CU18MbYEE7WvGAvXyxxbpNzbAcc94HrnM6cqRGmwhEBroPfFghTdmzg9D
6. Υποβολή συναλλαγής μέσω Squads
Μεταβείτε στο εργαλείο δημιουργίας συναλλαγών του Squads και εισαγάγετε τη συναλλαγή κωδικοποιημένη σε base58. Βεβαιωθείτε ότι στην προσομοίωση η συναλλαγή έχει μόνο μια κλήση στο πρόγραμμα επαλήθευσης osec και στο πρόγραμμα προϋπολογισμού υπολογιστή και τίποτα άλλο!
7. Υποβολή εργασίας απομακρυσμένης επαλήθευσης
Μόλις η συναλλαγή στο Squads ήταν επιτυχής, μπορείτε να υποβάλετε την απομακρυσμένη εργασία:
solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD--uploader <your program authority>
Αυτό είναι! Έχετε επαληθεύσει το πρόγραμμά σας έναντι ενός δημόσιου αποθετηρίου και έχετε υποβάλει μια απομακρυσμένη εργασία στο API της OtterSec. Θα πρέπει να μπορείτε να το δείτε να αντανακλάται στον εξερευνητή Solana και σε άλλα μέρη τώρα.
8. Ενημέρωση του προγράμματος (Προαιρετικό)
Όταν ενημερώνετε το πρόγραμμά σας, πρέπει να εξαγάγετε μια νέα συναλλαγή PDA και να την υποβάλετε ξανά μέσω του Squads.
Πραγματοποίηση ενημέρωσης στο πρόγραμμα:
solana-verify buildsolana program write-buffer target/deploy/verify_squads.so --with-compute-unit-price 50000 --max-sign-attempts 50
Στη συνέχεια, μεταφέρετε την εξουσιοδότηση του buffer στο multisig ή δημιουργήστε απευθείας το buffer με την εξουσιοδότηση του multisig.
solana program set-buffer-authority Fu3k79g53ZozAj47uq1tXrFy4QbQYh7y745DDsxjtyLR --new-buffer-authority 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K
9. Εξαγωγή και υποβολή νέας συναλλαγής PDA
Μην ξεχάσετε να κάνετε commit τις αλλαγές σας στο github. Εξαγάγετε ξανά τη συναλλαγή αναβάθμισης PDA:
solana-verify export-pda-tx https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K
Υποβάλετε τη συναλλαγή μέσω του Squads ξανά.
Μπορείτε να δείτε ένα παράδειγμα συναλλαγής εδώ.
Στη συνέχεια, υποβάλετε για άλλη μια απομακρυσμένη κατασκευή:
solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K
Θα πρέπει να έχει ως αποτέλεσμα κάτι σαν αυτό:
Verification request sent with request id: b63339d2-163e-49ac-b55d-3454c1c2b5b3Verification in progress... ⏳ [00:18:02] ✅ Process completed. (Done in 18minutes) Program 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD has been verified.✅ The provided GitHub build matches the on-chain hash. On Chain Hash:96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 ExecutableHash: 96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 Repo URL:https://github.com/Woody4618/verify-squads/tree/0fb0a2e30c15c51732c0ad5e837975a6f7bbc7edCheck the verification status at:https://verify.osec.io/status/6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD Joburl: https://verify.osec.io/job/b63339d2-163e-49ac-b55d-3454c1c2b5b3
Συγχαρητήρια, έχετε επαληθεύσει το πρόγραμμά σας μετά από μια αναβάθμιση multisig!
Επαλήθευση από εικόνα docker
Μπορείτε επίσης να επαληθεύσετε το πρόγραμμά σας με μια εικόνα docker εκτελώντας την ακόλουθη εντολή:
solana-verify verify-from-image -eexamples/hello_world/target/deploy/hello_world.so -iellipsislabs/hello_world_verifiable_build:latest -p2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn
Αυτή η εντολή φορτώνει την εικόνα που είναι αποθηκευμένη στο
ellipsislabs/hello_world_verifiable_build:latest
και επαληθεύει ότι το hash
της διαδρομής του εκτελέσιμου στο container είναι το ίδιο με το hash του
προγράμματος on-chain που παρέχεται στην εντολή. Επειδή η κατασκευή έχει ήδη
μεταφορτωθεί σε μια εικόνα, δεν υπάρχει ανάγκη για πλήρη ανακατασκευή του
εκτελέσιμου, η οποία μπορεί να διαρκέσει πολύ χρόνο.
Το Dockerfile που δημιουργεί την εικόνα
ellipsislabs/hello_world_verifiable_build:latest
μπορεί να βρεθεί στο
αποθετήριο της Ellipsis Labs
/examples/hello_world.
Παρακάτω είναι η αναμενόμενη έξοδος:
Verifying image: "ellipsislabs/hello_world_verifiable_build:latest", on network"https://api.mainnet-beta.solana.com" against program ID2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn Executable path in container:"examples/hello_world/target/deploy/hello_world.so"Executable hash:08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Program hash:08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Executablematches on-chain program data ✅
Παράδειγμα επαληθευμένης κατασκευής
Εδώ είναι ένα παράδειγμα επαλήθευσης ενός προγράμματος με το αναγνωριστικό
FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv
χρησιμοποιώντας τον πηγαίο κώδικα
από αυτό το αποθετήριο:
solana-verify verify-from-repo https://github.com/solana-developers/verified-program --url YOUR-RPC-URL --program-id FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv --mount-path waffle --library-name waffle --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e
Από προεπιλογή, η εντολή verify-from-repo
χρησιμοποιεί την τελευταία υποβολή
στον κύριο κλάδο. Μπορείτε επίσης να ορίσετε μια συγκεκριμένη υποβολή σε
περίπτωση που θέλετε να συνεχίσετε να εργάζεστε στο αποθετήριο χρησιμοποιώντας
την παράμετρο commit-hash
:
--commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e
Τέλος, μπορείτε επίσης να επαληθεύσετε απευθείας το πρόγραμμα μέσω του API της OtterSec:
solana-verify verify-from-repo https://github.com/solana-developers/verified-program --url YOUR-RPC-URL --remote --program-id FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv --mount-path waffle --library-name waffle --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e
Η εντολή --remote
στέλνει ένα αίτημα κατασκευής στο API της OtterSec, το οποίο
ενεργοποιεί μια απομακρυσμένη κατασκευή του προγράμματός σας. Μόλις ολοκληρωθεί
η κατασκευή, το σύστημα επαληθεύει ότι το hash του προγράμματός σας στην αλυσίδα
ταιριάζει με το hash του παραγόμενου τεχνουργήματος κατασκευής από το αποθετήριό
σας.
Δημοφιλή προγράμματα που έχουν ήδη επαληθευτεί
Phoenix
solana-verify verify-from-repo -um --program-id PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY https://github.com/Ellipsis-Labs/phoenix-v1
Τελικό αποτέλεσμα:
Executable Program Hash from repo: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9On-chain Program Hash: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9Program hash matches ✅
Squads V3
solana-verify verify-from-repo https://github.com/Squads-Protocol/squads-mpl --commit-hash c95b7673d616c377a349ca424261872dfcf8b19d --program-id SMPLecH534NA9acpos4G6x7uf3LWbCAwZQE9e8ZekMu -um --library-name squads_mpl --bpf
Παρατηρήστε ότι χρειάστηκε να καθορίσουμε το
library-name
επειδή το αποθετήριο Squads περιλαμβάνει πολλαπλά προγράμματα. Χρησιμοποιούμε τη σημαία--bpf
επειδή τοsquads_mpl
είχε προηγουμένως επαληθευτεί με το Anchor.
Τελικό αποτέλεσμα:
Executable Program Hash from repo: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205cOn-chain Program Hash: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205cProgram hash matches ✅
Drift V2
solana-verify verify-from-repo -um --program-id dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH https://github.com/drift-labs/protocol-v2 --commit-hash 110d3ff4f8ba07c178d69f9bfc7b30194fac56d6 --library-name drift
Τελικό αποτέλεσμα:
Executable Program Hash from repo: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828On-chain Program Hash: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828Program hash matches ✅
Marginfi V2
solana-verify verify-from-repo -um --program-id MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA https://github.com/mrgnlabs/marginfi-v2 --commit-hash d33e649e415c354cc2a1e3c49131725552d69ba0 --library-name marginfi -- --features mainnet-beta
Τελικό αποτέλεσμα:
Executable Program Hash from repo: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5On-chain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5Program hash matches ✅
Συμπέρασμα
Η χρήση επαληθευμένων builds στο Solana εξασφαλίζει την ακεραιότητα και την αξιοπιστία των προγραμμάτων σας στο δίκτυο και επιτρέπει στους προγραμματιστές να βρίσκουν τα SDK σας απευθείας από τον Solana Explorer. Αξιοποιώντας εργαλεία όπως το Solana Verify CLI και το Docker, μπορείτε να διατηρείτε επαληθεύσιμα και ασφαλή builds που ευθυγραμμίζονται με τον πηγαίο κώδικά σας. Πάντα να λαμβάνετε τις απαραίτητες προφυλάξεις για τη χρήση συνεπών περιβαλλόντων και να εξετάζετε λύσεις διακυβέρνησης για ασφαλείς αναβαθμίσεις και αναπτύξεις.
Ασφάλεια + Αποποίηση ευθυνών
Ενώ τα επαληθευμένα builds είναι ένα ισχυρό εργαλείο για τη διασφάλιση της ακεραιότητας των προγραμμάτων σας στο Solana, δεν είναι εντελώς αξιόπιστα στην προεπιλεγμένη ρύθμιση. Οι εικόνες docker κατασκευάζονται και φιλοξενούνται από το Solana Foundation.
Να γνωρίζετε ότι χτίζετε το έργο σας σε μια κατεβασμένη εικόνα docker και ότι ολόκληρη η ρύθμισή σας αντιγράφεται σε αυτή την εικόνα docker για κατασκευή, συμπεριλαμβανομένων πιθανώς ευαίσθητων πληροφοριών.
Αν θέλετε να έχετε μια εντελώς αξιόπιστη ρύθμιση, μπορείτε να δημιουργήσετε τις εικόνες docker μόνοι σας και να τις φιλοξενήσετε στη δική σας υποδομή. Με αυτόν τον τρόπο μπορείτε να είστε σίγουροι ότι οι εικόνες docker δεν έχουν παραποιηθεί. Μπορείτε να βρείτε τα scripts για να δημιουργήσετε τις δικές σας εικόνες docker στο αποθετήριο Verified builds και μπορείτε να το κάνετε fork και να εκτελέσετε τις ενέργειες github μόνοι σας ή να επικυρώσετε ότι είναι σωστές.
Επιπλέον, για την απομακρυσμένη επαλήθευση, εμπιστεύεστε το API της OtterSec και τον Solana Explorer σε κάποιο βαθμό.
Το API ή ο Solana Explorer ενδέχεται να εμφανίζουν λανθασμένες πληροφορίες σε περίπτωση παραβίασης.
Αν θέλετε να έχετε μια εντελώς αξιόπιστη ρύθμιση, μπορείτε να εκτελέσετε το
Verify API μόνοι
σας ή να εκτελέσετε την επαλήθευση προγράμματος τοπικά χρησιμοποιώντας την
εντολή verify-from-repo
χρησιμοποιώντας τα δεδομένα επαλήθευσης on chain που
αποθηκεύονται σε ένα
PDA
που προέρχεται από την αρχή ανάπτυξης των προγραμμάτων και το
πρόγραμμα επαλήθευσης.
Το πρόγραμμα επαλήθευσης αναπτύσσεται από την ομάδα OtterSec και δεν έχει ακόμη παγώσει, οπότε μπορεί να αναβαθμιστεί ανά πάσα στιγμή.
Το Ίδρυμα Solana, η OtterSec και η ομάδα Ellipsis Labs δεν φέρουν ευθύνη για τυχόν απώλειες ή ζημιές που μπορεί να προκύψουν από τη χρήση της διαδικασίας επαληθευμένων κατασκευών.
Security.txt για προγράμματα Solana
Εκτός από τις επαληθευμένες κατασκευές, μπορείτε επίσης να προσθέσετε ένα αρχείο
security.txt
στο πρόγραμμά σας. Στο μέλλον, μόλις υλοποιηθεί, το
security.txt
θα περιέχει το δημόσιο κλειδί του επαληθευτή για εύκολη πρόσβαση
στα δεδομένα επαλήθευσης που αποθηκεύονται στο PDA επαλήθευσης. Το PDA που
περιέχει όλες τις πληροφορίες που απαιτούνται για την κατασκευή και επαλήθευση
ενός προγράμματος προέρχεται από τη διεύθυνση του προγράμματος και το pubkey του
επαληθευτή. Από προεπιλογή, αυτό είναι το ίδιο pubkey που κατασκεύασε και
ανέπτυξε το πρόγραμμα. Αλλά μπορεί επίσης να είναι ένα άλλο pubkey που μπορεί να
καθοριστεί στο security.txt
.
Η λειτουργία security.txt
επιτρέπει στους προγραμματιστές να ενσωματώνουν
πληροφορίες επικοινωνίας και ασφάλειας απευθείας μέσα στα έξυπνα συμβόλαια
Solana. Εμπνευσμένο από το securitytxt.org, αυτή η
προσέγγιση παρέχει έναν τυποποιημένο τρόπο για τους ερευνητές ασφαλείας να
επικοινωνούν με τους συντηρητές του έργου, ακόμα κι αν γνωρίζουν μόνο τη
διεύθυνση του συμβολαίου.
Γιατί να χρησιμοποιήσετε το security.txt;
Για πολλά έργα, ειδικά τα μικρότερα ή ιδιωτικά, ο εντοπισμός των προγραμματιστών
μόνο από τη διεύθυνση του συμβολαίου μπορεί να είναι δύσκολος και χρονοβόρος. Η
ενσωμάτωση ενός αρχείου security.txt
μέσα στο πρόγραμμα διασφαλίζει ότι οι
ερευνητές ασφαλείας μπορούν εύκολα να επικοινωνήσουν με τα σωστά άτομα, πιθανώς
αποτρέποντας εκμεταλλεύσεις και διασφαλίζοντας έγκαιρες αναφορές σφαλμάτων.
Πώς να υλοποιήσετε το security.txt
Για να προσθέσετε ένα security.txt
στο πρόγραμμά σας Solana, συμπεριλάβετε τα
ακόλουθα βήματα:
Προσθέστε την εξάρτηση solana-security-txt
στο Cargo.toml
σας:
[dependencies]solana-security-txt = "1.1.1"
Χρησιμοποιήστε το μακροεντολή security_txt!
στο συμβόλαιό σας για να ορίσετε
τις πληροφορίες ασφαλείας σας. Μπορείτε να συμπεριλάβετε στοιχεία επικοινωνίας,
διευθύνσεις URL του έργου, ακόμη και μια πολιτική ασφαλείας. Ακολουθεί ένα
παράδειγμα:
#[cfg(not(feature = "no-entrypoint"))]use {default_env::default_env, solana_security_txt::security_txt};#[cfg(not(feature = "no-entrypoint"))]security_txt! {name: "MyProject",project_url: "https://myproject.com",contacts: "email:security@myproject.com,discord:security#1234",policy: "https://myproject.com/security-policy",// Optional Fieldspreferred_languages: "en,de",source_code: "https://github.com/solana-developers/solana-game-preset",source_revision: "5vJwnLeyjV8uNJSp1zn7VLW8GwiQbcsQbGaVSwRmkE4r",source_release: "",encryption: "",auditors: "Verifier pubkey: 5vJwnLeyjV8uNJSp1zn7VLW8GwiQbcsQbGaVSwRmkE4r",acknowledgements: "Thank you to our bug bounty hunters!"}
Μόλις οι πληροφορίες security.txt
ενσωματωθούν στο πρόγραμμά σας, μπορούν να
αναζητηθούν εύκολα μέσω εργαλείων όπως ο Solana Explorer, διασφαλίζοντας ότι τα
στοιχεία επικοινωνίας και ασφαλείας σας είναι διαθέσιμα σε όποιον θέλει να
αναφέρει πιθανά προβλήματα.
Βέλτιστες πρακτικές
-
Χρησιμοποιήστε συνδέσμους: Για πληροφορίες που είναι πιθανό να αλλάξουν (π.χ. στοιχεία επικοινωνίας), συνιστάται να συνδέσετε σε μια ιστοσελίδα αντί να τις κωδικοποιείτε απευθείας στο συμβόλαιο. Αυτό αποφεύγει την ανάγκη για συχνές αναβαθμίσεις του προγράμματος.
-
Επαλήθευση: Πριν από την ανάπτυξη, επαληθεύστε τη μορφή και το περιεχόμενο χρησιμοποιώντας το εργαλείο
query-security-txt
, το οποίο μπορεί να επικυρώσει τόσο προγράμματα onchain όσο και τοπικά εκτελέσιμα αρχεία:
query-security-txt target/bpfel-unknown-unknown/release/my_contract.so
Ενσωματώνοντας τις πληροφορίες επικοινωνίας ασφαλείας απευθείας στο συμβόλαιό σας, διευκολύνετε τους ερευνητές να επικοινωνήσουν μαζί σας, προωθώντας καλύτερη ασφάλεια και επικοινωνία εντός του οικοσυστήματος Solana.
Αυτό είναι ένα παράδειγμα του πώς φαίνεται το security.txt στον Solana Explorer
Το έργο security.txt
συντηρείται από τη
Neodyme Labs
Is this page helpful?