Referencja Syscall

Podsumowanie

Programy komunikują się z środowiskiem wykonawczym za pomocą wywołań systemowych (syscall), obejmujących logowanie, haszowanie, kryptografię, CPI, sysvars, operacje na pamięci i inne. Każde z nich odejmuje jednostki obliczeniowe ze wspólnego budżetu transakcji.

Wywołania systemowe (syscall)

Programy komunikują się z środowiskiem wykonawczym za pomocą wywołań systemowych zarejestrowanych w create_program_runtime_environment_v1(). Każde wywołanie systemowe odejmuje jednostki obliczeniowe z budżetu obliczeniowego transakcji.

Koszty wywołań systemowych

Stałe bazowe kosztów jednostek obliczeniowych dla każdego wywołania systemowego są zdefiniowane w SVMTransactionExecutionCost. Niektóre wywołania systemowe łączą te stałe w bardziej złożone formuły w swojej implementacji (np. skalowanie względem rozmiaru wejścia lub dodanie narzutu syscall_base_cost). Dokładne obliczenia kosztów znajdziesz w linkach do źródeł poszczególnych wywołań poniżej.

Dostępne wywołania systemowe

Pełny zestaw wywołań systemowych dostępnych dla programów sBPF, zarejestrowanych w create_program_runtime_environment_v1(). Wywołania systemowe zależne od funkcji są dostępne tylko wtedy, gdy odpowiednia funkcja jest aktywna na klastrze.

Przepływ sterowania

Wywołanie systemoweOpisŹródło
abortNatychmiast zatrzymuje program. Wstawiane przez LLVM w przypadku krytycznych warunków; nie jest przeznaczone do jawnego użycia.SyscallAbort
sol_panic_Zatrzymuje program z nazwą pliku, numerem linii i kolumny do diagnostyki.SyscallPanic

Logowanie

Wywołanie systemoweOpisŹródło
sol_log_Loguje komunikat tekstowy UTF-8 do logu programu.SyscallLog
sol_log_64_Loguje pięć wartości u64 jako szesnastkowe do logu programu.SyscallLogU64
sol_log_pubkeyLoguje Pubkey jako ciąg base58 do logu programu.SyscallLogPubkey
sol_log_compute_units_Loguje pozostałe jednostki obliczeniowe do logu programu.SyscallLogBpfComputeUnits
sol_log_dataLoguje dowolne bajty jako dane zakodowane w base64.SyscallLogData

PDA

SyscallOpisŹródło
sol_create_program_addressWyprowadza adres programu z sekwencji seedów i ID programu. Zwraca 1, jeśli wyprowadzony adres znajduje się na krzywej Ed25519 (nieprawidłowy PDA).SyscallCreateProgramAddress
sol_try_find_program_addressZnajduje prawidłowy PDA, iterując wartości bump od 255 do 1. Zwraca adres i bump.SyscallTryFindProgramAddress

Haszowanie

SyscallOpisŹródło
sol_sha256Oblicza hash SHA-256 dla jednej lub wielu sekwencji bajtów.SyscallHash<Sha256Hasher>
sol_keccak256Oblicza hash Keccak-256 dla jednej lub wielu sekwencji bajtów.SyscallHash<Keccak256Hasher>
sol_blake3Oblicza hash Blake3 dla jednej lub wielu sekwencji bajtów. Wymaga odpowiedniej funkcji.SyscallHash<Blake3Hasher>
sol_poseidonOblicza hash Poseidon dla wejść. Wymaga odpowiedniej funkcji.SyscallPoseidon

Kryptografia

SyscallOpisŹródło
sol_secp256k1_recoverOdzyskuje klucz publiczny secp256k1 z podpisanego hasha wiadomości i ID odzyskiwania.SyscallSecp256k1Recover
sol_curve_validate_pointSprawdza, czy tablica bajtów jest prawidłowym punktem na Curve25519 (Edwards lub Ristretto). Wymaga odpowiedniej funkcji.SyscallCurvePointValidation
sol_curve_group_opWykonuje operacje grupowe Curve25519 (dodawanie, odejmowanie, mnożenie) na punktach Edwards lub Ristretto. Wymaga odpowiedniej funkcji.SyscallCurveGroupOps
sol_curve_multiscalar_mulWykonuje mnożenie wieloskalowe na punktach Curve25519 Edwards lub Ristretto. Wymaga odpowiedniej funkcji.SyscallCurveMultiscalarMultiplication
sol_alt_bn128_group_opWykonuje operacje grupowe alt_bn128 (BN254): dodawanie G1, mnożenie G1 i sprawdzanie parowania. Wymaga odpowiedniej funkcji.SyscallAltBn128
sol_alt_bn128_compressionKompresuje i dekompresuje punkty alt_bn128 G1 i G2. Wymaga odpowiedniej funkcji.SyscallAltBn128Compression
sol_big_mod_expOblicza potęgowanie modularne dużych liczb całkowitych (base^exp mod modulus). Wymaga odpowiedniej funkcji.SyscallBigModExp

