Tanggal Draf | 9 Mei 2024 |
Pelaksanaan | 13 Mei 2024 - 12 Juli 2024 |
Keterangan | Kembangkan integrasi DEXScreener sumber terbuka |
Penulis | Sourabh Niyogi dan Matthias Funke |
Dexscreener adalah antarmuka pengguna terkemuka untuk pedagang aktif, yang merangkum aktivitas DEX terkini. Saat ini DEXScreener mewakili Stellaswap (di Moonbeam) tetapi memiliki cakupan ekosistem Polkadot yang buruk. Proposal ini berkaitan dengan pengembangan Dexscreener dalam 60 hari ke depan untuk:
Diharapkan parachain defi Polkadot lainnya dapat menggunakan titik akhir ini untuk menerapkan pengindeksan DEX serupa untuk rantai mereka.
Implementasinya akan dilakukan dengan container Docker yang sepenuhnya mandiri, dengan pengindeks berbasis Node.js menggunakan backend MySQL, mengikuti spesifikasi Dexscreener. Sejumlah kecil tabel block
, asset
, pair
, event
akan digunakan untuk mengindeks dan mendukung 4 titik akhir berikut
GET /latest-block
Mengembalikan blok terbaru tempat data dari /events
akan tersedia
{
"block": {
"blockNumber": 12341234,
"blockTimestamp": 1698126147
}
}
blockTimestamp
berasal dari set.timestamp
GET /asset?id=:string
Mengembalikan informasi tentang aset pada parachain tertentu. Kami menggunakan id
dari palet assets
di AssetHub (misalnya 1984 untuk USDT) atau palet assetRegistry
di HydraDX (misalnya 26 untuk NODL)
Bagaimana cara kami memberi tahu dexscreener aset apa yang kami miliki? Apakah itu titik akhir yang terpisah?
{
"asset": {
"id": "1000019",
"name": "DED",
"symbol": "DED",
"totalSupply": 10000000,
"circulatingSupply": 900000,
"coinGeckoId": "moonbeam"
}
}
assetRegistry.assets
dan xyk.poolAssets
(kita perlu menggabungkan beberapa metadata off-chain, misalnya simbol dan coinGeckoId)Bidang mana yang opsional? Mungkin tidak ada coinGeckoId untuk semua aset, atau pasokan yang beredar mungkin tidak diketahui.
assets.asset
dan poolassets.asset
GET /pair?id=:string
Kami setuju bahwa ID akan selalu diurutkan dalam urutan menaik (menggunakan angka, bukan string), sehingga kami dapat menggunakan string seperti 5-100019
untuk pasangan aset dengan ID 5 dan 100019.
Pasangan lainnya tidak ada.
{
"pair": {
"id": "5-100019",
"dexKey": "hydradx",
"asset0Id": "5",
"asset1Id": "100019",
"feeBps": 30
}
}
id
akan berasal dari xyk.poolAssets
atau poolassets.asset
, dengan asset0Id
dan asset1ID
dapat diselesaikanfeeBps
untuk Hydradx GET /events?fromBlock=:number&toBlock=:number
Mengembalikan peristiwa Swap (eventType = swap) dan peristiwa penambahan/penghapusan likuiditas Kumpulan
{
"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
adalah ExtrinsicHashtxnIndex
adalah ExtrinsicIDmaker
adalah alamat ss58 dari penandatangan ekstrinsik (BAHAS: secara teknis penandatangan adalah pengambil)pairId
cocok dengan pair
tersebutasset0In
dan asset1Out
diambil langsung dari acara tersebut. (TIDAK: kita perlu memetakan swap yang dirutekan ke pasangan)reserves
dan kumpulan di omnipool Hydradx? Harapan kami adalah Dexscreener akan menghubungkan pengguna langsung ke antarmuka swap:
dan untuk kolam:
Pertanyaan : Apakah titik sentuh ini benar? Kami yakin hal ini memiliki implikasi terhadap asetid dan pairid yang seharusnya, dan secara langsung membatasi pertanyaan berikut.
Asumsinya adalah kebanyakan orang yang menggunakan dexScreener adalah degens atau arbitrase. Mereka tidak bisa membeli LRNA, oleh karena itu kita bisa berpura-pura LRNA tidak ada? Satu-satunya masalah adalah bahwa beberapa transaksi akan disensor, tetapi ada situasi di mana LP dibayar dalam LRNA, dan LRNA kemudian ditukar dengan yang lain.
Pertanyaan: Bagaimana seharusnya perdagangan yang kompleks dipetakan ke peristiwa?
Kita perlu menghitung pemetaan dari swap yang dirutekan ke satu atau lebih pasangan, yang diterapkan di pengindeks dexscreener. Matthias merekomendasikan agar kita membuat pasangan secara dinamis berdasarkan ambang volume tertentu, dalam hal ini pertanyaannya adalah pasangan mana yang "secara virtual" dibuat.
iBTC ke USDT mungkin seperti ini:
... Jika seseorang benar-benar memiliki token 2 kumpulan atau 4 kumpulan, kami memetakannya sebagai berikut:
Contoh HydraDX:
https://hydradx.subscan.io/extrinsic/5081726-2
Harus diserap sebagai: 450.391786 USDT -> 0.15 WETH
https://hydradx.subscan.io/extrinsic/5081141-2
Harus diserap sebagai: 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
Harus menunjukkan: 10799.9040616235 INTR -> 772.6816006249018 4-Pool (dipetakan secara paksa ke USDT*)
Komentar: dalam hal ini pengguna sangat ingin memiliki 4 pool.
https://hydradx.subscan.io/extrinsic/4705161-3?event=4705161-37
Harus menunjukkan: 8899.9696696365 INTR -> 38.8922321335 vDOT