إذا كان أي شخص يعلّق على منشورات CreatorPad الخاصة بي فقط لإنشاء سطر تعليق خلفي، من فضلكم لا تفعلوا ذلك. لقد أصدرت Binance تحذيرًا، ولا أريد أن أكون جزءًا من أي شيء قد يعرّض حسابي للخطر. آمل أن الجميع يفهم ذلك وأن يعتني بحساباته أيضًا.
عادةً ما أقرأ قسم الحوافز مرتين، لأن المرور الأول يجعلني أعتقد أنني أفهم نموذج المكافأة بينما قد لا أفعل.
ما لفتني هنا هو كيف يربط Dusk مكافأة مُولّد الكتل بالمشاركة في التصويت. في البداية قرأت حصة مُولّد الكتل بنسبة 80% على أنها مجرد «الاقتراحـي يحصل على معظمها». كان ذلك تبسيطًا مفرطًا.
في الحقيقة، يتم تقسيم الـ80% إلى نسبة ثابتة 70% ونسبة متغيرة 10%. يعتمد الجزء المتغير على عدد الأصوات المدرجة في شهادة الكتلة. يذهب الـ10% المتبقي إلى لجنة التصويت، بينما يذهب 10% آخر إلى Dusk.
غيّر ذلك طريقة نظري إلى التصميم. ليست المسألة فقط «من ينتج الكتلة؟» بل أيضًا «ماذا يحدث إذا كان لدى المُولّد سبب لتجاهل الأصوات؟»
يبدو أن التوثيق يعالج ذلك بشكل مباشر. يمكن لمزيد من الأصوات المدرجة أن يزيد المكافأة المتغيرة للمولّد، بينما يحصل المصوّتون على مكافآت بناءً على أرصدتهم.
ما زلت أتساءل عن الحالات الطرفية، رغم ذلك. كيف يتصرف ذلك عندما يكون بعض المصوّتين دون اتصال؟ وإلى أي مدى يغيّر الـ10% المتغير الحوافز فعليًا في الواقع؟
أريد أن ألقي نظرة أقرب على جانب المعاملات بعد ذلك، خصوصًا الفرق بين Moonlight وPhoenix. #dusk $DUSK @Dusk
عدتُ مساء أمس إلى ورقة Dusk البيضاء، وأجبرتني بخشـصية قسم الإجماع على التمهّل. تستخدم Dusk "البيانات الموجزة للإقرار" مع Proof of Stake قائم على اللاتمركز وبإشراف لجان. يلزم حد أدنى من الرصيد قدره 1,000 DUSK، بينما تبلغ الحقبة الحالية 2,160 بلوكًا. يمكن لكل جولة أن تعمل حتى 50 تكرارًا، وتضم اللجان 64 رصيدًا (credits)، لذا تُوزَّن قوة التصويت بدلًا من قاعدة: شخص واحد، صوت واحد.
ما وجدته مثيرًا للاهتمام هو بنية العتبات: يلزم "Valid" بنسبة 2/3، بينما يمكن لـ "Invalid" أو "NoCandidate" أو "NoQuorum" الوصول إلى أغلبية مقدارها 1/2 + 1. بعد 16 تكرارًا فاشلًا، قد يدخل البروتوكول وضع الطوارئ، ما يثير سؤالًا حول قابلية الاستمرار (liveness) مقابل مخاطر الانقسام (fork risk).
لفت انتباهي أيضًا تصميم الحوافز: 80% تذهب إلى مُولّد الكتل، و10% إلى لجنة التصويت، و10% إلى Dusk. إن 80% الخاصة بالمُولّد هي 70% ثابتة بالإضافة إلى جزء متغير بنسبة 10% مرتبط بالأصوات المُدرجة. يمكن للأخطاء الجسيمة مثل التصويت المزدوج أن تُفعّل خصومات قاسية (hard slashing).
بعد ذلك، جعلني Moonlight وPhoenix أفهم البنية بشكل أوضح: معاملات عامة قائمة على الحسابات مقابل ملاحظات بنمط UTXO، وأشجار Merkle، ومُبطِلات (nullifiers)، وإثباتات ZK.
ما زلت أتساءل: هل يؤدي تخصيص الرصيد وفق الوزن إلى مخاطر التركّز؟ وإلى أي مدى يكون وضع الطوارئ متينًا عند تعطل/فشل المُتحققين؟ #dusk $DUSK @Dusk
ذهبتُ إلى وثائق Dusk مرةً أخرى الليلة الماضية، وخصوصًا القسم 6 حول التنفيذ، فوجدت نفسي أولي اهتمامًا أكبر لكيفية تكامل الأجزاء فيما بينها أكثر من التركيز على الادعاءات الرئيسية.
الجزء الذي لفت انتباهي أولًا كان PVM، وهو آلة افتراضية مبنية حول WebAssembly (WASM). فهمي هو أن الهدف يتمثل في توفير بيئة مضغوطة ووحداتية وخفيفة الوزن لتنفيذ العقود الذكية، حيث يساعد WASM على قابلية النقل مع الحفاظ على أن التنفيذ مُتحكم فيه. لكنني ما زلت أتساءل: إلى أي مدى تأتي القرارات الأمنية من تصميم الآلة الافتراضية، وإلى أي مدى تعتمد على العقود نفسها؟
بعد ذلك انتقلت الوثائق إلى عقود الجينيسيس (genesis). يتعامل عقد Transfer مع عمليات تحويل DUSK، ويتحقق من صحة المعاملة ويحسب تكاليف التنفيذ. أما عقد Stake فيدير DUSK المُقفل من أجل الرهان (staking)، ويتتبع الحالة ذات الصلة ويدعم عمليات السحب بعد انتهاء فترة القفل. جعلني ذلك أفكر أكثر في مقدار سلوك الشبكة الأساسي الذي يتم ترميزه مباشرةً داخل العقود.
كما يذكر القسم 6.3 عقودًا مستقبلية، بما في ذلك Zedger للأوراق المالية الخاضعة للتنظيم وRWAs، وعقد Clock للتحقق المعتمد على الوقت.
لذلك أسئلتي هي: كيف تُدار هذه العقود وكيف تُحدَّث؟ وماذا يحدث إذا أصبح أحدها عنق زجاجة أمنيًا؟ إلى أي مدى يكون هذا التحكم لا مركزيًا عمليًا؟
عدتُ الليلة إلى توثيق Dusk، وأصبح تصميم الإجماع أكثر وضوحًا بكثير عندما اتبعتُ الأرقام بدلًا من الاكتفاء بالمصطلحات.
يحتاج المُزوِّد (provisioner) إلى ما لا يقل عن 1,000 DUSK. إن الحقبة الحالية هي 2,160 كتلة، وتكون الأهلية وفقًا لصيغة النضج M = 2 × epoch − (height mod epoch). لذلك فإن عملية الإيداع (staking) ليست مؤهلة فورًا؛ بل تصبح فعّالة في بداية حقبة جديدة.
ثم ينتقل مسار SA عبر Proposal و Validation و Ratification. تتطلب Validation أغلبية فائقة بنسبة 2/3 لكي تكون Valid، بينما يمكن لـ Invalid أو NoCandidate الوصول إلى النصاب (quorum) بواقع 1/2 + 1. ويمكن أن تعمل جولة حتى 50 تكرارًا.
كما وجدتُ أن “64 committee credits” أمرٌ مثير للاهتمام. تُوزَّن الأصوات وفقًا لهذه الاعتمادات، بينما يستخدم الاستخراج الحتمي (deterministic extraction) الرهان (stake) ويقلّل وزن المُزوِّد بمقدار 1 DUSK لكل اعتماد مُعيَّن. ثم تُجمَّع توقيعات BLS.
إن مقايضات الأمان هي ما زلتُ أفكر فيه. بعد 16 تكرارًا فاشلًا تبدأ “وضع الطوارئ”، لكن تشغيل تكرارات مفتوحة بالتوازي يمكن أيضًا أن يزيد من مخاطر الانقسام (fork risk). يحلّ البروتوكول ذلك باختيار أقل تكرار.
ثم تأتي طبقة المعاملات: Moonlight قائم على الحسابات (account-based) وشفاف، بينما يستخدم Phoenix مخرجات المعاملات غير المنفقة (UTXOs) وإثباتات ZK وnullifiers من أجل الخصوصية.
أسئلتي: هل يؤدي الاختيار الموزون بالرهان إلى تركّز فعّال مع مرور الوقت؟ وإلى أي مدى تكون متانة وضع الطوارئ تحت اضطرابٍ مستمر في الشبكة؟
ذهبتُ مرةً أخرى إلى توثيق Dusk الليلة الماضية، أحاول فهم الإقرار الموجز (SA) بعيدًا عن وصف PoS.
ما لفت انتباهي هو مدى اعتماد الأمر على الاختيار الحتمي (DS). يحتاج المُقدّم إلى إيداع ما لا يقل عن 1,000 من DUSK، لكن أهلية المشاركة تتأخر بسبب M = 2 × epoch − (height mod epoch)، حيث يبلغ طول كل epoch حاليًا 2,160 بلوكًا. يقوم DS باختيار مُولّدي الكتل واللجان باستخدام درجات قائمة على SHA3 وبذرة (seed)، ما يجعل الاختيارات المستقبلية أصعب على مستوى المعايرة المسبقة.
تتم عملية الإجماع على ثلاث مراحل: اقتراح، ثم تحقق، ثم تصديق نهائي (ratification). يتطلب Valid أغلبية فائقة قدرها 2/3، بينما يتطلب Invalid أو NoCandidate أو NoQuorum أغلبية مقدارها 1/2 + 1. يمكن أن يصل عدد التكرارات إلى 50 ضمن كل جولة.
يُوزن تصويت اللجنة عبر الاعتمادات (credits)، وهي حاليًا 64، وتتيح توقيعات BLS تجميع الأصوات. وهذا يثير سؤالًا حول اللامركزية: هل يظل الاختيار المُرجَّح بالاستثمار متنوعًا عندما يتراكم نفوذ أكبر لدى المُقدّمين الكبار؟
وضع الطوارئ بعد 16 تكرارًا فاشلًا هو مقايضة أمنية: قد يُبقي الإجماع في حالة حركة، لكن التكرارات المتزامنة قد تزيد من خطر الانقسام (fork). تتطلب كتلة الطوارئ طلبات من مُقدّمين يمتلكون أغلبية إجمالي الاستثمار.
تُصنّف الفئة النهائية المتدحرجة الكتل على أنها Accepted أو Attested أو Confirmed أو Final.
أتساءل: كيف يتم اختبار هذه العتبات تحت الضغط مقابل التواطؤ، وفشل قابلية البقاء (liveness)، وتركيز اللجنة؟
قضيت الليلة الماضية في قراءة ورقة العمل البيضاء الخاصة بـ Dusk مرة أخرى لفهم إجماعها الأساسي ومعمارية المعاملات بشكل أفضل. في البداية افترضت أنها مجرد سلسلة خصوصية قياسية، لكن الإعداد ثنائي المحرك أكثر تعقيدًا مما توقعت. قاموا بتقسيم التنفيذ إلى Moonlight، وهو نموذج حسابي شفاف، وPhoenix، وهو نموذج ZK UTXO يستخدم ملاحظات شجرة ميركل وnullifiers لمنع الإنفاق المزدوج. ما شد انتباهي حقًا هو القسم 3.9 المتعلق بالحوافز. يتم توزيع مكافآت الكتل بحيث يذهب 80% إلى مُولّد الكتلة (مقسمة إلى جزء ثابت بنسبة 70% وجزء متغير بنسبة 10% يعتمد على رصيد المصوّتين)، و10% إلى لجنة التصويت، و10% مباشرةً إلى Dusk. أما بالنسبة للعقوبات، فالأعطال البسيطة تؤدي إلى إيقاع جزاءات ناعمة وتعليق، بينما تؤدي الأعطال الجسيمة مثل التصويت المزدوج إلى إيقاع جزاءات قاسية تحرق الرصيد. أثار ذلك بعض الأسئلة بالنسبة لي حول مركزية الشبكة والجانب الأمني. كيف يؤثر قطع 10% المستمر لصالح Dusk على تمركز الخزانة (treasury) على المدى الطويل؟ علاوة على ذلك، في ظروف التأخر (latency) الواقعية، هل يمنع آلية الرصيد فعليًا مُولّدي التكرارات الأعلى من السماح عمدًا للتكرارات الأقدم بالفشل حتى يفلتوا من التقاط مكافأة المُولّد؟ لم أتمكن من العثور على إجابة واضحة حول كيفية تحجيم مجموعة nullifier في Phoenix مقابل تضخم الحالة (state bloat) مع مرور الوقت أيضًا. يسرّني سماع وجهات نظر تقنية حول هذا.