نشر برنامجك الأول على سولانا
في هذا القسم، ستقوم ببناء ونشر واختبار برنامج سولانا بسيط (عقد ذكي) باستخدام إطار عمل 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
في بيانات الحساب - تسجل رسالة في سجلات البرنامج للمعاملة
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 logsOk(())}}#[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
بتجميع
البرنامج. ثم يتم تخزين الشفرة الثنائية للبرنامج في حساب برنامج قابل للتنفيذ عند
نشره.
$build
يقوم سولانا بلايجراوند بتحديث العنوان في declare_id!()
. يمثل هذا العنوان
عنوان برنامجك على سلسلة الكتل (معرف البرنامج).
بعد بناء البرنامج، قم بتشغيل deploy
في الطرفية لنشر البرنامج على الشبكة
(devnet بشكل افتراضي). يتطلب نشر البرنامج تخصيص SOL للحساب على السلسلة الذي يخزن
البرنامج.
قبل النشر، تأكد من أن لديك ما يكفي من SOL. يمكنك الحصول على SOL على devnet إما
بتشغيل solana airdrop 5
في طرفية Playground أو باستخدام
صنبور الويب.
$deploy
يمكنك أيضًا استخدام أزرار Build
و Deploy
على اللوحة الجانبية اليسرى.
بناء ونشر
بعد نشر البرنامج، يمكنك استدعاء تعليماته.
اختبار البرنامج
يتضمن الكود الأولي ملف اختبار موجود في tests/anchor.test.ts
. يوضح هذا الملف
كيفية استدعاء تعليمة initialize
على البرنامج من العميل.
// No imports needed: web3, anchor, pg and more are globally availabledescribe("Test", () => {it("initialize", async () => {// Generate keypair for the new accountconst newAccountKp = new web3.Keypair();// Send transactionconst 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 transactionawait pg.connection.confirmTransaction(txHash);// Fetch the created accountconst 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
في الطرفية.
$test
ابحث عن المخرجات التي تؤكد نجاح الاختبار.
يمكنك أيضًا استخدام زر Test
على اللوحة الجانبية اليسرى.
تشغيل الاختبار
يمكنك بعد ذلك عرض سجلات المعاملة بتشغيل أمر solana confirm -v
وتحديد هاش
المعاملة (التوقيع) من مخرجات الاختبار:
$solana confirm -v [TxHash]
على سبيل المثال:
$solana confirm -v 3TewJtiUz1EgtT88pLJHvKFzqrzDNuHVi8CfD2mWmHEBAaMfC5NAaHdmr19qQYfTiBace6XUmADvR4Qrhe8gH5uc
يمكنك أيضًا عرض تفاصيل المعاملة على SolanaFM أو مستكشف سولانا من خلال البحث عن توقيع المعاملة (الهاش).
تذكر تحديث اتصال المجموعة (الشبكة) في المستكشف الذي تستخدمه ليتطابق مع Solana Playground. يستخدم Solana Playground مجموعة devnet بشكل افتراضي.
إغلاق البرنامج
أخيرًا، إغلاق البرنامج يسمح باسترداد كامل لعملة SOL المخصصة للبرنامج على السلسلة.
يمكنك إغلاق البرنامج عن طريق تشغيل الأمر التالي وتحديد عنوان البرنامج الموجود في
declare_id!()
:
$solana program close [ProgramID]
على سبيل المثال:
$solana program close 2VvQ11q8xrn5tkPNyeraRsPaATdiPx8weLAD8aD4dn2r
تهانينا. لقد قمت للتو ببناء ونشر أول برنامج سولانا باستخدام إطار عمل Anchor.
Is this page helpful?