Τεκμηρίωση 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 στη ρίζα σας, μπορείτε να προχωρήσετε απευθείας στο επόμενο βήμα και να κάνετε build το πρόγραμμά σας.

Αν το πρόγραμμά σας βρίσκεται σε υποφάκελο και έχετε ένα rust workspace, πρέπει να δημιουργήσετε ένα αρχείο Cargo.toml workspace στον ριζικό κατάλογο του αποθετηρίου σας.

Μπορείτε να χρησιμοποιήσετε αυτό το παράδειγμα 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"

Σε αυτό το αποθετήριο μπορείτε να δείτε ένα παράδειγμα workspace με ένα πρόγραμμα σε υποφάκελο. Παρατηρήστε επίσης ότι όταν το πρόγραμμα βρίσκεται σε υποφάκελο, θα πρέπει αργότερα να προσθέσετε αυτόν τον φάκελο ως --mount-path στην εντολή verify-from-repo.

Σε αυτό το αποθετήριο μπορείτε να βρείτε ένα παράδειγμα Anchor. Σε αυτό το αποθετήριο μπορείτε να βρείτε ένα παράδειγμα εγγενούς rust.

Με αυτό το αρχείο Cargo.toml στη θέση του, μπορείτε στη συνέχεια να εκτελέσετε cargo generate-lockfile για να δημιουργήσετε ένα αρχείο lock και να συνεχίσετε με το build του προγράμματός σας.

Δημιουργία επαληθεύσιμων προγραμμάτων

Για να κάνετε verifiable build το πρόγραμμα Solana σας, μεταβείτε στον κατάλογο που περιέχει το αρχείο Cargo.toml του workspace σας και εκτελέστε:

solana-verify build

Αυτό θα αντιγράψει το περιβάλλον σας σε ένα container docker και θα το δημιουργήσει με έναν ντετερμινιστικό τρόπο.

Βεβαιωθείτε ότι πράγματι κάνετε deploy το verified build και δεν το αντικαθιστάτε κατά λάθος με 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 διότι διαφορετικά μπορεί να αντιμετωπίσετε περιορισμούς ρυθμού των δωρεάν RPC. Έτσι αντί για -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

Αυτό θα κατασκευάσει μια επαληθεύσιμη κατασκευή χρησιμοποιώντας ένα docker container χρησιμοποιώντας την έκδοση 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, θα χρησιμοποιήσουμε ένα παράδειγμα program ID 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD.

3. Δέσμευση και επαλήθευση έναντι του αποθετηρίου

Μόλις ολοκληρωθεί αυτό, δεσμεύουμε το έργο στο github. Ακολουθεί ένα παράδειγμα: https://github.com/solana-developers/verify-squads

Προαιρετικό: Δείτε αν μπορείτε να επαληθεύσετε τοπικά πρώτα (αυτή η εντολή χρησιμοποιεί το παράδειγμα program ID 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD):

solana-verify verify-from-repo https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD

Απλώς για να βεβαιωθείτε ότι οι παράμετροί σας είναι σωστές.

4. Μεταφορά εξουσιοδότησης προγράμματος στο multisig

Εάν δεν έχετε ακόμη μεταφέρει την εξουσιοδότηση των προγραμμάτων σας στο multisig και αντιγράψει την εξουσιοδότηση multisig. Τη χρειάζεστε στο επόμενο βήμα.

5. Εξαγωγή συναλλαγής PDA

Όταν έχετε την εξουσία του προγράμματος τοπικά, σας ζητείται να ανεβάσετε τα δεδομένα κατασκευής onchain όταν χρησιμοποιείτε την εντολή 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 του προγράμματος στην αλυσίδα που παρέχεται στην εντολή. Επειδή η κατασκευή έχει ήδη μεταφορτωθεί σε μια εικόνα, δεν υπάρχει ανάγκη για πλήρη ανακατασκευή του εκτελέσιμου αρχείου, η οποία μπορεί να διαρκέσει πολύ χρόνο.

Το 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.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 ✅

