Zusammenfassung
Programme interagieren mit der Runtime durch Syscalls, die Logging, Hashing, Kryptografie, CPI, Sysvars, Speicheroperationen und mehr abdecken. Jeder zieht Compute Units vom gemeinsamen Budget der Transaktion ab.
Syscalls
Programme interagieren mit der Runtime durch Syscalls, die in
create_program_runtime_environment_v1()
registriert sind. Jeder Syscall zieht Compute Units vom Compute-Budget der
Transaktion ab.
Syscall-Kosten
Die Basis-Compute-Unit-Kostenkonstanten jedes Syscalls sind in
SVMTransactionExecutionCost
definiert. Einige Syscalls kombinieren diese Konstanten in ihrer Implementierung
zu komplexeren Formeln (z. B. Skalierung mit Eingabegröße oder Hinzufügen von
syscall_base_cost Overhead). Siehe die einzelnen Syscall-Quelllinks unten für
exakte Kostenberechnungen.
Verfügbare Syscalls
Der vollständige Satz von Syscalls, die sBPF-Programmen zur Verfügung stehen,
wie in
create_program_runtime_environment_v1()
registriert. Feature-gesteuerte Syscalls sind nur verfügbar, wenn das
entsprechende Feature auf dem Cluster aktiv ist.
Kontrollfluss
| Syscall | Beschreibung | Quelle |
|---|---|---|
abort | Stoppt das Programm sofort. Wird von LLVM für unhaltbare Bedingungen eingefügt; nicht für explizite Verwendung vorgesehen. | SyscallAbort |
sol_panic_ | Stoppt das Programm mit einem Dateinamen, Zeilen- und Spaltennummer für Diagnosezwecke. | SyscallPanic |
Logging
| Syscall | Beschreibung | Quelle |
|---|---|---|
sol_log_ | Protokolliert eine UTF-8-String-Nachricht im Programmprotokoll. | SyscallLog |
sol_log_64_ | Protokolliert fünf u64-Werte als Hex im Programmprotokoll. | SyscallLogU64 |
sol_log_pubkey | Protokolliert einen Pubkey als Base58-String im Programmprotokoll. | SyscallLogPubkey |
sol_log_compute_units_ | Protokolliert die verbleibenden Compute Units im Programmprotokoll. | SyscallLogBpfComputeUnits |
sol_log_data | Protokolliert beliebige Byte-Slices als Base64-kodierte Daten. | SyscallLogData |
PDA
| Syscall | Beschreibung | Quelle |
|---|---|---|
sol_create_program_address | Leitet eine Programmadresse aus Seeds und einer Programm-ID ab. Gibt 1 zurück, wenn die abgeleitete Adresse auf der Ed25519-Kurve liegt (ungültige PDA). | SyscallCreateProgramAddress |
sol_try_find_program_address | Findet eine gültige PDA durch Iteration von Bump-Seeds von 255 bis 1. Gibt die Adresse und den Bump zurück. | SyscallTryFindProgramAddress |
Hashing
| Syscall | Beschreibung | Quelle |
|---|---|---|
sol_sha256 | Berechnet einen SHA-256-Hash über ein oder mehrere Byte-Slices. | SyscallHash<Sha256Hasher> |
sol_keccak256 | Berechnet einen Keccak-256-Hash über ein oder mehrere Byte-Slices. | SyscallHash<Keccak256Hasher> |
sol_blake3 | Berechnet einen Blake3-Hash über ein oder mehrere Byte-Slices. Feature-gated. | SyscallHash<Blake3Hasher> |
sol_poseidon | Berechnet einen Poseidon-Hash über Eingaben. Feature-gated. | SyscallPoseidon |
Kryptografie
| Syscall | Beschreibung | Quelle |
|---|---|---|
sol_secp256k1_recover | Stellt einen secp256k1-Public-Key aus einem signierten Message-Hash und einer Recovery-ID wieder her. | SyscallSecp256k1Recover |
sol_curve_validate_point | Validiert, dass ein Byte-Array ein gültiger Punkt auf Curve25519 (Edwards oder Ristretto) ist. Feature-gated. | SyscallCurvePointValidation |
sol_curve_group_op | Führt Curve25519-Gruppenoperationen (Addition, Subtraktion, Multiplikation) auf Edwards- oder Ristretto-Punkten aus. Feature-gated. | SyscallCurveGroupOps |
sol_curve_multiscalar_mul | Führt Multi-Skalar-Multiplikation auf Curve25519-Edwards- oder Ristretto-Punkten aus. Feature-gated. | SyscallCurveMultiscalarMultiplication |
sol_alt_bn128_group_op | Führt alt_bn128-(BN254-)Gruppenoperationen aus: G1-Addition, G1-Multiplikation und Pairing-Check. Feature-gated. | SyscallAltBn128 |
sol_alt_bn128_compression | Komprimiert und dekomprimiert alt_bn128-G1- und G2-Punkte. Feature-gated. | SyscallAltBn128Compression |
sol_big_mod_exp | Berechnet modulare Exponentiation großer Ganzzahlen (base^exp mod modulus). Feature-gated. | SyscallBigModExp |
CPI
| Syscall | Beschreibung | Quelle |
|---|---|---|
sol_invoke_signed_rust | Ruft eine programmübergreifende Anweisung aus einem Rust-Programm auf. Serialisiert Anweisung, Konten und Signer-Seeds unter Verwendung der Rust-ABI. | SyscallInvokeSignedRust |
sol_invoke_signed_c | Ruft eine programmübergreifende Anweisung aus einem C-Programm auf. Verwendet die C SolInstruction ABI zur Serialisierung. | SyscallInvokeSignedC |
Sysvars
| Syscall | Beschreibung | Quelle |
|---|---|---|
sol_get_clock_sysvar | Schreibt die Clock-Sysvar in einen vom Programm bereitgestellten Puffer. | SyscallGetClockSysvar |
sol_get_epoch_schedule_sysvar | Schreibt die EpochSchedule-Sysvar in einen vom Programm bereitgestellten Puffer. | SyscallGetEpochScheduleSysvar |
sol_get_rent_sysvar | Schreibt die Rent-Sysvar in einen vom Programm bereitgestellten Puffer. | SyscallGetRentSysvar |
sol_get_epoch_rewards_sysvar | Schreibt die EpochRewards-Sysvar in einen vom Programm bereitgestellten Puffer. | SyscallGetEpochRewardsSysvar |
sol_get_last_restart_slot | Schreibt die LastRestartSlot-Sysvar in einen vom Programm bereitgestellten Puffer. Feature-gated. | SyscallGetLastRestartSlotSysvar |
sol_get_fees_sysvar | Schreibt die veraltete Fee-Sysvar in einen vom Programm bereitgestellten Puffer. Feature-gated (veraltet). | SyscallGetFeesSysvar |
sol_get_sysvar | Generischer Sysvar-Zugriff: liest ein Byte-Slice aus jeder gecachten Sysvar anhand ihres Pubkey, Offset und Länge (SIMD-0127). Feature-gated. | SyscallGetSysvar |
Speicheroperationen
| Syscall | Beschreibung | Quelle |
|---|---|---|
sol_memcpy_ | Kopiert n Bytes von der Quelle zum Ziel. Bricht ab, wenn sich Bereiche im VM-Adressraum überlappen. | SyscallMemcpy |
sol_memmove_ | Kopiert n Bytes von der Quelle zum Ziel und behandelt überlappende Bereiche korrekt. | SyscallMemmove |
sol_memcmp_ | Vergleicht n Bytes zweier Speicherbereiche. Schreibt das Ergebnis (Vergleich des ersten abweichenden Bytes) an eine Ergebnisadresse. | SyscallMemcmp |
sol_memset_ | Füllt n Bytes eines Speicherbereichs mit einem gegebenen Byte-Wert. | SyscallMemset |
Programmdaten
| Syscall | Beschreibung | Quelle |
|---|---|---|
sol_set_return_data | Setzt Rückgabedaten (max. 1.024 Bytes) für die aktuelle Anweisung. Vom Aufrufer lesbar, nachdem der CPI zurückkehrt. | SyscallSetReturnData |
sol_get_return_data | Liest die Rückgabedaten, die vom letzten CPI gesetzt wurden. Gibt die Datenlänge und die Programm-ID zurück, die sie gesetzt hat. | SyscallGetReturnData |
sol_get_processed_sibling_instruction | Ruft eine zuvor ausgeführte Geschwisteranweisung auf derselben Stack-Höhe ab (nach umgekehrtem Index). Gibt Programm-ID, Daten und Konten-Metadaten zurück. | SyscallGetProcessedSiblingInstruction |
sol_get_stack_height | Gibt die aktuelle Call-Stack-Höhe zurück. Höhe 1 = Top-Level-Anweisung; jeder CPI erhöht um 1. | SyscallGetStackHeight |
Rechenleistung
| Syscall | Beschreibung | Quelle |
|---|---|---|
sol_remaining_compute_units | Gibt die Anzahl der verbleibenden Recheneinheiten im Transaktionsbudget zurück. Feature-gated. | SyscallRemainingComputeUnits |
Epoch-Stake
| Syscall | Beschreibung | Quelle |
|---|---|---|
sol_get_epoch_stake | Gibt den gesamten Cluster-Stake (Null-Zeiger) oder den delegierten Stake eines bestimmten Vote-Kontos für die aktuelle Epoch zurück (SIMD-0133). Feature-gated. | SyscallGetEpochStake |
Speicherzuweisung
| Syscall | Beschreibung | Quelle |
|---|---|---|
sol_alloc_free_ | Legacy-Bump-Allocator für dynamische Speicherzuweisung. Deaktiviert für neue Deployments; nur verfügbar für Programme, die vor dem Feature-Gate bereitgestellt wurden. | SyscallAllocFree |
Is this page helpful?