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 systemowe | Opis | Źródło |
|---|---|---|
abort | Natychmiast 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 systemowe | Opis | Ź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_pubkey | Loguje Pubkey jako ciąg base58 do logu programu. | SyscallLogPubkey |
sol_log_compute_units_ | Loguje pozostałe jednostki obliczeniowe do logu programu. | SyscallLogBpfComputeUnits |
sol_log_data | Loguje dowolne bajty jako dane zakodowane w base64. | SyscallLogData |
PDA
| Syscall | Opis | Źródło |
|---|---|---|
sol_create_program_address | Wyprowadza 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_address | Znajduje prawidłowy PDA, iterując wartości bump od 255 do 1. Zwraca adres i bump. | SyscallTryFindProgramAddress |
Haszowanie
| Syscall | Opis | Źródło |
|---|---|---|
sol_sha256 | Oblicza hash SHA-256 dla jednej lub wielu sekwencji bajtów. | SyscallHash<Sha256Hasher> |
sol_keccak256 | Oblicza hash Keccak-256 dla jednej lub wielu sekwencji bajtów. | SyscallHash<Keccak256Hasher> |
sol_blake3 | Oblicza hash Blake3 dla jednej lub wielu sekwencji bajtów. Wymaga odpowiedniej funkcji. | SyscallHash<Blake3Hasher> |
sol_poseidon | Oblicza hash Poseidon dla wejść. Wymaga odpowiedniej funkcji. | SyscallPoseidon |
Kryptografia
| Syscall | Opis | Źródło |
|---|---|---|
sol_secp256k1_recover | Odzyskuje klucz publiczny secp256k1 z podpisanego hasha wiadomości i ID odzyskiwania. | SyscallSecp256k1Recover |
sol_curve_validate_point | Sprawdza, czy tablica bajtów jest prawidłowym punktem na Curve25519 (Edwards lub Ristretto). Wymaga odpowiedniej funkcji. | SyscallCurvePointValidation |
sol_curve_group_op | Wykonuje operacje grupowe Curve25519 (dodawanie, odejmowanie, mnożenie) na punktach Edwards lub Ristretto. Wymaga odpowiedniej funkcji. | SyscallCurveGroupOps |
sol_curve_multiscalar_mul | Wykonuje mnożenie wieloskalowe na punktach Curve25519 Edwards lub Ristretto. Wymaga odpowiedniej funkcji. | SyscallCurveMultiscalarMultiplication |
sol_alt_bn128_group_op | Wykonuje operacje grupowe alt_bn128 (BN254): dodawanie G1, mnożenie G1 i sprawdzanie parowania. Wymaga odpowiedniej funkcji. | SyscallAltBn128 |
sol_alt_bn128_compression | Kompresuje i dekompresuje punkty alt_bn128 G1 i G2. Wymaga odpowiedniej funkcji. | SyscallAltBn128Compression |
sol_big_mod_exp | Oblicza potęgowanie modularne dużych liczb całkowitych (base^exp mod modulus). Wymaga odpowiedniej funkcji. | SyscallBigModExp |
CPI
| Syscall | Opis | Źródło |
|---|---|---|
sol_invoke_signed_rust | Wywołuje instrukcję międzyprogramową z programu w Rust. Serializuje instrukcję, konta i ziarna podpisu przy użyciu Rust ABI. | SyscallInvokeSignedRust |
sol_invoke_signed_c | Wywołuje instrukcję międzyprogramową z programu w C. Do serializacji używa ABI C SolInstruction. | SyscallInvokeSignedC |
Zmienne systemowe (Sysvars)
| Syscall | Opis | Źródło |
|---|---|---|
sol_get_clock_sysvar | Zapisuje zmienną systemową Clock do bufora przekazanego przez program. | SyscallGetClockSysvar |
sol_get_epoch_schedule_sysvar | Zapisuje zmienną systemową EpochSchedule do bufora przekazanego przez program. | SyscallGetEpochScheduleSysvar |
sol_get_rent_sysvar | Zapisuje zmienną systemową Rent do bufora przekazanego przez program. | SyscallGetRentSysvar |
sol_get_epoch_rewards_sysvar | Zapisuje zmienną systemową EpochRewards do bufora przekazanego przez program. | SyscallGetEpochRewardsSysvar |
sol_get_last_restart_slot | Zapisuje zmienną systemową LastRestartSlot do bufora przekazanego przez program. Wymaga aktywacji funkcji. | SyscallGetLastRestartSlotSysvar |
sol_get_fees_sysvar | Zapisuje przestarzałą zmienną systemową Fees do bufora przekazanego przez program. Wymaga aktywacji funkcji (przestarzałe). | SyscallGetFeesSysvar |
sol_get_sysvar | Ogó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
| Syscall | Opis | Ź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
| Syscall | Opis | Źródło |
|---|---|---|
sol_set_return_data | Ustawia 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_data | Odczytuje dane zwrotne ustawione przez ostatnie CPI. Zwraca długość danych oraz program ID, który je ustawił. | SyscallGetReturnData |
sol_get_processed_sibling_instruction | Pobiera 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_height | Zwraca bieżącą wysokość stosu wywołań. Wysokość 1 = instrukcja najwyższego poziomu; każde CPI zwiększa o 1. | SyscallGetStackHeight |
Obliczenia
| Syscall | Opis | Źródło |
|---|---|---|
sol_remaining_compute_units | Zwraca liczbę pozostałych jednostek obliczeniowych w budżecie transakcji. Funkcja dostępna po aktywacji feature gate. | SyscallRemainingComputeUnits |
Stakowanie w epoce
| Syscall | Opis | Źródło |
|---|---|---|
sol_get_epoch_stake | Zwraca 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
| Syscall | Opis | Ź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?