Παράδειγμα επαληθευμένης κατασκευής

Ακολουθεί ένα παράδειγμα επαλήθευσης ενός προγράμματος παραδείγματος με το ID 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 στον κύριο κλάδο. Μπορείτε επίσης να ορίσετε ένα συγκεκριμένο commit σε περίπτωση που θέλετε να συνεχίσετε να εργάζεστε στο αποθετήριο χρησιμοποιώντας την παράμετρο 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 ✅

Συχνές ερωτήσεις

Η επαλήθευσή μου αποτυγχάνει. Τι πρέπει να κάνω;

Ελέγξτε αυτά τα συνηθισμένα προβλήματα:

  • Λάθος υπογράφων: Επιβεβαιώστε ότι ο υπογράφων σας είναι η αρχή αναβάθμισης του προγράμματος εκτελώντας solana program show YourProgramId
  • Χωρίς on-chain PDA: Εκτελέστε solana-verify verify-from-repo -um και επιλέξτε ΝΑΙ όταν ερωτηθείτε. Χωρίς τη μεταφόρτωση του PDA, το API δεν μπορεί να ανακτήσει τα μεταδεδομένα επαλήθευσής σας.
  • Αναντιστοιχία δεδομένων PDA: Ενημερώστε το PDA σας εάν έχετε αναπτύξει ξανά το πρόγραμμά σας. Τα δεδομένα του PDA σας πρέπει να ταιριάζουν με το αναπτυγμένο πρόγραμμά σας.
  • Εσφαλμένο commit hash: Δημιουργήστε το PDA σας χρησιμοποιώντας το ακριβές commit hash που αναπτύξατε
  • Διαφορές περιβάλλοντος κατασκευής: Χρησιμοποιήστε Docker με solana-verify κατά τη δημιουργία του PDA σας

Το τοπικό μου build hash δεν ταιριάζει με το on-chain hash. Γιατί;

Αυτό συνήθως σημαίνει:

  • Χρησιμοποιείτε διαφορετικές εκδόσεις Rust/Solana toolchain
  • Οι εξαρτήσεις σας ενημερώθηκαν μεταξύ των κατασκευών
  • Δεν κάνατε build σε Docker container
  • Κάνατε checkout το λάθος commit

Διορθώστε το κάνοντας build με solana-verify build σε Docker χρησιμοποιώντας το ακριβές commit που αναπτύξατε.

Πόσο χρόνο θα διαρκέσει η επαλήθευσή μου;

Αναμένετε αυτά τα χρονικά πλαίσια με βάση το μέγεθος του προγράμματός σας:

  • Απλά προγράμματα: 1-5 λεπτά
  • Σύνθετα προγράμματα: 5-15 λεπτά
  • Πολύ μεγάλα προγράμματα: Έως 30 λεπτά

Παρακολουθήστε την πρόοδό σας χρησιμοποιώντας το endpoint κατάστασης εργασίας.

Το πρόγραμμά μου είναι αμετάβλητο (χωρίς αρχή αναβάθμισης). Πώς μπορώ να το επαληθεύσω;

Εάν το πρόγραμμά σας δεν έχει αρχή αναβάθμισης ή έγινε αμετάβλητο προτού μπορέσετε να δημιουργήσετε ένα PDA, διαθέτουμε μια διεύθυνση λευκής λίστας για αυτήν την περίπτωση. Επικοινωνήστε μαζί μας στο contact@osec.io και θα σας βοηθήσουμε να επαληθεύσετε το πρόγραμμά σας.

Τι είναι το PDA και γιατί έχει σημασία;

Ο PDA (Program Derived Account) σας επιτρέπει την επαλήθευση χωρίς εμπιστοσύνη:

  • Αποθήκευση On-Chain: Αποθηκεύστε τα μεταδεδομένα επαλήθευσης (URL αποθετηρίου, hash commit, παραμέτρους build) on-chain σε έναν PDA που ανήκει στο πρόγραμμα Otter Verify (verifycLy8mB96wd9wqq3WDXQwM4oU6r42Th37Db9fC)
  • Κρυπτογραφική Σύνδεση: Ο PDA σας προκύπτει από τη διεύθυνση του προγράμματός σας, δημιουργώντας έναν αμετάβλητο σύνδεσμο με τα δεδομένα επαλήθευσής σας
  • Αποκεντρωμένη Εμπιστοσύνη: Οποιοσδήποτε μπορεί να διαβάσει τον PDA σας και να επαληθεύσει ανεξάρτητα το πρόγραμμά σας

