نشر برنامجك الأول على سولانا

في هذا القسم، ستقوم ببناء ونشر واختبار برنامج سولانا بسيط (عقد ذكي) باستخدام إطار عمل Anchor. بحلول النهاية، ستكون قد نشرت برنامجك الأول على بلوكتشين سولانا.

يركز الغرض من هذا القسم على تعريفك بـ Solana Playground. يشرح الدليل مثالاً أكثر تفصيلاً في أقسام Program Derived Address (PDA) وCross Program Invocation (CPI). لمزيد من التفاصيل، راجع صفحة البرامج على سولانا.

إنشاء مشروع Anchor

أولاً، افتح https://beta.solpg.io في علامة تبويب جديدة بالمتصفح.

  • انقر على زر "Create a new project" في اللوحة الجانبية اليسرى.

  • أدخل اسم المشروع، واختر Anchor كإطار عمل، ثم انقر على زر "Create".

مشروع جديدمشروع جديد

سترى مشروعًا جديدًا تم إنشاؤه مع كود البرنامج في ملف src/lib.rs.

هذا البرنامج الأساسي على سولانا ينشئ حسابًا جديدًا ويخزن رقمًا فيه. يحتوي البرنامج على تعليمة واحدة (initialize) والتي:

  • تتطلب معلمة data: u64 كمدخل
  • تنشئ حسابًا جديدًا
  • تحفظ قيمة معلمة data: u64 في بيانات الحساب
  • تسجل رسالة في سجلات البرنامج للمعاملة
lib.rs
use anchor_lang::prelude::*;
// This is your program's public key and it will update
// automatically when you build the project.
declare_id!("11111111111111111111111111111111");
#[program]
mod hello_anchor {
use super::*;
pub fn initialize(ctx: Context<Initialize>, data: u64) -> Result<()> {
ctx.accounts.new_account.data = data;
msg!("Changed data to: {}!", data); // Message will show up in the tx logs
Ok(())
}
}
#[derive(Accounts)]
pub struct Initialize<'info> {
// We must specify the space in order to initialize an account.
// First 8 bytes are default account discriminator,
// next 8 bytes come from NewAccount.data being type u64.
// (u64 = 64 bits unsigned integer = 8 bytes)
#[account(
init,
payer = signer,
space = 8 + 8
)]
pub new_account: Account<'info, NewAccount>,
#[account(mut)]
pub signer: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[account]
pub struct NewAccount {
data: u64
}

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

لبناء البرنامج، ما عليك سوى تشغيل build في الطرفية. يقوم الأمر build بتجميع البرنامج. ثم يتم تخزين الشفرة الثنائية للبرنامج في حساب برنامج قابل للتنفيذ عند نشره.

Terminal
$
build

يقوم سولانا بلايجراوند بتحديث العنوان في declare_id!(). يمثل هذا العنوان عنوان برنامجك على سلسلة الكتل (معرف البرنامج).

بعد بناء البرنامج، قم بتشغيل deploy في الطرفية لنشر البرنامج على الشبكة (devnet بشكل افتراضي). يتطلب نشر البرنامج تخصيص SOL للحساب على السلسلة الذي يخزن البرنامج.

قبل النشر، تأكد من أن لديك ما يكفي من SOL. يمكنك الحصول على SOL على devnet إما بتشغيل solana airdrop 5 في طرفية Playground أو باستخدام صنبور الويب.

Terminal
$
deploy

يمكنك أيضًا استخدام أزرار Build و Deploy على اللوحة الجانبية اليسرى.

بناء ونشربناء ونشر

بعد نشر البرنامج، يمكنك استدعاء تعليماته.

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

يتضمن الكود الأولي ملف اختبار موجود في tests/anchor.test.ts. يوضح هذا الملف كيفية استدعاء تعليمة initialize على البرنامج من العميل.

anchor.test.ts
// No imports needed: web3, anchor, pg and more are globally available
describe("Test", () => {
it("initialize", async () => {
// Generate keypair for the new account
const newAccountKp = new web3.Keypair();
// Send transaction
const data = new BN(42);
const txHash = await pg.program.methods
.initialize(data)
.accounts({
newAccount: newAccountKp.publicKey,
signer: pg.wallet.publicKey,
systemProgram: web3.SystemProgram.programId
})
.signers([newAccountKp])
.rpc();
console.log(`Use 'solana confirm -v ${txHash}' to see the logs`);
// Confirm transaction
await pg.connection.confirmTransaction(txHash);
// Fetch the created account
const newAccount = await pg.program.account.newAccount.fetch(
newAccountKp.publicKey
);
console.log("On-chain data is:", newAccount.data.toString());
// Check whether the data on-chain is equal to local 'data'
assert(data.eq(newAccount.data));
});
});

لتشغيل ملف الاختبار بعد نشر البرنامج، قم بتشغيل test في الطرفية.

Terminal
$
test

ابحث عن المخرجات التي تؤكد نجاح الاختبار.

يمكنك أيضًا استخدام زر Test على اللوحة الجانبية اليسرى.

تشغيل الاختبارتشغيل الاختبار

يمكنك بعد ذلك عرض سجلات المعاملة بتشغيل أمر solana confirm -v وتحديد هاش المعاملة (التوقيع) من مخرجات الاختبار:

Terminal
$
solana confirm -v [TxHash]

على سبيل المثال:

Terminal
$
solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc

يمكنك أيضًا عرض تفاصيل المعاملة على SolanaFM أو مستكشف سولانا من خلال البحث عن توقيع المعاملة (الهاش).

تذكر تحديث اتصال المجموعة (الشبكة) في المستكشف الذي تستخدمه ليتطابق مع Solana Playground. يستخدم Solana Playground مجموعة devnet بشكل افتراضي.

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

أخيرًا، إغلاق البرنامج يسمح باسترداد كامل لعملة SOL المخصصة للبرنامج على السلسلة.

يمكنك إغلاق البرنامج عن طريق تشغيل الأمر التالي وتحديد عنوان البرنامج الموجود في declare_id!():

Terminal
$
solana program close [ProgramID]

على سبيل المثال:

Terminal
$
solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r

تهانينا. لقد قمت للتو ببناء ونشر أول برنامج سولانا باستخدام إطار عمل Anchor.

Is this page helpful?

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

تعديل الصفحة