تطوير البرامج بلغة Rust
يتم تطوير برامج سولانا بشكل أساسي باستخدام لغة البرمجة Rust. تركز هذه الصفحة على كتابة برامج سولانا بلغة Rust دون استخدام إطار عمل Anchor، وهو نهج يُشار إليه غالبًا باسم كتابة برامج "Rust الأصلية".
يوفر تطوير Rust الأصلي للمطورين تحكمًا مباشرًا في برامج سولانا الخاصة بهم. ومع ذلك، يتطلب هذا النهج المزيد من الإعداد اليدوي وكود التكرار مقارنة باستخدام إطار عمل Anchor. يُوصى بهذه الطريقة للمطورين الذين:
- يسعون للتحكم الدقيق في منطق البرنامج والتحسينات
- يرغبون في تعلم المفاهيم الأساسية قبل الانتقال إلى أطر العمل ذات المستوى الأعلى
بالنسبة للمبتدئين، نوصي بالبدء باستخدام إطار عمل Anchor. راجع قسم Anchor لمزيد من المعلومات.
المتطلبات الأساسية
للحصول على تعليمات التثبيت التفصيلية، قم بزيارة صفحة التثبيت.
قبل أن تبدأ، تأكد من تثبيت ما يلي:
- Rust: لغة البرمجة لبناء برامج سولانا.
- Solana CLI: أداة سطر الأوامر لتطوير سولانا.
البدء
يغطي المثال أدناه الخطوات الأساسية لإنشاء برنامج سولانا الأول المكتوب بلغة Rust. سننشئ برنامجًا بسيطًا يطبع "Hello, world!" في سجل البرنامج.
إنشاء برنامج جديد
أولاً، قم بإنشاء مشروع Rust جديد باستخدام أمر cargo init
القياسي مع خيار
--lib
.
cargo init hello_world --lib
انتقل إلى دليل المشروع. يجب أن ترى ملفات src/lib.rs
و Cargo.toml
الافتراضية
cd hello_world
إضافة تبعية solana-program
بعد ذلك، أضف تبعية solana-program
. هذه هي الحد الأدنى من التبعيات المطلوبة
لبناء برنامج سولانا.
cargo add solana-program@1.18.26
بعد ذلك، أضف المقتطف التالي إلى Cargo.toml
. إذا لم تقم بتضمين هذا الإعداد، فلن
يتم إنشاء دليل target/deploy
عند بناء البرنامج.
إضافة نوع الحزمة
بعد ذلك، أضف المقتطف التالي إلى Cargo.toml
.
[lib]crate-type = ["cdylib", "lib"]
إذا لم تقم بتضمين هذا الإعداد، فلن يتم إنشاء دليل target/deploy
عند بناء
البرنامج.
يجب أن يبدو ملف Cargo.toml
الخاص بك كما يلي:
[package]name = "hello_world"version = "0.1.0"edition = "2021"[lib]crate-type = ["cdylib", "lib"][dependencies]solana-program = "1.18.26"
إضافة كود البرنامج
بعد ذلك، استبدل محتويات src/lib.rs
بالكود التالي. هذا هو برنامج سولانا الأساسي
الذي يطبع "Hello, world!" في سجل البرنامج عند استدعاء البرنامج.
يتم استخدام وحدة الماكرو msg!
في برامج سولانا لطباعة رسالة في سجل البرنامج.
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, world!");Ok(())}
بناء البرنامج
بعد ذلك، قم ببناء البرنامج باستخدام أمر cargo build-sbf
.
cargo build-sbf
ينشئ هذا الأمر دليل target/deploy
يحتوي على ملفين مهمين:
- ملف
.so
(مثل،hello_world.so
): هذا هو برنامج سولانا المُجمّع الذي سيتم نشره على الشبكة كـ "عقد ذكي". - ملف keypair (مثل،
hello_world-keypair.json
): يتم استخدام المفتاح العام لهذا الـ keypair كمعرف للبرنامج عند نشر البرنامج.
لعرض معرف البرنامج، قم بتشغيل الأمر التالي في الطرفية الخاصة بك. يقوم هذا الأمر بطباعة المفتاح العام للـ keypair في مسار الملف المحدد:
solana address -k ./target/deploy/hello_world-keypair.json
مثال للمخرجات:
4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
إضافة تبعيات الاختبار
بعد ذلك، اختبر البرنامج باستخدام حزمة solana-program-test
. أضف التبعيات
التالية إلى Cargo.toml
.
cargo add solana-program-test@1.18.26 --devcargo add solana-sdk@1.18.26 --devcargo add tokio --dev
اختبار البرنامج
أضف الاختبار التالي إلى src/lib.rs
، أسفل كود البرنامج. هذه وحدة اختبار تستدعي
برنامج مرحبا بالعالم.
solana address -k ./target/deploy/hello_world-keypair.json
قم بتشغيل الاختبار باستخدام أمر cargo test-sbf
. سيعرض سجل البرنامج "Hello,
world!".
cargo test-sbf
مثال للمخرجات:
running 1 test[2024-10-18T21:24:54.889570000Z INFO solana_program_test] "hello_world" SBF program from /hello_world/target/deploy/hello_world.so, modified 35 seconds, 828 ms, 268 µs and 398 ns ago[2024-10-18T21:24:54.974294000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM invoke [1][2024-10-18T21:24:54.974814000Z DEBUG solana_runtime::message_processor::stable_log] Program log: Hello, world![2024-10-18T21:24:54.976848000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM consumed 140 of 200000 compute units[2024-10-18T21:24:54.976868000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM successtest test::test_hello_world ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s
نشر البرنامج
بعد ذلك، قم بنشر البرنامج. عند التطوير محليًا، يمكننا استخدام
solana-test-validator
.
أولاً، قم بتكوين واجهة سطر أوامر سولانا لاستخدام مجموعة سولانا المحلية.
solana config set -ul
مثال للمخرجات:
Config File: /.config/solana/cli/config.ymlRPC URL: http://localhost:8899WebSocket URL: ws://localhost:8900/ (computed)Keypair Path: /.config/solana/id.jsonCommitment: confirmed
افتح نافذة طرفية جديدة وقم بتشغيل أمر solana-test-validators
لبدء تشغيل
المصادق المحلي.
solana-test-validator
أثناء تشغيل مصادق الاختبار، قم بتشغيل أمر solana program deploy
في نافذة طرفية
منفصلة لنشر البرنامج على المصادق المحلي.
solana program deploy ./target/deploy/hello_world.so
مثال للمخرجات:
Program Id: 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMzSignature:5osMiNMiDZGM7L1e2tPHxU8wdB8gwG8fDnXLg5G7SbhwFz4dHshYgAijk4wSQL5cXiu8z1MMou5kLadAQuHp7ybH
يمكنك فحص معرف البرنامج وتوقيع المعاملة على
مستكشف سولانا.
لاحظ أن المجموعة على مستكشف سولانا يجب أن تكون أيضًا localhost. خيار "عنوان URL
مخصص لـ RPC" في مستكشف سولانا يكون افتراضيًا http://localhost:8899
.
إنشاء عميل مثال
بعد ذلك، سنوضح كيفية استدعاء البرنامج باستخدام عميل Rust.
أولاً قم بإنشاء دليل examples
وملف client.rs
.
mkdir -p examplestouch examples/client.rs
أضف ما يلي إلى Cargo.toml
.
[[example]]name = "client"path = "examples/client.rs"
أضف تبعية solana-client
.
cargo add solana-client@1.18.26 --dev
إضافة العميل
أضف الكود التالي إلى examples/client.rs
. هذا نص برمجي لعميل Rust يقوم بتمويل
keypair جديد لدفع رسوم المعاملات ثم يستدعي برنامج مرحبا بالعالم.
use solana_client::rpc_client::RpcClient;use solana_sdk::{commitment_config::CommitmentConfig,instruction::Instruction,pubkey::Pubkey,signature::{Keypair, Signer},transaction::Transaction,};use std::str::FromStr;#[tokio::main]async fn main() {// Program ID (replace with your actual program ID)let program_id = Pubkey::from_str("4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz").unwrap();// Connect to the Solana devnetlet rpc_url = String::from("http://127.0.0.1:8899");let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());// Generate a new keypair for the payerlet payer = Keypair::new();// Request airdroplet airdrop_amount = 1_000_000_000; // 1 SOLlet signature = client.request_airdrop(&payer.pubkey(), airdrop_amount).expect("Failed to request airdrop");// Wait for airdrop confirmationloop {let confirmed = client.confirm_transaction(&signature).unwrap();if confirmed {break;}}// Create the instructionlet instruction = Instruction::new_with_borsh(program_id,&(), // Empty instruction datavec![], // No accounts needed);// Add the instruction to new transactionlet mut transaction = Transaction::new_with_payer(&[instruction], Some(&payer.pubkey()));transaction.sign(&[&payer], client.get_latest_blockhash().unwrap());// Send and confirm the transactionmatch client.send_and_confirm_transaction(&transaction) {Ok(signature) => println!("Transaction Signature: {}", signature),Err(err) => eprintln!("Error sending transaction: {}", err),}}
استبدال معرف البرنامج
قبل تشغيل النص البرمجي، استبدل معرف البرنامج في مقتطف الكود أعلاه بالمعرف الخاص ببرنامجك.
يمكنك الحصول على معرف برنامجك عن طريق تشغيل الأمر التالي.
solana address -k ./target/deploy/hello_world-keypair.json
استدعاء البرنامج
قم بتشغيل نص العميل البرمجي باستخدام الأمر التالي.
cargo run --example client
مثال للمخرجات:
Transaction Signature: 54TWxKi3Jsi3UTeZbhLGUFX6JQH7TspRJjRRFZ8NFnwG5BXM9udxiX77bAACjKAS9fGnVeEazrXL4SfKrW7xZFYV
يمكنك فحص توقيع المعاملة على مستكشف سولانا (المجموعة المحلية) لرؤية "Hello, world!" في سجل البرنامج.
تحديث البرنامج
يمكن تحديث برامج سولانا عن طريق إعادة النشر إلى نفس معرف البرنامج. قم بتحديث
البرنامج في src/lib.rs
لطباعة "Hello, Solana!" بدلاً من "Hello, world!".
pub fn process_instruction(_program_id: &Pubkey,_accounts: &[AccountInfo],_instruction_data: &[u8],) -> ProgramResult {-msg!("Hello, world!");+msg!("Hello, Solana!");Ok(())}
اختبر البرنامج المحدث بتشغيل الأمر cargo test-sbf
.
cargo test-sbf
يجب أن ترى "Hello, Solana!" في سجل البرنامج.
running 1 test[2024-10-23T19:28:28.842639000Z INFO solana_program_test] "hello_world" SBF program from /code/misc/delete/hello_world/target/deploy/hello_world.so, modified 4 minutes, 31 seconds, 435 ms, 566 µs and 766 ns ago[2024-10-23T19:28:28.934854000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM invoke [1][2024-10-23T19:28:28.936735000Z DEBUG solana_runtime::message_processor::stable_log] Program log: Hello, Solana![2024-10-23T19:28:28.938774000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM consumed 140 of 200000 compute units[2024-10-23T19:28:28.938793000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM successtest test::test_hello_world ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s
إعادة نشر البرنامج
قم بتشغيل الأمر cargo build-sbf
لإنشاء ملف .so
محدث.
cargo build-sbf
أعد نشر البرنامج باستخدام الأمر solana program deploy
.
solana program deploy ./target/deploy/hello_world.so
قم بتشغيل كود العميل مرة أخرى وافحص توقيع المعاملة على مستكشف سولانا لرؤية "Hello, Solana!" في سجل البرنامج.
cargo run --example client
إغلاق البرنامج
يمكنك إغلاق برنامج سولانا لاسترداد الـSOL المخصص للحساب. إغلاق البرنامج هو إجراء لا رجعة فيه، لذا يجب القيام به بحذر.
لإغلاق البرنامج، استخدم الأمر solana program close <PROGRAM_ID>
. على سبيل
المثال:
solana program close 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz--bypass-warning
مثال للمخرجات:
Closed Program Id 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz, 0.1350588 SOLreclaimed
لاحظ أنه بمجرد إغلاق البرنامج، لا يمكن إعادة استخدام معرف البرنامج الخاص به. محاولة نشر برنامج بمعرف برنامج تم إغلاقه مسبقًا ستؤدي إلى خطأ.
Error: Program 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz has been closed, usea new Program Id
إعادة نشر برنامج مغلق
إذا كنت بحاجة إلى إعادة نشر برنامج بنفس الكود المصدري بعد إغلاق البرنامج، يجب عليك إنشاء معرف برنامج جديد. لإنشاء keypair جديد للبرنامج، قم بتشغيل الأمر التالي:
solana-keygen new -o ./target/deploy/hello_world-keypair.json --force
بدلاً من ذلك، يمكنك حذف ملف keypair الموجود (على سبيل المثال
./target/deploy/hello_world-keypair.json
) وتشغيل cargo build-sbf
مرة أخرى،
والذي سيقوم بإنشاء ملف keypair جديد.
إنشاء برنامج جديد
أولاً، قم بإنشاء مشروع Rust جديد باستخدام أمر cargo init
القياسي مع خيار
--lib
.
cargo init hello_world --lib
انتقل إلى دليل المشروع. يجب أن ترى ملفات src/lib.rs
و Cargo.toml
الافتراضية
cd hello_world
إضافة تبعية solana-program
بعد ذلك، أضف تبعية solana-program
. هذه هي الحد الأدنى من التبعيات المطلوبة
لبناء برنامج سولانا.
cargo add solana-program@1.18.26
بعد ذلك، أضف المقتطف التالي إلى Cargo.toml
. إذا لم تقم بتضمين هذا الإعداد، فلن
يتم إنشاء دليل target/deploy
عند بناء البرنامج.
إضافة نوع الحزمة
بعد ذلك، أضف المقتطف التالي إلى Cargo.toml
.
[lib]crate-type = ["cdylib", "lib"]
إذا لم تقم بتضمين هذا الإعداد، فلن يتم إنشاء دليل target/deploy
عند بناء
البرنامج.
إضافة كود البرنامج
بعد ذلك، استبدل محتويات src/lib.rs
بالكود التالي. هذا هو برنامج سولانا الأساسي
الذي يطبع "Hello, world!" في سجل البرنامج عند استدعاء البرنامج.
يتم استخدام وحدة الماكرو msg!
في برامج سولانا لطباعة رسالة في سجل البرنامج.
بناء البرنامج
بعد ذلك، قم ببناء البرنامج باستخدام أمر cargo build-sbf
.
cargo build-sbf
ينشئ هذا الأمر دليل target/deploy
يحتوي على ملفين مهمين:
- ملف
.so
(مثل،hello_world.so
): هذا هو برنامج سولانا المُجمّع الذي سيتم نشره على الشبكة كـ "عقد ذكي". - ملف keypair (مثل،
hello_world-keypair.json
): يتم استخدام المفتاح العام لهذا الـ keypair كمعرف للبرنامج عند نشر البرنامج.
لعرض معرف البرنامج، قم بتشغيل الأمر التالي في الطرفية الخاصة بك. يقوم هذا الأمر بطباعة المفتاح العام للـ keypair في مسار الملف المحدد:
solana address -k ./target/deploy/hello_world-keypair.json
مثال للمخرجات:
4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
إضافة تبعيات الاختبار
بعد ذلك، اختبر البرنامج باستخدام حزمة solana-program-test
. أضف التبعيات
التالية إلى Cargo.toml
.
cargo add solana-program-test@1.18.26 --devcargo add solana-sdk@1.18.26 --devcargo add tokio --dev
اختبار البرنامج
أضف الاختبار التالي إلى src/lib.rs
، أسفل كود البرنامج. هذه وحدة اختبار تستدعي
برنامج مرحبا بالعالم.
solana address -k ./target/deploy/hello_world-keypair.json
قم بتشغيل الاختبار باستخدام أمر cargo test-sbf
. سيعرض سجل البرنامج "Hello,
world!".
cargo test-sbf
مثال للمخرجات:
running 1 test[2024-10-18T21:24:54.889570000Z INFO solana_program_test] "hello_world" SBF program from /hello_world/target/deploy/hello_world.so, modified 35 seconds, 828 ms, 268 µs and 398 ns ago[2024-10-18T21:24:54.974294000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM invoke [1][2024-10-18T21:24:54.974814000Z DEBUG solana_runtime::message_processor::stable_log] Program log: Hello, world![2024-10-18T21:24:54.976848000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM consumed 140 of 200000 compute units[2024-10-18T21:24:54.976868000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM successtest test::test_hello_world ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s
نشر البرنامج
بعد ذلك، قم بنشر البرنامج. عند التطوير محليًا، يمكننا استخدام
solana-test-validator
.
أولاً، قم بتكوين واجهة سطر أوامر سولانا لاستخدام مجموعة سولانا المحلية.
solana config set -ul
مثال للمخرجات:
Config File: /.config/solana/cli/config.ymlRPC URL: http://localhost:8899WebSocket URL: ws://localhost:8900/ (computed)Keypair Path: /.config/solana/id.jsonCommitment: confirmed
افتح نافذة طرفية جديدة وقم بتشغيل أمر solana-test-validators
لبدء تشغيل
المصادق المحلي.
solana-test-validator
أثناء تشغيل مصادق الاختبار، قم بتشغيل أمر solana program deploy
في نافذة طرفية
منفصلة لنشر البرنامج على المصادق المحلي.
solana program deploy ./target/deploy/hello_world.so
مثال للمخرجات:
Program Id: 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMzSignature:5osMiNMiDZGM7L1e2tPHxU8wdB8gwG8fDnXLg5G7SbhwFz4dHshYgAijk4wSQL5cXiu8z1MMou5kLadAQuHp7ybH
يمكنك فحص معرف البرنامج وتوقيع المعاملة على
مستكشف سولانا.
لاحظ أن المجموعة على مستكشف سولانا يجب أن تكون أيضًا localhost. خيار "عنوان URL
مخصص لـ RPC" في مستكشف سولانا يكون افتراضيًا http://localhost:8899
.
إنشاء عميل مثال
بعد ذلك، سنوضح كيفية استدعاء البرنامج باستخدام عميل Rust.
أولاً قم بإنشاء دليل examples
وملف client.rs
.
mkdir -p examplestouch examples/client.rs
أضف ما يلي إلى Cargo.toml
.
[[example]]name = "client"path = "examples/client.rs"
أضف تبعية solana-client
.
cargo add solana-client@1.18.26 --dev
إضافة العميل
أضف الكود التالي إلى examples/client.rs
. هذا نص برمجي لعميل Rust يقوم بتمويل
keypair جديد لدفع رسوم المعاملات ثم يستدعي برنامج مرحبا بالعالم.
استبدال معرف البرنامج
قبل تشغيل النص البرمجي، استبدل معرف البرنامج في مقتطف الكود أعلاه بالمعرف الخاص ببرنامجك.
يمكنك الحصول على معرف برنامجك عن طريق تشغيل الأمر التالي.
solana address -k ./target/deploy/hello_world-keypair.json
استدعاء البرنامج
قم بتشغيل نص العميل البرمجي باستخدام الأمر التالي.
cargo run --example client
مثال للمخرجات:
Transaction Signature: 54TWxKi3Jsi3UTeZbhLGUFX6JQH7TspRJjRRFZ8NFnwG5BXM9udxiX77bAACjKAS9fGnVeEazrXL4SfKrW7xZFYV
يمكنك فحص توقيع المعاملة على مستكشف سولانا (المجموعة المحلية) لرؤية "Hello, world!" في سجل البرنامج.
تحديث البرنامج
يمكن تحديث برامج سولانا عن طريق إعادة النشر إلى نفس معرف البرنامج. قم بتحديث
البرنامج في src/lib.rs
لطباعة "Hello, Solana!" بدلاً من "Hello, world!".
pub fn process_instruction(_program_id: &Pubkey,_accounts: &[AccountInfo],_instruction_data: &[u8],) -> ProgramResult {-msg!("Hello, world!");+msg!("Hello, Solana!");Ok(())}
اختبر البرنامج المحدث بتشغيل الأمر cargo test-sbf
.
cargo test-sbf
يجب أن ترى "Hello, Solana!" في سجل البرنامج.
running 1 test[2024-10-23T19:28:28.842639000Z INFO solana_program_test] "hello_world" SBF program from /code/misc/delete/hello_world/target/deploy/hello_world.so, modified 4 minutes, 31 seconds, 435 ms, 566 µs and 766 ns ago[2024-10-23T19:28:28.934854000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM invoke [1][2024-10-23T19:28:28.936735000Z DEBUG solana_runtime::message_processor::stable_log] Program log: Hello, Solana![2024-10-23T19:28:28.938774000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM consumed 140 of 200000 compute units[2024-10-23T19:28:28.938793000Z DEBUG solana_runtime::message_processor::stable_log] Program 1111111QLbz7JHiBTspS962RLKV8GndWFwiEaqKM successtest test::test_hello_world ... oktest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s
إعادة نشر البرنامج
قم بتشغيل الأمر cargo build-sbf
لإنشاء ملف .so
محدث.
cargo build-sbf
أعد نشر البرنامج باستخدام الأمر solana program deploy
.
solana program deploy ./target/deploy/hello_world.so
قم بتشغيل كود العميل مرة أخرى وافحص توقيع المعاملة على مستكشف سولانا لرؤية "Hello, Solana!" في سجل البرنامج.
cargo run --example client
إغلاق البرنامج
يمكنك إغلاق برنامج سولانا لاسترداد الـSOL المخصص للحساب. إغلاق البرنامج هو إجراء لا رجعة فيه، لذا يجب القيام به بحذر.
لإغلاق البرنامج، استخدم الأمر solana program close <PROGRAM_ID>
. على سبيل
المثال:
solana program close 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz--bypass-warning
مثال للمخرجات:
Closed Program Id 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz, 0.1350588 SOLreclaimed
لاحظ أنه بمجرد إغلاق البرنامج، لا يمكن إعادة استخدام معرف البرنامج الخاص به. محاولة نشر برنامج بمعرف برنامج تم إغلاقه مسبقًا ستؤدي إلى خطأ.
Error: Program 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz has been closed, usea new Program Id
إعادة نشر برنامج مغلق
إذا كنت بحاجة إلى إعادة نشر برنامج بنفس الكود المصدري بعد إغلاق البرنامج، يجب عليك إنشاء معرف برنامج جديد. لإنشاء keypair جديد للبرنامج، قم بتشغيل الأمر التالي:
solana-keygen new -o ./target/deploy/hello_world-keypair.json --force
بدلاً من ذلك، يمكنك حذف ملف keypair الموجود (على سبيل المثال
./target/deploy/hello_world-keypair.json
) وتشغيل cargo build-sbf
مرة أخرى،
والذي سيقوم بإنشاء ملف keypair جديد.
[package]name = "hello_world"version = "0.1.0"edition = "2021"[dependencies]
Is this page helpful?