تاريخ الصياغة | 9 مايو 2024 |
تطبيق | 13 مايو 2024 - 12 يوليو 2024 |
وصف | تطوير تكامل DEXScreener مفتوح المصدر |
المؤلفون | سوراب نيوجي وماتياس فونكي |
Dexscreener هي واجهة مستخدم رائدة للمتداولين النشطين، تلخص نشاط DEX الأخير. يمثل DEXScreener حاليًا Stellaswap (على Moonbeam) ولكنه بخلاف ذلك يتمتع بتغطية ضعيفة لنظام Polkadot البيئي. يتعلق هذا الاقتراح بتطوير Dexscreener خلال الـ 60 يومًا القادمة من أجل:
من المتوقع أن تتمكن سلاسل Defi Polkadot الأخرى من استخدام نقطة النهاية لتنفيذ فهرسة DEX مماثلة لسلسلتها.
سيتم التنفيذ باستخدام حاوية Docker مستقلة تمامًا، مع مفهرس يستند إلى Node.js باستخدام واجهة MySQL الخلفية، باتباع مواصفات Dexscreener. سيتم استخدام عدد صغير من block
الجداول asset
pair
event
للفهرسة ودعم نقاط النهاية الأربع التالية
GET /latest-block
إرجاع أحدث كتلة حيث ستكون البيانات من /events
متاحة
{
"block": {
"blockNumber": 12341234,
"blockTimestamp": 1698126147
}
}
blockTimestamp
هو من set.timestamp
GET /asset?id=:string
إرجاع معلومات حول أحد الأصول الموجودة على سلسلة Parachain المحددة. نستخدم id
من منصة assets
في AssetHub (على سبيل المثال 1984 لـ USDT) أو منصة assetRegistry
في HydraDX (على سبيل المثال 26 لـ NODL)
كيف يمكننا إخبار dexscreener بالأصول التي لدينا؟ هل هذه نقطة نهاية منفصلة؟
{
"asset": {
"id": "1000019",
"name": "DED",
"symbol": "DED",
"totalSupply": 10000000,
"circulatingSupply": 900000,
"coinGeckoId": "moonbeam"
}
}
assetRegistry.assets
و xyk.poolAssets
(نحتاج إلى الانضمام إلى بعض البيانات الوصفية خارج السلسلة، على سبيل المثال الرمز وcoinGeckoId)ما هي الحقول الاختيارية؟ قد لا يكون هناك معرف CoinGeckoId لجميع الأصول، أو قد لا يكون العرض المتداول معروفًا.
assets.asset
و poolassets.asset
GET /pair?id=:string
نحن نتفق على أنه سيتم دائمًا فرز المعرفات بترتيب تصاعدي (باستخدام الأرقام، وليس السلاسل)، حتى نتمكن من استخدام سلسلة مثل 5-100019
لزوج الأصول ذات المعرفات 5 و100019.
الزوج الآخر غير موجود.
{
"pair": {
"id": "5-100019",
"dexKey": "hydradx",
"asset0Id": "5",
"asset1Id": "100019",
"feeBps": 30
}
}
id
من xyk.poolAssets
أو poolassets.asset
، مع إمكانية حل asset0Id
و asset1ID
feeBps
لـ Hydradx GET /events?fromBlock=:number&toBlock=:number
إرجاع أحداث المبادلة (eventType = Swap) وأحداث إضافة/إزالة السيولة
{
"events": [
{
"block": {
"blockNumber": 12344321,
"blockTimestamp": 1673319600
},
"eventType": "swap",
"txnId": "0x1118d6bde171a4df1238f5eb69c4b9fff4d4e0169c91268dfa3661d6571faea9",
"txnIndex": 3,
"eventIndex": "12344321-5",
"maker": "7KjNuVyjY5Jv3znWGXSBBHt7Ls6Uwm1LmhswrGGDSYNUAwKW",
"pairId": "5-100019",
"asset0In": 10000,
"asset1Out": 20000,
"priceNative": 2,
"reserves": { "asset0": 100, "asset1": 50 }
},
...
]
}
txnID
هو ExtrinsicHashtxnIndex
هو ExtrinsicIDmaker
هو عنوان ss58 للموقع الخارجي (مناقشة: من الناحية الفنية، الموقع هو الآخذ)pairId
pair
asset0In
و asset1Out
مباشرة من الحدث. (لا: نحن بحاجة إلى تعيين المبادلة الموجهة للزوج)reserves
والمجمعات في Hydradx omnipool؟ نتوقع أن يقوم Dexscreener بربط المستخدمين مباشرةً بواجهة المبادلة:
وللحمامات:
سؤال : هل نقطة اللمس هذه صحيحة؟ ونحن نعتقد أن هذا له آثار على ما ينبغي أن يكون عليه الأصل والزوج، ويقيد بشكل مباشر السؤال التالي.
الافتراض هو أن معظم الأشخاص الذين يستخدمون dexScreener هم من المنحرفين أو المراجحين. لا يمكنهم شراء LRNA، وبالتالي يمكننا التظاهر بأن LRNA غير موجود؟ المشكلة الوحيدة هي أن بعض المعاملات ستخضع للرقابة، ولكن هناك حالات يتم فيها دفع LPs في LRNA، ثم يتم استبدال LRNA بشيء آخر.
سؤال: كيف ينبغي ربط الصفقات المعقدة بالأحداث؟
نحتاج إلى حساب التعيين من المبادلة الموجهة إلى زوج واحد أو أكثر، ويتم تنفيذها في مفهرس dexscreener. يوصي ماتياس بإنشاء الأزواج ديناميكيًا استنادًا إلى حد معين من الحجم، وفي هذه الحالة يكون السؤال هو أي الأزواج سيتم إنشاؤها "افتراضيًا".
قد يكون تحويل iBTC إلى USDT على النحو التالي:
... إذا كان لدى شخص ما بالفعل رموز 2-pool أو 4-pool، فإننا نقوم بتعيينها على النحو التالي:
أمثلة على هيدرا دي إكس:
https://hydradx.subscan.io/extrinsic/5081726-2
يجب استيعابها كـ: 450.391786 USDT -> 0.15 WETH
https://hydradx.subscan.io/extrinsic/5081141-2
يجب استيعابها كـ: 500 USDT -> 0.00808666 WBTC
https://hydradx.subscan.io/extrinsic/5080488-0
80.9981538781 vDOT > 51616.002281331759 HDX
https://hydradx.subscan.io/extrinsic/4589219-2?event=4589219-13
يجب أن تظهر: 10799.9040616235 INTR -> 772.6816006249018 4-Pool (القوة المعينة إلى USDT*)
تعليق: في هذه الحالة أراد المستخدم حقًا امتلاك 4 حمامات.
https://hydradx.subscan.io/extrinsic/4705161-3?event=4705161-37
يجب أن تظهر: 8899.9696696365 INTR -> 38.8922321335 vDOT