Γιατί πρέπει να δημιουργήσω τον PDA πριν χρησιμοποιήσω το API;

Το API λειτουργεί μόνο με PDAs on-chain επειδή:

  • Χωρίς Εμπιστοσύνη: Το API απορρίπτει αυθαίρετα δεδομένα - χρησιμοποιεί μόνο ό,τι αποθήκευσε η αρχή αναβάθμισής σας on-chain
  • Απλούστερο: Απλά παρέχετε signer + program_id· το API λαμβάνει όλα τα υπόλοιπα από τον PDA σας
  • Προστασία από Παραποίηση: Ο PDA σας δημιουργεί μια αμετάβλητη εγγραφή που οποιοσδήποτε μπορεί να επαληθεύσει ανεξάρτητα
  • Απόδειξη Ιδιοκτησίας: Ο signer σας πρέπει να είναι η αρχή αναβάθμισης, αποδεικνύοντας κρυπτογραφικά ότι ελέγχετε το πρόγραμμα

Πόσο συχνά πρέπει να επαληθεύω το πρόγραμμά μου;

Επαληθεύστε το πρόγραμμά σας:

  • Μετά από κάθε ανάπτυξη ή αναβάθμιση
  • Όταν ενημερώνετε το αποθετήριο πηγαίου κώδικά σας
  • Μην ανησυχείτε για επανεπαλήθευση διαφορετικά - το API επανεπαληθεύει αυτόματα όλα τα προγράμματα κάθε 24 ώρες

Τι συμβαίνει όταν αναβαθμίζω το πρόγραμμά μου;

Ακολουθήστε αυτά τα βήματα μετά την αναβάθμιση:

  1. Το API εντοπίζει την αναβάθμισή σας και αφαιρεί την επαλήθευση του προγράμματός σας.
  2. Ενημερώστε τον PDA σας με νέα μεταδεδομένα επαλήθευσης:
solana-verify verify-from-repo -um \
--program-id YourProgramId... \
https://github.com/your-org/your-program
  1. Υποβάλετε ένα νέο αίτημα επαλήθευσης χρησιμοποιώντας την αρχή αναβάθμισής σας
  2. Το API θα επαληθεύσει τη νέα σας έκδοση με βάση τον ενημερωμένο PDA

Σημαντικό: Ενημερώνετε πάντα τον PDA σας χρησιμοποιώντας την αρχή αναβάθμισής σας με το νέο hash commit για το αναβαθμισμένο πρόγραμμα.

Μπορώ να εμπιστευτώ τα αποτελέσματα επαλήθευσης;

Ναι - το σύστημα έχει σχεδιαστεί να είναι αξιόπιστο χωρίς να απαιτείται εμπιστοσύνη και να επιτρέπει ανεξάρτητη επαλήθευση:

Τι το καθιστά αξιόπιστο:

  • On-Chain PDA: Τα μεταδεδομένα επαλήθευσής σας βρίσκονται on-chain, χωρίς να ελέγχονται από κάποια κεντρική αρχή
  • Απόδειξη Εξουσίας Αναβάθμισης: Μόνο η εξουσία αναβάθμισης του προγράμματός σας μπορεί να δημιουργήσει/ενημερώσει το PDA
  • Ανεξάρτητη Επαλήθευση: Οποιοσδήποτε μπορεί να επαληθεύσει διαβάζοντας το PDA σας και εκτελώντας το solana-verify τοπικά
  • Συνεχής Επανεπαλήθευση: Το API επαληθεύει αυτόματα όλα τα προγράμματα κάθε 24 ώρες

