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

تطوير البرامج بلغة Rust

يتم تطوير برامج سولانا بشكل أساسي باستخدام لغة البرمجة Rust. تركز هذه الصفحة على كتابة برامج سولانا بلغة Rust دون استخدام إطار عمل Anchor، وهو نهج يُشار إليه غالبًا باسم كتابة برامج "Rust الأصلية".

يوفر تطوير Rust الأصلي للمطورين تحكمًا مباشرًا في برامج سولانا الخاصة بهم. ومع ذلك، يتطلب هذا النهج المزيد من الإعداد اليدوي وكود التكرار مقارنة باستخدام إطار عمل Anchor. يُوصى بهذه الطريقة للمطورين الذين:

  • يسعون للتحكم الدقيق في منطق البرنامج والتحسينات
  • يرغبون في تعلم المفاهيم الأساسية قبل الانتقال إلى أطر العمل ذات المستوى الأعلى

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

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

للحصول على تعليمات التثبيت المفصلة، قم بزيارة صفحة التثبيت.

قبل أن تبدأ، تأكد من تثبيت ما يلي:

  • Rust: لغة البرمجة لبناء برامج سولانا.
  • Solana CLI: أداة سطر الأوامر لتطوير سولانا.

البدء

يغطي المثال أدناه الخطوات الأساسية لإنشاء برنامج سولانا الأول الخاص بك المكتوب بلغة Rust. سننشئ برنامجًا بسيطًا يطبع "Hello, world!" في سجل البرنامج.

إنشاء برنامج جديد

أولاً، أنشئ مشروع Rust جديد باستخدام أمر cargo new القياسي مع علامة --lib.

Terminal
$
cargo new hello_world --lib

انتقل إلى دليل المشروع. يجب أن ترى ملفات src/lib.rs و Cargo.toml الافتراضية

Terminal
$
cd hello_world

قم بتحديث حقل edition في Cargo.toml إلى 2021. وإلا، قد تواجه خطأ عند بناء البرنامج.

إضافة تبعية solana-program

بعد ذلك، أضف تبعية solana-program. هذه هي التبعية الأساسية المطلوبة لبناء برنامج سولانا.

Terminal
$
cargo add solana-program@2.2.0

إضافة crate-type

بعد ذلك، أضف المقتطف التالي إلى Cargo.toml.

Cargo.toml
[lib]
crate-type = ["cdylib", "lib"]

إذا لم تقم بتضمين هذا الإعداد، فلن يتم إنشاء دليل target/deploy عند بناء البرنامج.

يجب أن يبدو ملف Cargo.toml الخاص بك كالتالي:

Cargo.toml
[package]
name = "hello_world"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["cdylib", "lib"]
[dependencies]
solana-program = "2.2.0"

إضافة كود البرنامج

بعد ذلك، استبدل محتويات src/lib.rs بالكود التالي. هذا برنامج سولانا بسيط يطبع "Hello, world!" في سجل البرنامج عند استدعاء البرنامج.

يُستخدم ماكرو msg! في برامج سولانا لطباعة رسالة في سجل البرنامج.

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, world!");
Ok(())
}

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

بعد ذلك، قم ببناء البرنامج باستخدام أمر cargo build-sbf.

Terminal
$
cargo build-sbf

ينشئ هذا الأمر دليل target/deploy يحتوي على ملفين مهمين:

  1. ملف .so (مثل hello_world.so): هذا هو برنامج سولانا المترجم الذي سيتم نشره على الشبكة كـ "عقد ذكي".
  2. ملف زوج مفاتيح (مثل hello_world-keypair.json): يُستخدم المفتاح العام لزوج المفاتيح هذا كمعرّف البرنامج عند نشر البرنامج.

لعرض معرف البرنامج، قم بتشغيل الأمر التالي في الطرفية الخاصة بك. يقوم هذا الأمر بطباعة المفتاح العام للـ keypair في مسار الملف المحدد:

