Τεκμηρίωση SolanaΑνάπτυξη προγραμμάτων

Επαλήθευση προγραμμάτων

Αυτός ο οδηγός προορίζεται να αποτελέσει αναφορά για προγραμματιστές που θέλουν να εφαρμόσουν επαληθευμένες κατασκευές για τα προγράμματά τους στο 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 ως πρότυπο:

Cargo.toml
[workspace]
members = ["program/programs/*"]
resolver = "2"
[profile.release]
overflow-checks = true
lto = "fat"
codegen-units = 1
[profile.release.build-override]
opt-level = 3
incremental = false
codegen-units = 1

Βεβαιωθείτε ότι το πρόγραμμά σας βρίσκεται στον πίνακα workspace/members και ότι το αρχείο Cargo.toml του προγράμματός σας έχει διαμορφωμένο το σωστό όνομα lib.

Σημαντικό είναι το lib name και όχι το όνομα του πακέτου!

Κάτι σαν αυτό:

waffle/Cargo.toml
[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 much
solana 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 build
solana 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-3454c1c2b5b3
Verification in progress... ⏳ [00:18:02] ✅ Process completed. (Done in 18
minutes) Program 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD has been verified.
The provided GitHub build matches the on-chain hash. On Chain Hash:
96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 Executable
Hash: 96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 Repo URL:
https://github.com/Woody4618/verify-squads/tree/0fb0a2e30c15c51732c0ad5e837975a6f7bbc7ed
Check the verification status at:
https://verify.osec.io/status/6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD Job
url: https://verify.osec.io/job/b63339d2-163e-49ac-b55d-3454c1c2b5b3

Συγχαρητήρια, έχετε επαληθεύσει το πρόγραμμά σας μετά από μια αναβάθμιση multisig!

Επαλήθευση από εικόνα docker

Μπορείτε επίσης να επαληθεύσετε το πρόγραμμά σας με μια εικόνα docker εκτελώντας την ακόλουθη εντολή:

solana-verify verify-from-image -e
examples/hello_world/target/deploy/hello_world.so -i
ellipsislabs/hello_world_verifiable_build:latest -p
2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn

Αυτή η εντολή φορτώνει την εικόνα που είναι αποθηκευμένη στο 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 ID
2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn Executable path in container:
"examples/hello_world/target/deploy/hello_world.so"
Executable hash:
08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Program hash:
08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Executable
matches 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: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9
On-chain Program Hash: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9
Program 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: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205c
On-chain Program Hash: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205c
Program 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: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828
On-chain Program Hash: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828
Program 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: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
On-chain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
Program 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 σας:

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 Fields
preferred_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?

Πίνακας Περιεχομένων

Τι είναι οι επαληθευμένες κατασκευές;Πώς λειτουργεί;Γιατί να χρησιμοποιήσω επαληθευμένες δημιουργίες;Πώς δημιουργώ επαληθευμένες εκδόσεις;Εγκαταστήστε το Docker και το CargoΕγκαταστήστε το Solana Verify CLIΠροετοιμασία έργουΔημιουργία επαληθεύσιμων προγραμμάτωνΑνάπτυξη επαληθεύσιμων προγραμμάτωνΕπαλήθευση έναντι αποθετηρίωνΕπαλήθευση μέσω δημόσιου APIΠώς να επαληθεύσετε το πρόγραμμά σας όταν ελέγχεται από ένα Multisig όπως το Squads1. Δημιουργήστε το επαληθεύσιμο πρόγραμμα2. Αναπτύξτε το πρόγραμμα3. Δέσμευση και επαλήθευση έναντι του αποθετηρίου4. Μεταφορά εξουσιοδότησης προγράμματος στο multisig5. Εξαγωγή συναλλαγής PDA6. Υποβολή συναλλαγής μέσω Squads7. Υποβολή εργασίας απομακρυσμένης επαλήθευσης8. Ενημέρωση του προγράμματος (Προαιρετικό)9. Εξαγωγή και υποβολή νέας συναλλαγής PDAΕπαλήθευση από εικόνα dockerΠαράδειγμα επαληθευμένης κατασκευήςΔημοφιλή προγράμματα που έχουν ήδη επαληθευτείPhoenixSquads V3Drift V2Marginfi V2ΣυμπέρασμαΑσφάλεια + Αποποίηση ευθυνώνSecurity.txt για προγράμματα SolanaΓιατί να χρησιμοποιήσετε το security.txt;Πώς να υλοποιήσετε το security.txtΒέλτιστες πρακτικές
Επεξεργασία Σελίδας