بناء التطبيقات اللامركزية (Dapp) على شبكة سولانا

في هذا المقال سنتعلم كيفية بناء التطبيقات اللامركزية من الصفر على شبكة سولانا المحلية ومن ثم نقلها إلى شبكة سولانا العامة.

ماهي شبكة سولانا؟

سولانا هي شبكة بلوكتشين عامة ومفتوحة المصدر تستخدم لتشغيل التطبيقات اللامركزية والبرامج والمعروفة ايضاً باسم العقود الذكية (Smart Contracts). تم إنشاء شبكة سولانا لتمكين قابلية التوسع وانخفاض تكاليف المعاملات خاصة بالنسبة للشركات المتنامية.

تعتبر شبكة سولانا أسرع شبكة بلوكتشين في العالم قادرة على معالجة 50 ألف إلى 65 ألف معاملة في الثانية واستكمال الكتل في 429 مللي ثانية. من الجدير بالذكر إن متوسط تكلفة المعاملات البالغ 0.00025 دولار هو الحافز الأكبر الذي حث المطورين على إنشاء مشاريعهم على هذه الشبكة.

تستخدم سولانا بروتوكول البلوكتشين الذي يعمل بخوارزمية إثبات الحصة (Proof Of Stake) وإثبات التاريخ (Proof Of History) لحل مشاكل قابلية التوسع داخل البلوكتشين مع الحفاظ على لامركزية الشبكة وأمانها.

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

ماهي اللغات والتقنيات المستخدمة ولماذا؟

يجب أن يكون لدى المطور بعض الخبرة في البرمجة فهي مطلوبة لتطوير تطبيق على الشبكة من الألف إلى الياء. تستخدم سولانا لغات مثل لغة راست (Rust) وكذلك C و C ++. 

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

في الواقع سيتمكن المطور الذي لديه معرفة أساسية بالبرمجة من فهم وظائفها والتنقل فيها بسهولة، فهي لغة سهلة كل ما هو مطلوب هو نوع من انواع الكورسات التعليمية الأساسية قبل الدخول.

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

أما من جانب الواجهة الرسومية (GUI)، سيتم استخدام لغات مثل جافاسكربت (JavaScript) ومكاتب مثل React.js لتسهيل تفاعل العميل مع التطبيق اللامركزي على سولانا، لذا سيكون مطلوب الفهم الأساسي للغة جافاسكربت التي بدورها ستوفر المظهر والواجهه للتطبيق اللامركزي التفاعلي، سيؤدي ذلك إلى تحسين تجربة المستخدم وتوسيع قاعدة المستخدمين.

لماذا تعتبر سولانا الشبكة الافضل للمشاريع التجارية؟

بسبب كون شبكة سولانا تتمتع بالعديد من الميزات سهلة الاستخدام وبسيطة البرمجة، يحتوي نظام سولانا على عدد من الأدوات الجاهزة التي سيجدها المستخدمين المبتدئين مفيدة.

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

  • السرعة في التوسع: على شبكة جيجابت قياسية، يمكن لشبكة سولانا معالجة 710000 معاملة بحجم يساوي أو أقل من 176 بايت في الثانية لقاعدة بيانات مركزية، مع وقت كتلة يبلغ 400 مللي ثانية. لذلك تعتبر الشبكة أسرع شبكة بلوكتشين في العالم، حيث تساهم السرعة العالية في السهولة التي يمكن بها توسيع نطاق الأعمال.
  • تكلفة معاملات منخفضة: الميزة المهمة التالية لشبكة سولانا للشركات هي رسوم الغاز المنخفضة المفروضة على كل معاملة. إن رسوم الغاز هي الرسوم التي يجب على المستخدمين دفعها لاستخدام منصة سولانا للمعاملات، حيث تبلغ تكلفة المعاملة الواحدة على سولانا حوالي 0.00025 دولار، وهو جزء بسيط مقارنة بما تتقاضاه شبكات البلوكتشين المنافسة الأخرى.
  • سهولة التطوير والبرمجة: سولانا عبارة عن شبكة بلوكتشين مفتوحة المصدر سهلة الاستخدام. هذا يعني أنه يمكن للمستخدمين والمطورين تنزيل الأكواد الجاهزة مباشرة واستخدامها لإنشاء منتجات جديدة وعملية، وهو ما يجذب مطوري التطبيقات اللامركزية من جميع أنحاء العالم إلى نظام الشبكة بحثاً عن تطوير أسهل وأسرع.
  • مميزات لغة راست (Rust): ترث برمجة سولانا مزايا برمجة لغة راست، مثل أمان الذاكرة والتزامن، وهذا يرجع إلى حقيقة أن غالبية التطبيقات اللامركزية في نظام سولانا مكتوبة بلغة برمجة راست.

