Özet
Programlar, logging, hashing, kriptografi, CPI, sysvars, bellek işlemleri ve daha fazlasını kapsayan syscall'lar aracılığıyla runtime ile etkileşime girer. Her biri, transaction'ın paylaşılan bütçesinden compute unit'leri düşer.
Syscall'lar
Programlar,
create_program_runtime_environment_v1()
içinde kayıtlı syscall'lar aracılığıyla runtime ile etkileşime girer. Her
syscall, transaction'ın compute budget'ından compute unit'leri düşer.
Syscall maliyetleri
Her syscall'ın temel compute unit maliyet sabitleri
SVMTransactionExecutionCost
içinde tanımlanmıştır. Bazı syscall'lar bu sabitleri implementasyonlarında daha
karmaşık formüllerde birleştirir (örneğin, input boyutuyla ölçekleme veya
syscall_base_cost overhead'i ekleme). Tam maliyet hesaplamaları için aşağıdaki
bireysel syscall kaynak linklerine bakın.
Mevcut syscall'lar
create_program_runtime_environment_v1()
içinde kayıtlı olduğu şekliyle sBPF programlarına sunulan eksiksiz syscall seti.
Feature-gated syscall'lar yalnızca ilgili feature cluster'da aktif olduğunda
kullanılabilir.
Kontrol akışı
| Syscall | Açıklama | Kaynak |
|---|---|---|
abort | Programı anında durdurur. LLVM tarafından savunulamaz durumlar için eklenir; açık kullanım için tasarlanmamıştır. | SyscallAbort |
sol_panic_ | Programı tanılama için dosya adı, satır ve sütun numarasıyla durdurur. | SyscallPanic |
Logging
| Syscall | Açıklama | Kaynak |
|---|---|---|
sol_log_ | Program log'una UTF-8 string mesajı kaydeder. | SyscallLog |
sol_log_64_ | Program log'una beş u64 değerini hex olarak kaydeder. | SyscallLogU64 |
sol_log_pubkey | Program log'una bir Pubkey'i base58 string olarak kaydeder. | SyscallLogPubkey |
sol_log_compute_units_ | Program log'una kalan compute unit'leri kaydeder. | SyscallLogBpfComputeUnits |
sol_log_data | Rastgele byte slice'ları base64-encoded data olarak kaydeder. | SyscallLogData |
PDA
| Syscall | Açıklama | Kaynak |
|---|---|---|
sol_create_program_address | Seed'lerden ve program ID'sinden bir program adresi türetir. Türetilen adres Ed25519 eğrisi üzerindeyse (geçersiz PDA) 1 döndürür. | SyscallCreateProgramAddress |
sol_try_find_program_address | Bump seed'lerini 255'ten 1'e kadar iterasyon yaparak geçerli bir PDA bulur. Adresi ve bump'ı döndürür. | SyscallTryFindProgramAddress |
Hashing
| Syscall | Açıklama | Kaynak |
|---|---|---|
sol_sha256 | Bir veya daha fazla bayt dilimi üzerinde SHA-256 hash hesaplar. | SyscallHash<Sha256Hasher> |
sol_keccak256 | Bir veya daha fazla bayt dilimi üzerinde Keccak-256 hash hesaplar. | SyscallHash<Keccak256Hasher> |
sol_blake3 | Bir veya daha fazla bayt dilimi üzerinde Blake3 hash hesaplar. Özellik kapılı. | SyscallHash<Blake3Hasher> |
sol_poseidon | Girdiler üzerinde Poseidon hash hesaplar. Özellik kapılı. | SyscallPoseidon |
Kriptografi
| Syscall | Açıklama | Kaynak |
|---|---|---|
sol_secp256k1_recover | İmzalı mesaj hash'i ve kurtarma ID'sinden secp256k1 public key'i kurtarır. | SyscallSecp256k1Recover |
sol_curve_validate_point | Bir bayt dizisinin Curve25519 (Edwards veya Ristretto) üzerinde geçerli bir nokta olduğunu doğrular. Özellik kapılı. | SyscallCurvePointValidation |
sol_curve_group_op | Edwards veya Ristretto noktaları üzerinde Curve25519 grup işlemleri (toplama, çıkarma, çarpma) gerçekleştirir. Özellik kapılı. | SyscallCurveGroupOps |
sol_curve_multiscalar_mul | Curve25519 Edwards veya Ristretto noktaları üzerinde çoklu skaler çarpım gerçekleştirir. Özellik kapılı. | SyscallCurveMultiscalarMultiplication |
sol_alt_bn128_group_op | alt_bn128 (BN254) grup işlemleri gerçekleştirir: G1 toplama, G1 çarpma ve eşleştirme kontrolü. Özellik kapılı. | SyscallAltBn128 |
sol_alt_bn128_compression | alt_bn128 G1 ve G2 noktalarını sıkıştırır ve açar. Özellik kapılı. | SyscallAltBn128Compression |
sol_big_mod_exp | Büyük tamsayı modüler üs alma (base^exp mod modulus) hesaplar. Özellik kapılı. | SyscallBigModExp |
CPI
| Syscall | Açıklama | Kaynak |
|---|---|---|
sol_invoke_signed_rust | Bir Rust programından çapraz program talimatı çağırır. Rust ABI kullanarak talimat, hesaplar ve imzalayan seed'lerini serileştirir. | SyscallInvokeSignedRust |
sol_invoke_signed_c | Bir C programından çapraz program talimatı çağırır. Serileştirme için C SolInstruction ABI'sini kullanır. | SyscallInvokeSignedC |
Sysvars
| Syscall | Açıklama | Kaynak |
|---|---|---|
sol_get_clock_sysvar | Clock sysvar'ını program tarafından sağlanan bir tampona yazar. | SyscallGetClockSysvar |
sol_get_epoch_schedule_sysvar | EpochSchedule sysvar'ını program tarafından sağlanan bir tampona yazar. | SyscallGetEpochScheduleSysvar |
sol_get_rent_sysvar | Rent sysvar'ını program tarafından sağlanan bir tampona yazar. | SyscallGetRentSysvar |
sol_get_epoch_rewards_sysvar | EpochRewards sysvar'ını program tarafından sağlanan bir tampona yazar. | SyscallGetEpochRewardsSysvar |
sol_get_last_restart_slot | LastRestartSlot sysvar'ını program tarafından sağlanan bir tampona yazar. Özellik kapılı. | SyscallGetLastRestartSlotSysvar |
sol_get_fees_sysvar | Kullanımdan kaldırılmış Fees sysvar'ını program tarafından sağlanan bir tampona yazar. Özellik kapılı (kullanımdan kaldırıldı). | SyscallGetFeesSysvar |
sol_get_sysvar | Genel sysvar erişimi: herhangi bir önbelleğe alınmış sysvar'dan pubkey, offset ve uzunluğa göre bir bayt dilimi okur (SIMD-0127). Özellik kapılı. | SyscallGetSysvar |
Bellek işlemleri
| Syscall | Açıklama | Kaynak |
|---|---|---|
sol_memcpy_ | Kaynaktan hedefe n bayt kopyalar. VM adres alanında bölgeler çakışırsa iptal eder. | SyscallMemcpy |
sol_memmove_ | Kaynaktan hedefe n bayt kopyalar, çakışan bölgeleri doğru şekilde işler. | SyscallMemmove |
sol_memcmp_ | İki bellek bölgesinin n baytını karşılaştırır. Sonucu (ilk farklı bayt karşılaştırması) bir sonuç adresine yazar. | SyscallMemcmp |
sol_memset_ | Bir bellek bölgesinin n baytını verilen bir bayt değeriyle doldurur. | SyscallMemset |
Program verisi
| Syscall | Açıklama | Kaynak |
|---|---|---|
sol_set_return_data | Mevcut talimat için dönüş verisi ayarlar (maksimum 1.024 bayt). CPI döndükten sonra çağıran tarafından okunabilir. | SyscallSetReturnData |
sol_get_return_data | En son CPI tarafından ayarlanan dönüş verisini okur. Veri uzunluğunu ve onu ayarlayan program ID'sini döndürür. | SyscallGetReturnData |
sol_get_processed_sibling_instruction | Aynı yığın yüksekliğinde daha önce yürütülmüş bir kardeş talimatı (ters indeks ile) alır. Program ID'si, veri ve hesap meta verilerini döndürür. | SyscallGetProcessedSiblingInstruction |
sol_get_stack_height | Mevcut çağrı yığını yüksekliğini döndürür. Yükseklik 1 = üst seviye talimat; her CPI 1 artırır. | SyscallGetStackHeight |
Hesaplama
| Syscall | Açıklama | Kaynak |
|---|---|---|
sol_remaining_compute_units | İşlem bütçesinde kalan hesaplama birimi sayısını döndürür. Özellik kapılı. | SyscallRemainingComputeUnits |
Epoch stake
| Syscall | Açıklama | Kaynak |
|---|---|---|
sol_get_epoch_stake | Toplam küme stake'ini (null pointer) veya mevcut epoch için belirli bir oy hesabının delege edilmiş stake'ini döndürür (SIMD-0133). Özellik kapılı. | SyscallGetEpochStake |
Bellek tahsisi
| Syscall | Açıklama | Kaynak |
|---|---|---|
sol_alloc_free_ | Dinamik bellek tahsisi için eski bump tahsis edici. Yeni dağıtımlar için devre dışı; yalnızca özellik kapısından önce dağıtılan programlar için kullanılabilir. | SyscallAllocFree |
Is this page helpful?