مرجع استدعاءات النظام

ملخص

تتفاعل البرامج مع بيئة التشغيل من خلال استدعاءات النظام التي تغطي التسجيل والتجزئة والتشفير واستدعاء البرامج المتقاطعة ومتغيرات النظام وعمليات الذاكرة والمزيد. يخصم كل استدعاء وحدات حوسبة من الميزانية المشتركة للمعاملة.

استدعاءات النظام

تتفاعل البرامج مع بيئة التشغيل من خلال استدعاءات النظام المسجلة في create_program_runtime_environment_v1(). يخصم كل استدعاء نظام وحدات حوسبة من ميزانية الحوسبة الخاصة بالمعاملة.

تكاليف استدعاءات النظام

يتم تعريف ثوابت التكلفة الأساسية لوحدات الحوسبة لكل استدعاء نظام في SVMTransactionExecutionCost. تجمع بعض استدعاءات النظام هذه الثوابت في صيغ أكثر تعقيدًا في تنفيذها (على سبيل المثال، التوسع مع حجم المدخلات أو إضافة حمل إضافي لـ syscall_base_cost). راجع روابط مصدر استدعاء النظام الفردية أدناه للحصول على حسابات التكلفة الدقيقة.

استدعاءات النظام المتاحة

المجموعة الكاملة من استدعاءات النظام المتاحة لبرامج sBPF، كما هي مسجلة في create_program_runtime_environment_v1(). استدعاءات النظام المقيدة بالميزات متاحة فقط عندما تكون الميزة المقابلة نشطة على الكتلة.

تدفق التحكم

استدعاء النظامالوصفالمصدر
abortيوقف البرنامج فورًا. يتم إدراجه بواسطة LLVM للظروف غير القابلة للدفاع؛ غير مخصص للاستخدام الصريح.SyscallAbort
sol_panic_يوقف البرنامج مع اسم الملف ورقم السطر ورقم العمود للتشخيص.SyscallPanic

التسجيل

استدعاء النظامالوصفالمصدر
sol_log_يسجل رسالة نصية بترميز UTF-8 في سجل البرنامج.SyscallLog
sol_log_64_يسجل خمس قيم u64 بصيغة سداسية عشرية في سجل البرنامج.SyscallLogU64
sol_log_pubkeyيسجل Pubkey كنص بترميز base58 في سجل البرنامج.SyscallLogPubkey
sol_log_compute_units_يسجل وحدات الحوسبة المتبقية في سجل البرنامج.SyscallLogBpfComputeUnits
sol_log_dataيسجل شرائح بايت عشوائية كبيانات مشفرة بترميز base64.SyscallLogData

PDA

استدعاء النظامالوصفالمصدر
sol_create_program_addressيشتق عنوان برنامج من البذور ومعرف البرنامج. يُرجع 1 إذا كان العنوان المشتق على منحنى Ed25519 (PDA غير صالح).SyscallCreateProgramAddress
sol_try_find_program_addressيجد PDA صالحًا من خلال تكرار بذور bump من 255 إلى 1. يُرجع العنوان وقيمة bump.SyscallTryFindProgramAddress

التجزئة

استدعاء النظامالوصفالمصدر
sol_sha256يحسب تجزئة SHA-256 على شريحة بايت واحدة أو أكثر.SyscallHash<Sha256Hasher>
sol_keccak256يحسب تجزئة Keccak-256 على شريحة بايت واحدة أو أكثر.SyscallHash<Keccak256Hasher>
sol_blake3يحسب تجزئة Blake3 على شريحة بايت واحدة أو أكثر. مقيد بميزة.SyscallHash<Blake3Hasher>
sol_poseidonيحسب تجزئة Poseidon على المدخلات. مقيد بميزة.SyscallPoseidon

التشفير

استدعاء النظامالوصفالمصدر
sol_secp256k1_recoverيستعيد مفتاح عام secp256k1 من تجزئة رسالة موقعة ومعرف استرداد.SyscallSecp256k1Recover
sol_curve_validate_pointيتحقق من أن مصفوفة بايت هي نقطة صالحة على Curve25519 (Edwards أو Ristretto). مقيد بميزة.SyscallCurvePointValidation
sol_curve_group_opينفذ عمليات مجموعة Curve25519 (جمع، طرح، ضرب) على نقاط Edwards أو Ristretto. مقيد بميزة.SyscallCurveGroupOps
sol_curve_multiscalar_mulينفذ ضرب متعدد القياسات على نقاط Curve25519 Edwards أو Ristretto. مقيد بميزة.SyscallCurveMultiscalarMultiplication
sol_alt_bn128_group_opينفذ عمليات مجموعة alt_bn128 (BN254): إضافة G1، ضرب G1، وفحص الاقتران. مقيد بميزة.SyscallAltBn128
sol_alt_bn128_compressionيضغط ويفك ضغط نقاط alt_bn128 G1 و G2. مقيد بميزة.SyscallAltBn128Compression
sol_big_mod_expيحسب الأس المعياري للأعداد الكبيرة (base^exp mod modulus). مقيد بميزة.SyscallBigModExp

