كنت أحاول اليوم نشر عقد ERC-20 بسيط على شبكة اختبار DuskEVM. لا شيء معقد—مجرد عقد توكن قياسي تم تجميعه باستخدام Solidity. تم تنفيذ عملية النشر بنجاح، وتم تأكيد المعاملة، وظهرت عنوان العقد في المستكشف.
افترضت أنه أصبح جاهزًا للعمل. كان ذلك واضحًا.
وهذا كان أول اختلاف.
النشر ≠ قابلية الاستخدام. كان العقد موجودًا، لكن عندما حاولت التفاعل معه عبر وحدة الخصوصية الخاصة بـ Hedger، لم يعمل شيء. لم يتم تطبيق طبقة التشفير المتماثل تلقائيًا. اتضح أن سير عمل EVM السري ليس سحريًا—بل يتطلب تكاملاً صريحًا. يستخدم Hedger التشفير المتماثل وإثباتات عدم الإطلاع لدعم خصوصية قابلة للمراجعة لتطبيقات مالية منظمة، لكن هذا البنية التحتية لا تُغلَّف تلقائيًا حول كل عقد افتراضيًا.
ما أعود إليه باستمرار هو الفجوة بين "متوافق مع EVM" و"قابل للاستخدام فعلاً للأصول المعرّضة للرقابة". يتيح DuskEVM للشركاء والمؤسسات مسارًا مألوفًا باستخدام Solidity، لكن الألفة لا تعني أن ميزات الخصوصية قابلة للتوصيل والتشغيل فورًا. يحتاج المطورون إلى فهم أين يجب تطبيق ميزات السرية، وكيفية هيكلة الإفصاح الانتقائي، وما تبدو عليه حدود الامتثال في الواقع.
وهنا تكمن الاحتكاكات الحقيقية. ليست في السلسلة نفسها—بل في سير العمل بين العقد وطبقة الخصوصية.
ماذا يحدث عندما يحضر مطورو المؤسسات ويتوقعون سلوكًا قياسيًا لـ EVM ثم يصطدمون بهذه الفجوة مباشرة؟
كنت أتصفّح صباح اليوم مستكشف Dusk block explorer عندما لاحظت شيئًا غريبًا. كانت نهائية المعاملة تدور حول 5-6 ثوانٍ، وهذا أمر طبيعي في DuskDS. لكن تحويل الاختبار الخاص بي استغرق قرابة 45 ثانية حتى يستقر.
أرجعت الأمر إلى الـ RPC. افترضت أنها مشكلة في عقدة ما أو ازدحام في الشبكة.
كان الأمر سهلًا أكثر من اللازم.
اتضح أن “التأكيد” لا يساوي “النهائية”. تم تأكيد المعاملة. وتم التحقق من برهان ZK. لكن DuskDS يعمل بنموذج تسوية حتمي مع أزمنة كتل مدتها ثانية واحدة. فما الذي فاتني؟ لقد واجهت المعاملة تشغيلًا باردًا على جانب المُبرهن—فأول عملية نقل سرّية بعد فترة خمول تستغرق وقتًا أطول لأن خط إنتاج برهان ZK يحتاج إلى الإقلاع.
ما الذي لا يتحدث عنه أحد؟ فترات الانتظار (Queue intervals). الشبكة لديها حاليًا 47 عقدة. وهذا ليس كثيرًا بالنسبة للطبقة الأولى (Layer 1). إذا قدمت عدة مؤسسات فحوص الامتثال في الوقت نفسه—مثلًا أثناء إصدار مؤكد بقيمة NPEX تزيد عن 200 مليون يورو—فستتراكم هذه الطوابير بسرعة.
البنية التحتية مصممة للأصول المنظمة مع الإفصاح الانتقائي. لكنني أعود دائمًا إلى هذا: 47 عقدة، وكمية عرض متداول 500 مليون، وجدول انبعاثات مدته 36 عامًا. اقتصاديات المُتحقق/المُدقق مصممة لتكون طويلة الأمد. لكن الاستخدام المستمر من أحجام مؤسسية حقيقية؟ هذا يختلف عن حركة testnet.
ماذا يحدث عندما تتداول الـ 200 مليون يورو فعليًا ويتم “ضرب” جميع العقد الـ 47 في آن واحد؟
لاحظت شيئًا غير معتاد في لوحة انتظار Dusk Trade هذا الصباح. ظهرت بعض الأصول على أنها "مسجَّلة" لكن لم تكن مرئية للتداول. كانت فحوصات الامتثال قد اجتازت، واتصالات المحفظة عملت—لكن الأصول فقط ظلت هناك.
افترضت أنها مشكلة في ذاكرة التخزين المؤقت للواجهة (UI). ربما لم يتم تحديث الواجهة الأمامية. بدا ذلك منطقيًا.
لكن ذلك كان سهلًا أكثر من اللازم.
اتضح أن التسجيل لا يعني الإتاحة. كانت الأصول مُرمَّزة—نسخًا مُغلَّفة من أدوات خارج السلسلة (off-chain)، ما زالت تعيش في قواعد بيانات تقليدية مع دورات تسوية قديمة. كانت "على السلسلة" بالاسم فقط. لم تكن عنق الزجاجة هو عقد الرمز؛ بل كان سير العمل الكامل للسوق: قواعد الأهلية، ومتطلبات الإفصاح، وتنسيق الدفع وتسوية الأصول.
تقع Dusk Trade فوق البروتوكول الأساسي، محوّلة بدائله التحتية إلى مسارات عمل مخصّصة للمستخدمين. لكن الإصدار الأصلي (native issuance)—حيث تولد الأصول على السلسلة مع منطق الامتثال والتسوية المدمج على مستوى البروتوكول—شيء مختلف تمامًا. يتطلب ذلك التعامل مع قوانين الأوراق المالية، وتضمين امتثال MiFID II وMiCA، والتكامل مع منصات خاضعة للتنظيم.
ما لا أستطيع حسمه هو هذا: NPEX يخطط لإحضار أكثر من €300M من الأصول على السلسلة عبر Dusk. هذه أطروحة RWA محددة وواضحة. لكن إذا كان معظم ذلك هو مجرد ترميز بدلًا من إصدار أصلي، فهل نحن حقًا نحرّك الإبرة؟ أم أننا فقط نضع "جلدًا" رقميًا على نظام كان بالفعل معطوبًا؟
الاستخدام المستمر سيكشف الحقيقة. 👍
ماذا يحدث عندما تحتاج تلك الـ300 مليون يورو فعليًا إلى التسوية؟
جرّبت أداة Dusk التي تم إصدارها كمصدر مفتوح اليوم، وكانت إحدى النتائج على غير المتوقع.
الغدة النخامية، مصممة للقبض عندما تتوقف الوثائق والمواصفات والشفرة عن التوافق. وجّهها إلى مستودع، فتهندس الفهارس للمواصفات وسجلات القرارات، وتُعلِم بالفروق التي تتناقض مع شيء تم قبوله مسبقًا. شغّلتها على اختلاف اختبار تبيّن أنه يخرق مواصفة موجودة بوضوح.
لم تفشل في الفحص. ظننت أن هذا خلل.
لم يكن كذلك. الأداة تبحث عن تعليق يقدّم مبررًا بجوار التغيير، WHY أو HACK، من هذا النوع من العلامات. إذا كان شخص ما قد وثّق الانحراف مسبقًا باعتباره متعمدًا، فإنه يسلك مسارًا مختلفًا عن الانجراف العرضي البسيط.
وهذا هو الفرق الحقيقي. التناقض والانتهاك ليسا الشيء نفسه هنا. المواصفة تقول شيئًا، والشفرة تقول شيئًا آخر، ومع ذلك يتم تسجيله بدل أن يفشل إذا كان هناك شخص قد شرح الفجوة بالفعل.
تُكتب المواصفة ويُفهرسها النظام، وتَنحرف الشفرة، ويجري الاختلاف خلال فحص check-doc-drift، ثم يتم اكتشاف التناقض. بعد ذلك يبحث الأداة في الأسطر القريبة عن تلك العلامة؛ الانحرافات المتعمدة تذهب في طريق، وغير المبررة تفشل عملية البناء.
لكن لا أحد يتحقق إن كانت تلك العلامة ما زالت تعني شيئًا. لا شيء يمنع شخصًا من كتابة WHY فقط لإسكات التنبيه، ولا شيء يتحقق إذا كان السبب الأصلي وراء علامة قديمة لا يزال قائمًا.
ما الذي يحدث لهذا العرف عبر مئات طلبات السحب PR في الأسبوع، بمجرد أن يقف بين تراجع regression واستمرار هادئ؟ 👍
شاهدت نفس المعادلة تُراجَع مرتين اليوم، وكدت أتخطّى فهم السبب.
قرأت تقريرًا أمنيًا عن Dusk، وصيغـة رسوم: حدّ الغاز × سعر الغاز = الرسوم القصوى. تُفرض هذه مرتين: مرة عند دخول المعاملة إلى الـ mempool، ومرة داخل تنفيذ الـ VM.
في القراءة الأولى، ظننت أن ذلك تكرار. أحزمة وأربطة—لا شيء يستدعي التعمّق.
لم أَصمد أمام الفقرة التالية. فرض الرسوم داخل الـ mempool وحده لم يكن كافيًا. المُنشئ الخبيث (المقترح) ليس مُلزَمًا بأن يدرج فقط النسخة الصادقة داخل الـ mempool من حقول المعاملة.
هنا الفجوة الفعلية. القيمة التي ثُبّتت أو وُقّعت في جزء من المعاملة لا تُلزم كل الطبقات التي تستهلكها لاحقًا. يمكن لشخص أن يلتزم برسوم قصوى شرعية سلفًا، ثم يزوّد رسومًا مختلفة للتنفيذ، ما لم يرفض التنفيذ بشكل مستقل الوثوق بأن الفحص السابق قد حدث.
وقّع وأثبت الرسوم القصوى، افحصها في الـ mempool، وليبنِ المُقترح الكتلة دون أي التزام بالحفاظ على ذلك. يقوم الـ VM بتنفيذ منطق الاسترداد تجاه ما وصل فعليًا.
تعود الفكرة للدوران حول هذا: معظم الثقة تعتمد على بقاء المُقترح صادقًا بين نقاط التفتيش، وهذه هي بالضبط الافتراض الذي وُجدت من أجله فحوص التحقق الثانية لأنها لا يمكن الاعتماد عليها.
لا أعرف كم حقلاً آخر في خط الأنابيب هذا يتلقى طبقة واحدة فقط من هذا النوع.
ماذا يحدث لهذا الفحص في ظل ازدحام حقيقي؟ وماذا عن المُقترحين تحت ضغط البناء بسرعة؟ 👍 #dusk $DUSK @Dusk
جاءت أول تحذير من سطر تحت مخطط دورة حياة، سهل التجاوز.
ذكر شرح مجتمعي لـ DuskEVM بشكل مباشر: لا توجد نافذة عطل مدتها 7 أيام، وتستغرق عملية إنهاء السحب حوالي 15 دقيقة، كما أن معالج ما قبل التحقق لـ MIPS يلغي تأخر إثبات الاحتيال. رقم نظيف، فقررت أن أخطط للسحب وفقًا لذلك.
الافتراض: ستؤكد الوثائق الرسمية هذه الأرقام.
لكن لم أجد ذلك. توضح وثائق Dusk نفسها دورة حياة DuskEVM على أربع خطوات: معاملة إلى الـ sequencer، تُدرج ضمن كتلة على L2، ينشر الـ batcher إلى DuskDS، ثم تربط التزامات الحالة وأدلة العيوب هذه الحالة بالتسوية. تُذكر أدلة العيوب صراحةً أيضًا. لا يوجد في أي مكان ذكر لـ 15 دقيقة. بدلًا من ذلك، هناك سطر يخبرك ألا تستنتج صفة النهائية من الزمن المنقضي؛ بل راجع حالة البروتوكول أو حالة المحفظة.
وهذا هو الفارق الحقيقي. الإدراج سريع، والوثائق تقول ذلك بنفسها. أمّا التسوية فهي منفصلة، ومشروطة بشيء لم يضع أحد له ساعة.
لذا لم تختفِ خطوة إثبات العيب؛ بل إنها ليست موثقة بالطريقة نفسها التي يعمل بها نظام التحدي غير المُقيد في Optimism، حيث يمكن لأي شخص تشغيل المُثبت ومشاهدة حدوث الاعتراض.
لا يمكنني الجزم إن كانت هذه العملية مضغوطة ومُسوّاة بشكل خاص، أو أنها ببساطة غير متاحة للعامة بعد.
ممتنّ لأنني تحققت قبل توقيت سحب اعتمادًا على رقم لشخص آخر.
ماذا يحدث لهذا الرقم البالغ 15 دقيقة في المرة الأولى التي يحتاج فيها إثبات العيب إلى الاعتراض خلال اندفاع التسوية؟ 👍
أغلقت اليوم مركزًا رافعيًا على TermMax عبر لوحة التحكم. نقرة واحدة، توقيع، تم.
اعتقدت أن هذا الرقم هو ما يعنيه الإغلاق فحسب. تم بيع الضمان، وتم تسوية الدين، ثم تم إرجاع الفارق.
اتضح أن هذه طريقة واحدة محددة للإغلاق، وليست الطريقة الوحيدة.
يحتوي مدونة TermMax الخاصة بها على دليل منفصل للإغلاق يدويًا: اشترِ مرةً أخرى الـ FT الذي كنت قد بعته لفتح المركز، واستخدمه لإلغاء الدين مباشرة، ويعود كامل ضمانك دون أن يمسّه شيء. لا يوجد بيع قسري عند الإغلاق.
مسار لوحة التحكم يقوم ببيع ضمانك فورًا، في أي سعر يعطيه السوق. أما الإغلاق يدويًا فيتجاوز ذلك—أنت من يقرر متى وكيف تبيع بعد.
في مثالهم العملي، فُتِح المركز بمعدل اقتراض حوالي 7%، وتم إغلاقه عندما كانت الإقراضات قريبة من 15%، وأعاد السداد يدويًا 1.89% إضافية. وعلى مركز بقيمة 1 مليون دولار، فهذا يعني أكثر من 18 ألف دولار متروكة على الطاولة من نقرة واحدة.
ما زلت لا أعرف مدى اتساع هذه الفجوة عادةً، أو إذا تم إدراجها ضمن الواجهة بعد إصدار V2.
ما زلت أتساءل عما يحدث عندما تُغلق موجة من المراكز في آنٍ واحد، والجميع ينقرون نفس عملية البيع الافتراضية على ضمانات مترابطة في الوقت نفسه.
@TermMax وثّق كامل التفاصيل 👍 #TermMax هل قام أي منكم بالإغلاق يدويًا بدلًا من مجرد الضغط على الزر؟