الانتقال إلى المحتوى

فك ترميز Calldata في المحفظة

دليل يبدأ بالتحقق من Calldata للمعاملات، وكلمات ABI وإزاحاتها، وتصادم المحددات، والوكلاء، والدفعات، والموافقات، وتصاريح البيانات المهيكلة، والمحاكاة، والمطابقة بعد المعاملة.

آخر تحديث

لأغراض تعليمية فقط؛ لا يشكل ذلك نصيحة استثمارية أو توصية استثمارية. قد تؤدي الاستثمارات إلى خسائر.

الإجابة المباشرة

Calldata هي سلسلة البايتات الثابتة المقدمة كمدخل لمعاملة Ethereum من المستوى الأعلى أو لاستدعاء رسالة داخلي. يبدأ استدعاء دالة Solidity التقليدي بمحدد 4-byte تتبعه وسائط مرمزة وفق ABI، لكن Calldata لا تصف نفسها: فقد تعني البايتات ذاتها أشياء مختلفة باختلاف الشيفرة المنفذة أو تطبيق الوكيل أو المخطط. ولا يلزم أن تتبع دوال fallback أو التجميع الخام أو البروتوكولات غير المكتوبة بـ Solidity واجهة الدوال التقليدية أصلًا.

لذلك ينبغي للمحفظة عرض ما هو أكثر من اسم دالة مرشح. تربط المراجعة الآمنة البايتات بـ chainId وكتلة وfrom وto وvalue الأصلي وcodeHash للشيفرة المنفذة والتطبيق النشط وABI موثوق؛ وتفك كل استدعاء متداخل بصرامة؛ وتميز Calldata على السلسلة من توقيعات EIP-712؛ وتحاكي في حالة معلومة؛ ثم تطابق الإيصال الفعلي وتغيرات الحالة بعد الإدراج.

فك ترميز Calldata
0 / 5
0 العناصر التي تمت مراجعتها; 5 العناصر لا تزال دون حل

إن استكمال هذه المراجعة لا يثبت أن الأصل أو المعاملة أو النظام آمن.

آلية العمل

  1. ثبّت غلاف التوقيع ونقطة الملاحظة: chainId ورقم الكتلة وتجزئتها وfrom وto وvalue الأصلي وبايتات الإدخال والـ nonce وحقول الرسوم. احتفظ بمصدر المحفظة أو RPC؛ فالحمولة المفكوكة من سلسلة أو كتلة أخرى لا تمثل الادعاء نفسه.
  2. صنّف الكائن قبل فك ترميزه. تستخدم المعاملة وبيانات EIP-712 المهيكلة وتصريح ERC-2612 وUserOperation في ERC-4337 ورسالة personal-sign الخام نطاقات ومخططات مختلفة؛ فلا تمررها جميعًا قسرًا عبر ABI المعاملات.
  3. حدّد الهدف عند الكتلة المثبتة. اقرأ الشيفرة المنفذة وcodeHash؛ وحدد الوكيل أو beacon أو التطبيق عند الاقتضاء؛ وسجل خانات التطبيق والمشرف؛ واحصل على ABI مطابق تمامًا لإصدار الشيفرة. سجل المحددات يقدم مرشحين لا مرجعًا حاسمًا.
  4. فك الترميز بصرامة. المحدد هو أول 4 bytes من Keccak-256 للتوقيع القانوني للدالة من دون أنواع الإرجاع. تشغل القيم الثابتة كلمات 32-byte، وتحمل رؤوس القيم الديناميكية إزاحات من كتلة الوسائط بعد المحدد. ارفض البيانات المبتورة والإزاحات الخارجة عن الحدود والأطوال المستحيلة والحشو غير الصالح والبايتات اللاحقة غير المفسرة.
  5. وسّع استدعاءات multicall وCalldata المتداخلة والتنفيذ المفوض بصورة متكررة. أدرج لكل استدعاء فرعي الهدف والقيمة الأصلية والمحدد والوسائط ونوع الاستدعاء وأي علامة allowFailure. مع delegatecall تعمل شيفرة التطبيق في سياق عنوان المستدعي ورصيده وتخزينه مع بقاء msg.sender وmsg.value كما هما.
  6. أنشئ سجلين منفصلين للصلاحيات والقيمة ثم حاكِ. سجل المستلمين والمنفقين ومشغلي NFT ووحدات الرموز الخام والمنازل العشرية والمواعيد النهائية وحدود الانزلاق والقيمة الأصلية. حاكِ باستخدام الكتلة والمرسل والقيمة نفسها، لكن اعتبر النتيجة لقطة مشروطة لأن الحالة والأسعار والوقت والشيفرة وترتيب المعاملات قد تتغير.
  7. أكد كل حقل جوهري قبل التوقيع. بعد الإدراج افحص حالة الإيصال والسجلات وآثار التنفيذ إن توفرت وتغيرات الأرصدة والمخصصات وحالة المشغلين؛ وميز فشل الاستدعاء الفرعي الذي التقطته الشيفرة من نجاح المستوى الأعلى؛ واحسب الغاز حتى عند الارتداد؛ وانتظر النهائية المطلوبة؛ وتوقف بدل إعادة توقيع فشل غير مفسر.