Κατανοήστε αυτούς τους περιορισμούς:

  • Η επαλήθευση επιβεβαιώνει ότι ο πηγαίος κώδικας ταιριάζει με την ανάπτυξη - ΟΧΙ ότι ο κώδικάς σας είναι ασφαλής
  • Πάντα να εξετάζετε τον κώδικα πριν αλληλεπιδράσετε με προγράμματα
  • Επαληθευμένο ≠ ελεγμένο ή ασφαλές
  • Ελέγξτε το αποθετήριο και το commit στο PDA για να επιβεβαιώσετε ότι προέρχεται από αξιόπιστη πηγή

Πώς μπορώ να επαληθεύσω ανεξάρτητα ένα πρόγραμμα;

Επαληθεύστε οποιοδήποτε πρόγραμμα μόνοι σας διαβάζοντας το on-chain PDA του και εκτελώντας την επαλήθευση τοπικά:

Βήμα 1: Διαβάστε το On-Chain PDA

# Install solana-verify if you haven't
cargo install solana-verify
# Get the PDA data
solana-verify list-program-pdas --program-id YourProgramId...

Βήμα 2: Επαληθεύστε Τοπικά

# Verify using the repository and commit & other arguments from the PDA
solana-verify verify-from-repo \
--program-id YourProgramId... \
https://github.com/your-org/your-program
--commit-hash <commit-hash>
... (other arguments from the PDA)
# Confirm the hash output matches the on-chain program hash

Αυτό αποδεικνύει:

  1. Τα μεταδεδομένα PDA είναι αυθεντικά (αποθηκευμένα on-chain)
  2. Ο πηγαίος κώδικας στο αποθετήριο του PDA ταιριάζει με το αναπτυγμένο πρόγραμμα
  3. Δεν χρειάζεται να εμπιστευτείτε το API - επαληθεύστε τα πάντα μόνοι σας on-chain

Μπορεί κάποιος άλλος να επαληθεύσει το πρόγραμμά μου χωρίς άδεια;

Ναι, αυτός είναι ο λόγος που απαιτούμε ο υπογράφων να είναι η εξουσία αναβάθμισης. Θεωρούμε την επαλήθευση έγκυρη μόνο εάν ο υπογράφων είναι η εξουσία αναβάθμισης.

Τι χρειάζομαι για να δημιουργήσω επαληθεύσιμες builds;

Εγκαταστήστε αυτά τα εργαλεία:

  • Docker (για ντετερμινιστικές builds)
  • Cargo (διαχειριστής πακέτων Rust)
  • Solana Verify CLI: cargo install solana-verify
  • Ένα δημόσιο αποθετήριο Git με τον πηγαίο κώδικά σας

Μπορώ να επαληθεύσω ιδιωτικά αποθετήρια;

Όχι - η επαλήθευση απαιτεί δημόσιο πηγαίο κώδικα:

  • Το PDA σας αποθηκεύει μια δημόσια διεύθυνση URL αποθετηρίου στην οποία μπορεί να έχει πρόσβαση οποιοσδήποτε
  • Η επαλήθευση χωρίς εμπιστοσύνη εξαρτάται από τη δημόσια πρόσβαση στον κώδικα
  • Οι χρήστες πρέπει να διαβάσουν τον πηγαίο κώδικά σας για να κατανοήσουν τι κάνει το πρόγραμμά σας
  • Ο πλήρης σκοπός είναι να επιτρέψει στους χρήστες να επαληθεύσουν ανεξάρτητα ότι η πηγή ταιριάζει με την ανάπτυξη

Τα ιδιωτικά αποθετήρια καταστρέφουν το βασικό μοντέλο εμπιστοσύνης του συστήματος επαλήθευσης.

Πώς μπορώ να επαληθεύσω ένα πρόγραμμα που ελέγχεται από το Squads Multisig;

Ακολουθήστε αυτά τα βήματα για προγράμματα που ελέγχονται από multisig:

