起草日 | 2024 年 5 月 9 日 |
実装 | 2024年5月13日~2024年7月12日 |
説明 | オープンソースの DEXScreener 統合を開発する |
著者 | スーラブ・ニヨギとマティアス・フンケ |
Dexscreener は、最近の DEX アクティビティを要約する、アクティブトレーダー向けの主要なユーザー インターフェイスです。現在 DEXScreener は Stellaswap (Moonbeam 上) を代表していますが、それ以外の点では Polkadot エコシステムを十分にカバーしていません。この提案は、次の目的で今後 60 日間で Dexscreener を開発することに関するものです。
他の defi Polkadot パラチェーンもこのエンドポイントを使用して、チェーンに同様の DEX インデックスを実装できることが期待されます。
実装は、Dexscreener 仕様に従って、MySQL バックエンドを使用する Node.js ベースのインデクサーを備えた、完全に自己完結型の Docker コンテナーで行われます。少数のテーブルblock
、 asset
、 pair
、 event
インデックス作成に使用され、次の 4 つのエンドポイントをサポートします。
GET /latest-block
/events
からのデータが利用できる最新のブロックを返します。
{
"block": {
"blockNumber": 12341234,
"blockTimestamp": 1698126147
}
}
blockTimestamp
set.timestamp
からのものですGET /asset?id=:string
特定のパラチェーン上のアセットに関する情報を返します。 AssetHub のassets
パレット (USDT の場合は 1984) または HydraDX のassetRegistry
パレット (NODL の場合は 26) のid
を使用します。
どのアセットを持っているかを 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
スワップ イベント (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
ExtrinsicHash ですtxnIndex
ExtrinsicID ですmaker
外部署名者の ss58 アドレスです (議論: 技術的には署名者が taker です)pairId
pair
と一致しますasset0In
とasset1Out
イベントから直接取得されます。 (いいえ: ルーティングされたスワップをペアにマッピングする必要があります)reserves
およびプールの追加/削除イベントの戦略は何ですか? 私たちの期待は、Dexscreener がユーザーをスワップ インターフェイスに直接リンクすることです。
そしてプールの場合:
質問: このタッチポイントは正しいですか?私たちは、これがassetidとpairidがどうあるべきかに影響を及ぼし、次の質問に直接の制約を与えると考えています。
dexScreener を使用するほとんどの人は、脱税者または裁定取引者であると想定されます。彼らはLRNAを購入できないので、LRNAが存在しないふりをすることができますか?唯一の問題は、一部の取引が検閲されることですが、LP が LRNA で支払われ、その LRNA が他のものと交換される状況が存在するということです。
質問: 複雑な取引をイベントにどのようにマッピングする必要がありますか?
dexscreener インデクサーに実装されている、ルーテッド スワップから 1 つ以上のペアへのマッピングを計算する必要があります。 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 つのプールを所有したいと考えていました。
https://hydradx.subscan.io/extrinsic/4705161-3?event=4705161-37
表示されるはず: 8899.9696696365 INTR -> 38.8922321335 vDOT