تخطي إلى المحتوى الرئيسي

أشجار فيركل

أشجار فيركل (وهي مزيج من كلمتي "Vector commitment" و"Merkle Trees") هي بنية بيانات يمكن استخدامها لترقية عقد إيثيريوم بحيث يمكنها التوقف عن تخزين كميات كبيرة من بيانات الحالة دون فقدان القدرة على التحقق من صحة الكتل.

انعدام الحالة

تعد أشجار فيركل خطوة حاسمة على طريق عملاء إيثيريوم عديمي الحالة. العملاء عديمو الحالة هم أولئك الذين لا يضطرون إلى تخزين قاعدة بيانات الحالة بأكملها من أجل التحقق من صحة الكتل الواردة. بدلاً من استخدام نسختهم المحلية الخاصة من حالة إيثيريوم للتحقق من الكتل، يستخدم العملاء عديمو الحالة "شاهدًا" لبيانات الحالة التي تصل مع الكتلة. الشاهد هو مجموعة من الأجزاء الفردية من بيانات الحالة المطلوبة لتنفيذ مجموعة معينة من المعاملات، وإثبات تشفيري على أن الشاهد هو حقًا جزء من البيانات الكاملة. يتم استخدام الشاهد بدلاً من قاعدة بيانات الحالة. لكي ينجح هذا، يجب أن تكون الشواهد صغيرة جدًا، بحيث يمكن بثها بأمان عبر الشبكة في الوقت المناسب للمُدَقِّقين لمعالجتها ضمن خانة مدتها 12 ثانية. بنية بيانات الحالة الحالية غير مناسبة لأن الشواهد كبيرة جدًا. تحل أشجار فيركل هذه المشكلة من خلال تمكين الشواهد الصغيرة، مما يزيل أحد العوائق الرئيسية أمام العملاء عديمي الحالة.

يستخدم عملاء إيثيريوم حاليًا بنية بيانات تُعرف باسم شجرة باتريشيا ميركل (Patricia Merkle Trie) لتخزين بيانات الحالة الخاصة بها. يتم تخزين المعلومات حول الحسابات الفردية كأوراق على الشجرة ويتم تجزئة أزواج الأوراق بشكل متكرر حتى تتبقى تجزئة واحدة فقط. تُعرف هذه التجزئة النهائية باسم "الجذر". للتحقق من صحة الكتل، يقوم عملاء إيثيريوم بتنفيذ جميع المعاملات في الكتلة وتحديث شجرة الحالة المحلية الخاصة بهم. تعتبر الكتلة صالحة إذا كان جذر الشجرة المحلية مطابقًا للجذر الذي قدمه مقترح الكتلة، لأن أي اختلافات في الحساب الذي يقوم به مقترح الكتلة وعقدة التحقق ستؤدي إلى اختلاف تجزئة الجذر تمامًا. تكمن المشكلة في هذا في أن التحقق من سلسلة الكتل يتطلب من كل عميل تخزين شجرة الحالة بأكملها للكتلة الرأسية والعديد من الكتل التاريخية (الافتراضي في Geth هو الاحتفاظ ببيانات الحالة لـ 128 كتلة خلف الرأس). يتطلب هذا من العملاء الوصول إلى مساحة كبيرة على القرص، وهو ما يمثل عائقًا أمام تشغيل العقد الكاملة على أجهزة رخيصة ومنخفضة الطاقة. يتمثل أحد الحلول لذلك في تحديث شجرة الحالة إلى بنية أكثر كفاءة (شجرة فيركل) والتي يمكن تلخيصها باستخدام "شاهد" صغير للبيانات يمكن مشاركته بدلاً من بيانات الحالة الكاملة. تعد إعادة تنسيق بيانات الحالة إلى شجرة فيركل نقطة انطلاق للانتقال إلى العملاء عديمي الحالة.

ما هو الشاهد ولماذا نحتاج إليه؟