# 1. Build and deploy normally
solana-verify build
solana program deploy <your-program.so> --program-id YourProgramId...
# 2. Verify locally first - confirm the hash matches
solana-verify verify-from-repo -um \
--program-id YourProgramId... \
https://github.com/your-org/your-program
# 3. Export the PDA creation transaction
solana-verify export-pda-tx \
--program-id YourProgramId... \
https://github.com/your-org/your-program
# 4. Execute the PDA transaction through your Squads Multisig interface
# 5. After multisig execution, trigger remote verification
solana-verify remote submit-job \
--program-id YourProgramId... \
--uploader YourMultisigAddress...

Κρίσιμο: Πάντα να επαληθεύετε τοπικά (βήμα 2) για να επιβεβαιώσετε ότι το hash της κατασκευής ταιριάζει πριν εξάγετε τη συναλλαγή PDA.

Συμπέρασμα

Η χρήση επαληθευμένων κατασκευών στη Solana εξασφαλίζει την ακεραιότητα και την αξιοπιστία των προγραμμάτων σας στο δίκτυο και επιτρέπει στους προγραμματιστές να βρίσκουν τα SDK σας απευθείας από έναν Solana Explorer. Αξιοποιώντας εργαλεία όπως το Solana Verify CLI και το Docker, μπορείτε να διατηρήσετε επαληθεύσιμες και ασφαλείς κατασκευές που ευθυγραμμίζονται με τον πηγαίο κώδικά σας. Λαμβάνετε πάντα τις απαραίτητες προφυλάξεις για να χρησιμοποιείτε συνεπή περιβάλλοντα και σκεφτείτε λύσεις διακυβέρνησης για ασφαλείς αναβαθμίσεις και αναπτύξεις.

Ασφάλεια + Αποποίηση Ευθύνης

Ενώ οι επαληθευμένες κατασκευές είναι ένα ισχυρό εργαλείο για τη διασφάλιση της ακεραιότητας των προγραμμάτων Solana σας, δεν είναι εντελώς χωρίς εμπιστοσύνη στην προεπιλεγμένη ρύθμιση. Οι εικόνες docker κατασκευάζονται και φιλοξενούνται από το Solana Foundation.

Να γνωρίζετε ότι κατασκευάζετε το έργο σας σε μια ληφθείσα εικόνα docker και ότι όλη η ρύθμισή σας αντιγράφεται σε αυτήν την εικόνα docker για κατασκευή, συμπεριλαμβανομένων πιθανώς ευαίσθητων πληροφοριών.

Εάν θέλετε να έχετε μια εντελώς χωρίς εμπιστοσύνη ρύθμιση, μπορείτε να κατασκευάσετε τις εικόνες docker οι ίδιοι και να τις φιλοξενήσετε στη δική σας υποδομή. Με αυτόν τον τρόπο μπορείτε να είστε σίγουροι ότι οι εικόνες docker δεν έχουν παραποιηθεί. Μπορείτε να βρείτε τα scripts για τη δημιουργία των δικών σας εικόνων docker στο Verified builds repository και μπορείτε να το κάνετε fork και να εκτελέσετε τις github actions οι ίδιοι ή να επαληθεύσετε ότι είναι σωστές.

Επιπλέον, για την απομακρυσμένη επαλήθευση εμπιστεύεστε σε κάποιο βαθμό το API της OtterSec και τον Solana Explorer.

Το API ή ο Solana Explorer ενδέχεται να εμφανίσουν εσφαλμένες πληροφορίες εάν έχουν παραβιαστεί.

Εάν θέλετε να έχετε μια εντελώς αξιόπιστη ρύθμιση χωρίς εμπιστοσύνη τρίτων, μπορείτε να εκτελέσετε το Verify API μόνοι σας ή να εκτελέσετε την επαλήθευση του προγράμματος τοπικά χρησιμοποιώντας την εντολή verify-from-repo με τα δεδομένα επαλήθευσης on-chain που είναι αποθηκευμένα σε έναν PDA που προκύπτει από την εξουσία ανάπτυξης του προγράμματος και το πρόγραμμα επαλήθευσης.