بناء التطبيقات اللامركزية على شبكة سولانا

لغرض البدء في بناء التطبيقات اللامركزية على شبكة سولانا نحتاج إلى القيام ببضع خطوات:

الخطوة الأولى: تثبيت جميع البرمجيات المطلوبة للمشروع

سيشمل تثبيت البرمجيات تقنيات مثل Rust، Solana، Node.js, Yarn, Anchor.

تستخدم لغة راست لغرض كتابة العقود الذكية على شبكة سولانا، ولتثبيتها نقوم بكتابة الامر التالي:

curl — proto ‘=https’ — tlsv1.2 -sSf https://sh.rustup.rs | sh

اما بالنسبة لأصحاب الويندوز، يمكنهم تثبيت أي من خدمات الاستضافة لمشاريع مفتوحة المصدر مثل Github و Gitlab وغيرها. او يمكنك تحميل مثبت Rust بصيغة exe من الموقع الرسمي.

بمجرد تثبيت لغة راست قم بإضافة ملفات اللغة التنفيذية عن طريق الامر التالي: 

export PATH="$HOME/.cargo/bin:$PATH"

قم بالتحقق من عملية التثبيت عن طريق الأوامر التالية التالية:

rustup --version
rustc --version
cargo --version

بعد تثبيت لغة Rust نقوم بتثبيت Solana عن طريق الامر التالي:

sh -c "$(curl -sSfL https://release.solana.com/v1.9.8/install)"

تحقق من عملية التثبيت الخاصة بـ Solana عن الأمر التالي:

solana --version

الآن نقوم بتنصيب مكتبة Node.js وكذلك Yarn بسبب كونهم مهمين جدا للعمل مع برامج Anchor. يمكن تثبيت Node.js من الموقع الرسمي الخاص بالمكتبة، يمكن التحقق من التثبيت عن طريق الامر التالي:

node --version
npm --version

نقوم بتثبيت Yarn عن طريق الامر التالي:

npm i -g yarn

اخيراً وليس اخراً، نقوم بتثبيت Anchor، وهو بروتوكول يسهل بناء التطبيقات على سولانا، نقوم بتثبيته عن طريق الأمر التالي:

cargo install --git GitHub - project-serum/anchor: ⚓ Solana Sealevel Framework  anchor-cli --locked

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

anchor --version
cargo install --git GitHub - project-serum/anchor: ⚓ Solana Sealevel Framework  anchor-cli --locked

تأكد من إتمام العملية عن طريق:

anchor --version

الخطوة الثانية: تنسيق المشروع

يتم تنسيق سولانا للعمل على الشبكة الرئيسية بشكل افتراضي، هذا يعني إن كل معاملة تحتوي على رسوم غاز.

عليك تكوين Solana CLI Utility للاستفادة من الـ Devnet وتهيئة المشروع بأستخدام Anchor، اعداد سولانا و Devnet للعمل معاً عن طريق الامر التالي:

solana config set --url devnet

الأن نحتاج الى تشغيل ونشر البرنامج مع المحفظة الرقمية، نقوم بكتابة الامر التالي:

solana-keygen new --force

نؤكد عنوان المحفظة:

solana address

استخدم عملات اختبار سولانا من خلال أمر airdrop,  للتحقق من رصيد الحساب نقوم بكتابة الأمر التالي:

solana balance

اخيراً نقوم بإعداد الـ Anchor عن طريق تشغيل الأمر:

anchor init solana-global-article
cd solana-global-article

الخطوة الثالثة: بدء التطوير على لغة راست

استخدم أي محرر لكتابة الكود للوصول إلى المشروع

افتح الملف وقم بإعداد Lib.rs، وهي الصفحة الرئيسية لـ Rust والملف الرئيسي لتطبيق سولانا.

بعد ذلك، قم ببناء هيكلة البيانات لتخزين المحتوى عن طريق تشغيل الأمر التالي:

#[account]pub struct Article { pub content: String,}

