يجب ألا يؤدي انتهاء مهلة السحب إلى إنشاء هوية جديدة
تنتهي مهلة طلب السحب. والرد المغري بسيط: أعد إنشاء المعاملة ثم أعد إرسالها.
في Dusk، قد يجعل ذلك المشكلة التشغيلية أكثر صعوبة.
بالنسبة لعمليات السحب في Moonlight، تنص إرشادات التكامل على أنه يجب إنشاء المعاملة وتوقيعها مرة واحدة، مع تخزين البايتات المُسلسلة ومعرّف المعاملة قبل البث. إذا واجه الإرسال انتهاء مهلة في النقل، فإن إعادة المحاولة الآمنة هي إعادة بث تلك البايتات الموقعة نفسها بالضبط. تحتفظ المعاملة بالهوية نفسها بينما يتم التحقق من حالتها على السلسلة.
لماذا هذا مهم؟ لأن انتهاء المهلة لا يثبت فشل المحاولة الأولى. حتى قبول 202 Accepted يؤكد التوجيه فقط، وليس الإدراج أو الوصول إلى الحالة النهائية. إن إنشاء معاملة أخرى قبل حل هذا الغموض يضيف كائناً آخر يتعين على نظام السحب تتبعه.
تجعل Moonlight هذا التمييز صريحاً. تستخدم المعاملات قيم nonce تسلسلية للحسابات، وتستبدل معاملة متعارضة لها نفس nonce الإدخال الحالي في الذاكرة المؤقتة فقط عندما يكون سعر الغاز أعلى بشكل صارم. ويكون لهذا الاستبدال معرّف معاملة مختلف. لذلك توجّه Dusk مشغلي البورصات إلى تسوية كلا المعرّفين وتجنب الخصم مرتين.
لذا فإن “إعادة المحاولة” و“الاستبدال” ليسا عمليتين متبادلتين على مستوى الخلفية. إعادة المحاولة تحافظ على هوية محاولة الدفع. أما الاستبدال فينشئ عمداً هوية جديدة لنفس nonce.
وبالنسبة لبنية الحفظ، فإن مبدأ idempotency يتجاوز تصميم قاعدة البيانات: إذ يجب أن تصف عملية إنشاء المعاملة، وتخصيص nonce، والبايتات الموقعة، وسجلات المحاسبة السحب نفسه ذاته.
@Dusk $DUSK #dusk
تنتهي مهلة طلب السحب. والرد المغري بسيط: أعد إنشاء المعاملة ثم أعد إرسالها.
في Dusk، قد يجعل ذلك المشكلة التشغيلية أكثر صعوبة.
بالنسبة لعمليات السحب في Moonlight، تنص إرشادات التكامل على أنه يجب إنشاء المعاملة وتوقيعها مرة واحدة، مع تخزين البايتات المُسلسلة ومعرّف المعاملة قبل البث. إذا واجه الإرسال انتهاء مهلة في النقل، فإن إعادة المحاولة الآمنة هي إعادة بث تلك البايتات الموقعة نفسها بالضبط. تحتفظ المعاملة بالهوية نفسها بينما يتم التحقق من حالتها على السلسلة.
لماذا هذا مهم؟ لأن انتهاء المهلة لا يثبت فشل المحاولة الأولى. حتى قبول 202 Accepted يؤكد التوجيه فقط، وليس الإدراج أو الوصول إلى الحالة النهائية. إن إنشاء معاملة أخرى قبل حل هذا الغموض يضيف كائناً آخر يتعين على نظام السحب تتبعه.
تجعل Moonlight هذا التمييز صريحاً. تستخدم المعاملات قيم nonce تسلسلية للحسابات، وتستبدل معاملة متعارضة لها نفس nonce الإدخال الحالي في الذاكرة المؤقتة فقط عندما يكون سعر الغاز أعلى بشكل صارم. ويكون لهذا الاستبدال معرّف معاملة مختلف. لذلك توجّه Dusk مشغلي البورصات إلى تسوية كلا المعرّفين وتجنب الخصم مرتين.
لذا فإن “إعادة المحاولة” و“الاستبدال” ليسا عمليتين متبادلتين على مستوى الخلفية. إعادة المحاولة تحافظ على هوية محاولة الدفع. أما الاستبدال فينشئ عمداً هوية جديدة لنفس nonce.
وبالنسبة لبنية الحفظ، فإن مبدأ idempotency يتجاوز تصميم قاعدة البيانات: إذ يجب أن تصف عملية إنشاء المعاملة، وتخصيص nonce، والبايتات الموقعة، وسجلات المحاسبة السحب نفسه ذاته.
@Dusk $DUSK #dusk