Live edition loading…

PXke Algorand

Independent daily coverage of the Algorand ecosystem — verified reporting on wallets, DeFi, NFTs and infrastructure, fact-checked on-chain before it publishes.

← Latest stories

ZK Color Sort يتحقق من نتائج الألغاز اليومية على السلسلة باستخدام إثباتات المعرفة الصفرية

· · · · · · ·

ZK Color Sort يتحقق من نتائج الألغاز اليومية على السلسلة بإثباتات المعرفة الصفرية

لغز يومي مع لوحة نتائج مشفرة

يبدو ZK Color Sort وكأنه لعبة صب الألوان التي تلعبها على هاتفك أثناء انتظار القهوة: اثنا عشر أنبوبًا وعشرة ألوان، تصب حتى يحتوي كل أنبوب على لون واحد. الاختلاف هو ما تطلبه الصفحة عند الانتهاء. يقرأ النص بجوار زر «النتائج» وعداد النقلات: «اربط محفظة Algorand لفتح هذه الميزة». هذا ليس جدارًا للدفع. ربط محفظة مدعومة — حاليًا Lute أو Pera — هو بوابة الدخول إلى الهدف الفعلي للعبة: إرسال نتيجتك إلى عقد ذكي على الشبكة الرئيسية لـ Algorand، مع إثبات للمعرفة الصفرية، وهو شهادة تشفيرية تثبت صحة ادعاء دون كشف البيانات التي خلفه. الادعاء هنا هو «حللت هذا اللغز المحدد في N نقلة»، والبيانات التي تظل خاصة هي تسلسل النقلات نفسه. لا تحتاج حل اللغز إلى أي محفظة؛ بل لوحة النتائج المحمية بالإثبات هي الطبقة على السلسلة.

لغز اليوم نفسه مشتق من السلسلة. تطلب الواجهة الأمامية من مفهرس Algorand أول ترويسة كتلة بعد منتصف الليل بتوقيت UTC، ويشتق لوحة اللعبة حتميًا من بذرة تلك الترويسة، وبذلك يكون التحدي عامًا وقابلاً لإعادة الإنتاج من تاريخ السلسلة بدلاً من أن يختاره مطور. تتبع القواعد الشكل القياسي للعبة Color Sort، كما حددها بدقة في ملف README للمشروع: اثنا عشر أنبوبًا بسعة أربعة؛ عشرة ألوان يظهر كل واحد أربع مرات بالضبط؛ أنبوبان فارغان للصب فيهما؛ النقلة القانونية تنقل أطول سلسلة متتالية من لون واحد إلى أنبوب فارغ أو أنبوب يطابق لونه العلوي؛ يُحل اللغز عندما يكون كل أنبوب غير فارغ أحادي اللون تمامًا. النتيجة هي عدد النقلات، والأقل أفضل، وتُحفظ أفضل النتائج المحلية مع سجل نقلاتها الكامل في التخزين المحلي للمتصفح. لا يقبل السجل على السلسلة أبدًا نتيجة لا تتغلب على أفضل نتيجة مسجلة للاعب نفسه.

ما الذي يثبته إثبات المعرفة الصفرية فعليًا

أي لوحة صدارة على السلسلة للعبة مهارة تعاني من مشكلة مصداقية: فالعقد الذي يقبل رقمًا سيقبل أي رقم. الخادم الموثوق الذي يتحقق من صحة اللعب يعيد إدخال المركزية، ونشر الحل الفائز يكشف الاستراتيجية التي أنتجته. يحاول ZK Color Sort طريقًا ثالثًا — أثبتها، لا تعرضها.

عندما يرسل اللاعب، يشغل المتصفح دائرة Circom عبر مكتبة snarkjs، وهي مكتبة JavaScript مفتوحة المصدر للإثبات، وينتج إثبات Groth16، أحد أكثر مخططات المعرفة الصفرية استخدامًا. أول إرسال يُنزل مفتاح الإثبات الذي يبلغ حجمه حوالي 55 ميغابايت والذي توفره اللعبة كمورد ثابت؛ ومن ثم تعمل سلسلة العملية بأكملها على جانب العميل، دون خادم إثبات خلف اللعبة. اختيار هذه التقنية متعمد: يذكر ملف README لمكتبة snarkjs-algorand أن gnark، المحول البرمجي الذي يقف خلف بديل المدقق AlgoPlonk، لا يدعم WebAssembly، مما يستبعد توليد الإثبات داخل المتصفح — بينما snarkjs مكتوب بلغة TypeScript ويعمل حيثما كان اللاعب.

الدائرة مضبوطة على الملف الشخصي الدقيق لهذه اللعبة — اثنا عشر أنبوبًا، سعة أربعة، حتى 120 نقلة، عشرة ألوان، أنبوبان فارغان — وتفرض دلالات اللعبة الكاملة: لوحة بداية صالحة، نقلات قانونية وفق قواعد الصب أعلاه، انتقالات حالة صحيحة بعد كل نقلة، لوحة نهائية محلولة بالكامل، وعدد نقلات يساوي عدد النقلات الفعلية. ما هو عام وما يظل خاصًا هو التصميم بأكمله:

