تقني › الشبكة

المعاملة بايتًا بايتًا

تفكيك كامل للصيغة الست عشرية لمعاملة RingCT: كل حقل وكل دالة — على بيانات حقيقية وعشوائية

باختصار

معاملة Monero ثلاث كتل متتالية من البايتات: البادئة (المدخلات، المخرجات، extra)، وقاعدة RingCT (الرسم، المبالغ المشفّرة، الالتزامات)، والجزء القابل للتقليم (Bulletproofs+، CLSAG، المخرجات الزائفة). أدناه أداة تحلل أي معاملة من الإصدار v2 بايتًا بايتًا، وتحسب txid، وتتحقق من التوازن، و— إذا أُعطيت مفتاح عرض — تعثر على مخرجاتك وتفك تشفير مبالغها. وفي المعاملة العشوائية تُظهر جميع الأسرار، لترى كيف تُطبَّق كل دالة على أعداد فعلية.

كيف تُقرأ البايتات

التسلسل (serialization) في Monero بسيط — لا ترويسات ولا أسماء حقول، بل قيم متتالية فحسب. وهناك نوعان من وحدات البناء:

  • varint — عدد صحيح متغير الطول: 7 بتات لكل بايت، والبت الأعلى يعني "يتبعه بايت آخر". 0x02 = 2، 0x80 0x01 = 128، 0x80 0xb5 0x18 = 400000.
  • المفتاح / النقطة / العدد القياسي — 32 بايتًا بالضبط، بلا طول. ومصفوفات النقاط التي يُعرف طولها من السياق (مثل s في CLSAG، بحسب حجم الحلقة) تأتي أيضًا بلا طول.

لذا يجب أن يعرف المحلل الصيغة مسبقًا: فنوع RingCT، الذي يُقرأ في المنتصف، يحدد كيفية قراءة كل ما يليه.

البادئة version · unlock_time المدخلات: حلقة (16 إزاحة) + key image المخرجات: مفتاح لمرة واحدة P + view tag extra: R، معرّف الدفع… قاعدة RingCT type = 6 الرسم (مكشوف) المبالغ (8 بايت، مشفّرة) outPk = C القابل للتقليم Bulletproofs+ CLSAG: s×16, c1, D pseudoOuts C̃ يمكن أن تتخلص منه العقدة المقلَّمة Keccak Keccak Keccak txid = Keccak(h₁ ‖ h₂ ‖ h₃)

أي الدوال تُطبَّق وأين

الحقلمن يحسبهالصيغةالمزيد
extra: RالمرسِلR = r·Gالعناوين الخفية
المخرج: PالمرسِلP = Hs(8·r·A ‖ i)·G + Bالعناوين الخفية
view tagالمرسِلKeccak("view_tag" ‖ 8rA ‖ i)[0]view tags
ecdhInfoالمرسِلv ⊕ Keccak("amount" ‖ Hs(8rA ‖ i))[0..8]Pedersen
outPkالمرسِلC = y·G + v·H، y = Hs("commitment_mask" ‖ Hs(8rA ‖ i))Pedersen
الحلقةمحفظة المرسِل16 فهرسًا عامًا، توزيع غاما على العمرالمدخلات الوهمية
key imageمالك المدخلI = x·Hp(P)key image
pseudoOutsالمرسِلC̃ = y'·G + v·H، والأقنعة مختارة بحيث Σ C̃ = Σ C + fee·HRingCT
CLSAGمالك المدخلحلقة من التحديات على P_i وC_i − C̃التواقيع الحلقية
Bulletproofs+المرسِلبرهان على أن 0 ≤ v < 2⁶⁴ لجميع المخرجاتبراهين النطاق

ما الذي تفعله العقدة بهذه البايتات

  1. تحللها؛ وأي بايت زائد أو ناقص يعني الرفض.
  2. تتحقق من أن key images جديدة وفي الزمرة الجزئية الصحيحة.
  3. تعيد بناء الفهارس العامة الـ16 من الإزاحات وتحمّل مفاتيح تلك المخرجات والتزاماتها من قاعدة بياناتها.
  4. تتحقق من التوازن Σ C̃ = Σ outPk + fee·H — والأداة أدناه تفعل ذلك أيضًا.
  5. تتحقق من Bulletproofs+ ومن CLSAG لكل مدخل.

ما الذي تفعله محفظة المستلم

  1. تأخذ R من extra وتحسب السر المشترك 8·a·R (عملية واحدة لكل معاملة).
  2. لكل مخرج: تجزئة ← مقارنة view tag؛ إن لم يتطابق — توقف.
  3. إن تطابق — قارن Hs(8aR ‖ i)·G + B بمفتاح المخرج.
  4. المخرج لنا — فك تشفير المبلغ، وأعد بناء القناع، وتحقق من y·G + v·H مقابل outPk.

تُظهر الأداة كل هذه الخطوات بأعداد ملموسة.

جرى التحقق على الشبكة الرئيسية

جرى التحقق من المحلل مقابل فك ترميز JSON الذي يجريه monerod لمعاملات حقيقية من النوعين 5 و6 ولمعاملة coinbase: كل حقل وtxid متطابقة. يحمّل زر "معاملة حقيقية من الشبكة الرئيسية" إحداها — قارن txid بأي مستكشف كتل.

كيف ستبدو معاملة FCMP++؟

قد تتغير صيغة معاملات FCMP++ قبل الانقسام الصلب، لذا لا يوجد هنا محلل بايتات لها. لكن البنية العامة واضحة من التنفيذ الحالي — وهي شبيهة على نحو مفاجئ ببنية اليوم:

البادئة version · unlock_time المدخلات: key image L فقط (لا إزاحات حلقة بعد الآن) المخرجات: المفتاح O (Carrot) + view tag من 3 بايتات extra: مفتاح مؤقت، … القاعدة نوع RingCT جديد الرسم المبالغ + C الكتلة المرجعية (أي جذر للشجرة) القابل للتقليم Bulletproofs+ لكل مدخل: Õ, Ĩ, R, C̃ لكل مدخل: SA+L برهان عضوية واحد لجميع المدخلات بدلًا من "16 فهرسًا + CLSAG" لكل مدخل — "ثلاثية معاد تعشيتها + SA+L" وبرهان عضوية مشترك واحد الترتيب وفق التنفيذ الحالي؛ وقد تتغير تفاصيل الصيغة قبل الانقسام الصلب
في RingCTفي FCMP++الدوال
16 إزاحة لكل مدخلإشارة إلى الكتلة التي بُني البرهان على شجرتهاجذر Curve Tree على جميع المخرجات
key image I = x·Hp(P)نفسها L = x·Hp(O)يُكشف الإنفاق المزدوج كما من قبل
المخرج الزائف C̃C̃ = C + r_c·G — جزء من الثلاثية المعاد تعشيتهاإعادة التعشية
CLSAG لكل مدخلSA+L لكل مدخل (بضع نقاط وأعداد قياسية)Schnorr المعمَّم
—برهان عضوية واحد للمعاملة كلهاGeneralized Bulletproofs + القواسم
view tag من بايت واحد، ECDH على Ed25519view tag من 3 بايتات، X25519، مرساة JanusCarrot

شاهد إعادة التعشية بأعداد فعلية في الأداة. وحين تصبح الصيغة نهائية، سيُضاف هنا أيضًا تفكيك بايتي لمعاملات FCMP++.