วันที่ร่าง | 9 พฤษภาคม 2567 |
การนำไปปฏิบัติ | 13 พฤษภาคม 2567 - 12 กรกฎาคม 2567 |
คำอธิบาย | พัฒนาการรวม DEXScreener แบบโอเพ่นซอร์ส |
ผู้เขียน | ซูรับ นิโยกี และแมทเธียส ฟุงเค่ |
Dexscreener เป็นอินเทอร์เฟซผู้ใช้ชั้นนำสำหรับเทรดเดอร์ที่กระตือรือร้น โดยสรุปกิจกรรม DEX ล่าสุด ปัจจุบัน DEXScreener เป็นตัวแทนของ Stellaswap (บน Moonbeam) แต่อย่างอื่นมีความครอบคลุมที่ไม่ดีของระบบนิเวศ Polkadot ข้อเสนอนี้เกี่ยวข้องกับการพัฒนา Dexscreener ในอีก 60 วันข้างหน้าสำหรับ:
เป็นที่คาดว่า parachains defi Polkadot อื่นๆ จะสามารถใช้จุดสิ้นสุดของสิ่งนี้เพื่อใช้การจัดทำดัชนี DEX ที่คล้ายกันสำหรับ chain ของพวกเขา
การใช้งานจะดำเนินการด้วยคอนเทนเนอร์ Docker ที่มีอยู่ในตัวเองโดยสมบูรณ์ โดยมีตัวสร้างดัชนีที่ใช้ Node.js โดยใช้แบ็กเอนด์ MySQL ตามข้อกำหนด Dexscreener block
ตาราง asset
pair
event
จำนวนเล็กน้อยจะถูกใช้สำหรับการจัดทำดัชนีและสนับสนุนจุดสิ้นสุด 4 จุดต่อไปนี้
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
(เราจำเป็นต้องรวมข้อมูลเมตานอกเครือข่ายบางส่วน เช่น symbol และ coinGeckoId)ช่องใดที่เป็นทางเลือก? อาจไม่มี coinGeckoId สำหรับสินทรัพย์ทั้งหมด หรืออาจไม่ทราบอุปทานหมุนเวียน
assets.asset
และ poolassets.asset
GET /pair?id=:string
เรายอมรับว่า ID จะถูกจัดเรียงจากน้อยไปหามากเสมอ (โดยใช้ตัวเลข ไม่ใช่สตริง) ดังนั้นเราจึงสามารถใช้สตริง เช่น 5-100019
สำหรับคู่เนื้อหาที่มี ID 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
ส่งคืนเหตุการณ์ Swap (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 จะเชื่อมโยงผู้ใช้โดยตรงกับอินเทอร์เฟซการสลับ:
และสำหรับสระน้ำ:
คำถาม : จุดสัมผัสนี้ถูกต้องหรือไม่? เราเชื่อว่าสิ่งนี้มีผลกระทบต่อสิ่งที่ Assetid และ pairid ควรเป็น และจำกัดคำถามต่อไปนี้โดยตรง
สมมติฐานก็คือคนส่วนใหญ่ที่ใช้ dexScreener นั้นเป็น degens หรือ Arbitrageur พวกเขาไม่สามารถซื้อ LRNA ได้ ดังนั้นเราจึงแกล้งทำเป็นว่าไม่มี LRNA ได้ใช่ไหม ปัญหาเดียวคือธุรกรรมบางรายการจะถูกเซ็นเซอร์ แต่มีบางสถานการณ์ที่ LP ได้รับการชำระเงินเป็น LRNA และ LRNA จะถูกสลับเป็นอย่างอื่น
คำถาม: การเทรดที่ซับซ้อนควรถูกแมปกับเหตุการณ์อย่างไร
เราจำเป็นต้องคำนวณการแมปจาก Swap ที่กำหนดเส้นทางไปยังคู่หนึ่งคู่ขึ้นไป ซึ่งนำไปใช้ในตัวสร้างดัชนี dexscreener Matthias แนะนำให้เราสร้างคู่แบบไดนามิกโดยอิงตามขีดจำกัดของปริมาณ ซึ่งในกรณีนี้จะเป็นคำถามว่าคู่ใดที่จะสร้าง "เสมือน"
iBTC ถึง USDT อาจเป็นเช่นนี้:
... หากมีใครมีโทเค็น 2 พูลหรือ 4 พูลจริงๆ เราจะแมปโทเค็นเหล่านั้นดังนี้:
ตัวอย่าง HydraDX:
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-pool จริงๆ
https://hydradx.subscan.io/extrinsic/4705161-3?event=4705161-37
ควรแสดง: 8899.9696696365 INTR -> 38.8922321335 vDOT