Περίληψη
Τα προγράμματα αλληλεπιδρούν με το runtime μέσω syscalls που καλύπτουν logging, hashing, κρυπτογραφία, CPI, sysvars, λειτουργίες μνήμης και άλλα. Κάθε μία αφαιρεί compute units από τον κοινό προϋπολογισμό της συναλλαγής.
Syscalls
Τα προγράμματα αλληλεπιδρούν με το runtime μέσω syscalls που είναι καταχωρημένες
στο
create_program_runtime_environment_v1().
Κάθε syscall αφαιρεί compute units από τον προϋπολογισμό υπολογισμού της
συναλλαγής.
Κόστος syscalls
Οι σταθερές βασικού κόστους compute units κάθε syscall ορίζονται στο
SVMTransactionExecutionCost.
Μερικές syscalls συνδυάζουν αυτές τις σταθερές σε πιο σύνθετους τύπους στην
υλοποίησή τους (π.χ., κλιμάκωση με το μέγεθος εισόδου ή προσθήκη overhead
syscall_base_cost). Δείτε τους μεμονωμένους συνδέσμους πηγαίου κώδικα syscall
παρακάτω για ακριβείς υπολογισμούς κόστους.
Διαθέσιμες syscalls
Το πλήρες σύνολο syscalls που είναι διαθέσιμες στα προγράμματα sBPF, όπως
καταχωρούνται στο
create_program_runtime_environment_v1().
Οι syscalls που περιορίζονται από feature gates είναι διαθέσιμες μόνο όταν το
αντίστοιχο feature είναι ενεργό στο cluster.
Ροή ελέγχου
| Syscall | Περιγραφή | Πηγή |
|---|---|---|
abort | Διακόπτει το πρόγραμμα άμεσα. Εισάγεται από το LLVM για μη βιώσιμες συνθήκες· δεν προορίζεται για ρητή χρήση. | SyscallAbort |
sol_panic_ | Διακόπτει το πρόγραμμα με όνομα αρχείου, γραμμή και αριθμό στήλης για διαγνωστικά. | SyscallPanic |
Logging
| Syscall | Περιγραφή | Πηγή |
|---|---|---|
sol_log_ | Καταγράφει ένα μήνυμα συμβολοσειράς UTF-8 στο log του προγράμματος. | SyscallLog |
sol_log_64_ | Καταγράφει πέντε τιμές u64 ως hex στο log του προγράμματος. | SyscallLogU64 |
sol_log_pubkey | Καταγράφει ένα Pubkey ως συμβολοσειρά base58 στο log του προγράμματος. | SyscallLogPubkey |
sol_log_compute_units_ | Καταγράφει τα υπολειπόμενα compute units στο log του προγράμματος. | SyscallLogBpfComputeUnits |
sol_log_data | Καταγράφει αυθαίρετα byte slices ως δεδομένα κωδικοποιημένα σε base64. | SyscallLogData |
PDA
| Syscall | Περιγραφή | Πηγή |
|---|---|---|
sol_create_program_address | Παράγει μια διεύθυνση προγράμματος από seeds και ένα program ID. Επιστρέφει 1 εάν η παραγόμενη διεύθυνση βρίσκεται στην καμπύλη Ed25519 (μη έγκυρο PDA). | SyscallCreateProgramAddress |
sol_try_find_program_address | Βρίσκει ένα έγκυρο PDA επαναλαμβάνοντας bump seeds από 255 έως 1. Επιστρέφει τη διεύθυνση και το bump. | SyscallTryFindProgramAddress |
Hashing
| Syscall | Περιγραφή | Πηγή |
|---|---|---|
sol_sha256 | Υπολογίζει ένα hash SHA-256 σε ένα ή περισσότερα byte slices. | SyscallHash<Sha256Hasher> |
sol_keccak256 | Υπολογίζει ένα hash Keccak-256 σε ένα ή περισσότερα byte slices. | SyscallHash<Keccak256Hasher> |
sol_blake3 | Υπολογίζει ένα hash Blake3 σε ένα ή περισσότερα byte slices. Απαιτεί ενεργοποίηση feature. | SyscallHash<Blake3Hasher> |
sol_poseidon | Υπολογίζει ένα hash Poseidon σε εισόδους. Απαιτεί ενεργοποίηση feature. | SyscallPoseidon |
Κρυπτογραφία
| Syscall | Περιγραφή | Πηγή |
|---|---|---|
sol_secp256k1_recover | Ανακτά ένα δημόσιο κλειδί secp256k1 από ένα υπογεγραμμένο hash μηνύματος και recovery ID. | SyscallSecp256k1Recover |
sol_curve_validate_point | Επικυρώνει ότι ένας πίνακας bytes είναι έγκυρο σημείο στην καμπύλη Curve25519 (Edwards ή Ristretto). Απαιτεί ενεργοποίηση feature. | SyscallCurvePointValidation |
sol_curve_group_op | Εκτελεί πράξεις ομάδας Curve25519 (πρόσθεση, αφαίρεση, πολλαπλασιασμός) σε σημεία Edwards ή Ristretto. Απαιτεί ενεργοποίηση feature. | SyscallCurveGroupOps |
sol_curve_multiscalar_mul | Εκτελεί πολλαπλό βαθμωτό πολλαπλασιασμό σε σημεία Curve25519 Edwards ή Ristretto. Απαιτεί ενεργοποίηση feature. | SyscallCurveMultiscalarMultiplication |
sol_alt_bn128_group_op | Εκτελεί πράξεις ομάδας alt_bn128 (BN254): πρόσθεση G1, πολλαπλασιασμός G1 και έλεγχος ζεύξης. Απαιτεί ενεργοποίηση feature. | SyscallAltBn128 |
sol_alt_bn128_compression | Συμπιέζει και αποσυμπιέζει σημεία alt_bn128 G1 και G2. Απαιτεί ενεργοποίηση feature. | SyscallAltBn128Compression |
sol_big_mod_exp | Υπολογίζει υψωμένη σε δύναμη αριθμητική μεγάλων ακεραίων με modulo (base^exp mod modulus). Απαιτεί ενεργοποίηση feature. | SyscallBigModExp |
CPI
| Syscall | Περιγραφή | Πηγή |
|---|---|---|
sol_invoke_signed_rust | Καλεί μια εντολή cross-program από ένα πρόγραμμα Rust. Σειριοποιεί την εντολή, τους λογαριασμούς και τα signer seeds χρησιμοποιώντας το Rust ABI. | SyscallInvokeSignedRust |
sol_invoke_signed_c | Καλεί μια εντολή cross-program από ένα πρόγραμμα C. Χρησιμοποιεί το C SolInstruction ABI για σειριοποίηση. | SyscallInvokeSignedC |
Sysvars
| Syscall | Περιγραφή | Πηγή |
|---|---|---|
sol_get_clock_sysvar | Γράφει το Clock sysvar σε ένα buffer που παρέχεται από το πρόγραμμα. | SyscallGetClockSysvar |
sol_get_epoch_schedule_sysvar | Γράφει το EpochSchedule sysvar σε ένα buffer που παρέχεται από το πρόγραμμα. | SyscallGetEpochScheduleSysvar |
sol_get_rent_sysvar | Γράφει το Rent sysvar σε ένα buffer που παρέχεται από το πρόγραμμα. | SyscallGetRentSysvar |
sol_get_epoch_rewards_sysvar | Γράφει το EpochRewards sysvar σε ένα buffer που παρέχεται από το πρόγραμμα. | SyscallGetEpochRewardsSysvar |
sol_get_last_restart_slot | Γράφει το LastRestartSlot sysvar σε ένα buffer που παρέχεται από το πρόγραμμα. Ελεγχόμενο από feature. | SyscallGetLastRestartSlotSysvar |
sol_get_fees_sysvar | Γράφει το παρωχημένο Fees sysvar σε ένα buffer που παρέχεται από το πρόγραμμα. Ελεγχόμενο από feature (παρωχημένο). | SyscallGetFeesSysvar |
sol_get_sysvar | Γενική πρόσβαση σε sysvar: διαβάζει ένα byte slice από οποιοδήποτε cached sysvar μέσω του pubkey, offset και length του (SIMD-0127). Ελεγχόμενο από feature. | SyscallGetSysvar |
Λειτουργίες μνήμης
| Syscall | Περιγραφή | Πηγή |
|---|---|---|
sol_memcpy_ | Αντιγράφει n bytes από την πηγή στον προορισμό. Ματαιώνεται αν οι περιοχές επικαλύπτονται στον χώρο διευθύνσεων VM. | SyscallMemcpy |
sol_memmove_ | Αντιγράφει n bytes από την πηγή στον προορισμό, χειριζόμενο σωστά τις επικαλυπτόμενες περιοχές. | SyscallMemmove |
sol_memcmp_ | Συγκρίνει n bytes δύο περιοχών μνήμης. Γράφει το αποτέλεσμα (σύγκριση του πρώτου διαφορετικού byte) σε μια διεύθυνση αποτελέσματος. | SyscallMemcmp |
sol_memset_ | Γεμίζει n bytes μιας περιοχής μνήμης με μια δεδομένη τιμή byte. | SyscallMemset |
Δεδομένα προγράμματος
| Syscall | Περιγραφή | Πηγή |
|---|---|---|
sol_set_return_data | Ορίζει δεδομένα επιστροφής (μέγιστο 1.024 bytes) για την τρέχουσα εντολή. Αναγνώσιμα από τον καλούντα μετά την επιστροφή του CPI. | SyscallSetReturnData |
sol_get_return_data | Διαβάζει τα δεδομένα επιστροφής που ορίστηκαν από το πιο πρόσφατο CPI. Επιστρέφει το μήκος των δεδομένων και το program ID που τα όρισε. | SyscallGetReturnData |
sol_get_processed_sibling_instruction | Ανακτά μια προηγουμένως εκτελεσμένη αδελφή εντολή στο ίδιο ύψος στοίβας (με αντίστροφο δείκτη). Επιστρέφει program ID, δεδομένα και account metas. | SyscallGetProcessedSiblingInstruction |
sol_get_stack_height | Επιστρέφει το τρέχον ύψος στοίβας κλήσεων. Ύψος 1 = εντολή ανώτατου επιπέδου· κάθε CPI αυξάνει κατά 1. | SyscallGetStackHeight |
Υπολογισμός
| Syscall | Περιγραφή | Πηγή |
|---|---|---|
sol_remaining_compute_units | Επιστρέφει τον αριθμό των μονάδων υπολογισμού που απομένουν στον προϋπολογισμό της συναλλαγής. Ελεγχόμενο από feature gate. | SyscallRemainingComputeUnits |
Stake epoch
| Syscall | Περιγραφή | Πηγή |
|---|---|---|
sol_get_epoch_stake | Επιστρέφει το συνολικό stake του cluster (null pointer) ή το delegated stake ενός συγκεκριμένου vote account για το τρέχον epoch (SIMD-0133). Ελεγχόμενο από feature gate. | SyscallGetEpochStake |
Κατανομή μνήμης
| Syscall | Περιγραφή | Πηγή |
|---|---|---|
sol_alloc_free_ | Legacy bump allocator για δυναμική κατανομή μνήμης. Απενεργοποιημένο για νέες αναπτύξεις· διαθέσιμο μόνο σε προγράμματα που αναπτύχθηκαν πριν το feature gate. | SyscallAllocFree |
Is this page helpful?