Terminal
$
solana address -k ./target/deploy/hello_world-keypair.json

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

4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz

إضافة تبعيات الاختبار

بعد ذلك، اختبر البرنامج باستخدام حزمة litesvm. أضف التبعيات التالية إلى Cargo.toml.

Terminal
$
cargo add litesvm@0.6.1 --dev
$
cargo add solana-sdk@2.2.0 --dev

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

أضف الاختبار التالي إلى src/lib.rs، أسفل كود البرنامج. هذه وحدة اختبار تستدعي برنامج hello world.

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, world!");
Ok(())
}
#[cfg(test)]
mod test {
use litesvm::LiteSVM;
use solana_sdk::{
instruction::Instruction,
message::Message,
signature::{Keypair, Signer},
transaction::Transaction,
};
#[test]
fn test_hello_world() {
// Create a new LiteSVM instance
let mut svm = LiteSVM::new();
// Create a keypair for the transaction payer
let payer = Keypair::new();
// Airdrop some lamports to the payer
svm.airdrop(&payer.pubkey(), 1_000_000_000).unwrap();
// Load our program
let program_keypair = Keypair::new();
let program_id = program_keypair.pubkey();
svm.add_program_from_file(program_id, "target/deploy/hello_world.so")
.unwrap();
// Create instruction with no accounts and no data
let instruction = Instruction {
program_id,
accounts: vec![],
data: vec![],
};
// Create transaction
let message = Message::new(&[instruction], Some(&payer.pubkey()));
let transaction = Transaction::new(&[&payer], message, svm.latest_blockhash());
// Send transaction and verify it succeeds
let result = svm.send_transaction(transaction);
assert!(result.is_ok(), "Transaction should succeed");
let logs = result.unwrap().logs;
println!("Logs: {logs:#?}");
}
}

قم بتشغيل الاختبار باستخدام أمر cargo test. سيعرض سجل البرنامج "Hello, world!".

Terminal
$
cargo test -- --no-capture

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

Terminal
running 1 test
Logs: [
"Program 9528phXNvdWp5kkR4rgpoeZvR8ZWT5THVywK95YRprkk invoke [1]",
"Program log: Hello, world!",
"Program 9528phXNvdWp5kkR4rgpoeZvR8ZWT5THVywK95YRprkk consumed 211 of 200000 compute units",
"Program 9528phXNvdWp5kkR4rgpoeZvR8ZWT5THVywK95YRprkk success",
]
test test::test_hello_world ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s

نشر البرنامج

بعد ذلك، قم بنشر البرنامج. عند التطوير محلياً، يمكننا استخدام solana-test-validator.

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

Terminal
$
solana config set -ul

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

Config File: /.config/solana/cli/config.yml
RPC URL: http://localhost:8899
WebSocket URL: ws://localhost:8900/ (computed)
Keypair Path: /.config/solana/id.json
Commitment: confirmed

افتح نافذة طرفية جديدة وقم بتشغيل أمر solana-test-validators لبدء المدقق المحلي.

Terminal
$
solana-test-validator

أثناء تشغيل مدقق الاختبار، قم بتشغيل أمر solana program deploy في نافذة طرفية منفصلة لنشر البرنامج على المدقق المحلي.

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

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

Program Id: 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
Signature:
5osMiNMiDZGM7L1e2tPHxU8wdB8gwG8fDnXLg5G7SbhwFz4dHshYgAijk4wSQL5cXiu8z1MMou5kLadAQuHp7ybH

يمكنك فحص معرّف البرنامج وتوقيع المعاملة على مستكشف سولانا.

لاحظ أن الكلاستر على Solana Explorer يجب أن يكون أيضاً localhost. خيار "Custom RPC URL" على Solana Explorer يستخدم افتراضياً http://localhost:8899.

إنشاء عميل مثال

بعد ذلك، سنوضح كيفية استدعاء البرنامج باستخدام عميل Rust.

