The scariest Dusk event for me is one I can pull from finalized history and still have no right to act on.
أكثر حدث مُخيف في Dusk بالنسبة لي هو الذي يمكنني استخراجه من السجل المُعتمد ومع ذلك ليس لدي أي حق في التصرف بناءً عليه.
Boreas changed archive semantics so contract events from reverted execution can be preserved instead of disappearing. The important bit is the flag attached to them. An event can exist in the archive and still carry reverted: true.
غيّر Boreas دلالات الأرشيف بحيث يمكن حفظ أحداث العقود الناتجة عن التنفيذ المُرتجع بدلًا من اختفائها. الجزء المهم هو العلم المرفق بها. يمكن أن يوجد الحدث في الأرشيف بينما يحمل reverted: true.
That breaks a shortcut I would normally be tempted to use in an indexer: “event exists in finalized history, therefore the state transition happened.”
وهذا يُفشل اختصارًا كنت سأكون مُغرًى عادةً باستخدامه في مفهرس: "الحدث موجود في السجل المُعتمد، إذن تم انتقال الحالة".
Dusk’s own Moonlight deposit pattern filters for event.reverted === false before accepting an inflow. I would apply the same discipline to any contract worker that releases something off-chain. If a redemption function emits an event and later panics, my backend cannot treat the event name alone as permission to mark the redemption complete.
يقوم نمط إيداع Moonlight الخاص بـ Dusk بتصفية event.reverted === false قبل قبول أي تدفق وارد. سأطبق الانضباط نفسه على أي عامل عقد يقوم بإطلاق شيء خارج السلسلة. إذا أصدرت دالة الاسترداد حدثًا ثم حدث هلع لاحقًا (panic)، فلا يمكن لجهة الربط الخلفية الخاصة بي أن تعتبر اسم الحدث وحده إذنًا لوضع علامة على أن الاسترداد قد اكتمل.
The block may be final. The event record may be queryable. The contract state can still say the action rolled back.
قد يكون البلوك مُعتمدًا. قد يكون سجل الحدث قابلًا للاستعلام. ومع ذلك، يمكن لحالة العقد أن تقول إن الإجراء قد تم التراجع عنه (rolled back).
So I would store the revert bit beside every indexed event and make it part of the business rule, not a debugging field.
لذلك سأخزن بتّ التراجع بجانب كل حدث مفهرس، وأجعله جزءًا من قاعدة العمل، لا مجرد حقل للتصحيح.
On Dusk, final history tells me what was recorded. reverted tells me whether I am allowed to believe the event.
على Dusk، يخبرني السجل النهائي بما تم تسجيله. وreverted تخبرني إن كان مسموحًا لي تصديق هذا الحدث.
يمكنني أن أكون على صواب في TermMax Alpha Long، وأن أصيب الربح، ومع ذلك أُعيد جزءًا من ذلك الربح فقط عن طريق اختيار الخروج غير الصحيح.
الاختيار الخفي هو ما يحدث بعد أن يصبح من الممكن ممارسة الصفقة بالفعل. تقوم Net Settle بحساب الربح ودفعه عبر سيولة on-chain. هذا يكون مناسبًا عندما تكون السيولة عميقة. عندما تكون رقيقة، تحذّر TermMax أن الانزلاق وMEV قد يجعلان الربح المحقق أسوأ، خصوصًا في حالة وجود مركز كبير.
الطريق الآخر هو Exercise - Delivery (الممارسة - التسليم). بدلًا من إجبار الخروج بالكامل عبر تلك السيولة، أدفع USDT بسعر الإضراب، وأستلم الأصل الأساسي، ثم أحدد المكان الذي سأُغلق فيه. كما أن التسليم الجزئي ممكن أيضًا، لذلك لا يتعين عليّ نقل كامل المركز مرة واحدة.
وهذا يعني أن عبارة “جني الأرباح” لم تعد زرًا واحدًا بالنسبة لي. في توكن Alpha رقيق، أحتاج إلى مقارنة سهولة Net Settle مقابل تكلفة التنفيذ المخفية داخله.
يمكن لخيار مُربح أن يظل مُربحًا على الورق بينما يقوم مسار الخروج بهدوء بأكل الميزة.
يمكنني الإيداع في محفظة استثمار ثنائية TermMax Dual Investment، ومشاهدة العائد وهو يعمل، ومع ذلك أكتشف أن كلمة “سحب” لا تعني أن رصيدي بالكامل متاح.
السبب يصبح واضحًا فقط عندما أتتبع أين ذهبت الأموال. هذه الإيداعات تموّل مراكز خيار TermMax Alpha. إذا لم تكن أصول أيٍ من المحفظة قد تم اقتراضها، يمكنني سحب كل شيء. إذا كان الجميع قد تم اقتراضه بواسطة المشترين Long أو Short، فلن تكون عمليات السحب المبكر متاحة ما لم يدخل سيولة جديدة. وإذا تم اقتراض جزء فقط، يمكنني سحب الجزء غير المستخدم.
هذا يجعل عامل الاستخدام هو الرقم الذي يهمني بعد الإيداع.
قد يبدو ارتفاع الـ APY كأنه سيولة مباشرة، حتى يستهلك طلب الخيارات المخزون الكامن خلفه. عندها لم يعد خروجي مجرد قرار مني؛ بل يعتمد على مقدار الجزء المتبقي من المحفظة غير مستخدم، وعلى ما إذا كانت إيداعات جديدة ستصل، أو ما إذا كنت سأنتظر حتى تاريخ الاستحقاق.
لذلك لن أقرأ رصيد TermMax Dual Investment على أنه نقدٌ فقط يحمل بطاقة عائد. بمجرد أن يكون هذا رأس المال يمول خيار شخص آخر، يصبح العائد والخروج مرتبطين بنفس عامل الاستخدام.
يمكن أن يكون تدفق الغسق المُحكَم صحيحًا ومع ذلك يكون الشيء الخاطئ الذي لا أريد أن أنسبه كإيداع. وهذا هو فخ الماسح الضوئي الذي سأحمي نفسي منه أولًا. إن moonlightHistory(receiver) ليست موجّهًا لـ“إيداعات العملاء”. يمكن أن تُرجع تحويلات Moonlight مباشرة، أو مدفوعات العقود، أو عمليات الاسترداد، أو سحوبات التكديس (staking)، أو تحويلات Phoenix إلى Moonlight؛ لأن جميعها يمكنها زيادة نفس الحساب العام.
لذلك لا أستطيع اختزال الإدخال إلى “المستلم مطابق والقيمة > 0”.
بالنسبة لإيداع Moonlight مباشر، أحتاج إلى حدث عقد التحويل نفسه: موضوع moonlight، reverted false، المستقبل المتوقع، وقيمة موجبة. يحذّر Dusk أيضًا من التخمين لعائلة المعاملة عبر عدّ الأحداث؛ لأن معاملة واحدة قد تُصدر أحداث عقود إضافية دون أن يغيّر ذلك ما هي عليه بالفعل.
النتيجة تكون مزعجة في محاسبة الحيازة (custody). إذا كان ماسحي الضوئي ينسب كل تدفق داخِلٍ مُحكم، فقد يدخل استرداد داخلي أو سحب تكديس إلى نفس مسار دفتر الأستاذ مثل أموال العملاء الطازجة. يكون رصيد السلسلة صحيحًا بينما تصبح التزامات عميلي غير صحيحة.
أفضل أن أرفض تدفقًا غير مألوف بدلًا من أن أناديه إيداعًا بصمت.
في Dusk، يخبرني finalized أن المال تحرك. ونوع الحدث يخبرني لماذا.
أستطيع سداد قرض TermMax بشكل صحيح ومع ذلك أدفع زيادةً لاسترداد الضمان.
المشكلة تكمن في مسار السداد. يحمل الـ GT الضمان والديون، بينما يمثل الـ FT المطابق مطالبة الدين تلك. قبل تاريخ الاستحقاق، يقدّم لي TermMax خيارين للخروج: السداد باستخدام رموز الدين بالقيمة الاسمية، أو شراء الـ FT المقابل في السوق واستخدام ذلك الـ FT لإلغاء الدين.
هذا المسار الثاني يغيّر الحسابات.
إذا كان عليّ 100,000 USDC وكان الـ FT المطابق يتداول بسعر 0.97، فإن إرسال 100,000 USDC مباشرةً هو خروج سهل. لكن توفير 100,000 FT يكلف حوالي 97,000 USDC قبل الرسوم والانزلاق السعري، ثم يمكن لتلك الـ FTs سداد نفس الدين الاسمي.
لذلك بعد أن أقفل سعرًا ثابتًا، يبقى لدي عمل واحد عندما أريد الخروج مبكرًا. أحتاج إلى تسعير رمز دينّي الخاص قبل أن أضغط على زر السداد.
والنتيجة الظاهرة بسيطة: تجاهل سوق الـ FT قد يحوّل الإغلاق المبكر إلى آلاف الدولارات من سدادٍ غير ضروري على مركزٍ كبير.
لم أعد أرى استحقاق TermMax مجرد موعد نهائي. حتى ذلك التاريخ، فإن سعر إلغاء المدة المتبقية ما يزال شيئًا يمكنني تداوله.
يمكن لعقد DuskVM أن ينجو من فشل العقدة بينما ينسى تطبيقي فجأة كيفية التحدث إليه.
السبب يكمن خارج السلسلة. يقوم Forge ببناء مخرَجين من WASM من نفس المصدر: العقدة التي تعمل داخل DuskVM، وسائق بيانات يتولى التعامل مع JSON القابل للقراءة لتحويله إلى rkyv وفك ترميزه. لا يتم نشر هذا السائق كجزء من عقد السلسلة على-الربط.
إذا أردت لمسارات عقد JSON الخاصة بـ Rusk أن تنفّذ ذلك التحويل، يقوم مالك العقد بتسجيل السائق لدى تلك العقدة.
وبالتالي يمكنني النشر مرة واحدة، والاختبار مقابل Node A، ورؤية استدعاءات قابلة للقراءة وواضحة، ثم إجراء failover إلى Node B والاصطدام بحالة غريبة. العقد موجودة. السلسلة سليمة. لكن driver_available قد يكون false، فيفقد التطبيق سطح فك الترميز الذي بُني حوله.
هذه هي فخّ الإنتاج بالنسبة لي. لم تفشل آلية الإجماع. لم تفشل العقدة. لقد غيّر failover الخاص بي اعتمادًا خارج السلسلة كنت اعتبره أنه ينتقل مع العقد.
سأجعل توفر السائق جزءًا من جاهزية العقدة وأتحقق منه في كل نقطة نهاية من نقاط Rusk قبل وصول حركة المرور إليها.
على DuskVM، يمكن للعقد أن تنجو من failover بينما يختل المترجم الخاص بها.
أستطيع رؤية 1.1M USDC متاحًا في سوق TermMax PT-eUSDe، ومع ذلك أفقد 500K من هذه السعة لأن شخصًا ما اقترض أولاً مقابل wBTC.
لم يبدُ الأمر منطقيًا حتى تتبعت كيف تستخدم Atomic Orders الخزنة فعلًا.
في V1، كان على القيّم الذي يملك 1.1M USDC أن يقسمها قبل وصول الطلب: 250K إلى PT-eUSDe، و600K إلى wBTC، و250K إلى wstETH. كانت الأموال حقيقية، لكن كل شريحة كانت محبوسة داخل سوقها المختار.
في V2، يمكن للـ 1.1M نفسها أن تبقى موزعة عبر الأسواق الثلاثة في الوقت نفسه. ليس ثلاث نسخ من الأموال. مخزون مشترك واحد. إذا أخذت 500K في PT-eUSDe، فإن السيولة المتاحة في PT-eUSDe وwBTC وwstETH تنخفض جميعها إلى 600K بشكل ذري.
هذا يغيّر طريقة قراءتي للرقم على الشاشة. الحجم الذي أراه في سوق واحد لا يكون محجوزًا لذلك السوق تحديدًا. يمكن أن يتقلص لأن مُقترضًا يستخدم ضمانًا مختلفًا وصل إلى نفس الخزنة أولاً.
لذلك لم يعد خطر التنفيذ لدي مرتبطًا فقط بما إذا كان سوقي المختار لديه طلب. بل أعتني أيضًا بمن يتنافس الآخرون على نفس سيولة الخزنة الأساسية.
يمكن تثبيت السعر بينما المخزون الكامن خلفه ما زال يتسابق بين الأسواق.
قد تختفي معاملة عند الغسق من ذاكرة عقدتي (مِمبول) دون أن تصل أبدًا إلى انتهاء الصلاحية على السلسلة.
هذا هو وقت انتهاء الصلاحية الذي لا أرغب في تضمينه بشكل ثابت (hardcode) داخل محفظة. @Dusk معاملة لا تحمل حقل انتهاء الصلاحية. انتهاء الصلاحية هو سياسة محلية في Rusk. الإعداد الافتراضي المدمج هو ثلاثة أيام، بينما تستخدم العقد المثبّتة باستخدام node-installer v0.5.22 عمرًا في الممبول مدته 30 دقيقة مع إجراء فحوصات كل خمس دقائق.
لذا قد تقدم عقدتا Dusk سليمتان إجابات مختلفة تمامًا حول المدة المسموح فيها لنفس المعاملة المعلّقة أن تبقى.
الجزء الأسوأ هو حدث الإزالة (removed). فهو لا يعرّفني إلا على أن المعاملة غادرت ممبول العقدة المحلية. يمكن أن يؤدي الإدراج (inclusion)، أو الاستبدال (replacement)، أو انتهاء الصلاحية (expiry)، أو الإخلاء بسبب السعة (capacity eviction)، أو عملية إنفاق متعارضة إلى ظهور هذا الخروج. إذا ترجمت removed مباشرةً إلى failed، فإن منطق الاستعادة لدي سيكون تخمينًا.
بالنسبة لخدمة سحب الأموال، قد يصيب ذلك المستخدم. يمكنني وسم دفعة (payout) بأنها ميتة لأن عقدتي انتهت صلاحيتها محليًا بينما كانت عقدة أخرى قد نشرَتها بالفعل بشكل أوسع.
سأتعامل مع مهلة الممبول كإعداد لعقدة، ثم أستعلم عن حالة الدفتر (ledger) قبل أن أقرر أن معاملة DUSK آمنة لإعادة بنائها.
في Dusk، «اختفت من ممبولي» ليس الشيء نفسه مثل «اختفت».
يمكن لمحفظة W3sper أن تستمد ملف تعريف حقيقيًا لـ Dusk، وأن تعرض لي عنوانًا، ومع ذلك تظل عاجزة عن بناء أول تحويل.
العمل الخفي هو حالة Bookkeeper. توفر W3sper مُنشئات المعاملات، لكنها لا تحول ملف تعريف جديدًا إلى محفظة رأسية (headless) كاملة. إذا أنشأت المفاتيح ثم انتقلت فورًا إلى الإرسال، فلن يحتوي هذا الملف التعريفي على إدخال Bookkeeper مُزامن، لذا لا يستطيع المُنشئ جلب حالة الرصيد وnonce التي يحتاجها.
يجعل Phoenix الأمر أصعب للتزييف. يجب أيضًا على خدمة التوقيع الاحتفاظ بملاحظات مُشفّرة مُزامنة، وليس فقط المفتاح السري. لذلك قد تكون حيازة المفاتيح صحيحة بينما تكون الحالة القابلة للإنفاق قديمة.
الجزء السيئ هو أن المحفظة قد تبدو مكتملة. يمكنني إنشاء الحساب وتمويله وحماية المفتاح، ثم أضغط على إرسال وأكتشف أن الباك엔د الخاص بي لم يُعِد بناء الحالة التي تجعل إنفاق DUSK ممكنًا.
إذا كنت أدير خزينة Dusk رأسية (headless)، لاختبرت الاسترداد عبر استعادة المفاتيح في قاعدة بيانات فارغة وجعل المحفظة تُعاد مزامنتها قبل أن توقع أي شيء.
على Dusk، نسخ المفتاح احتياطيًا ليس هو نفس نسخ سير عمل المحفظة احتياطيًا.
يمكن اللحاق بعقدة أرشيف عند الغسق عند طرف السلسلة (chain tip) وما زال أن تكون ناقصة التاريخ الذي أحتاجه لإسناد إيداع قديم.
المشكلة تكمن في مسار التمهيد (bootstrap path). يحتفظ «Archive Rusk» بفهارس نهائية مستخدمة بواسطة moonlightHistory وfullMoonlightHistory وfinalizedEvents. لكن إذا قمت بإحضار العقدة من لقطة download_state الخاصة بالمُثبّت (installer)، فإنني أعيد الحالة التنفيذية فقط، وليس فهارس الأرشيف الخاصة بالأجزاء (البلوكات) قبل تلك اللقطة.
لذلك فإن عبارة «synced» ليست فحص الجاهزية التي أهتم بها.
بالنسبة لخدمة إيداعات Moonlight، أستطيع الاستعلام عن التاريخ النهائي، والحصول على استجابات نظيفة، ومع ذلك قد يكون هناك نطاق أعمى خلف حدّ اللقطة. حالة السلسلة الحالية. إلا أن عملية إدخال التاريخ (historical ingestion) ليست كذلك. يمكن لعملية الاستكمال (backfill) عبر تلك العقدة أن تتخطّى بصمت إيداعًا أقدم بينما تبدو جميع فحوصات الصحة القريبة من الطرف طبيعية.
إذا احتجت إلى تاريخ كامل، يجب أن يقوم الأرشيف بالمزامنة من genesis أو أن يأتي من نسخة احتياطية موثوقة تحتوي مسبقًا على قواعد بيانات الأرشيف. عندها أحتاج إلى اختبار أقدم نطاق بلوكات يغطيه خدمتي قبل أن أعتبره جاهزًا.
أفضّل أن تفشل جاهزية النظام بشكلٍ واضح وصاخب بدلًا من اكتشاف النطاق الناقص عندما يسأل المستخدم لماذا لم يصل إيداع DUSK النهائي أبدًا إلى رصيده.
الرقم 91 منطقي. الشيء الرئيسي الذي يعيقه هو التسلسل. يظهر أفضل أثرٍ لك في وقت متأخر جدًا.
كنت سأحكمه بهذا الشكل:
وجدتُ تفصيلة في الرهان على Dusk تجعل عمليات الإيداع المتكررة أكثر تعقيدًا مما تبدو عليه.
إذا كان مقدم الخدمة لديّ نشطًا بالفعل وأضفت 4,000 DUSK، فإن 3,600 فقط تذهب مباشرةً إلى الرهان النشط. أما الـ 400 الأخرى فتُقفل.
تظل تلك الـ 400 ملكي، لكن الجزء “غير الجميل” هو استعادة الرصيد النهائي المقفل. قد أحتاج في النهاية إلى فكّ الوضعية المتبقية بالكامل فقط لاستعادته.
لذا فليس الرقم الذي أضيفه هو نفسه الرقم الذي يعمل فعليًا ضمن الإجماع فورًا.
يصبح ذلك أكثر وضوحًا إذا واصلت التراكم. يضيف إيداعٌ إضافي تقسيمًا آخر بنسبة 90/10. يمكنني الاستمرار في نمو الجزء النشط، وفي الوقت نفسه بناء رصيدٍ مقفل لا يدخل ضمن الإجماع ويظل يتبعني حتى لحظة الخروج المتوقعة.
كنتُ أنظر إلى التراكم سابقًا بشكلٍ أساسي كقرار مكافأة.
على Dusk، كنتُ أيضًا أراقب مقدار “التنظيف” الذي أُنشئه بهدوء في كل مرة أُجري فيها إيداعًا.
لاحظت أن الجزء المحرج من Dusk لا يرسل تحويلًا خاصًا. يحدث ذلك عندما يتعين على ذلك التحويل أن يصبح رصيد تبادل دون أن يقوم المشغّل بتخمين من يملكه.
بالنسبة للإيداعات، لا يتظاهر Dusk بأن Phoenix و Moonlight قابلتان للتبديل. تستخدم Phoenix ملاحظات مُشفّرة وnullifiers، بينما تُوجَّه تكاملات التبادل إلى Moonlight لأن نموذج الحيازة والماسح الضوئي مختلف. لذلك لا يزال يتعين على المشغّل اختيار طريقة عمل الإسناد: حساب Moonlight واحد لكل عميل، أو حساب مشترك يصبح فيه المذكرة بيانات توجيه.
ثم يظهر السيناريو الفاشل القبيح. يمكن أن يصل تحويل صالح مع بيانات وصفية ناقصة أو مشوّهة أو غير معروفة أو مُعاد استخدامها. يمكن للسلسلة أن تستقر بشكل صحيح، ومع ذلك يجب عزل الرصيد بدلًا من نشره إلى المستخدم الخطأ.
التفصيل الذي أعود إليه باستمرار هو نقطة التفتيش (checkpoint). يتوقع Dusk كتابة أرصدة ونقطة تفتيش البلوك الممسوح ضوئيًا بشكل ذري، مع استخدام معرّف المعاملة لتحقيق عدم التكرار (idempotency). تقدّم نقطة التفتيش قبل أن يصبح الرصيد متينًا (durable)، ويمكن أن يترك التعطل ذلك الإيداع خارج مسار إدخال المشغّل.
بالنسبة إلى Dusk، فإن اختبار الحيازة الحقيقي هو ما إذا كان بإمكان إيداع Moonlight مُنهى (finalized) أن يختفي بين checkpoint والرَّصيد.
مخاطر سعر XRP: هبوط تحت 1 دولار مع فشل قانون CLARITY: Polymarket
تواجه XRP من شركة Ripple أجواء أكثر غموضًا، إذ لم يتم تمرير قانون CLARITY قبل عطلة أغسطس. وتفيد بيانات Polymarket بأن سعر XRP يتم تداوله في الغالب حول علامة 1 دولار، حيث يمنح عقد واحد مستوى سعر 1 دولار احتمالًا بنسبة 71% لبلوغ هذا السعر في 10 أغسطس.
تشير بيانات أسواق التنبؤ أيضًا إلى عدم وجود آمال كبيرة بحدوث انتعاش قوي في الأجل القريب. تأتي نسبة الاحتمال البالغة 12% بأن يسجل XRP 1.20 دولارًا في 10 أغسطس من عقد منفصل في Polymarket.
نظرة مستقبلية لسعر شبكة باي (Pi) مع صعود البيتكوين فوق 65 ألف دولار
واصلت البيتكوين الارتفاع فوق حاجز سعر 65,000 دولار، إلى جانب تحسن المعنويات بشكل عام، وشهد سعر شبكة باي (Pi) ارتفاعًا مماثلًا. عملة PI ارتفعت بنسبة 2.80% خلال آخر يوم لتصل إلى 0.0910 دولار، بينما حققت البيتكوين زيادة طفيفة. يأتي هذا التحرك عقب البروتوكول 26 وتطورات جديدة في الاستخدام، بالإضافة إلى إدراجها في بورصات العملات الرقمية الرئيسية في المستقبل. قوة البيتكوين تدعم تعافي سعر شبكة باي (Pi). دفعت أسعار البيتكوين لفترة وجيزة إلى 65,400 دولار قبل أن تتداول بالقرب من مستوى 65,000 دولار الهام يوم السبت. جاء هذا التحسن بعد صدور بيانات أضعف عن التوظيف في الولايات المتحدة ساعدت على تحسين شهية الأصول عالية المخاطر.
فريق Strategy يتعاون مع Coinbase وMorgan Stanley لتمويل حسابات ترامب
في إعلان جديد عن مزايا الموظفين، ستساهم Strategy في حسابات ترامب التي تقول إنها ستُقدَّم لموظفيها في الولايات المتحدة لأجل أطفالهم. وذكرت شركة الخزانة الخاصة بالبيتكوين أنها سيتم إطلاقها بمجرد أن تُصدر وزارة الخزانة الأمريكية التوجيهات النهائية وأن تُطرح برامج مساهمة أصحاب العمل. تقوم حسابات ترامب بتوسيع فوائد اللاعبين. تتوسع فوائد اللاعبين مع حسابات ترامب. حسابات ترامب: أن تكون 250 دولارًا سنويًا لكل طفل دون سن 18 ممن هم مؤهلون للبرنامج لجميع موظفي الولايات المتحدة في الشركة. كما تنوي الشركة تقديم مساهمة بقيمة 1,000 مطابقة لمساهمة حكومة الولايات المتحدة لبذرة الأطفال المؤهلين، على دفعة واحدة.
تم اجتياز اختبار الاسترداد بنجاح مع التحقق من المفتاح الرئيسي، ومع ذلك لم تنتج أي أصوات نهائية.
توقيع نهائية بابل (Babylon) يحتاج إلى ما هو أكثر من مفتاح EOTS. يجب أن يحمل برهان ميركل (Merkle proof) الذي يثبت أن العشوائية العامة الخاصة به قد تم الالتزام بها عند هذا الارتفاع بالذات. توجد هذه البراهين، إضافةً إلى آخر ارتفاع تم التصويت عليه لدى المزود، داخل ملف finality-provider.db.
استعادة حلقة المفاتيح (keyring) على جهاز نظيف ليست عملية استرداد فعّالة. يمكن للخفيّة/الدايمون (daemon) التعرف على مزودي، والوصول إلى eotsd، والاحتفاظ بما يكفي من الوقود (gas) بينما تفشل كل محاولة إرسال تصويت لأن برهان العشوائية مفقود. يبدو أن المزود قد تم استعادته داخل حلقة المفاتيح، ويظل صامتًا عند ارتفاع بابل التالي.
الإصلاح محدد. يجب إيقاف fpd وتشغيل recover-rand-proof بدءًا من ارتفاع محدد. إذا تركت هذا الارتفاع، فإن الأداة تعيد بناء البراهين بدءًا من أول التزام بالعشوائية، مما يحوّل التاريخ التشغيلي الكامل للمزود إلى عمل استرداد.
كنت سأختبر النسخة الاحتياطية عبر إرسال تصويت نهائي فعلي، وليس فقط عبر التحقق مما إذا كانت العملية تبدأ. إن استعادة الهوية دون استعادة دليل التوقيع ليست سوى نصف الاسترداد.
يمكن للجهاز أن يتذكر من هو، لكنه ينسى كيفية إثبات تصويته التالي.
أدى اختيار العملات إلى سحب UTXO قديم واحد إلى عملية stake متعددة المدخلات. وبما أن هذا الإدخال كان يحتاج إلى توقيعه داخل scriptSig، فقد أكمل المُوقِّع العملية قبل أن ينتهي Babylon من التحقق من العهد (covenant verification).
لم يعد hex الخاص بالمعاملة مجرد حزمة تسجيل. يمكن لعقدة Bitcoin قبولها وإعادة بثّها.
قمتُ بالتخلص من المعاملة المُوقَّعة، وأعدتُ بناء اختيار العملات باستخدام مدخلات SegWit فقط، وبدأتُ تدفق التسجيل مرة أخرى.
لا توقيع غير صالح. لا معاملة Bitcoin مرفوضة.
فقط BTC أصبحت قابلة للتعدين بينما كان Babylon ما يزال يعامل التفويض كغير مكتمل.
كنت أجلس BABY داخل تفويض مُعتمد بينما كان هناك مركز آخر ينزلق نحو التصفية عند 0.01188 دولار.
ظننت أن “مُعتمد” تعني أن فترة الانتظار قد بدأت. لذلك عدّدت للأمام بدءًا من النقر وخططت لتحريك الضمان وفقًا لذلك.
لكن الأمر لم يكن قد بدأ.
كان لا يزال يتعين على الطلب اجتياز حقبة زمنية (epoch) والوصول إلى نقطة تحقق (checkpoint) لبيتكوين قبل أن تبدأ حتى 300 تأكيد. وعندما لاحظت ذلك، كانت BABY ما تزال مقفلة، وكان للمركز مساحة أقل مما كنت قد خططت له.
التفاصيل على الشاشة التي كانت تهم ليست طلب “المُعتمد”. بل كانت أن عدد تأكيدات بيتكوين لم يكن قد بدأ بعد.
كنت بحاجة إلى تلك BABY كضمان قبل 0.01188 دولار.
لكنها كانت عالقة في قائمة انتظار الخروج بينما كانت مخاطر التصفية تقترب باستمرار.