بنية المعاملة
ما الذي تحويه بايتات معاملة Monero: البادئة وتوقيع RingCT والجزء القابل للتقليم
المعاملة = بادئة (الإصدار، المدخلات، المخرجات، extra) + قاعدة RingCT (النوع، الرسم، المبالغ المشفّرة، التزامات المخرجات) + الجزء القابل للتقليم (Bulletproofs+، CLSAG، المخرجات الزائفة). تُبنى تجزئة المعاملة من تجزئات الأجزاء الثلاثة، لذا يمكن للعقد أن تتخلص من الجزء القابل للتقليم في المعاملات القديمة (التقليم) مع بقائها قابلة للتحقق.
البادئة
version = 2
unlock_time = 0 // حقل قديم، دائمًا 0 الآن
vin[]: // المدخلات
txin_to_key:
amount = 0 // المبالغ مخفية في RingCT
key_offsets = [g₀, Δ₁, …, Δ₁₅] // 16 فهرسًا عامًا، كإزاحات نسبية
k_image = I // key image، 32 بايت
vout[]: // المخرجات
amount = 0
target: txout_to_tagged_key
key = P // مفتاح لمرة واحدة، 32 بايت
view_tag = 1 byte
extra = [0x01 ‖ R, …] // مفتاح المعاملة وغيره
تُخزَّن key_offsets كفروق: الأول هو الفهرس المطلق للمخرج، والبقية مسافات عن السابق. الأعداد الصغيرة تشغل بايتات أقل بصيغة varint.
قاعدة RingCT
type = 6 // RCTTypeBulletproofPlus
txnFee = fee in atomic units (varint)
ecdhInfo[] = encrypted amount, 8 bytes per output
outPk[] = commitment C, 32 bytes per output
الجزء القابل للتقليم
bulletproofs_plus[] = one aggregated proof
CLSAGs[] = { s[16], c1, D } per input
pseudoOuts[] = C̃, 32 bytes per input
تجزئة المعاملة
تتيح "شجرة التجزئات الثلاث" هذه للعقدة المقلِّمة التخلص من البراهين الثقيلة للمعاملات القديمة (مع الإبقاء على التجزئة)، بينما يظل بالإمكان حساب txid.
الرسوم
يعتمد الرسم على وزن المعاملة (≈ الحجم بالبايت، مع تعديل لـ Bulletproofs+ كي لا تكون المعاملات ذات المخرجات الكثيرة رخيصة بشكل غير متناسب) وعلى مستوى الأولوية. ويتكيف السعر الأساسي لكل بايت مع الحجم الوسيط للكتل — انظر الحجم الديناميكي للكتل.
ما الذي يتغير مع FCMP++
- بدلًا من
key_offsets— إشارة إلى الكتلة التي بُني البرهان على حالة الشجرة فيها. - بدلًا من CLSAG — برهان عضوية وSA+L؛ ويبقى key image.
- صيغة المخرجات — Carrot (view tags بطول 3 بايتات، ومرساة Janus).