وثائق سولاناتطوير البرامج

نشر البرامج

يشرح هذا القسم العملية الأساسية لنشر برنامج سولانا باستخدام واجهة سطر أوامر سولانا.

مرجع أوامر واجهة سطر الأوامر

المهمةالأمر
بناء البرنامجcargo build-sbf
نشر برنامج جديدsolana program deploy <path_to_program.so>
تحديث برنامج موجودsolana program deploy <path_to_program.so> (نفس أمر النشر)
عرض معلومات البرنامجsolana program show <program-id>
نقل صلاحية البرنامجsolana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair>
جعل البرنامج غير قابل للتعديلsolana program set-upgrade-authority <program-id> --final
إغلاق البرنامجsolana program close <program-id> --bypass-warning
التحقق من رصيد المحفظةsolana balance
طلب إسقاط جوي (devnet/localhost)solana airdrop 2

المفاهيم الأساسية

قبل الغوص في التفاصيل، دعنا نوضح بعض المصطلحات:

  • معرّف البرنامج: العنوان على السلسلة لبرنامجك. يتفاعل المستخدمون مع برنامجك من خلال الإشارة إلى معرّف البرنامج.
  • program account: الحساب على السلسلة الذي يخزن البيانات الوصفية لبرنامجك. عنوان program account هو معرّف البرنامج. يخزن program account أيضًا عنوان programdata account.
  • programdata account: الحساب على السلسلة الذي يخزن الشفرة التنفيذية المنشورة لبرنامجك.
  • صلاحية البرنامج: الحساب الذي لديه إذن لتحديث أو إغلاق البرنامج. بشكل افتراضي، هذا هو محفظة واجهة سطر الأوامر الخاصة بك.

المتطلبات الأساسية

إعداد المحفظة

بعد التثبيت، قم بإنشاء محفظة زوج مفاتيح محلية. يتم تعيين عنوان هذه المحفظة كصلاحية افتراضية للبرنامج عند نشر البرامج:

Terminal
$
solana-keygen new

هذا ينشئ زوج مفاتيح في ~/.config/solana/id.json بشكل افتراضي.

تكوين العنقود

اختر عنقود سولانا الذي تريد النشر إليه. استخدم الأمر solana config get للتحقق من التكوين الحالي:

Terminal
$
solana config get

قم بالتبديل بين العناقيد حسب الحاجة:

Terminal
$
solana config set --url mainnet-beta
$
solana config set --url devnet
$
solana config set --url localhost
$
solana config set --url testnet
$
solana config set --url "https://your-rpc-url.com"

تمويل المحفظة

ستحتاج إلى SOL لدفع تكاليف نشر البرنامج. يعتمد المبلغ على حجم البرنامج الخاص بك.

بالنسبة لشبكة devnet أو localhost، قم بتمويل محفظتك باستخدام الأمر solana airdrop:

Terminal
$
solana airdrop 2

تحقق من رصيد محفظتك:

Terminal
$
solana balance

العمليات الأساسية

بناء البرنامج

لبناء برنامج، استخدم الأمر cargo build-sbf:

Terminal
$
cargo build-sbf

مثال على البرنامج

هنا برنامج سولانا بسيط يطبع "Hello, Solana!" في سجلات البرنامج.

src/lib.rs
use solana_program::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey,
};
entrypoint!(process_instruction);
pub fn process_instruction(
_program_id: &Pubkey,
_accounts: &[AccountInfo],
_instruction_data: &[u8],
) -> ProgramResult {
msg!("Hello, Solana!");
Ok(())
}

مخرجات البناء

قم ببناء برنامجك باستخدام أمر cargo build-sbf:

Terminal
$
cargo build-sbf

هذا ينشئ ملفين مهمين في target/deploy/:

  1. hello_world-keypair.json: ملف keypair الذي سيتم استخدام المفتاح العام الخاص به كمعرف البرنامج (Program ID) الخاص بك
  2. hello_world.so: ملف البرنامج التنفيذي المُجمّع

مثال على البرنامج

هنا برنامج سولانا بسيط يطبع "Hello, Solana!" في سجلات البرنامج.

مخرجات البناء

قم ببناء برنامجك باستخدام أمر cargo build-sbf:

Terminal
$
cargo build-sbf

هذا ينشئ ملفين مهمين في target/deploy/:

  1. hello_world-keypair.json: ملف keypair الذي سيتم استخدام المفتاح العام الخاص به كمعرف البرنامج (Program ID) الخاص بك
  2. hello_world.so: ملف البرنامج التنفيذي المُجمّع
lib.rs
Cargo.toml
use solana_program::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey,
};
entrypoint!(process_instruction);
pub fn process_instruction(
_program_id: &Pubkey,
_accounts: &[AccountInfo],
_instruction_data: &[u8],
) -> ProgramResult {
msg!("Hello, Solana!");
Ok(())
}

التحقق من حجم البرنامج والتكلفة

يتطلب نشر البرنامج تخصيص SOL لحساب البرنامج بناءً على حجم البرنامج. البرامج الأكبر حجمًا تكلف المزيد من SOL للنشر.

تحقق من حجم برنامجك:

Terminal
$
wc -c < ./target/deploy/hello_world.so

احسب كمية SOL المطلوبة لهذا الحجم (بالبايت):

Terminal
$
solana rent 18504

ستحتاج إلى SOL أكثر قليلاً مما هو موضح لتغطية رسوم معاملات النشر.

