في عام 2024، ظهر سولانا فجأة، وارتفعت قيمة TVL من مليار دولار أمريكي في بداية العام إلى ما يقرب من خمسة مليارات دولار أمريكي اليوم، لتصبح رابع أكبر شركة عامة سلسلة.
بالمقارنة مع Ethereum، تقدم Solana تجربة فائقة للمستخدمين بسرعات أعلى ورسوم أقل. توفر آلية الإجماع القائمة على POH ووضع تنفيذ المعاملات غير المتزامن للمطورين أداء blockchain عالي الإنتاجية وزمن وصول منخفض، مما يجعلها النظام الأساسي المفضل لمختلف التطبيقات اللامركزية.
قامت BlockSec بالتخطيط خصيصًا لسلسلة مقالات "اللعب مع Solana"، والتي تغطي المفاهيم الأساسية لـ Solana، والأدلة العملية لعرض وتحليل معاملات Solana، والبرامج التعليمية حول كتابة عقود Solana الذكية، وما إلى ذلك.
باعتبارها العدد الأول من هذه السلسلة، ستقدم هذه المقالة بعمق المفاهيم الأساسية في شبكة Solana، بما في ذلك آلية التشغيل ونموذج الحساب والمعاملات، و اكتب وضع الأساس لعقود سولانا الصحيحة والفعالة.
eBPF: حجر الزاوية في تنفيذ معاملة Solana
من أجل كتابة العقود الذكية وتنفيذها، غالبًا ما تتطلب تقنية blockchain مجموعة من لغات البرمجة وبيئة حوسبة تورينج كاملة.
يجب أن يعلم الأصدقاء الذين هم على دراية بـ Ethereum أن العقود الذكية على Ethereum تتم كتابتها عادةً باستخدام لغة Solidity عالية المستوى، ويتم تشغيل الكود الثانوي الناتج عن تجميع Solidity على في بيئة تسمى Ethereum Virtual Machine.
لم يختر سولانا تطوير بيئة افتراضية ولغة جديدة، ولكنه استفاد بشكل كامل من التقنيات الممتازة الموجودة. تم اختيار الجهاز الظاهري eBPF (عامل تصفية حزم بيركلي الممتد)، الذي تم استخدامه في الأصل لتوسيع وظائف Linux kernel، بواسطة Solana واستخدامه كبيئة التنفيذ الأساسية.
إذن، ما هي مزايا eBPF مقارنة بـ EVM؟
بالمقارنة مع EVM، الذي يدعم التنفيذ المفسر فقط، يمكن لـ eBPF تحويل الكود الثانوي مباشرة إلى جهاز يمكن للمعالج تنفيذه مباشرة في التحويل البرمجي في الوقت المناسب (JIT) ) الوضع تعليمات لتشغيل البرامج بشكل أكثر كفاءة.
يحتوي eBPF على مجموعة تعليمات فعالة وبنية تحتية ناضجة. يحتاج المطورون فقط إلى استخدام لغة Rust لكتابة العقود الذكية. يوفر إطار عمل التحويل البرمجي LLVM واجهة خلفية لـ eBPF، والتي يمكن استخدامها لتجميع هذه البرامج المكتوبة بلغة Rust مباشرة إلى كود ثانوي يمكن تشغيله على جهاز eBPF الظاهري.
نموذج حساب سولانا
1 بنية الحساب
يتم تخزين البيانات الموجودة على Solana في شكل حسابات. كما هو موضح في الشكل أدناه، يمكننا اعتبار جميع البيانات الموجودة في Solana بمثابة قاعدة بيانات ضخمة لزوج المفتاح والقيمة. مفتاح قاعدة البيانات هو عنوان الحساب. بالنسبة لحسابات "المحفظة" (أي الحسابات التي يتحكم فيها مستخدمو Solana مباشرة من خلال أزواج المفاتيح العامة والخاصة)، فإن هذا العنوان هو استخدم المفتاح العام الذي تم إنشاؤه بواسطة نظام التوقيع Ed25519؛ قاعدة البيانات هي المعلومات المحددة للحساب، بما في ذلك الرصيد والمعلومات الأخرى ذات الصلة.
يستخدم Solana بنية تسمى AccountInfo لوصف الحساب، الذي يظهر تكوينه في الشكل أدناه.
يحتوي كل حساب في Solana على أربعة حقول. وهنا نشرح لهم واحدا تلو الآخر.
يخزن حقل البيانات البيانات المتعلقة بالحساب. إذا كان الحساب عبارة عن برنامج (أي عقد ذكي)، فإنه يقوم في الواقع بتخزين كود eBPF الثانوي. بخلاف ذلك، يتم تحديد تنسيق المعلومات في البيانات بشكل عام بواسطة منشئ الحساب.
يتم استخدام الحقل القابل للتنفيذ لتحديد ما إذا كان الحساب عبارة عن برنامج. تجدر الإشارة إلى أنه على عكس الإيثريوم، يمكن تحديث البرامج في Solana.
يسجل حقل Lamports رصيد رموز Solana المميزة في هذا الحساب. لامبورتس هي في الواقع أصغر وحدة من رمز SOL (1 SOL = 1 مليار لامبورت).
حقل المالك يشير إلى مالك الحساب الحالي. في Solana، كل حساب لديه "مالك". على سبيل المثال، مالك جميع حسابات "المحفظة" هو برنامج النظام، وهو حساب خاص على شبكة Solana مسؤول عن إنشاء الحساب ووظائف أخرى. صاحب الحساب هو الشخص الوحيد الذي يمكنه تعديل بيانات الحساب وخصم رصيد لابورتس (ولكن يمكن لأي شخص إضافة لابورتس، أي القيام بمهام النقل إلى الحساب).
2. حساب Solana المحدد مسبقًا
يحتوي Solana على مجموعة من البرامج قيد التشغيل المحددة مسبقًا والتي تسمى البرامج الأصلية، والتي يتم نشرها على عناوين ثابتة. ومع ترقية شبكة Solana، قد يتم أيضًا تحديث هذه البرامج المحددة مسبقًا. يمكننا أن نفهم هذه البرامج على أنها وظائف API ومكتبة توفر وظائف محددة ضمن شبكة Solana.
في البرامج الأصلية، البرنامج الذي غالبًا ما يحتاج المطورون إلى التفاعل معه هو برنامج النظام. يزود برنامج النظام المطورين ببعض التعليمات (Instructions)، ويمكننا فهم كل تعليمات كطريقة مستقلة. على سبيل المثال، يمكن للمطورين استخدام أمر CreateAccount لإنشاء حساب جديد، أو استخدام أمر النقل لنقل Lamports إلى حسابات أخرى.
من البرامج المحلية الشائعة الأخرى برنامج BPF Loader. وهو مالك جميع حسابات البرامج الأخرى وهو مسؤول عن نشر برامج محددة وتحديثها وتنفيذها. عندما يحتاج حساب "المحفظة" إلى تحديث برنامج تم نشره، يتم ذلك في الواقع عن طريق تكليف برنامج BPF Loader، ففي النهاية، يمتلك مالك البرنامج فقط الإذن المباشر لتعديل البيانات.
بالإضافة إلى البرامج الأصلية، توفر Solana أيضًا مجموعة من الحسابات تسمى Sysvar. أنها توفر برامج على Solana بالمعلومات والمتغيرات العالمية المتعلقة بحالة شبكة Solana الحالية، مثل الساعة الحالية، وأحدث كتلة تجزئة، وما إلى ذلك.
3. إيجار الحساب
في سلسلة Solana، يحتاج كل حساب إلى الاحتفاظ بعدد معين من اللامبورتات كحد أدنى للمبلغ، وهو ما يسمى الإيجار. وخلافا لمفهوم الإيجار في الحياة الحقيقية، فإن الإيجار في سولانا قابل للاسترداد. من أجل التأكد من توفر بيانات الحساب على السلسلة، يحتاج الحساب إلى الاحتفاظ بعدد مماثل من لامبورتس. يرتبط مبلغ الإيجار بحجم مساحة التخزين على السلسلة الخاصة بالحساب.
أي معاملة تحاول خفض رصيد الحساب إلى ما دون مبلغ الإيجار ستفشل ما لم تقلل المعاملة مباشرة رصيد الحساب إلى الصفر. تشير هذه العملية إلى استرداد إيجار الحساب، وفي نهاية تنفيذ المعاملة، سيقوم Solana بإفراغ مساحة تخزين الحساب المقابل من خلال جمع البيانات المهملة.
-? عرض حساب Solana في متصفحك
من أجل توجيه الجميع إلى فهم أفضل للمفاهيم ذات الصلة، قمنا بإنشاء حساب برنامج باستخدام مشروع "Hello World" المقدم من Solana، والذي يمكن استخدامه من خلال Solana استخدم متصفح blockchain Solscan لعرض المعلومات ذات الصلةبالحسابات التالية؟.
CJWhxB4qEWBv9eGYUkTN881bNDMDkLbzH1FmdwqLLhoe
كما هو موضح في الصورة أعلاه، يمكننا أولاً أن نرى أنه تم وضع علامة "برنامج" على الحساب بواسطة متصفح Solana. عندما تم إنشاء الحساب، تم خصم جزء من Lamports من رصيد المرسل كإيجار للحساب، حتى نتمكن من رؤية أن حقل رصيد SOL الخاص به ليس فارغًا.
ثانيًا، نظرًا لأننا نقوم بإنشاء برنامج، فإن الحقل القابل للتنفيذ الخاص به هو نعم. قد يكون هناك شيء يصعب فهمه هنا، وهو أن القراء قد يجدون أن حقل البيانات يخزن عنوانًا بدلاً من برنامج eBPF. لقد ذكرنا سابقًا أن Solana يسمح بالمحدثين، وهو يفعل ذلك بالفعل من خلال وضع "الوكيل". نظرًا لأن Solana لا يسمح بالتعديل المباشر لحساب البرنامج، فإنه يقوم بإنشاء حساب بيانات لتخزين برنامج eBPF، ويقوم فقط بتخزين عنوان حساب البيانات في حقل البيانات الخاص بحساب البرنامج. كلما أردت تحديث البرنامج، ما عليك سوى تعديل حقل البيانات في حساب البيانات. نستخدم Solscan لعرض الحساب في حقل البيانات القابلة للتنفيذ ونجد أنه تم وضع علامة عليه كـ "حساب بيانات البرنامج القابل للتنفيذ"، ويقوم حقل البيانات الخاص به بتخزين البرنامج الفعلي:
بالعودة إلى الصورة السابقة يمكننا العثور على المالك في مزيد من المعلومات بالنسبة لمحمل BPF، يتوافق هذا مع ما وصفناه في القسم السابق.
يوجد أيضًا حقل يسمى "سلطة الترقية" في النظرة العامة ماذا يعني ذلك؟
كما ذكرنا سابقاً فإن حساب "المحفظة" يقوم بتحديث البرنامج عن طريق إسناد BPF Loader، وقبل التحديث يحتاج BPF Loader إلى التحقق من ذلك قام المدير بتحديث الأذونات. نظرًا لأن حقل المالك الخاص بحساب البرنامج هو بالفعل أداة تحميل BPF، فلا توجد مساحة لتخزين هذه المعلومات، لذلك اختار Solana تخزين هذه المعلومات في حقل البيانات الخاص بحساب البيانات البرنامج، وهو "سلطة الترقية" هنا. يوضح الشكل أدناه العلاقة بين حساب البرنامج وحساب البيانات. يمكنك أن ترى أن حقل البيانات الخاص بحساب البيانات يتكون من جزأين من المعلومات، عنوان المحفظة ورمز eBPF.
معاملات وتعليمات Solana
في Solana، يقوم المستخدمون أيضًا بتنفيذ البرامج عن طريق إصدار المعاملات (Transactions). ما يميز هذا الأمر هو أن Solana يمكنه تنفيذ هذه المعاملات بالتوازي، وهو أيضًا سبب مهم يجعلها توفر سرعات معاملات فائقة السرعة. بعد ذلك، دعونا نلقي نظرة على كيفية تصميم معاملات Solana.
تتكون معاملة Solana من توقيع ونص الرسالة. يمكن أن تحتوي المعاملة على توقيعات متعددة. يتكون نص رسالة المعاملة من أربعة أجزاء، كما هو موضح في الشكل أدناه.
تحدد معلومات الرأس (الرأس) ومصفوفة عناوين الحساب (المصفوفة المدمجة لعناوين الحسابات) للرسالة جميع الحسابات المشاركة في المعاملة والحساب في خصائص المعاملة في: بما في ذلك ما إذا كان الحساب يوفر التوقيع وما إذا كان سيتم كتابته أثناء التنفيذ. باستخدام هذه المعلومات، يستطيع Solana التحقق من التوقيعات المقدمة من الحسابات المقابلة وتنفيذ المعاملات بالتوازي التي لا تمس نفس مجموعة الحسابات.
أحدث تجزئة الكتلة (أحدث Blockhash) هي الطابع الزمني للمعاملة. ستضمن شبكة Solana أن المعاملات تأتي من آخر 150 كتلة، وإلا فسيتم اعتبار المعاملة منتهية الصلاحية ولم يتم تنفيذها.
تعد المصفوفة المدمجة من التعليمات (المصفوفة المدمجة من التعليمات) الجزء الأكثر أهمية في المعاملة وتحتوي على تعليمات واحدة أو أكثر. التعليمات هي في الواقع استدعاء إلى روتين يوفره البرنامج. تتكون التعليمات من ثلاثة حقول كما هو موضح في الشكل التالي:
p>
يحدد الحقل الأول، فهرس معرف البرنامج، متلقي التعليمات، أي البرنامج الموجود على السلسلة الذي يحتاج إلى معالجة التعليمات. ولا يقوم بتخزين عنوان 32 بايت مباشرةً، ولكنه يضع العنوان في صفيف عنوان الحساب في نص الرسالة. يستخدم هذا الحقل حرفًا منخفضًا بالبايت للإشارة إلى موضعه في المصفوفة، مما يحقق نوعًا من تعدد الإرسال المكاني.
على غرار الحقل الأول، فإن الحقل الثاني عبارة عن مجموعة مضغوطة من فهارس عناوين الحسابات، والتي تحدد معالجة جميع الحسابات المشاركة في هذه التعليمات.
الحقل الأخير هو مصفوفة بايت، وهي معلومات إضافية يحتاجها البرنامج لمعالجة التعليمات، ويمكن فهمها على أنها معلمة للوظيفة.
تجدر الإشارة إلى أن Solana سيقوم بمعالجة جميع التعليمات في المعاملة بشكل تسلسلي والتأكد من أن تنفيذ المعاملة ذري. وهذا يعني أن جميع التعليمات في المعاملة إما تفشل أو يتم تنفيذها جميعًا بنجاح، ولن يكون هناك موقف يتم فيه تنفيذ بعض التعليمات بنجاح وفشل بعضها الآخر.
-? عرض معاملات Solana في متصفحك
نستخدم متصفح Solana آخر لعرض معاملات حساب البرنامج الذي تم إنشاؤه مسبقًا؟. يمكنك رؤية توقيع معاملة Solana وتجزئة الكتلة الأخيرة وغيرها من المعلومات في النظرة العامة:
3uKQ85Lpsnwb5D6CgUntoMyJX3tSaeGb4pjUoMaMyNVqQNPp5PRG1kJEEEk3YNdWLYEMZGmoJ5Rowgon8hZzwL9D
يسرد إدخال الحساب جميع الحسابات المشاركة في المعاملة الحالية وخصائص الحسابات ذات الصلة في المعاملة. يمكننا أن نرى أنه بالإضافة إلى المرسل وحساب البرنامج والعناوين الأخرى، يتم أيضًا تضمين حسابين Native Programs وSysvar.
نظرًا لأن المعاملة عبارة عن معاملة إنشاء برنامج بسيطة، فهي تحتوي فقط على تعليمتين. متلقي التعليمة الأولى هو برنامج النظام، وهو المسؤول عن إنشاء حساب البرنامج؛ والتعليمة الثانية هي المستلم هو BPF Loader، وهو المسؤول عن كتابة كود eBPF الفعلي المنشور في حساب البيانات، وكتابة عنوانه في حقل البيانات الخاص بحساب البرنامج.
الملخص
يتم تطوير العقود الذكية في Solana باستخدام لغة Rust وتشغيلها على جهاز eBPF الظاهري. وهو يتبع نموذج حساب، وتحتاج الحسابات الموجودة في السلسلة إلى الحفاظ على الإيجار لضمان توفر البيانات. تتكون المعاملات من تعليمات واحدة أو أكثر تحدد بوضوح جميع الحسابات التي تعتمد عليها، مما يسمح بمعالجة المعاملات بالتوازي، وتحسين الإنتاجية وتقليل زمن الاستجابة للاستجابة. تعمل هذه الخصائص معًا على تعزيز التطور السريع لـ Solana، مما يجعلها واحدة من منصات blockchain الأكثر شعبية.