دليل تكامل المبلغ المقياسي لواجهة المستخدم
دعم امتداد المبلغ المقياسي لواجهة المستخدم على سولانا
الخلفية
يسمح امتداد المبلغ المقياسي لواجهة المستخدم لمصدري الرموز بتحديد مضاعف ليتم استخدامه عند حساب مبلغ واجهة المستخدم لرصيد الرمز الخاص بالمستخدم. هذا يمكّن المصدرين من إنشاء رموز قابلة لإعادة التأسيس وتمكين أشياء مثل تقسيم الأسهم. هذا الامتداد، مثل امتداد الرمز الحامل للفائدة، يوفر مبلغًا تجميليًا بحتًا لواجهة المستخدم مما يعني أن الفرق تحتاج إلى القيام ببعض العمل الإضافي لتوفير تجربة جيدة. تتم جميع العمليات الحسابية والتحويلات الأساسية باستخدام المبالغ الخام في البرنامج.
الموارد:
ملخص سريع
- يجب على المستخدمين النهائيين التفاعل مع UIAmount (المبلغ الخام × المضاعف) لسعر الرمز، ورصيد الرمز، ومبالغ الرمز كلما أمكن ذلك
- يجب على تطبيقات dApps ومقدمي الخدمات استخدام المبلغ الخام والأسعار غير المقياسية لجميع الحسابات والتحويل للمستخدمين عند الحافة
- يجب توفير تغذيات الأسعار التاريخية لكل من المبالغ المقياسية وغير المقياسية لتسهيل التكامل
- يجب أن تكون قيم المضاعف التاريخية متاحة للوصول إليها للحصول على بيانات تاريخية دقيقة
تعريفات المصطلحات
- المضاعف: مضاعف ثابت قابل للتحديث يستخدم لحسابات مبلغ واجهة المستخدم
- UIAmount: المضاعف × المبلغ الخام (المعروف أيضًا باسم: المبلغ المقياسي)
- المبلغ الخام: المبلغ (المعروف أيضًا باسم: المبلغ غير المقياسي)
الرصيد الحالي
المبلغ الحالي للعرض
- في أي وقت تعرض فيه مبالغ للرموز التي تستخدم امتداد المبلغ المقياسي لواجهة
المستخدم للمستخدمين النهائيين، يجب عليك استخدام إما:
- UIAmount/UIAmountString (مفضل)
- حساب يدوي للمبلغ الخام × المضاعف
- نوصي باقتطاع هذه القيمة بناءً على عدد المنازل العشرية التي يمتلكها الرمز.
- مثال: إذا كان لـ yUSD 6 منازل عشرية ولدى المستخدم UIAmount بقيمة 1.123456789، فيجب عليك عرض "1.123456"
أين تحصل على هذه البيانات:
- للحصول على الرصيد الحالي للمستخدم يمكنك الحصول على معلومات محدثة عن المبالغ المذكورة أعلاه عن طريق استدعاء إما getTokenAccountBalance أو getAccountInfo
- إذا كنت بحاجة إلى معرفة مبلغ واجهة المستخدم لمبلغ عشوائي، يمكنك الحصول على هذه
الحسابات عن طريق استدعاء الدالة
amountToUiAmountForMintWithoutSimulation
(web3.js v1) أو محاكاة معاملة باستخدام amountToUiAmount.- ملاحظة: يتطلب amountToUiAmount محاكاة معاملة مما يعني أنه يحتاج أيضًا إلى دافع رسوم صالح برصيد. لهذا السبب، لا ينبغي أن تكون هذه الطريقة الافتراضية للحصول على الرصيد.
استدعاءات RPC
getTokenAccountBalance
- يعيد رصيد حساب الرمز المميز ومعلومات العملة
import { address, createSolanaRpc } from "@solana/kit";const rpc_url = "https://api.devnet.solana.com";const rpc = createSolanaRpc(rpc_url);let tokenAddress = address("2uuvxpnEKw52aTqNerHiQ3WeSqZriCMNVt8LhWfrkbPk");let tokenBalance = await rpc.getTokenAccountBalance(tokenAddress).send();console.log("Token Balance:", tokenBalance);/* Token Balance: {context: { apiVersion: '2.2.14', slot: 381132711n },value: {amount: '10000000',decimals: 6,uiAmount: 20,uiAmountString: '20'}} */
getAccountInfo
- يعيد معلومات الحساب ومعلومات العملة
import { address, createSolanaRpc } from "@solana/kit";const rpc_url = "https://api.devnet.solana.com";const rpc = createSolanaRpc(rpc_url);const publicKey = address("2uuvxpnEKw52aTqNerHiQ3WeSqZriCMNVt8LhWfrkbPk");const accountInfo = await rpc.getAccountInfo(publicKey).send();console.log("Account Info:",JSON.stringify(accountInfo,(key, value) => (typeof value === "bigint" ? value.toString() : value),2));/* Account Info: {"context": {"apiVersion": "2.2.14","slot": "381133640"},"value": {"data": {"parsed": {"info": {"extensions": [{"extension": "immutableOwner"},{"extension": "pausableAccount"}],"isNative": false,"mint": "BZCd6HfTbb5ZYJ8hQsm8282tG4QzLyeqFR6tdgQA9EAG","owner": "G7ARQSUCwNrfvTDUCZvM5xdiRdBJiN3qVw2PryD8Wnib","state": "initialized","tokenAmount": {"amount": "10000000","decimals": 6,"uiAmount": 20,"uiAmountString": "20"}},"type": "account"},"program": "spl-token-2022","space": "174"},"executable": false,"lamports": "2101920","owner": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb","rentEpoch": "18446744073709551615","space": "174"}} */
تحديث المبلغ الحالي
نظرًا لأن المُصدرين يمكنهم تحديث المضاعف في أي وقت، يمكنك التفكير في الاستعلام بشكل دوري للحفاظ على تحديث رصيد الحساب. من غير المرجح أن يقوم المُصدرون بتحديث هذا المضاعف أكثر من مرة واحدة في اليوم. إذا تم تعيين مضاعف لتاريخ مستقبلي، يمكنك الاستعلام تلقائيًا في وقت التحديث هذا
مبالغ الرموز المميزة في المعاملات (التحويلات / المبادلات إلخ)
- يجب على المستخدمين إدخال المبالغ ليتم تفسيرها على أنها "UIAmount" المقياس. يجب
على التطبيق الذي يعالج هذا تحويله إلى مبلغ الرمز المميز الخام للمعاملة.
- إذا كانت هناك مشكلات في التقريب، قم بالتقريب لأسفل ويفضل ترك كمية صغيرة جدًا بدلاً من المخاطرة بفشل المعاملة
- للقيام بهذا التحويل يمكنك استخدام الدالة
uiAmountToAmountForMintWithoutSimulation
(web3.js v1) أو محاكاة معاملة باستخدام amountToUiAmount.
import { uiAmountToAmountForMintWithoutSimulation } from "@solana/web3.js";import { Connection, PublicKey, clusterApiUrl } from "@solana/web3.js";const connection = new Connection(clusterApiUrl("devnet"), "confirmed");const mint = new PublicKey("BZCd6HfTbb5ZYJ8hQsm8282tG4QzLyeqFR6tdgQA9EAG");const uiAmount = "20.2";const rawAmount = await uiAmountToAmountForMintWithoutSimulation(connection as unknown as Connection,mint,uiAmount);console.log("Raw Amount:", rawAmount);/* Raw Amount: 20200000 */
- يجب على التطبيقات استخدام المبلغ الإجمالي الخام عندما يطلب المستخدم تنفيذ
إجراء بـ "الحد الأقصى" أو "كل" رصيده. هذا يضمن عدم ترك أي غبار متبقي.
- اختياري: يمكنك التفكير في إغلاق الحساب تلقائيًا عند استخدام "الحد الأقصى" لاسترداد وديعة التخزين للمستخدم
سعر الرمز
- يجب دائمًا عرض سعر الرمز كسعر مقياس حيثما أمكن ذلك.
- إذا كنت مزود خدمة تغذية الأسعار، مثل أوراكل، فيجب عليك عرض كل من السعر المقياس
وغير المقياس.
- حيثما أمكن، قدم SDK/API يجرد تعقيدات امتداد مبلغ واجهة المستخدم المقياس.
المضاعف الحالي
- يمكن قراءة المضاعف الحالي من سك الرمز في أي وقت عن طريق استدعاء
getAccountInfo
. بالإضافة إلى ذلك، إذا تم تعيين مضاعف مستقبلي، فإن هذه المعلومات متاحة أيضًا من سك الرمز. نوصي بعدم إظهار هذا المضاعف لأنه قد يسبب ارتباكًا في تجربة المستخدم.
import { address, createSolanaRpc } from "@solana/kit";const rpc_url = "https://api.devnet.solana.com";const rpc = createSolanaRpc(rpc_url);const publicKey = address("BZCd6HfTbb5ZYJ8hQsm8282tG4QzLyeqFR6tdgQA9EAG");const accountInfo = await rpc.getAccountInfo(publicKey, { encoding: "jsonParsed" }).send();const mintData = accountInfo.value?.data as Readonly<{parsed: {info?: {extensions: {extension: string;state: object;}[];};type: string;};program: string;space: bigint;}>;const scaledUiAmountConfig = mintData.parsed.info?.extensions?.find((extension) => extension.extension === "scaledUiAmountConfig") as Readonly<{state: {newMultiplierEffectiveTimestamp: number;newMultiplier: number;multiplier: number;};}>;const currentMultiplier =scaledUiAmountConfig?.state &&Date.now() / 1000 >=scaledUiAmountConfig.state.newMultiplierEffectiveTimestamp? scaledUiAmountConfig.state.newMultiplier: scaledUiAmountConfig.state.multiplier;console.log("Scaled UI Amount Config:", scaledUiAmountConfig);console.log("Current Multiplier:", currentMultiplier);/*Scaled UI Amount Config: {extension: 'scaledUiAmountConfig',state: {authority: 'G7ARQSUCwNrfvTDUCZvM5xdiRdBJiN3qVw2PryD8Wnib',multiplier: '2',newMultiplier: '2',newMultiplierEffectiveTimestamp: 1743000000n}}Current Multiplier: 2*/
البيانات التاريخية
البيانات التاريخية لتغذية الأسعار
- يجب على الخدمات التي توفر بيانات تاريخية تخزين وإظهار كل من الأسعار المقياسة وغير المقياسة لامتداد مبلغ واجهة المستخدم المقياس.
- نتوقع استخدام المبالغ المقياسة بشكل أكثر تكرارًا حيث يتماشى ذلك مع كيفية تعامل عالم التمويل التقليدي مع الرسوم البيانية المتعلقة بالرموز ذات تقسيمات الأسهم.
البيانات التاريخية للمبالغ
- إذا كنت ترغب في إظهار الرصيد المحول في الماضي، فأنت بحاجة إلى الوصول إلى المضاعف في ذلك الـ slot المحدد. يمكنك أيضًا حفظ UiAmount للتحويلات أثناء معالجة المعاملات لتجنب إجراء هذا الحساب في المستقبل.
التوافق مع الإصدارات السابقة
- افتراضيًا، المحافظ والتطبيقات التي لا تفهم امتداد واجهة المستخدم ذات المقياس ستعرض السعر الإجمالي الصحيح للنشاط من خلال ضرب السعر غير المقياس × المبلغ الخام.
- ومع ذلك، ستعرض السعر غير المقياس مما قد يسبب بعض الارتباك للمستخدم.
- نأمل أن يشجع هذا الفرق على تحديث تطبيقاتهم اللامركزية لتكون متوافقة مع الرموز التي تستخدم امتداد واجهة المستخدم ذات المقياس، ونحن سعداء بتقديم الدعم خلال هذه العملية.
أولويات التكامل الموصى بها لكل منصة
المتطلبات العامة
المتطلب | الوصف | الأولوية |
---|---|---|
دعم إجراءات المستخدم باستخدام UiAmount | يجب إدخال جميع إجراءات المستخدم في UiAmount عندما يكون UiAmount مفعلاً في جميع أنحاء التطبيق. إذا لم يكن UiAmount مرئيًا في التطبيق، يجب استخدام المبالغ الخام حتى يتم تحديث التطبيق. | P0 |
المحافظ
المتطلب | الوصف | الأولوية |
---|---|---|
عرض الرصيد المقياس | عرض المبلغ المقياس (uiAmount) كرصيد أساسي. | P0 |
دعم تحويلات الرموز | يجب على المستخدمين النهائيين إدخال مبالغ التحويل بأرصدتهم المقياسة (المبلغ الخام × الرصيد). | P0 |
عرض السعر الفوري | عرض السعر الفوري المقياس للمستخدمين | P0 |
بيانات تعريف سجل المعاملات | عرض المبلغ المقياس (UIAmount) لكل تحويل حيثما أمكن ذلك. | P1 |
إظهار تحديثات المضاعف في سجل المعاملات | عندما تحدث تحديثات المضاعف، عرض هذا كحدث في سجل معاملات المستخدم بما في ذلك المبلغ المكتسب | P2 |
عرض رسم بياني لتاريخ الأسعار | عكس الأسعار المقياسة في الرسم البياني للسعر | P1 |
التأهيل/تلميحات الأدوات | تقديم تلميحات أدوات أو تأهيل لتثقيف المستخدمين حول الرموز التي تستخدم امتداد واجهة المستخدم ذات المقياس | P2 |
المستكشفون
المتطلب | الوصف | الأولوية |
---|---|---|
تحسينات صفحة تفاصيل الرمز | عرض البيانات الوصفية مثل إجمالي القيمة السوقية المقياسية والمضاعف الحالي | P0 |
عرض الرصيد المقياسي للأرصدة | عرض الأرصدة المقياسية (UiAmount) للأرصدة الحالية. | P0 |
عرض الرصيد المقياسي للمعاملات | عرض الأرصدة المقياسية (UiAmount) لمبالغ التحويل للمعاملات السابقة. | P0 |
عرض السعر المقياسي للمعاملات | عرض الأسعار المقياسية للمعاملات السابقة | P1 |
تحليل وعرض معاملات تحديث المضاعف بشكل صحيح | عرض التفاصيل بشكل صحيح حول تحديث المضاعف | P2 |
مجمعو بيانات السوق (مثل: CoinGecko)
المتطلب | الوصف | الأولوية |
---|---|---|
تحديثات واجهة برمجة التطبيقات للبيانات المقياسية | توسيع وظائف واجهة برمجة التطبيقات لتشمل تغييرات المضاعف على مر الزمن بالإضافة إلى تغذية السعر المقياسي. | P0 |
إجمالي العرض مع تعديل مقياسي | عند عرض إجمالي العرض وإجمالي القيمة السوقية، يجب أخذ الأرصدة المقياسية في الاعتبار | P0 |
تتبع السعر التاريخي | توفير مخطط تاريخي للأسعار باستخدام السعر المقياسي على مر الزمن. | P1 |
تتبع المضاعف التاريخي | توفير علامات تاريخية لتحديثات المضاعف للرموز ذات الفائدة. | P2 |
المحتوى التعليمي أو الشروحات | تضمين أوصاف موجزة أو تلميحات توضح كيفية عمل الرموز المقياسية. | P2 |
مزودو تغذية الأسعار
المتطلب | الوصف | الأولوية |
---|---|---|
تغذيات الأسعار المقياسية وغير المقياسية | توفير تغذيات الأسعار لكل من الأسعار المقياسية وغير المقياسية. | P0 |
بيانات المضاعف التاريخية | تقديم واجهات برمجة تطبيقات مع تغييرات المضاعف التاريخية. | P0 |
بيانات الأسعار التاريخية | تقديم واجهات برمجة تطبيقات مع أسعار تاريخية تستند إلى كل من المبالغ المقياسية وغير المقياسية. | P0 |
منصات التبادل اللامركزية
المتطلب | الوصف | الأولوية |
---|---|---|
عرض أرصدة الرموز المعاد تعديلها | عرض الأرصدة المعدلة للتداول أو توفير السيولة في واجهة المستخدم. (يمكن للخلفية الاستمرار في استخدام المبالغ الأصلية) | P0 |
دعم إجراءات الرموز | يجب على المستخدمين النهائيين إدخال كميات الإجراءات بأرصدة واجهة المستخدم الخاصة بهم (المضاعف * المبلغ الأصلي). | P0 |
تكييف مصدر الأسعار | في أي مكان يتم فيه استخدام مصدر الأسعار لعرض السعر الحالي، يجب توفير السعر المعدل للمستخدمين النهائيين. | P1 |
عرض رسم بياني لتاريخ الأسعار | عكس الأسعار المعدلة في الرسم البياني للأسعار | P1 |
Is this page helpful?