Περίληψη
Το Instructions sysvar (Sysvar1nstructions1111111111111111111111111)
επιτρέπει σε ένα πρόγραμμα να διαβάσει όλες τις εντολές ανώτατου επιπέδου στην
τρέχουσα συναλλαγή με δείκτη ή σχετική μετατόπιση. Οι εσωτερικές εντολές CPI
δεν είναι προσβάσιμες.
Instructions sysvar
Τα προγράμματα μπορούν να επιθεωρήσουν όλες τις εντολές ανώτατου επιπέδου στην
τρέχουσα συναλλαγή μέσω του Instructions sysvar
(Sysvar1nstructions1111111111111111111111111). Αυτό επιτρέπει σε ένα πρόγραμμα
να επιθεωρήσει τις άλλες εντολές στην ίδια συναλλαγή, για παράδειγμα για να
επαληθεύσει ότι μια συγκεκριμένη εντολή βρίσκεται στην ίδια συναλλαγή με την
εντολή που εκτελεί.
Το Instructions sysvar περιέχει μόνο εντολές ανώτατου επιπέδου από το μήνυμα συναλλαγής. Οι εσωτερικές εντολές που καλούνται μέσω CPI δεν είναι προσβάσιμες μέσω αυτού του sysvar.
Το instructions sysvar δεν προσπελαύνεται μέσω του κανονικού Sysvar trait.
Αντίθετα, προσπελαύνεται μέσω ελεύθερων συναρτήσεων στο
solana_instructions_sysvar
crate.
Τα δεδομένα του sysvar σειριοποιούνται με προσαρμοσμένη δυαδική διάταξη:
| Μετατόπιση | Μέγεθος | Περιγραφή |
|---|---|---|
| 0 | 2 | num_instructions (u16, little-endian) |
| 2 | 2 * N | Μετατοπίσεις byte για κάθε εντολή (u16 η καθεμία) |
| μεταβλητό | μεταβλητό | Σειριοποιημένα δεδομένα εντολών |
| τελευταία 2 bytes | 2 | Δείκτης τρέχουσας εντολής (u16, little-endian) |
Κάθε σειριοποιημένη εντολή περιέχει: τον αριθμό των λογαριασμών (u16), τους λογαριασμούς ως καταχωρήσεις 33 bytes (1 byte σημαίας + 32-byte pubkey), το program ID (32 bytes), το μήκος δεδομένων (u16) και τα ακατέργαστα bytes δεδομένων.
Βασικές λειτουργίες:
load_current_index_checked(account_info): Επιστρέφει το ευρετήριο της εντολής που εκτελείται αυτή τη στιγμή. Το περιβάλλον εκτέλεσης ενημερώνει αυτή την τιμή κάθε φορά που ξεκινά μια νέα εντολή ανώτατου επιπέδου.load_instruction_at_checked(index, account_info): Αποσειριοποιεί την εντολή στο δεδομένο απόλυτο ευρετήριο.get_instruction_relative(offset, account_info): Φορτώνει μια εντολή σχετική με την τρέχουσα (π.χ.,-1για την προηγούμενη εντολή,1για την επόμενη).
Is this page helpful?