CPI

Syscallالوصفالمصدر
sol_invoke_signed_rustيستدعي تعليمة عبر البرامج من برنامج Rust. يقوم بتسلسل التعليمة والحسابات وبذور الموقّع باستخدام Rust ABI.SyscallInvokeSignedRust
sol_invoke_signed_cيستدعي تعليمة عبر البرامج من برنامج C. يستخدم C SolInstruction ABI للتسلسل.SyscallInvokeSignedC

Sysvars

Syscallالوصفالمصدر
sol_get_clock_sysvarيكتب Clock sysvar إلى مخزن مؤقت يوفره البرنامج.SyscallGetClockSysvar
sol_get_epoch_schedule_sysvarيكتب EpochSchedule sysvar إلى مخزن مؤقت يوفره البرنامج.SyscallGetEpochScheduleSysvar
sol_get_rent_sysvarيكتب Rent sysvar إلى مخزن مؤقت يوفره البرنامج.SyscallGetRentSysvar
sol_get_epoch_rewards_sysvarيكتب EpochRewards sysvar إلى مخزن مؤقت يوفره البرنامج.SyscallGetEpochRewardsSysvar
sol_get_last_restart_slotيكتب LastRestartSlot sysvar إلى مخزن مؤقت يوفره البرنامج. محدود بميزة.SyscallGetLastRestartSlotSysvar
sol_get_fees_sysvarيكتب Fees sysvar المهمل إلى مخزن مؤقت يوفره البرنامج. محدود بميزة (مهمل).SyscallGetFeesSysvar
sol_get_sysvarوصول عام إلى sysvar: يقرأ شريحة بايت من أي sysvar مخزن مؤقتاً بواسطة pubkey والإزاحة والطول (SIMD-0127). محدود بميزة.SyscallGetSysvar

عمليات الذاكرة

Syscallالوصفالمصدر
sol_memcpy_ينسخ n بايت من المصدر إلى الوجهة. يتوقف إذا تداخلت المناطق في مساحة عنوان VM.SyscallMemcpy
sol_memmove_ينسخ n بايت من المصدر إلى الوجهة، مع معالجة المناطق المتداخلة بشكل صحيح.SyscallMemmove
sol_memcmp_يقارن n بايت من منطقتي ذاكرة. يكتب النتيجة (مقارنة أول بايت مختلف) إلى عنوان النتيجة.SyscallMemcmp
sol_memset_يملأ n بايت من منطقة ذاكرة بقيمة بايت معينة.SyscallMemset

بيانات البرنامج

استدعاء النظامالوصفالمصدر
sol_set_return_dataيحدد بيانات الإرجاع (بحد أقصى 1,024 بايت) للتعليمة الحالية. يمكن قراءتها من قبل المستدعي بعد عودة CPI.SyscallSetReturnData
sol_get_return_dataيقرأ بيانات الإرجاع التي حددها أحدث CPI. يُرجع طول البيانات ومعرف البرنامج الذي حددها.SyscallGetReturnData
sol_get_processed_sibling_instructionيسترجع تعليمة شقيقة تم تنفيذها مسبقاً على نفس مستوى المكدس (بواسطة الفهرس العكسي). يُرجع معرف البرنامج والبيانات والبيانات الوصفية للحساب.SyscallGetProcessedSiblingInstruction
sol_get_stack_heightيُرجع ارتفاع مكدس الاستدعاء الحالي. الارتفاع 1 = تعليمة المستوى الأعلى؛ كل CPI يزيد بمقدار 1.SyscallGetStackHeight

الحوسبة

استدعاء النظامالوصفالمصدر
sol_remaining_compute_unitsيُرجع عدد وحدات الحوسبة المتبقية في ميزانية المعاملة. مقيد بميزة.SyscallRemainingComputeUnits

حصة الحقبة

استدعاء النظامالوصفالمصدر
sol_get_epoch_stakeيُرجع إجمالي حصة الكتلة (مؤشر فارغ) أو الحصة المفوضة لحساب تصويت معين للحقبة الحالية (SIMD-0133). مقيد بميزة.SyscallGetEpochStake

تخصيص الذاكرة

استدعاء النظامالوصفالمصدر
sol_alloc_free_مخصص الزيادة القديم لتخصيص الذاكرة الديناميكي. معطل للنشر الجديد؛ متاح فقط للبرامج المنشورة قبل بوابة الميزة.SyscallAllocFree

Is this page helpful?

تدار بواسطة

© 2026 مؤسسة سولانا.
جميع الحقوق محفوظة.
تواصل معنا