起草日期 | 2024 年 5 月 9 日 |
執行 | 2024年5月13日 - 2024年7月12日 |
描述 | 開發開源 DEXScreener 集成 |
作者 | 蘇拉布·尼約吉 (Sourabh Niyogi) 和馬蒂亞斯·芬克 (Matthias Funke) |
Dexscreener 是活躍交易者的領先使用者介面,總結了最近的 DEX 活動。目前,DEXScreener 代表 Stellaswap(在 Moonbeam 上),但對 Polkadot 生態系統的覆蓋率較差。該提案涉及在未來 60 天內開發 Dexscreener,用於:
預計其他 defi Polkadot 平行鏈可以使用此端點為其鏈實現類似的 DEX 索引。
此實作將使用完全獨立的 Docker 容器來完成,並使用 MySQL 後端的基於 Node.js 的索引器,遵循 Dexscreener 規範。少量表block
, asset
, pair
, event
將用於索引並支援以下 4 個端點
GET /latest-block
傳回來自/events
的資料可用的最新區塊
{
"block": {
"blockNumber": 12341234,
"blockTimestamp": 1698126147
}
}
blockTimestamp
來自set.timestamp
GET /asset?id=:string
傳回特定平行鏈上資產的資訊。我們使用 AssetHub 中assets
托盤的id
(例如 USDT 的 1984)或 HydraDX 中assetRegistry
托盤的 ID(例如 NODL 的 26)
我們如何告訴 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
我們同意 ID 始終按升序排序(使用數字,而不是字串),因此我們可以對 ID 為 5 和 100019 的資產對使用5-100019
這樣的字串。
另一對不存在。
{
"pair": {
"id": "5-100019",
"dexKey": "hydradx",
"asset0Id": "5",
"asset1Id": "100019",
"feeBps": 30
}
}
id
將來自xyk.poolAssets
或poolassets.asset
, asset0Id
和asset1ID
可解析feeBps
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
和礦池新增/刪除事件的策略是什麼? 我們的期望是 Dexscreener 將用戶直接連結到交換介面:
對於池:
問題:這個接觸點正確嗎?我們認為這對 assetid 和pairid 應該是什麼有影響,並直接限制了以下問題。
假設大多數使用 dexScreener 的人都是德根斯或套利者。他們買不到LRNA,所以我們可以假裝LRNA不存在嗎?唯一的問題是某些交易會受到審查,但在某些情況下,LP 會以 LRNA 支付,然後 LRNA 會交換為其他東西。
問題:複雜的交易應該如何對應到事件?
我們需要計算從路由交換到一對或多對的映射,在 dexscreener 索引器中實作。馬蒂亞斯建議我們根據某個數量閾值動態創建對,在這種情況下,問題是要「虛擬」創建哪些對。
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 個池。
https://Hydradx.subscan.io/extrinsic/4705161-3?event=4705161-37
應顯示:8899.9696696365 INTR -> 38.8922321335 vDOT