تثبيت بيئة عمل Solana وإطار عمل Anchor لتسهيل كتابة العقود
مقدمة
عند الانتقال من بيئات EVM التقليدية إلى شبكة Solana يكتشف المطور سريعاً أن طريقة بناء العقود الذكية مختلفة جذرياً. في Solana لا نتعامل مع عقد واحد يحتفظ بكل حالته فقط، بل مع نموذج حسابات Accounts Model وبرامج Programs مكتوبة غالباً بلغة Rust.
لهذا السبب يصبح تجهيز بيئة عمل صحيحة أمراً حاسماً قبل كتابة أي منطق برمجي. وإطار Anchor هو الخيار الأكثر شيوعاً لأنه يختصر كثيراً من التعقيد، ويوفر بنية مشاريع واضحة، وأوامر اختبار ونشر، وتجريداً مريحاً للتعامل مع الحسابات والتعليمات. وإذا كنت قرأت سابقاً استكشاف البلوكتشين البديلة: لماذا يفضل المطورون Solana للسرعة العالية؟ فهذه الخطوة تمثل الانتقال العملي من الفهم النظري إلى البناء الفعلي.
ما الذي نحتاجه قبل تثبيت Anchor؟
بيئة تطوير Solana الحديثة تعتمد على عدة طبقات تعمل معاً. أنت تحتاج إلى مترجم لغة Rust، وأداة سطر الأوامر Solana CLI، ثم إطار Anchor نفسه.
- تثبيت
Rustعبرrustup. - تثبيت
Solana CLIلإدارة المحافظ، الشبكات، والنشر. - تثبيت
Anchor CLIلإنشاء المشاريع، البناء، الاختبار، والتكامل مع الواجهة الأمامية. - وجود
Node.jsلأن أدوات الجافاسكربت المحيطة بالاختبارات والعميل تعتمد عليه، وهي فكرة تشبه ما شرحناه في الانتقال إلى بيئة العمل الاحترافية: تثبيت إطار عمل Hardhat باستخدام Node.js ولكن هنا ضمن نظامSolana.
تثبيت Rust كأساس لبرامج Solana
برامج Solana تُكتب غالباً باستخدام Rust، لذلك أول خطوة هي تثبيت بيئته. هذا مهم ليس فقط للترجمة، بل أيضاً لإدارة الإصدارات والأهداف البرمجية المطلوبة أثناء البناء.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustc --version
cargo --version
بعد نجاح التثبيت، ستصبح لديك أداتا rustc وcargo. إذا كنت بحاجة إلى خلفية أقوى حول اللغة نفسها، فمن المفيد مراجعة نظرة سريعة على لغة Rust: أساسيات لبرمجة العقود الذكية على شبكة Solana قبل كتابة منطق أكثر تعقيداً.
تثبيت Solana CLI وإعداد المحفظة المحلية
الأداة التالية هي Solana CLI. من خلالها يمكنك إنشاء زوج مفاتيح محلي، اختيار الشبكة، طلب رصيد تجريبي، ونشر البرنامج. هذه الأداة تمثل العمود الفقري لأي دورة عمل احترافية على Solana.
sh -c "$(curl -sSfL https://release.solana.com/stable/install)"
solana --version
solana-keygen new
solana config set --url devnet
solana address
الأمر solana-keygen new ينشئ محفظة محلية على جهازك، وهي تقوم بدور يشبه المفاهيم التي شرحناها في التشفير والمفاتيح: كيف تعمل المحافظ الرقمية (Public & Private Keys) برمجياً؟. أما ضبط الشبكة إلى devnet فيمنحك بيئة اختبار شبيهة بفكرة Testnets في الشبكات الأخرى.
الحصول على رصيد تجريبي
لن تتمكن من النشر أو إرسال معاملات اختبارية بدون رصيد. لهذا استخدم طلب airdrop من الشبكة التجريبية.
solana airdrop 2
solana balance
هذه الخطوة تشبه منطقياً ما قمنا بتغطيته في الحصول على عملات تجريبية مجانية (Faucet) للبدء في نشر واختبار العقود الذكية، لكنها هنا مخصصة لمنظومة Solana.
تثبيت إطار Anchor ولماذا يسهّل كتابة العقود
بدون Anchor سيضطر المطور للتعامل يدوياً مع التسلسل الثنائي للحسابات، والتحقق من المالك، وحساب المساحة التخزينية، وبناء التعليمات منخفضة المستوى. أما Anchor فيوفر وحدات توصيف مثل #[account] و#[derive(Accounts)]، ويولّد لك IDL يساعد على الربط مع الواجهة الأمامية.
cargo install --git https://github.com/coral-xyz/anchor avm --locked --force
avm install latest
avm use latest
anchor --version
في بعض البيئات يفضل المطورون استخدام مدير الإصدارات AVM لأنه يجعل تبديل نسخة Anchor أكثر أماناً خصوصاً عند العمل ضمن فرق أو مشاريع قديمة.
احرص دائماً على توافق إصدارات
RustوSolana CLIوAnchor. اختلاف الإصدارات من أكثر أسباب فشل البناء والاختبارات شيوعاً، وقد ينتج عنه سلوك غير متوقع عند النشر أو التوقيع أو توليد ملفاتIDL.
إنشاء أول مشروع Anchor
بعد تثبيت الأدوات، يمكن إنشاء مشروع جديد خلال ثوانٍ. سيقوم Anchor ببناء هيكل مجلدات يحتوي على البرنامج، الاختبارات، والإعدادات.
anchor init my-solana-app
cd my-solana-app
anchor build
داخل المشروع ستجد ملف Anchor.toml، ومجلد programs، ومجلد tests. هذا التنظيم يشبه فلسفة الأطر الاحترافية في Web3 التي تفصل بين منطق العقد، سكربتات الاختبار، والتهيئة.
مثال على البرنامج الافتراضي
ينشئ Anchor برنامجاً أولياً بسيطاً يوضح بنية التعليمات والحسابات. ورغم أن الكود التالي مكتوب بلغة Rust، فإننا نضعه ضمن صندوق الشيفرة المطلوب تنسيقياً.
use anchor_lang::prelude::*;
declare_id!("YourProgramPublicKeyHere");
#[program]
pub mod my_solana_app {
use super::*;
pub fn initialize(ctx: Context<Initialize>) -> Result<()> {
msg!("Program initialized");
Ok(())
}
}
#[derive(Accounts)]
pub struct Initialize {}
الفكرة هنا أن الوحدة #[program] تحتوي التعليمات القابلة للاستدعاء، بينما يحدد Context الحسابات المطلوبة لكل عملية. هذا مختلف عن نمط Solidity الذي ربما تعرفه من الدوال (Functions) في Solidity: من يمكنه قراءة وتعديل بيانات العقد؟.
التشغيل المحلي والاختبار السريع
من أفضل مزايا Anchor أنه يسهّل تشغيل بيئة محلية واختبار البرنامج قبل النشر إلى devnet. هذا يسرّع التطوير ويقلل أخطاء الدمج المبكر.
solana-test-validator
anchor test
الأمر solana-test-validator يشغل سلسلة محلية على جهازك، بينما يقوم anchor test بالبناء، ثم النشر المحلي، ثم تنفيذ اختبارات TypeScript. هذا قريب من الفكرة العملية الموجودة في اختبار العقود الذكية محلياً: كتابة اختبارات الوحدة (Unit Tests) باستخدام Chai & Mocha لكن بأدوات خاصة بمنظومة Solana.
حتى على شبكة
Solanaذات الرسوم المنخفضة، فإن تحسين تصميم الحسابات وتقليل الكتابة غير الضرورية على الحالة يظل مهماً. كل عملية تحديث لحساب على السلسلة تحمل تكلفة حسابية وتؤثر في الأداء، لذا صمم بنية البيانات لتكون مضغوطة وواضحة منذ البداية.
أهم الملفات التي يجب فهمها داخل المشروع
Anchor.toml: يحدد الشبكة، المعرّفات، وإعدادات الاختبار.Cargo.toml: يضبط تبعياتRust.programs/: يحتوي الشيفرة المصدرية للبرنامج على السلسلة.tests/: اختبارات التكامل التي تستدعي البرنامج من العميل.target/idl: ملفاتIDLالتي تساعد على الربط مع الواجهات البرمجية.
خاتمة
تثبيت بيئة Solana مع إطار Anchor ليس مجرد إعداد تقني أولي، بل هو الأساس الذي يحدد جودة دورة التطوير كلها. عندما تكون الأدوات مثبتة بإصدارات متوافقة، والمحفظة المحلية مضبوطة، والشبكة التجريبية جاهزة، يصبح التركيز منصباً على تصميم الحسابات والمنطق البرمجي بدلاً من مطاردة أخطاء البيئة.
الخطوة التالية المنطقية بعد هذا المقال هي البدء في كتابة برنامج فعلي على Solana، ثم اختبار التعليمات، وفهم كيفية ربط الواجهة الأمامية به. وبهذا تكون قد انتقلت من مرحلة التعرف على الشبكة إلى مرحلة بناء تطبيقات DApps احترافية جاهزة للتوسع.