Το πρόγραμμα επαλήθευσης έχει αναπτυχθεί από την ομάδα OtterSec και δεν έχει ακόμη παγώσει, επομένως μπορεί να αναβαθμιστεί ανά πάσα στιγμή.

Το Ίδρυμα Solana, η OtterSec και η ομάδα Ellipsis Labs δεν φέρουν ευθύνη για τυχόν απώλειες ή ζημίες που μπορεί να προκύψουν από τη χρήση της διαδικασίας επαληθευμένων builds.

Security.txt για προγράμματα Solana

Εκτός από τα επαληθευμένα builds, μπορείτε επίσης να προσθέσετε ένα αρχείο security.txt στο πρόγραμμά σας. Στο μέλλον, μόλις υλοποιηθεί, το security.txt θα περιέχει το δημόσιο κλειδί του επαληθευτή για εύκολη πρόσβαση στα δεδομένα επαλήθευσης που είναι αποθηκευμένα στον PDA επαλήθευσης. Ο PDA που περιέχει όλες τις πληροφορίες που απαιτούνται για τη δημιουργία και επαλήθευση ενός προγράμματος προκύπτει από τη διεύθυνση του προγράμματος και το pubkey του επαληθευτή. Από προεπιλογή, αυτό είναι το ίδιο pubkey που έχτισε και ανέπτυξε το πρόγραμμα. Μπορεί όμως να είναι και άλλο pubkey που μπορεί να καθοριστεί στο security.txt.

Η δυνατότητα security.txt επιτρέπει στους developers να ενσωματώσουν πληροφορίες επικοινωνίας και ασφάλειας απευθείας στα έξυπνα συμβόλαιά τους στο 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! στο συμβόλαιό σας για να ορίσετε τις πληροφορίες ασφαλείας σας. Μπορείτε να συμπεριλάβετε στοιχεία επικοινωνίας, URLs έργου, ακόμη και μια πολιτική ασφαλείας. Ακολουθεί ένα παράδειγμα:

#[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

Μπορείτε να ελέγξετε την κατάσταση επαλήθευσης και να περιηγηθείτε σε επαληθευμένα προγράμματα στο verify.osec.io.

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Συχνές ερωτήσειςΗ επαλήθευσή μου αποτυγχάνει. Τι πρέπει να κάνω;Το τοπικό μου build hash δεν ταιριάζει με το on-chain hash. Γιατί;Πόσο χρόνο θα διαρκέσει η επαλήθευσή μου;Το πρόγραμμά μου είναι αμετάβλητο (χωρίς αρχή αναβάθμισης). Πώς μπορώ να το επαληθεύσω;Τι είναι το PDA και γιατί έχει σημασία;Γιατί πρέπει να δημιουργήσω τον PDA πριν χρησιμοποιήσω το API;Πόσο συχνά πρέπει να επαληθεύω το πρόγραμμά μου;Τι συμβαίνει όταν αναβαθμίζω το πρόγραμμά μου;Μπορώ να εμπιστευτώ τα αποτελέσματα επαλήθευσης;Πώς μπορώ να επαληθεύσω ανεξάρτητα ένα πρόγραμμα;Μπορεί κάποιος άλλος να επαληθεύσει το πρόγραμμά μου χωρίς άδεια;Τι χρειάζομαι για να δημιουργήσω επαληθεύσιμες builds;Μπορώ να επαληθεύσω ιδιωτικά αποθετήρια;Πώς μπορώ να επαληθεύσω ένα πρόγραμμα που ελέγχεται από το Squads Multisig;ΣυμπέρασμαΑσφάλεια + Αποποίηση ΕυθύνηςSecurity.txt για προγράμματα SolanaΓιατί να χρησιμοποιήσετε το security.txt;Πώς να υλοποιήσετε το security.txtΒέλτιστες πρακτικές
Επεξεργασία Σελίδας

Διαχειρίζεται από

© 2026 Ίδρυμα Solana.
Με επιφύλαξη παντός δικαιώματος.
Συνδεθείτε