إعادة تعيين جذر SMT

تعليمة مخصصة للمشغّل فقط، تقوم بتدوير شجرة ميركل المتفرقة عبر زيادة Instance.current_tree_index وإعادة تعيين جذر السحب، مما يتيح دورة جديدة تضمّ 65,536 عملية سحب.

يجري ترحيل برنامج الضمان من تصميم شجرة ميركل المتفرقة هذا إلى خريطة بت nonce على السلسلة (يُتتبّع upstream)، حيث تصبح هذه التعليمة RotateBitmap. تعكس هذه الصفحة الوضع الحالي لبرنامج الضمان وستُعاد صياغتها بمجرد تطبيق هذا التغيير.

الحسابات

الحسابقابل للكتابةموقِّعالوصف
payer✓✓دافع الرسوم
operator✓موقِّع المشغّل
instance✓PDA مثيل الضمان (يُزاد current_tree_index)
operator_pdaPDA المشغّل الذي يُثبت أن الموقِّع مُوفَّر
event_authorityPDA سلطة الأحداث لـ EmitEvent CPI
private_channel_escrow_programبرنامج الضمان (مرجع ذاتي لـ CPI)

المعاملات

المعاملالنوعالوصف
expected_current_tree_indexu64حارس إعادة التشغيل؛ يجب أن يطابق Instance.current_tree_index وإلا فشل الاستدعاء

القيم المُعادة

يُعيد TransactionBuilder يمكن استخدامه لبناء المعاملة وإرسالها.

مثال

import { getResetSmtRootInstruction } from "../private-channel-escrow-program/clients/typescript/src/generated";
const resetIx = getResetSmtRootInstruction({
payer: operatorPayerSigner,
operator: operatorSigner,
instance: instancePda,
operatorPda: operatorPdaAddress,
eventAuthority: eventAuthorityPda,
privateChannelEscrowProgram: ESCROW_PROGRAM_ID,
expectedCurrentTreeIndex: currentTreeIndex // u64
});

ملاحظات مهمة

  • مخصص للمشغّل فقط: يتطلب operator_pda صالحاً؛ وإلا يطرح InvalidOperatorPda
  • يجب أن يساوي expected_current_tree_index قيمة Instance.current_tree_index وقت الاستدعاء؛ وأي قيمة قديمة تطرح UnexpectedTreeIndex، للحماية من إعادة تشغيل إعادة تعيين سبق تطبيقها
  • يزيد Instance.current_tree_index؛ وتُبطَل القيم العشوائية (nonces) الصالحة في دورة الشجرة السابقة بعد التدوير
  • تستدعي خدمة operator-private-channel هذه التعليمة تلقائياً عندما يكون transaction_nonce % 65536 == 0 (وnonce > 0)، مما يشير إلى بداية دورة جديدة؛ ولا ينبغي استدعاؤها يدوياً في ظروف التشغيل الاعتيادية
  • بعد التدوير، يُعاد تعيين جذر السحب إلى الشجرة الفارغة، بحيث تبدأ عمليات السحب الجديدة من SMT جديدة
  • يُصدر حدثاً عبر EmitEvent CPI

Is this page helpful?

جدول المحتويات

تعديل الصفحة