أولاً، أنشئ دليل examples وملف client.rs.

Terminal
$
mkdir -p examples && touch examples/client.rs

أضف ما يلي إلى Cargo.toml.

Cargo.toml
[[example]]
name = "client"
path = "examples/client.rs"

أضف تبعيات solana-client و tokio.

Terminal
$
cargo add solana-client@2.2.0 --dev
$
cargo add tokio --dev

إضافة العميل

أضف الكود التالي إلى examples/client.rs. هذا سكريبت عميل Rust يقوم بتمويل keypair جديد لدفع رسوم المعاملات ثم يستدعي برنامج hello world.

examples/client.rs
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 devnet
let rpc_url = String::from("http://localhost:8899");
let client = RpcClient::new_with_commitment(rpc_url, CommitmentConfig::confirmed());
// Generate a new keypair for the payer
let payer = Keypair::new();
// Request airdrop
let airdrop_amount = 1_000_000_000; // 1 SOL
let signature = client
.request_airdrop(&payer.pubkey(), airdrop_amount)
.expect("Failed to request airdrop");
// Wait for airdrop confirmation
loop {
let confirmed = client.confirm_transaction(&signature).unwrap();
if confirmed {
break;
}
}
// Create the instruction
let instruction = Instruction::new_with_borsh(
program_id,
&(), // Empty instruction data
vec![], // No accounts needed
);
// Add the instruction to new transaction
let mut transaction = Transaction::new_with_payer(&[instruction], Some(&payer.pubkey()));
transaction.sign(&[&payer], client.get_latest_blockhash().unwrap());
// Send and confirm the transaction
match client.send_and_confirm_transaction(&transaction) {
Ok(signature) => println!("Transaction Signature: {}", signature),
Err(err) => eprintln!("Error sending transaction: {}", err),
}
}

استبدال معرّف البرنامج

قبل تشغيل كود العميل، استبدل معرّف البرنامج في مقتطف الكود بالمعرّف الخاص ببرنامجك.

يمكنك الحصول على معرّف برنامجك عن طريق تشغيل الأمر التالي.

Terminal
$
solana address -k ./target/deploy/hello_world-keypair.json

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

قم بتشغيل نص العميل باستخدام الأمر التالي.

Terminal
$
cargo run --example client

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

Transaction Signature: 54TWxKi3Jsi3UTeZbhLGUFX6JQH7TspRJjRRFZ8NFnwG5BXM9udxiX77bAACjKAS9fGnVeEazrXL4SfKrW7xZFYV

يمكنك فحص توقيع المعاملة على مستكشف سولانا (المجموعة المحلية) لرؤية "Hello, world!" في سجل البرنامج.

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

يمكن تحديث برامج سولانا عن طريق إعادة النشر إلى نفس معرف البرنامج. قم بتحديث البرنامج في src/lib.rs لطباعة "Hello, Solana!" بدلاً من "Hello, world!".

lib.rs
pub fn process_instruction(
_program_id: &Pubkey,
_accounts: &[AccountInfo],
_instruction_data: &[u8],
) -> ProgramResult {
-
msg!("Hello, world!");
+
msg!("Hello, Solana!");
Ok(())
}

قم بتشغيل أمر cargo build-sbf لإنشاء ملف .so محدث.

Terminal
$
cargo build-sbf

اختبر البرنامج المحدث عن طريق تشغيل أمر cargo test.

Terminal
$
cargo test -- --no-capture

يجب أن ترى "Hello, Solana!" في سجل البرنامج.

Terminal
running 1 test
Logs: [
"Program 5y8bHrnwfq2dLDgLn3WoTHb9dDuyorj9gyapW6aeyrpV invoke [1]",
"Program log: Hello, Solana!",
"Program 5y8bHrnwfq2dLDgLn3WoTHb9dDuyorj9gyapW6aeyrpV consumed 211 of 200000 compute units",
"Program 5y8bHrnwfq2dLDgLn3WoTHb9dDuyorj9gyapW6aeyrpV success",
]
test test::test_hello_world ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s

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

