المنازل العشرية لرموز ERC-20: تحويل الرصيد الخام إلى كمية مقروءة
قد يمثل عدد صحيح كبير من العقد كمية صغيرة من الرمز. تحقق من الوحدات قبل مقارنة أرصدة المحافظ.
لتحويل رصيد خام من رموز ERC-20 إلى كمية مقروءة، اقسم العدد الصحيح على عشرة مرفوعة إلى أس يساوي عدد المنازل العشرية المتحقق منه للرمز. افعل ذلك فقط إذا كانت القيمة لا تزال بوحدات أساسية خام. ربما أجرت المحفظة أو مستكشف الشبكة التحويل بالفعل.
مثلا، يمثل الرصيد الخام 1234567 مع 6 منازل عشرية 1.234567 رمزا. ويمثل العدد الصحيح الخام نفسه مع 18 منزلة عشرية 0.000000000001234567 رمزا. لا تخبرك أي من النتيجتين بقيمة بالدولار. هذه أمثلة حسابية افتراضية وليست أرصدة جرى الاستعلام عنها من محفظة.
ما الذي تغيره المنازل العشرية عند قراءة الرصيد
تعيد طريقة balanceOf في عقد ERC-20 عددا صحيحا. تصف مواصفة ERC-20 طريقة decimals بأنها مقياس لعرض كمية الرمز للمستخدم. تصور العدد الصحيح بوصفه عددا من أصغر وحدات حساب الرمز، بينما يحدد عدد المنازل العشرية موضع الفاصلة العشرية في العرض.
الحساب هو:
كمية الرمز المقروءة تساوي العدد الصحيح الخام مقسوما على عشرة مرفوعة إلى أس يساوي عدد المنازل العشرية.
يكتب هذا المقال كل عدد صحيح خام بالنظام العشري، دون فواصل آلاف. يجب أولا فك ترميز القيمة السداسية العشرية التي تبدأ بـ 0x إلى عدد صحيح. فالحروف والأرقام في ذلك الترميز ليست كمية عشرية من الرمز يمكن نسخها كما هي إلى هذه القسمة.
إليك العدد الصحيح الافتراضي نفسه بثلاثة مقاييس مختلفة:
| العدد الصحيح الخام | المنازل العشرية | كمية الرمز |
|---|---|---|
1234567 |
6 | 1.234567 |
1234567 |
18 | 0.000000000001234567 |
1234567 |
0 | 1234567 |
مع صفر منازل عشرية يكون المقسوم عليه 1. ومع 6 منازل عشرية يعادل رمز كامل واحد 1000000 وحدة خام. ومع 18 منزلة يعادل 1000000000000000000 وحدة خام. لا يكشف حجم العدد الصحيح وحده عن المقياس المطبق.
تحقق من المقياس قبل الحساب
ابدأ بالشبكة والعنوان الكامل لعقد الرمز. رمز التداول مجرد تسمية، وليس معرّفا فريدا. إذا لم تكن متأكدا أي عنوان يخص الرمز وأيهما يخص الحائز، فاقرأ أولا دليل عنوان المحفظة وعقد الرمز.
استخدم معلومات النشر الرسمية للمشروع على تلك الشبكة للتحقق من هوية العقد. ثم افحص نتيجة decimals المخصصة للقراءة فقط عبر مستكشف أو أداة قراءة عقود موثوقة. سجّل النتيجة مع العقد والشبكة. لا تحسم البيانات الوصفية المقروءة من نشر آخر المقياس الخاص برصيدك.
لا تملأ عدد المنازل العشرية المفقود بالقيمة 18. يجعل معيار ERC-20 هذه الطريقة اختيارية. يوثق مرجع ERC20 من OpenZeppelin قيمة افتراضية قدرها 18 في تنفيذه، ويمكن تجاوزها. القيمة الافتراضية في تنفيذ ما ليست قاعدة عامة لجميع الرموز. ويوضح المرجع نفسه أن المنازل العشرية تخدم تنسيق العرض، ولا تغير حسابات الرصيد والتحويل بالأعداد الصحيحة داخل العقد.
إذا فشلت القراءة، فميّز بين عدم توفر المصدر وعدم إتاحة العقد بيانات وصفية صالحة للاستخدام. جرّب مصدرا موثوقا للنشر نفسه أو افحص توثيق تنفيذه. إذا ظل المقياس غير متحقق منه، فاحتفظ بالعدد الصحيح الخام وضع على الكمية المقروءة وصف غير محسومة. الرقم المعقول ظاهريا ليس تحويلا متحققا منه.
تحقق مما إذا كان الرقم منسقا بالفعل
قبل تطبيق الصيغة، اقرأ تسمية الحقل وتوثيق المصدر. قد تصف نتيجة العقد الخام والكمية التي طبّعتها واجهة برمجية وعرض المحفظة المقرّب الرصيد نفسه بطرق مختلفة. يشير وجود فاصلة عشرية إلى احتمال التنسيق، لكن غيابها لا يثبت أن القيمة خام: قد تكون الكمية المنسقة رمزين بالضبط.
في مثال افتراضي لرمز له 6 منازل عشرية، تصبح القيمة الخام 2500000 2.5 رمزا. إذا كانت المحفظة تعرض بالفعل 2.5 رمزا، فإن قسمة الرقم المعروض على 1000000 تعطي 0.0000025، وهو تحويل ثان خاطئ.
بعد الحصول على كمية الرمز الدقيقة، طبّق تقريب العرض بشكل منفصل. القيمة الخام 1 مع 6 منازل عشرية تساوي 0.000001 رمزا. قد تعرض واجهة تقتصر على 4 منازل عشرية 0.0000. لا يثبت هذا العرض المقرّب أن الرصيد فارغ. احتفظ بالنتيجة الدقيقة متاحة عند تقصي اختلاف، دون اختلاق أرقام معنوية إضافية تتجاوز دقة المصدر.
في السكربت أو جدول البيانات، احتفظ بالعدد الصحيح الخام كنص أو عدد صحيح دقيق حتى التنسيق. قد تفقد الأعداد الصحيحة الكبيرة دقتها عند استخدام Number العادي في جافاسكربت، كما يشرح مرجع MDN للأعداد الصحيحة الآمنة؛ ولا تستعيد القسمة دقة فُقدت بالفعل. توفر وثائق ethers v6 الدالة formatUnits التي تعيد سلسلة نصية عشرية. مرّر عدد المنازل العشرية المتحقق منه صراحة، واحتفظ بتلك السلسلة بدلا من تحويلها إلى عدد غير دقيق طلبا للسهولة.
طابق قراءتين دون نقل الرموز
استخدم الرصيد نفسه للفحص. لا تتطلب قراءة بيانات العقد العامة تحويلا أو موافقة أو عبارة استرداد أو توقيع المحفظة.
- ثبّت الهوية. سجّل الشبكة وعنوان الحائز العام وعقد الرمز المتحقق منه. لا تستبدل عنوان الحائز بعنوان العقد عند قراءة رصيده.
- سجّل الملاحظة. احتفظ بالوقت ورقم الكتلة إن توفرا. فضّل قراءات من الكتلة نفسها؛ وإلا فقد يمنع تحويل بين الملاحظتين التطابق التام.
- سمّ المدخلات. احفظ القيمة الأصلية، وما إذا كانت خاما أو منسقة، والدليل على عدد المنازل العشرية للعقد. إذا لم يشرح المصدر وحداته، فتوقف عن التحويل عند تلك النقطة.
- طبّق المقياس مرة واحدة. حوّل العدد الصحيح الخام باستخدام تلك المنازل العشرية، مع الحفاظ على الأرقام الدقيقة قبل أي تقريب للعرض. اترك الكمية المقدمة بالفعل بوحدات الرمز كما هي.
- قارن وحدات متشابهة. قارن كمية الرمز تلك بكمية الرمز في الشاشة الأخرى بدقة قابلة للمقارنة. إذا كان الصفر نتيجة تقريب، فاطلب تفاصيل أكثر قبل استنتاج أن الرصيد الخام صفر.
- عالج الفرق المتبقي. إذا تطابقت الهوية ولقطة الرصد والوحدات، لكن الكميات ما زالت مختلفة، فسجّل القراءتين ومصدريهما. إذا فشل مصدر، فضع علامة على القراءة بأنها غير متاحة بدلا من إدخال صفر. يتناول دليل اختلاف المحفظة استجابات المصادر المفقودة والأسعار ونطاق تغطية المراكز.
النتيجة المفيدة هي سجل يستطيع شخص آخر إعادة إنتاجه: أي عقد، ورصيد من، وأي ملاحظة، وما القيمة الخام، وما عدد المنازل العشرية، وما الكمية المحوّلة. إجراء معاملة ليس جزءا من إثبات التحويل.
افصل كمية الرمز عن قيمته
يمنحك التنسيق عددا من هذا الرمز. يحتاج التقدير بالدولار أيضا إلى سعر للأصل المحدد نفسه، بعملة معلومة وفي وقت معلوم. لا تثبت المنازل العشرية ذلك السعر أو سيولة التداول أو سلامة العقد. يمكن لرمز غير مألوف أن يعيد عددا عاديا تماما من المنازل العشرية.
يطرح رمز الإيصال أو الرمز المغلّف سؤالا آخر: ما مقدار الأصل الأساسي الذي يمثله كل رمز؟ تحويل رصيده الخام يعطيك كمية من رموز الإيصال أو الرموز المغلّفة. أي مكافئ بالأصل الأساسي يحتاج إلى طريقة التحويل ووحداتها في البروتوكول المعني. لا يمكن أن يحل عدد المنازل العشرية للرمز محل سعر التبادل هذا، كما تحتاج نسبة بروتوكول مثل عامل الصحة إلى مقياسها الموثق الخاص.
إذا ظل الرقم يبدو خاطئا، فاحتفظ بالمجهول المهم. جهل عدد المنازل العشرية يبقي الكمية المقروءة غير محسومة. ومعرفة الكمية مع جهل السعر تبقي التقييم غير محسوم. إن إظهار هذه الفجوات بوضوح يمنحك فحصا تاليا مفيدا دون تغيير الرصيد الذي تحاول فهمه.
أسئلة شائعة
هل تستخدم جميع رموز المعيار عشرين ثماني عشرة منزلة عشرية؟
لا. يستخدم تنفيذ أوبن زبلين لهذا المعيار ثماني عشرة منزلة افتراضيا، لكن المعيار لا يفرض هذا العدد. وطريقة قراءة عدد المنازل العشرية اختيارية. تحقق من عدد المنازل للعقد والشبكة المحددين قبل تحويل الرصيد الخام.
هل أقسم الكمية الظاهرة في محفظتي وفقا لعدد المنازل العشرية للرمز؟
لا تحتاج إلى تطبيق مقياس التحويل إلا على كمية موثقة بوصفها وحدات أساسية خاما. قد تعرض المحفظة كمية الرمز المقروءة بالفعل. تؤدي قسمة الكمية المنسقة مرة أخرى إلى نتيجة خاطئة، لذا حدد أولا وحدات الحقل الذي تقرؤه.
هل يثبت ظهور الصفر أن رصيدي من الرمز فارغ؟
لا. قد تقرّب الشاشة كمية موجبة صغيرة إلى الصفر. تحقق من كمية أدق أو من الرصيد الخام مع عدد منازل عشرية متحقق منه. نجاح قراءة الرصيد الخام بنتيجة صفر يختلف عن عدم توفر القراءة.