نشر البرنامج

استخدم أمر solana program deploy لنشر برنامجك:

Terminal
$
solana program deploy ./target/deploy/hello_world.so

معرف البرنامج المعروض هو عنوان برنامجك الدائم على الشبكة.

للنشر باستخدام معرف برنامج محدد (بدلاً من المعرف المُنشأ تلقائيًا)، استخدم:

Terminal
$
solana program deploy ./target/deploy/hello_world.so --program-id ./custom-keypair.json

يمكنك إنشاء keypair جديد باستخدام أمر solana-keygen:

Terminal
$
solana-keygen new -o ./custom-keypair.json

تحديث البرنامج

قم بتحديث برنامجك باستخدام نفس أمر solana program deploy:

  1. قم بإجراء تغييرات على كود البرنامج الخاص بك
  2. أعد بناء برنامجك: cargo build-sbf
  3. قم بنشر التحديث:
Terminal
$
solana program deploy ./target/deploy/hello_world.so

إذا كان برنامجك المحدث يتطلب مساحة أكبر (بايت) مما هو مخصص حاليًا، فسيقوم النشر تلقائيًا بتوسيع حساب البرنامج. يحدث هذا عندما يكون برنامجك الجديد أكبر من الإصدار السابق. يحتاج حساب البرنامج إلى بايتات إضافية لتخزين البرنامج الجديد. ستقوم واجهة سطر الأوامر بحساب كمية SOL المطلوبة وخصمها من محفظتك تلقائيًا.

يمكنك أيضًا توسيع البرنامج يدويًا لتخصيص المزيد من البايتات:

Terminal
$
solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000

إدارة البرنامج

بمجرد نشر برنامجك، هناك عدة أوامر شائعة لإدارة حساب البرنامج.

عرض بيانات تعريف البرنامج

للتحقق من بيانات تعريف برنامجك، استخدم أمر solana program show:

Terminal
$
solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE

مثال للمخرجات:

$ solana program show 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7
Program Id: 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7
Owner: BPFLoaderUpgradeab1e11111111111111111111111
ProgramData Address: Gqn7YQVCP8NtYV1qkEqR4Udhj8EJ3fkikvS7HskCNQ7c
Authority: 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1
Last Deployed In Slot: 6573
Data Length: 18504 (0x4848) bytes
Balance: 0.12999192 SOL

نقل سلطة البرنامج

لنقل سلطة البرنامج إلى حساب مختلف، استخدم الأمر solana program set-upgrade-authority:

Terminal
$
solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --new-upgrade-authority ./new-authority-keypair.json

بعد نقل سلطة البرنامج، لن تتمكن من تحديث البرنامج ما لم يكن لديك وصول إلى زوج المفاتيح الخاص بالسلطة الجديدة.

جعل برنامجك غير قابل للتغيير

لجعل برنامجك غير قابل للتغيير، استخدم الأمر solana program set-upgrade-authority مع العلامة --final لإزالة سلطة البرنامج:

Terminal
$
solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --final

بمجرد أن يصبح البرنامج غير قابل للتغيير، لا يمكن تحديثه أو إغلاقه أبدًا.

إغلاق برنامجك

لإغلاق برنامجك واسترداد عملات SOL المخصصة لحساب البرنامج، استخدم الأمر solana program close:

Terminal
$
solana program close 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --bypass-warning

بمجرد الإغلاق، لا يمكن إعادة استخدام معرف البرنامج. لا يمكنك نشر برنامج جديد على نفس العنوان.

أوامر المساعدة

عرض جميع البرامج

عرض جميع البرامج التي تكون محفظتك الحالية هي السلطة عليها:

Terminal
$
solana program show --programs

مثال على المخرجات:

Program Id | Slot | Authority | Balance
-------------------------------------------------|------------|------------------------------------------------|-------------
7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE | 249885434 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.12999192
3KSGCk4m5hqJkTjPHBXUCPcqMwJnK3VmkqEsFUKKGJPK | 249883212 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.28654328

تنزيل برنامج منشور

لتنزيل برنامج منشور، استخدم الأمر solana program dump:

Terminal
$
solana program dump 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE ./downloaded_program.so

خيارات متقدمة

علامات النشر

عندما تكون شبكة سولانا مزدحمة، استخدم هذه العلامات للمساعدة في نشر البرنامج.

مثال على الاستخدام:

Terminal
$
solana program deploy ./target/deploy/hello_world.so \
--with-compute-unit-price 10000 \
--max-sign-attempts 10 \
--use-rpc

شرح الخيارات:

  • --with-compute-unit-price: تعيين رسوم الأولوية بالميكرو-لامبورت (0.000001 SOL) لكل وحدة حسابية. راجع واجهة برمجة تطبيقات رسوم الأولوية من Helius للحصول على المعدلات الحالية. رسوم الأولوية هي رسوم إضافية تُدفع للقائد الحالي لإعطاء الأولوية لمعاملتك.
  • --max-sign-attempts: عدد مرات إعادة المحاولة باستخدام بلوكهاش جديد إذا انتهت صلاحية المعاملات. (الافتراضي: 5)
  • --use-rpc: إرسال المعاملات إلى RPC المُكوّن. تتطلب هذه العلامة اتصال RPC مرجح بالحصة من مزودين مثل Triton أو Helius.

Is this page helpful?