أعد نشر البرنامج باستخدام نفس أمر solana program deploy.

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

قم بتشغيل كود العميل مرة أخرى وافحص توقيع المعاملة على مستكشف سولانا لرؤية "Hello, Solana!" في سجل البرنامج.

Terminal
$
cargo run --example client

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

يمكنك إغلاق برنامج سولانا الخاص بك لاسترداد عملات SOL المخصصة للحساب. إغلاق البرنامج هو إجراء لا رجعة فيه، لذا يجب القيام به بحذر.

لإغلاق برنامج، استخدم أمر solana program close <PROGRAM_ID>. على سبيل المثال:

Terminal
$
solana program close 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz --bypass-warning

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

Closed Program Id 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz, 0.1350588 SOL
reclaimed

لاحظ أنه بمجرد إغلاق البرنامج، لا يمكن إعادة استخدام معرّف البرنامج الخاص به. محاولة نشر برنامج بمعرّف برنامج تم إغلاقه مسبقًا ستؤدي إلى خطأ.

Error: Program 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz has been closed, use
a new Program Id

إعادة نشر برنامج مغلق

إذا كنت بحاجة إلى إعادة نشر برنامج بنفس الشفرة المصدرية بعد إغلاق البرنامج، يجب عليك إنشاء معرّف برنامج جديد. لإنشاء keypair جديد للبرنامج، قم بتشغيل الأمر التالي:

Terminal
$
solana-keygen new -o ./target/deploy/hello_world-keypair.json --force

بدلاً من ذلك، يمكنك حذف ملف الـ keypair الموجود (مثل ./target/deploy/hello_world-keypair.json) وتشغيل cargo build-sbf مرة أخرى، مما سيؤدي إلى إنشاء ملف keypair جديد.

إنشاء برنامج جديد

أولاً، أنشئ مشروع Rust جديد باستخدام أمر cargo new القياسي مع علامة --lib.

Terminal
$
cargo new hello_world --lib

انتقل إلى دليل المشروع. يجب أن ترى ملفات src/lib.rs و Cargo.toml الافتراضية

Terminal
$
cd hello_world

قم بتحديث حقل edition في Cargo.toml إلى 2021. وإلا، قد تواجه خطأ عند بناء البرنامج.

إضافة تبعية solana-program

بعد ذلك، أضف تبعية solana-program. هذه هي التبعية الأساسية المطلوبة لبناء برنامج سولانا.

Terminal
$
cargo add solana-program@2.2.0

إضافة crate-type

بعد ذلك، أضف المقتطف التالي إلى Cargo.toml.

Cargo.toml
[lib]
crate-type = ["cdylib", "lib"]

إذا لم تقم بتضمين هذا الإعداد، فلن يتم إنشاء دليل target/deploy عند بناء البرنامج.

إضافة كود البرنامج

بعد ذلك، استبدل محتويات src/lib.rs بالكود التالي. هذا برنامج سولانا بسيط يطبع "Hello, world!" في سجل البرنامج عند استدعاء البرنامج.

يُستخدم ماكرو msg! في برامج سولانا لطباعة رسالة في سجل البرنامج.

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

بعد ذلك، قم ببناء البرنامج باستخدام أمر cargo build-sbf.

Terminal
$
cargo build-sbf

ينشئ هذا الأمر دليل target/deploy يحتوي على ملفين مهمين:

  1. ملف .so (مثل hello_world.so): هذا هو برنامج سولانا المترجم الذي سيتم نشره على الشبكة كـ "عقد ذكي".
  2. ملف زوج مفاتيح (مثل hello_world-keypair.json): يُستخدم المفتاح العام لزوج المفاتيح هذا كمعرّف البرنامج عند نشر البرنامج.

