لأغراض تعليمية فقط؛ لا يشكل ذلك نصيحة استثمارية أو توصية استثمارية. قد تؤدي الاستثمارات إلى خسائر.
الإجابة المباشرة
ينشأ عدم تطابق المنازل العشرية في أوراكل عندما يفسر العقد عددًا صحيحًا خامًا باستخدام أس وحدات أو اتجاه سعر أو مقياس داخلي خاطئ. منازل التغذية والرمز ورمز التسعير العشرية، ومقاييس معدل صرف الغلاف أو الحصة، واصطلاحات WAD أو RAY في البروتوكول مستقلة بعضها عن بعض. ولا تثبت واجهة سليمة المظهر أن عقد المستهلك ينفذ الحساب نفسه.
لكمية رمز أساس A_raw ذات d_t من المنازل العشرية وإجابة تغذية موجبة P_raw تسعّر رمز أساس واحدًا برموز التسعير ذات d_p من المنازل، تكون الكمية الخام لرمز التسعير ذي d_q من المنازل هي V_raw = round(A_raw * P_raw * 10^d_q / 10^(d_t + d_p)). لا تصح هذه الصيغة إلا لاتجاه التسعير المحدد وبعد التحقق من التغذية والوحدات والأنواع وقاعدة التقريب. ويجب ألا يعاد تحجيم قيمة سبق أن وحّدها المهايئ.
دالة ERC-20 decimals() بيانات وصفية اختيارية للعرض، وليست ضمانًا عامًا باستخدام 18 منزلة. وتصف decimals() في التغذية استجابة تلك التغذية، لا مقياس الرمز أو البروتوكول. قد يمنع الحساب المتحقق من الفيض عبر الإرجاع، لكنه لا يكتشف صيغة خاطئة الأبعاد، وقد يحول نتيجة نهائية قابلة للتمثيل إلى حجب خدمة إذا فاض ناتج وسيط.
آلية العمل
- ثبّت السلسلة والكتلة والمستهلك والمهايئ ووكيل التغذية والمجمّع والرمز أو الخزنة وإصدارات المترجم ومكتبة الحساب وحالة الترقية.
- احصر كل عدد صحيح مع نوعه ووحدته: كمية الرمز الخام ومنازل الرمز العشرية وإجابة التغذية الموقعة ومنازل التغذية واتجاه الأصل الأساس وأصل التسعير ومعدل الغلاف أو الحصة والمقياس الداخلي للبروتوكول ومنازل رمز الناتج.
- تحقق من المصدر قبل التحويل: العنوان والاتجاه الصحيحان، وإجابة موجبة، والطابع الزمني والحالة، والعمر والنطاق المقبولان، ودلالة البديل، وقواعد سماح منسّق L2 عند انطباقها.
- اشتق صيغة أبعاد واحدة من وحدات المدخل الخام إلى وحدات الناتج الخام. افصل بوضوح بين رفع المقياس وخفضه، وحدد كل أس لقوة العشرة، ووحّد كل حد مرة واحدة فقط.
- استخدم ضربًا وقسمة كاملَي الدقة مثبتين أو استراتيجية اختزال محدودة. تجنب اقتطاع القسمة قبل الضرب، وفيض الوسيط المتحقق، والالتفاف غير المتحقق، والتحويلات غير الآمنة إلى نوع موقع أو أضيق.
- حدد التقريب إلى الأسفل أو الأعلى أو الأقرب لكل إجراء اقتصادي. قد تتطلب الضمانات والديون والاقتراض والسك والاسترداد والرسوم والتصفية وتحويل حصص الخزنة اتجاهات تحفظ مختلفة.
- اختبر متجهات مرجعية وخصائص عبر الكميات القصوى وتركيبات المنازل والمقلوبات والتغذيات المركبة والإجابات الصفرية والسالبة والقديمة والترقيات والغبار؛ وطابق النتائج على السلسلة مع نموذج مستقل عالي الدقة وحدد التعرض المتأثر.
توحيد المقاييس تحليل أبعاد، لا تنسيق. يتطلب BTC/USD وUSD/BTC صيغتين مقلوبتين؛ فتغيير التسمية لا يقلب السعر. وتتطلب التغذية المركبة مقياس كل حد وطابعه الزمني. تقطع قسمة الأعداد الصحيحة في Solidity باتجاه الصفر، ولذلك قد تعطي إعادة ترتيب متكافئة جبريًا نتائج مختلفة على السلسلة. يحل mulDiv كامل الدقة مشكلة عرض الوسيط، لكن على المستدعي تقديم البسط والمقام والوحدات والحدود واتجاه التقريب الصحيحة.
أمثلة محلولة
- ثماني منازل مقابل ثماني عشرة. تعيد تغذية BTC/USD القيمة
6,000,000,000,000معd_p = 8، فيكون السعر60,000 USD/BTC. تفسير الإجابة الخام على أنها 18 منزلة يعطي0.000006 USD/BTC، أي بخسًا بعامل10^10لا10^9. ويعطي تحجيم السعر إلى WAD القيمة6,000,000,000,000 * 10^(18 - 8) = 60,000,000,000,000,000,000,000. - وحدات الكمية والسعر والناتج. تمثل
A_raw = 2,500,000عدد2.5من الرموز عندd_t = 6؛ وتمثلP_raw = 200,000,000عدد2من رموز التسعير عندd_p = 8. لقيمة تسعير داخلية ذات 18 منزلة، تكون2,500,000 * 200,000,000 * 10^18 / 10^(6 + 8) = 5,000,000,000,000,000,000، أي5 quote tokens. حذف مقام الرمز يبالغ في قيمة المركز بعامل10^6. - المقلوب والاقتطاع. سعر ETH/USD بمقياس WAD هو
2,000 * 10^18. وسعر USD/ETH بالمقياس نفسه هوfloor(10^36 / (2,000 * 10^18)) = 500,000,000,000,000، أي0.0005 ETH/USD. وفي مثال منفصل، معA_raw = 999,999وd_t = 6وسعر2 * 10^18، يعطي الضرب والقسمة كاملَا الدقة1,999,998,000,000,000,000؛ أما قسمة الكمية على10^6أولًا فتعطي0وتفقد القيمة كلها. - فيض الوسيط والتقريب. افترض
x = 2^200وy = 2^100ومقامًا2^100. النتيجة الدقيقة2^200وتلائمuint256، لكنx * y = 2^300لا يلائم. يرجع الضرب المتحقق، ويلتف الضرب غير المتحقق، بينما يعيدmulDivكامل الدقة2^200. وتقرب قسمة الأعداد الصحيحة5 / 2إلى الأسفل فتعطي2، بينما تعطي قاعدة السقف3؛ لذا فالتقريب جزء من الثابت الاقتصادي.
المخاطر
- اختيار سلسلة أو تغذية أو وكيل أو مهايئ أو رمز أو خزنة أو عنوان مستهلك غير صحيح.
- قلب اتجاه الأصل الأساس وأصل التسعير من دون تحويل مقلوب.
- افتراض أن منازل الرمز 18 أو عدم توفر البيانات الوصفية الاختيارية أو خطئها.
- افتراض أن منازل التغذية 8 بدل قراءتها وتثبيتها.
- الخلط بين منازل رمز التسعير ومقياس WAD أو RAY أو السوق أو المحاسبة في البروتوكول.
- إغفال منازل الغلاف أو الحصة أو المؤشر أو معدل الصرف.
- تطبيق عامل مقياس مرتين بعد أن يكون المهايئ قد وحّد القيمة.
- إغفال عامل مقياس أو مقام مطلوب.
- تحويل إجابة موقعة إلى غير موقعة قبل التحقق من إيجابيتها.
- قبول نتيجة تغذية صفرية أو قديمة أو غير مكتملة أو مقيدة أو غير صالحة.
- انخفاض أو فيض أس عشري أو حساب قوة عشرة أو تجاوزه الحدود.
- فيض ناتج ضرب وسيط رغم أن خارج القسمة النهائي قابل للتمثيل.
- التفاف أو اقتطاع صامت بسبب حساب غير متحقق أو إزاحة بتات أو تضييق صريح.
- إتلاف الدقة بالقسمة قبل الضرب أو تحويل الغبار إلى صفر.
- اختيار التقريب إلى الأسفل أو الأعلى أو الأقرب بصورة خاطئة للإجراء الاقتصادي.
- تراكم فقد الدقة أو تسرب القيمة المنهجي عبر التحويلات المتكررة.
- مقارنة أسعار وسقوف ونسب ومئويات ونقاط أساس وقيم WAD وRAY بوحدات مختلفة.
- إبطال ترقية التغذية أو الرمز أو الوكيل أو المهايئ أو الخزنة افتراضات المنازل المخزنة.
- إخفاء تنسيق الواجهة أو المحفظة أو RPC أو المفهرس حسابًا مختلفًا على السلسلة.
- تضخيم سوء التقييم للاقتراض أو السك أو الاسترداد أو التصفية أو السقوف أو الديون المعدومة أو إصدار الحصص غير العادل.
مفاهيم خاطئة شائعة
- “كل رمز ERC-20 يستخدم 18 منزلة عشرية.” دالة البيانات الوصفية في ERC-20 اختيارية، وتستخدم الأصول المنشورة قيمًا وسلوكيات مختلفة.
- “كل تغذية سعر بالدولار تستخدم 8 منازل.” دقة التغذية خاصية واجهة للنشر المحدد ويجب قراءتها وتسجيل إصدارها.
- “العدد الخام الكبير يثبت التلاعب.” لا معنى للحجم الخام من دون الوحدات والاتجاه والمنازل والطابع الزمني ومقياس المستهلك.
- “يجعل Solidity 0.8 التحجيم صحيحًا.” قد يرجع فحص الفيض، لكنه لا يصلح الوحدات الخاطئة أو الاقتطاع أو التحويل أو سياسة التقريب.
- “الضرب قبل القسمة أو إضافة منازل أكثر يحسن الدقة دائمًا.” قد يؤدي إلى فيض أو تحجيم مزدوج أو يحافظ على وحدة خاطئة؛ وما زال الحساب كامل الدقة يحتاج صيغة صحيحة.
مواضيع ذات صلة
المصادر
- Data Feeds API Reference - Chainlink Documentation (تاريخ الاطلاع: 2026-08-13)
- Chainlink Data Feeds - Chainlink Documentation (تاريخ الاطلاع: 2026-08-13)
- ERC-20: Token Standard - Ethereum Improvement Proposals (تاريخ الاطلاع: 2026-08-13)
- Types - Solidity Documentation (تاريخ الاطلاع: 2026-08-13)
- Expressions and Control Structures - Solidity Documentation (تاريخ الاطلاع: 2026-08-13)
- Utils - OpenZeppelin Contracts Documentation (تاريخ الاطلاع: 2026-08-13)
- Oracles - Aave Protocol Documentation (تاريخ الاطلاع: 2026-08-13)
- Compound v2 Price Feed - Compound Documentation (تاريخ الاطلاع: 2026-08-13)