المفهومالأثر الواقعي
عام: لوحة البدايةيمكن لأي شخص تأكيد أي لغز تشير إليه النتيجة
عام: عدد النقلاتالرقم الذي يخزنه السجل وتُصنف به لوحة الصدارة
عام: هوية اللغز وعنوان المحفظةمربوطة في الإثبات، لذا لا يمكن إعادة استخدام إثبات صُنع للغز أو حساب آخر
خاص: تسلسل النقلات الكامليمكن للمراقبين التحقق من الادعاء دون نسخ الاستراتيجية الفائزة — وهو السبب المعتاد لموت لوحات صدارة الألغاز على السلسلة

سجل النتائج على السلسلة

الجهة المستقبلة هي عقد ذكي يُدعى PuzzleScores، مكتوب بلغة Algorand TypeScript، لغة العقود الحديثة التي تُترجم بواسطة Puya، خلفًا للغة PyTeal الأقدم. يحتفظ بنتيجة واحدة لكل زوج (لغز، محفظة) في تخزين صناديق التطبيق — حالة مفتاح-قيمة ملحقة بالعقد نفسه. المفتاح هو رمز لغز بطول 20 بايت مدمج مع عنوان المحفظة بطول 32 بايت (52 بايتًا إجمالاً)؛ والقيمة هي بايت واحد، وهو يحد النتائج المخزنة بـ 255 نقلة، وهو ما يتجاوز بكثير أي حل لهذا اللغز. إنشاء مدخل يكلف بالضبط متطلب الحد الأدنى لرصيد الصندوق، الذي يستنتجه العقد عند التشغيل (2,500 ميكروألجو كأساس بالإضافة إلى 400 عن كل بايت)، ويُعاد رصيده إذا حذف اللاعب المدخل عبر removeScore. تسمح طرق القراءة فقط للاعب بجلب نتيجته أو نتيجة أي شخص آخر.

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

تعمل على الشبكة الرئيسية — لكن من يلعب؟

العقد حقيقي، منشور، ويعمل حاليًا: تم إنشاء التطبيق 3603459425 عند الكتلة 62,209,315 في 16 يونيو 2026 بواسطة الحساب الذي يقف خلف المشروع (الذي يمتلك اسم .algo وهو tools.orange.algo)، وتم تكوين المدقق بعد ذلك بدقائق. يحتوي الآن على 94 صندوق نتائج، ويظهر السجل استدعاءات للتطبيق في الآونة الأخيرة حتى الكتلة 64,130,520 — 16 أغسطس 2026، قبل يومين من كتابة هذا المقال. تؤكد حزمة الويب أن الشبكة الافتراضية للواجهة الأمامية هي الشبكة الرئيسية، بما يتوافق مع معرف التطبيق في إعداد الشبكة بالمستودع.

لكن سجل المرسلين يروي قصة تبني أكثر تواضعًا. محفظة المطور نفسه تهيمن على سجل المعاملات ومفاتيح الصناديق؛ محفظة إرسال ثانية أُنشئت في يوم الإطلاق ومولها المطور بمبلغ 1 ALGO — حساب اختبار. محفظتان أخريان تعود تمويلهما الأول إلى حسابات غير مرتبطة أُنشئت في 2022 و2024، وهو ما يتوافق مع لاعبين خارجيين، رغم أن أياً منهما لا يحمل اسم .algo. القراءة الصادقة: هذا سجل حي لكنه صغير، ومعظم المدخلات تعود إلى اختبارات المطور نفسه، ولا يوجد دليل على قاعدة لاعبين كبيرة بعد.

المشروع نفسه هو عمل مطور واحد — حساب GitHub funk-af، الذي يذكر ملفه الشخصي أن المالك «Andrew» — وينشر الحساب نفسه أعمال عقود أخرى على Algorand، بما في ذلك مستودعات موصوفة كعقود ذكية لـ Baanx ولبروتوكول تمويل بطاقة Immersve flexi-card. يظهر مستودع اللعبة 18 commit من يونيو 2026 ولا نشاط بعد 18 يونيو، بينما تستمر الواجهة الأمامية المنشورة والعقد على السلسلة في العمل.

أين حدود نموذج الثقة

هناك ثلاث تحفظات مهمة لأي شخص يقرأ هذا السجل باعتباره أكثر من مجرد لعبة. أولاً، اشتقاق اللغز اليومي هو اتفاقية في الواجهة الأمامية وليس قاعدة في العقد: فالعقد لا يتحقق أبدًا من أن رمز اللغز المُرسل يطابق لغز اليوم المشتق من الكتلة، والدائرة تتحقق فقط من أن اللغز سليم البنية ومحلول. أي إثبات للغز سليم البنية من نفس ملف تعريف الدائرة سيُقبل؛ ولا شيء على السلسلة يربط الإرسال بالتاريخ الحالي. ثانيًا، كل من عنوان المدقق والعقد نفسه تحت سيطرة المنشئ — setVerifier و updateApplication مقيدان بمحفظة المنشئ — لذا تعتمد سلامة السجل في النهاية على عدم قيام مطور واحد بتبديل المدقق أو إعادة كتابة العقد. ثالثًا، مجموعة أدوات الإثبات غير مدققة: يحذر ملف README الخاص بـ snarkjs-algorand من أن SDK «قيد التطوير وليست مستقرة بعد» وأن «الكود في هذا المستودع لم يُدقق. استخدمه على مسئوليتك الخاصة!»

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

المصادر

Source: https://zk-colorsort.netlify.app/