CPI

SyscallOpisŹródło
sol_invoke_signed_rustWywołuje instrukcję międzyprogramową z programu w Rust. Serializuje instrukcję, konta i ziarna podpisu przy użyciu Rust ABI.SyscallInvokeSignedRust
sol_invoke_signed_cWywołuje instrukcję międzyprogramową z programu w C. Do serializacji używa ABI C SolInstruction.SyscallInvokeSignedC

Zmienne systemowe (Sysvars)

SyscallOpisŹródło
sol_get_clock_sysvarZapisuje zmienną systemową Clock do bufora przekazanego przez program.SyscallGetClockSysvar
sol_get_epoch_schedule_sysvarZapisuje zmienną systemową EpochSchedule do bufora przekazanego przez program.SyscallGetEpochScheduleSysvar
sol_get_rent_sysvarZapisuje zmienną systemową Rent do bufora przekazanego przez program.SyscallGetRentSysvar
sol_get_epoch_rewards_sysvarZapisuje zmienną systemową EpochRewards do bufora przekazanego przez program.SyscallGetEpochRewardsSysvar
sol_get_last_restart_slotZapisuje zmienną systemową LastRestartSlot do bufora przekazanego przez program. Wymaga aktywacji funkcji.SyscallGetLastRestartSlotSysvar
sol_get_fees_sysvarZapisuje przestarzałą zmienną systemową Fees do bufora przekazanego przez program. Wymaga aktywacji funkcji (przestarzałe).SyscallGetFeesSysvar
sol_get_sysvarOgólny dostęp do zmiennych systemowych: odczytuje fragment bajtów z dowolnej buforowanej zmiennej systemowej na podstawie jej pubkey, offsetu i długości (SIMD-0127). Wymaga aktywacji funkcji.SyscallGetSysvar

Operacje na pamięci

SyscallOpisŹródło
sol_memcpy_Kopiuje n bajtów ze źródła do miejsca docelowego. Przerywa działanie, jeśli regiony nakładają się w przestrzeni adresowej VM.SyscallMemcpy
sol_memmove_Kopiuje n bajtów ze źródła do miejsca docelowego, poprawnie obsługując nakładające się regiony.SyscallMemmove
sol_memcmp_Porównuje n bajtów dwóch regionów pamięci. Wynik (porównanie pierwszego różniącego się bajtu) zapisuje pod wskazany adres.SyscallMemcmp
sol_memset_Wypełnia n bajtów regionu pamięci podaną wartością bajtową.SyscallMemset

Dane programu

SyscallOpisŹródło
sol_set_return_dataUstawia dane zwrotne (maks. 1024 bajty) dla bieżącej instrukcji. Dostępne do odczytu przez wywołującego po zakończeniu CPI.SyscallSetReturnData
sol_get_return_dataOdczytuje dane zwrotne ustawione przez ostatnie CPI. Zwraca długość danych oraz program ID, który je ustawił.SyscallGetReturnData
sol_get_processed_sibling_instructionPobiera wcześniej wykonaną instrukcję równorzędną na tym samym poziomie stosu (według odwrotnego indeksu). Zwraca program ID, dane i metadane kont.SyscallGetProcessedSiblingInstruction
sol_get_stack_heightZwraca bieżącą wysokość stosu wywołań. Wysokość 1 = instrukcja najwyższego poziomu; każde CPI zwiększa o 1.SyscallGetStackHeight

Obliczenia

SyscallOpisŹródło
sol_remaining_compute_unitsZwraca liczbę pozostałych jednostek obliczeniowych w budżecie transakcji. Funkcja dostępna po aktywacji feature gate.SyscallRemainingComputeUnits

Stakowanie w epoce

SyscallOpisŹródło
sol_get_epoch_stakeZwraca całkowity stake klastra (null pointer) lub zdelegowany stake konkretnego konta głosującego dla bieżącego epoch (SIMD-0133). Funkcja dostępna po aktywacji feature gate.SyscallGetEpochStake

Alokacja pamięci

SyscallOpisŹródło
sol_alloc_free_Legacy bump allocator do dynamicznej alokacji pamięci. Wyłączony dla nowych wdrożeń; dostępny tylko dla programów wdrożonych przed aktywacją feature gate.SyscallAllocFree

Is this page helpful?

Spis treści

Edytuj stronę

Zarządzane przez

© 2026 Solana Foundation.
Wszelkie prawa zastrzeżone.
Bądź na bieżąco