تقني › الشبكة

بنية المعاملة

ما الذي تحويه بايتات معاملة 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 = Keccak( H(prefix) ‖ H(RingCT base) ‖ H(prunable) )

تتيح "شجرة التجزئات الثلاث" هذه للعقدة المقلِّمة التخلص من البراهين الثقيلة للمعاملات القديمة (مع الإبقاء على التجزئة)، بينما يظل بالإمكان حساب txid.

الرسوم

يعتمد الرسم على وزن المعاملة (≈ الحجم بالبايت، مع تعديل لـ Bulletproofs+ كي لا تكون المعاملات ذات المخرجات الكثيرة رخيصة بشكل غير متناسب) وعلى مستوى الأولوية. ويتكيف السعر الأساسي لكل بايت مع الحجم الوسيط للكتل — انظر الحجم الديناميكي للكتل.

ما الذي يتغير مع FCMP++

  • بدلًا من key_offsets — إشارة إلى الكتلة التي بُني البرهان على حالة الشجرة فيها.
  • بدلًا من CLSAG — برهان عضوية وSA+L؛ ويبقى key image.
  • صيغة المخرجات — Carrot (view tags بطول 3 بايتات، ومرساة Janus).