لعرض معرف البرنامج، قم بتشغيل الأمر التالي في الطرفية الخاصة بك. يقوم هذا الأمر بطباعة المفتاح العام للـ keypair في مسار الملف المحدد:

Terminal
$
solana address -k ./target/deploy/hello_world-keypair.json

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

4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz

إضافة تبعيات الاختبار

بعد ذلك، اختبر البرنامج باستخدام حزمة litesvm. أضف التبعيات التالية إلى Cargo.toml.

Terminal
$
cargo add litesvm@0.6.1 --dev
$
cargo add solana-sdk@2.2.0 --dev

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

أضف الاختبار التالي إلى src/lib.rs، أسفل كود البرنامج. هذه وحدة اختبار تستدعي برنامج hello world.

قم بتشغيل الاختبار باستخدام أمر cargo test. سيعرض سجل البرنامج "Hello, world!".

Terminal
$
cargo test -- --no-capture

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

Terminal
running 1 test
Logs: [
"Program 9528phXNvdWp5kkR4rgpoeZvR8ZWT5THVywK95YRprkk invoke [1]",
"Program log: Hello, world!",
"Program 9528phXNvdWp5kkR4rgpoeZvR8ZWT5THVywK95YRprkk consumed 211 of 200000 compute units",
"Program 9528phXNvdWp5kkR4rgpoeZvR8ZWT5THVywK95YRprkk success",
]
test test::test_hello_world ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s

نشر البرنامج

بعد ذلك، قم بنشر البرنامج. عند التطوير محلياً، يمكننا استخدام solana-test-validator.

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

Terminal
$
solana config set -ul

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

Config File: /.config/solana/cli/config.yml
RPC URL: http://localhost:8899
WebSocket URL: ws://localhost:8900/ (computed)
Keypair Path: /.config/solana/id.json
Commitment: confirmed

افتح نافذة طرفية جديدة وقم بتشغيل أمر solana-test-validators لبدء المدقق المحلي.

Terminal
$
solana-test-validator

أثناء تشغيل مدقق الاختبار، قم بتشغيل أمر solana program deploy في نافذة طرفية منفصلة لنشر البرنامج على المدقق المحلي.

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

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

Program Id: 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz
Signature:
5osMiNMiDZGM7L1e2tPHxU8wdB8gwG8fDnXLg5G7SbhwFz4dHshYgAijk4wSQL5cXiu8z1MMou5kLadAQuHp7ybH

يمكنك فحص معرّف البرنامج وتوقيع المعاملة على مستكشف سولانا.

لاحظ أن الكلاستر على Solana Explorer يجب أن يكون أيضاً localhost. خيار "Custom RPC URL" على Solana Explorer يستخدم افتراضياً http://localhost:8899.

إنشاء عميل مثال

بعد ذلك، سنوضح كيفية استدعاء البرنامج باستخدام عميل Rust.

أولاً، أنشئ دليل examples وملف client.rs.

Terminal
$
mkdir -p examples && touch examples/client.rs

أضف ما يلي إلى Cargo.toml.

Cargo.toml
[[example]]
name = "client"
path = "examples/client.rs"

أضف تبعيات solana-client و tokio.

Terminal
$
cargo add solana-client@2.2.0 --dev
$
cargo add tokio --dev

إضافة العميل

أضف الكود التالي إلى examples/client.rs. هذا سكريبت عميل Rust يقوم بتمويل keypair جديد لدفع رسوم المعاملات ثم يستدعي برنامج hello world.

استبدال معرّف البرنامج

قبل تشغيل كود العميل، استبدل معرّف البرنامج في مقتطف الكود بالمعرّف الخاص ببرنامجك.

يمكنك الحصول على معرّف برنامجك عن طريق تشغيل الأمر التالي.

Terminal
$
solana address -k ./target/deploy/hello_world-keypair.json

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

قم بتشغيل نص العميل باستخدام الأمر التالي.