Then continue to create the Initialize struct by running the following command:
#[derive(Accounts)]
pub struct Initialize<'info> {
 #[account(
 init,
 payer = person_that_pays,
 space = 8 // account discriminator
 + 32 // pubkey
 + 10000 // make the message max 10k bytes long
 )]
 pub article: Account<'info, Article>,
 #[account(mut)]
 pub person_that_pays: Signer<'info>,
 pub system_program: Program<'info, System>,
}

انتقل إلى قسم #program وقم بتطوير الدالة الرئيسية من خلال التالي:

#[program]
pub mod solana_global_article {
    use super::*;
    pub fn initialize(ctx: Context<initialize>) -> ProgramResult {
        // Get the article
        let article_account = &mut ctx.accounts.article;
        // Initialize the variables (this is required)
        article_account.content = ("").to_string(); Ok(())
    }
}
</initialize>

الأن بيئة تطوير سولانا الخاصة بك جاهزة لتطوير التطبيق اللامركزي.

الخطوة الرابعة: تحديث سولانا Anchor

انتقل إلى المسار التالي “programs/mysolanaapp/src/lib.rs” وقم بتحديثه من خلال الكود التالي:

use anchor_lang::prelude::*;
declare_id!("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS");
#[program]
mod mysolanaapp {
    use super::*;
    pub fn create(ctx: Context<create>) -> ProgramResult {
        let base_account = &mut ctx.accounts.base_account;
        base_account.count = 0;
        Ok(())
    }
    pub fn increment(ctx: Context<increment>) -> ProgramResult {
        let base_account = &mut ctx.accounts.base_account;
        base_account.count += 1;
        Ok(())
    }
}
// Transaction instructions
#[derive(Accounts)]
pub struct Create<'info> {
    #[account(init, payer = user, space = 16 + 16)]
    pub base_account: Account<'info, BaseAccount>,
    #[account(mut)]
    pub user: Signer<'info>,
    pub system_program: Program <'info, System>,
}
// Transaction instructions
#[derive(Accounts)]
pub struct Increment<'info> {
    #[account(mut)]
    pub base_account: Account<'info, BaseAccount>,
}
// An account that goes inside a transaction instruction
#[account]
pub struct BaseAccount {
    pub count: u64,
</increment></create>

الخطوة الخامسة: انشاء تطبيق رياكت (React)

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

npx create-react-app app

شغل الأمر التالي لتثبيت البرمجيات المطلوبة لـ Anchor و Solana Web3:

cd app
npm install @project-serum/anchor @solana/web3.js

الخطوة السادسة: تركيب محول المحفظة

قم بإدارة محفظة سولانا الخاصة بك عن طريق تثبيت محول محفظة سولانا، قم تشغيل الأمر التالي:

npm install @solana/wallet-adapter-react \
@solana/wallet-adapter-react-ui @solana/wallet-adapter-wallets \
@solana/wallet-adapter-base

قم بإنشاء ملف جديد idl.json، في مجلد src، انسخ IDL JSON المدمج في مجلد المشروع الرئيسي.

الخطوة السابعة: اختار شبكة للمحفظة 

من المهم استضافة المحفظة على شبكة محلية قبل أن تبدأ في التفاعل مع التطبيق، انتقل إلى إعدادات المحفظة، ثم تغيير الشبكة، وحدد localhost.

بعد ذلك قم بإضافة العملات الى المحفظة، افتح التيرمنال الخاص بك وقم بكتابة الامر التالي:

solana airdrop 10

هذا الأمر سيقوم بإضافة الكمية المطلوبة من عملات سولانا لتشغيل واختبار التطبيق اللامركزي.

بمجرد استلام العملات، قم بالتبديل إلى دليل التطبيق وقم بتشغيل الأمر التالي:

npm start

الخطوة الاخيرة: نشر التطبيق اللامركزي

انسخ الأمر إلى الواجهة الأمامية لنشر التطبيق اللامركزي الخاص بك، قم بتشغيل الأمر التالي:

anchor run copy-idl

قم بتشغيل الأمر المحدد لخدمة تطبيق الواجهة الأمامية بشكل محلي:

npm run serve

لنشر التطبيق اللامركزي، قم بالتبديل إلى devnet باستخدام الأمر:

solana config set --url devnet
and update the Anchor.toml file

اخيراً، انشر التطبيق على الشبكة الرئيسية من خلال الأمر:

anchor deploy