ملخص
تستبدل معاملات النونس الدائم الهاش الكتلي الأخير بقيمة نونس مخزنة، مما يزيل نافذة انتهاء الصلاحية البالغة 150 فتحة للمعاملة. وهذا يتيح التوقيع دون اتصال والتقديم المتأخر.
قد يتم إيقاف النونسات الدائمة في إصدار مستقبلي. راجع نقاش SIMD للحصول على التفاصيل.
النونسات الدائمة
تستبدل معاملة النونس الدائم الهاش الكتلي الأخير بقيمة نونس مخزنة، مما يزيل نافذة انتهاء الصلاحية البالغة 150 فتحة. وهذا يتيح التوقيع دون اتصال والتقديم المتأخر.
كيفية عمل معاملات النونس
حساب النونس هو حساب مملوك لبرنامج النظام يخزن قيمة State::Initialized
تحتوي على ثلاثة حقول: مفتاح عام للسلطة (من يمكنه تقديم النونس)، وقيمة نونس
دائمة (هاش مشتق من هاش كتلي حديث)، ولامبورتس لكل توقيع (معدل الرسوم عندما
تم تقديم النونس آخر مرة).
لاستخدام نونس دائم:
- إنشاء وتهيئة حساب نونس باستخدام
CreateAccount+InitializeNonceAccount - بناء المعاملة مع
AdvanceNonceAccountكـ التعليمة الأولى وقيمة النونس كـrecent_blockhash - توقيع المعاملة (يمكن القيام بذلك دون اتصال، حيث أن النونس لا ينتهي)
- التقديم عند الاستعداد
كشف النونس
يكتشف وقت التشغيل معاملات النونس من خلال التحقق مما إذا كانت التعليمة الأولى
(الفهرس
NONCED_TX_MARKER_IX_INDEX
= 0) هي استدعاء لبرنامج النظام مع تعليمة AdvanceNonceAccount. يجب أن يكون
حساب النونس هو الحساب الأول لتلك التعليمة ويجب أن يكون قابلاً للكتابة. راجع
get_durable_nonce.
تدفق التحقق من nonce
عندما لا يتم العثور على recent_blockhash الخاص بالمعاملة في BlockhashQueue،
يتحقق المدقق (validator) مما إذا كانت معاملة nonce صالحة عبر
check_transaction_age:
- يجب أن يختلف
durable_nonceالمخزن في nonce عن nonce الدائم التالي (المشتق من blockhash الحالي). هذا يضمن أن nonce لم يتم استخدامه بالفعل في هذا البلوك - يجب تحميل حساب nonce ويجب تحليله كـ
State::Initialized - يجب أن يطابق
durable_nonceالمخزنrecent_blockhashالخاص بالمعاملة
يتم إجراء فحص توقيع صلاحية nonce لاحقاً
(validate_transaction_nonce).
إذا نجحت جميع الفحوصات، يتم تقديم nonce إلى قيمة nonce الدائم التالية قبل بدء التنفيذ. عند فشل التنفيذ، يتم الاحتفاظ بـ nonce المتقدم ودافع الرسوم المخصوم منه الرسوم (مما يمنع إعادة التشغيل مع تحصيل الرسوم).
سلوك فشل nonce
إذا فشل التحقق من معاملة nonce (تم استخدام nonce بالفعل، لم يتم توقيع الصلاحية، لم يتم العثور على الحساب)، يتم إسقاط المعاملة بالكامل. لا يتم تحصيل رسوم، ولا تحدث تغييرات في الحالة.
إذا نجح التحقق من معاملة nonce لكن فشل التنفيذ (أرجعت تعليمة خطأ)، يتم تقديم nonce ويتم تحصيل الرسوم. هذا يمنع إعادة تشغيل المعاملة مع ضمان تعويض المدقق (validator).
Is this page helpful?