أمثلة محلولة

  • تحويل ERC-20 ثابت. تستخدم transfer(address,uint256) عادة المحدد 0xa9059cbb. محدد واحد مع كلمتي ABI يساوي 4 + 2 * 32 = 68 bytes. تعرض كمية خام قدرها 1,500,000 لرمز جرى التحقق مستقلًا من أنه يستخدم 6 decimals بوصفها 1.5 tokens. المنازل العشرية بيانات وصفية خارجية للعقد وليست مشفرة في الوسيطين، كما أن المحدد وحده لا يعرّف العقد أو الدالة تعريفًا فريدًا.
  • إزاحة بايتات ديناميكية. في f(address,bytes) مع حمولة 3-byte يشغل الرأس المؤلف من كلمتين 64 bytes. الإزاحة الديناميكية هي 0x40 وتقاس من بداية كتلة الوسائط مع استبعاد المحدد. يحتوي الذيل كلمة طول 32-byte وكلمة بيانات محشوة 32-byte، ولذلك يكون إجمالي Calldata هو 4 + 64 + 32 + 32 = 132 bytes. إذا عوملت الإزاحة كموضع مطلق من البايت صفر فستصل متأخرًا بأربعة بايتات.
  • قيمة الدفعة خاصة بالتطبيق. يحمل الاستدعاء الخارجي 1.00 ETH، وتطلب ثلاثة استدعاءات فرعية مفكوكة صراحة 0.20 ETH و0.30 ETH و0.10 ETH، أي 0.60 ETH إجمالًا. قد يعيد كود الدفعة 0.40 ETH المتبقية أو يحتفظ بها أو يمررها أو يرتد بسببها. وإذا فشل الاستدعاء الثالث مع allowFailure=true فقد تبقى الاستدعاءات السابقة نافذة، بينما قد يرتد تطبيق ذري بالكامل.
  • التصريح ليس Calldata الخاصة بالمرسِل الوسيط وقت التوقيع. يوقع مالك لديه 1,000 USDC تصريح ERC-2612 بقيمة 300 USDC عند nonce يساوي 41. التوقيع وحده لا يغير الرصيد ولا المخصص. بعد أن يقدمه وسيط بنجاح يصبح nonce هو 42 والمخصص 300؛ وبعد إنفاق 180 يصبح الرصيد 820 والمخصص المتبقي 120. قطع اتصال الموقع لا يلغي الصلاحية.

المخاطر

  • فك الترميز اعتمادًا على سلسلة أو fork أو وسم كتلة أو غلاف معاملة خاطئ.
  • التوقيع لنطاق أو عنوان هدف أو مستلم منتحل.
  • اعتبار محدد 4-byte فريدًا رغم احتمال التصادم.
  • استخدام ABI مخمن أو قديم أو لم يتحقق منه بصورة صحيحة.
  • الثقة بوسم مصدر موثق من دون مطابقته مع codeHash الحالي للشيفرة المنفذة.
  • إغفال ترقية للتطبيق أو beacon أو المشرف بين المراجعة والتنفيذ.
  • تجاهل دالة في الوكيل يتصادم محددها مع التطبيق.
  • نسيان أن delegatecall يكتب في سياق تخزين المستدعي.
  • قبول إزاحات أو أطوال أو حشو ديناميكي معيب أو بايتات لاحقة غير مفسرة.
  • عدم توسيع دفعة متداخلة تخفي أهدافًا أو قيمًا أو صلاحيات.
  • افتراض الذرية مع أن التطبيق يلتقط فشل الاستدعاءات الفرعية أو يسمح به.
  • تجاهل value الأصلي في المستوى الأعلى لأن وسائط الرمز تبدو غير ضارة.
  • تطبيق منازل عشرية خاطئة أو افتراض أن رموز رسوم التحويل وإعادة الأساس قياسية.
  • منح مخصص ERC-20 غير محدود أو إساءة معالجة سباق تحديث المخصص.
  • إغفال النطاق الشامل للمجموعة في setApprovalForAll الخاص بـ NFT.
  • الخلط بين بيانات EIP-712 المهيكلة أو تصريح ERC-2612 وبين Calldata لمعاملة.
  • إغفال حدود nonce والموعد النهائي والعقد المتحقق والنطاق المرتبط بالسلسلة وإعادة التشغيل.
  • اعتبار المحاكاة مستقرة رغم تغير oracle أو الطابع الزمني أو الحالة المعلقة أو MEV أو الشيفرة.
  • اعتبار حالة الإيصال أو السجلات أو آثار المزود دليلًا كاملًا على الحالة الاقتصادية.
  • إعادة التوقيع بلا تدقيق عبر واجهة مخترقة أو تجاهل مخاطر الإدراج وإعادة التنظيم والنهائية.

مفاهيم شائعة خاطئة

  • محدد الدالة يعرّف بصورة فريدة ما سينفذه العقد.
  • ملخص واجهة موثقة مطابق للبايتات والتطبيق الحالي محل التوقيع.
  • لا يمكن لمعاملة ذات value=0 نقل رموز أو NFT أو أصول مفوضة.
  • نجاح المحاكاة أو الإيصال يثبت الأمان والنتيجة الاقتصادية المقصودة.
  • قطع اتصال التطبيق اللامركزي يلغي الموافقات والتصاريح وصلاحيات مشغلي NFT.

موضوعات ذات صلة

المصادر

التنقل

ابحث في الويكي...