Terminal
$
cargo run --example client

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

Transaction Signature: 54TWxKi3Jsi3UTeZbhLGUFX6JQH7TspRJjRRFZ8NFnwG5BXM9udxiX77bAACjKAS9fGnVeEazrXL4SfKrW7xZFYV

يمكنك فحص توقيع المعاملة على مستكشف سولانا (المجموعة المحلية) لرؤية "Hello, world!" في سجل البرنامج.

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

يمكن تحديث برامج سولانا عن طريق إعادة النشر إلى نفس معرف البرنامج. قم بتحديث البرنامج في src/lib.rs لطباعة "Hello, Solana!" بدلاً من "Hello, world!".

lib.rs
pub fn process_instruction(
_program_id: &Pubkey,
_accounts: &[AccountInfo],
_instruction_data: &[u8],
) -> ProgramResult {
-
msg!("Hello, world!");
+
msg!("Hello, Solana!");
Ok(())
}

قم بتشغيل أمر cargo build-sbf لإنشاء ملف .so محدث.

Terminal
$
cargo build-sbf

اختبر البرنامج المحدث عن طريق تشغيل أمر cargo test.

Terminal
$
cargo test -- --no-capture

يجب أن ترى "Hello, Solana!" في سجل البرنامج.

Terminal
running 1 test
Logs: [
"Program 5y8bHrnwfq2dLDgLn3WoTHb9dDuyorj9gyapW6aeyrpV invoke [1]",
"Program log: Hello, Solana!",
"Program 5y8bHrnwfq2dLDgLn3WoTHb9dDuyorj9gyapW6aeyrpV consumed 211 of 200000 compute units",
"Program 5y8bHrnwfq2dLDgLn3WoTHb9dDuyorj9gyapW6aeyrpV success",
]
test test::test_hello_world ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s

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

أعد نشر البرنامج باستخدام نفس أمر solana program deploy.

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

قم بتشغيل كود العميل مرة أخرى وافحص توقيع المعاملة على مستكشف سولانا لرؤية "Hello, Solana!" في سجل البرنامج.

Terminal
$
cargo run --example client

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

يمكنك إغلاق برنامج سولانا الخاص بك لاسترداد عملات SOL المخصصة للحساب. إغلاق البرنامج هو إجراء لا رجعة فيه، لذا يجب القيام به بحذر.

لإغلاق برنامج، استخدم أمر solana program close <PROGRAM_ID>. على سبيل المثال:

Terminal
$
solana program close 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz --bypass-warning

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

Closed Program Id 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz, 0.1350588 SOL
reclaimed

لاحظ أنه بمجرد إغلاق البرنامج، لا يمكن إعادة استخدام معرّف البرنامج الخاص به. محاولة نشر برنامج بمعرّف برنامج تم إغلاقه مسبقًا ستؤدي إلى خطأ.

Error: Program 4Ujf5fXfLx2PAwRqcECCLtgDxHKPznoJpa43jUBxFfMz has been closed, use
a new Program Id

إعادة نشر برنامج مغلق

إذا كنت بحاجة إلى إعادة نشر برنامج بنفس الشفرة المصدرية بعد إغلاق البرنامج، يجب عليك إنشاء معرّف برنامج جديد. لإنشاء keypair جديد للبرنامج، قم بتشغيل الأمر التالي:

Terminal
$
solana-keygen new -o ./target/deploy/hello_world-keypair.json --force

بدلاً من ذلك، يمكنك حذف ملف الـ keypair الموجود (مثل ./target/deploy/hello_world-keypair.json) وتشغيل cargo build-sbf مرة أخرى، مما سيؤدي إلى إنشاء ملف keypair جديد.

lib.rs
Cargo.toml
[package]
name = "hello_world"
version = "0.1.0"
edition = "2021"
[dependencies]

Is this page helpful?

جدول المحتويات

تعديل الصفحة

تدار بواسطة

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