يعني التحقق من صحة الكتلة إعادة تنفيذ المعاملات الواردة في الكتلة، وتطبيق التغييرات على شجرة حالة إيثيريوم، وحساب تجزئة الجذر الجديدة. الكتلة التي تم التحقق منها هي تلك التي تكون تجزئة جذر الحالة المحسوبة لها مطابقة لتلك المقدمة مع الكتلة (لأن هذا يعني أن مقترح الكتلة قد قام بالفعل بالحسابات التي يدعي القيام بها). في عملاء إيثيريوم اليوم، يتطلب تحديث الحالة الوصول إلى شجرة الحالة بأكملها، وهي بنية بيانات كبيرة يجب تخزينها محليًا. يحتوي الشاهد فقط على أجزاء من بيانات الحالة المطلوبة لتنفيذ المعاملات في الكتلة. يمكن للمُدَقِّق بعد ذلك استخدام هذه الأجزاء فقط للتحقق من أن مقترح الكتلة قد نفذ معاملات الكتلة وقام بتحديث الحالة بشكل صحيح. ومع ذلك، هذا يعني أن الشاهد يحتاج إلى النقل بين النظراء على شبكة إيثيريوم بسرعة كافية ليتم استلامه ومعالجته بواسطة كل عقدة بأمان ضمن خانة مدتها 12 ثانية. إذا كان الشاهد كبيرًا جدًا، فقد يستغرق الأمر وقتًا طويلاً لبعض العقد لتنزيله ومواكبة السلسلة. هذه قوة مركزية لأنها تعني أن العقد ذات اتصالات الإنترنت السريعة فقط هي التي يمكنها المشاركة في التحقق من صحة الكتل. مع أشجار فيركل، ليست هناك حاجة لتخزين الحالة على محرك الأقراص الثابتة لديك؛ كل شيء تحتاجه للتحقق من صحة الكتلة موجود داخل الكتلة نفسها. لسوء الحظ، فإن الشواهد التي يمكن إنتاجها من أشجار ميركل كبيرة جدًا بحيث لا يمكنها دعم العملاء عديمي الحالة.

لماذا تتيح أشجار فيركل شواهد أصغر؟

تجعل بنية شجرة ميركل أحجام الشواهد كبيرة جدًا - أكبر من أن يتم بثها بأمان بين النظراء ضمن خانة مدتها 12 ثانية. وذلك لأن الشاهد عبارة عن مسار يربط البيانات، المحفوظة في الأوراق، بتجزئة الجذر. للتحقق من البيانات، من الضروري ألا يكون لديك فقط جميع التجزئات الوسيطة التي تربط كل ورقة بالجذر، بل وأيضًا جميع العقد "الشقيقة". كل عقدة في الإثبات لها شقيق يتم تجزئته معها لإنشاء التجزئة التالية في الشجرة. هذا يمثل الكثير من البيانات. تقلل أشجار فيركل من حجم الشاهد عن طريق تقصير المسافة بين أوراق الشجرة وجذرها، وكذلك القضاء على الحاجة إلى توفير عقد شقيقة للتحقق من تجزئة الجذر. سيتم اكتساب المزيد من كفاءة المساحة باستخدام مخطط التزام متعدد الحدود قوي بدلاً من التزام المتجه بأسلوب التجزئة. يسمح الالتزام متعدد الحدود بأن يكون للشاهد حجم ثابت بغض النظر عن عدد الأوراق التي يثبتها.

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

يختلف حجم الشاهد اعتمادًا على عدد الأوراق التي يتضمنها. بافتراض أن الشاهد يغطي 1000 ورقة، فإن الشاهد لشجرة ميركل سيكون حوالي 3.5MB (بافتراض وجود 7 مستويات للشجرة). سيكون الشاهد لنفس البيانات في شجرة فيركل (بافتراض وجود 4 مستويات للشجرة) حوالي 150 kB - أصغر بحوالي 23x. سيسمح هذا الانخفاض في حجم الشاهد لشواهد العملاء عديمي الحالة بأن تكون صغيرة بشكل مقبول. تتراوح الشواهد متعددة الحدود بين 0.128 - 1 kB اعتمادًا على الالتزام متعدد الحدود المحدد المستخدم.

ما هي بنية شجرة فيركل؟

أشجار فيركل هي أزواج (key,value) حيث تكون المفاتيح عبارة عن عناصر بحجم 32-byte تتكون من جذع بحجم 31-byte و_لاحقة_ بحجم بايت واحد. يتم تنظيم هذه المفاتيح في عقد امتداد وعقد داخلية. تمثل عقد الامتداد جذعًا واحدًا لـ 256 طفلاً بلاحقات مختلفة. تحتوي العقد الداخلية أيضًا على 256 طفلاً، ولكن يمكن أن تكون عقد امتداد أخرى. يتمثل الاختلاف الرئيسي بين بنية شجرة فيركل وشجرة ميركل في أن شجرة فيركل أكثر تسطحًا بكثير، مما يعني وجود عدد أقل من العقد الوسيطة التي تربط الورقة بالجذر، وبالتالي تتطلب بيانات أقل لإنشاء إثبات.

Diagram of a Verkle tree data structure

اقرأ المزيد عن بنية أشجار فيركل (opens in a new tab)

التقدم الحالي

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

شاهد غيوم باليه (Guillaume Ballet) يشرح شبكة اختبار فيركل كوندريو (Condrieu) (opens in a new tab) (لاحظ أن شبكة اختبار كوندريو كانت تعتمد على إثبات العمل (PoW) وقد تم استبدالها الآن بشبكة اختبار Verkle Gen Devnet 6).

قراءة إضافية