Αναφορά syscall

Περίληψη

Τα προγράμματα αλληλεπιδρούν με το 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?

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

Επεξεργασία Σελίδας

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

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