blockchainjapan’s blog

旬のブロックチェーンを記事を厳選して提供!

技術シリーズ4: ViteXバックエンドサービスの設計と実装


技術シリーズ4: ViteXバックエンドサービスの設計と実装

著:Khun Sir

ViteXは、Viteチェーン上に組み込まれた分散型取引所で、Viteのエコシステムにおいて重要な役割を果たしています。ViteXはビルトインコントラクト(vDex)とオフチェーンサービス(DexServer)で構成されています。オーダーはvDexでマッチングされ、ブロックチェーンの利点である分散化、安全性、信頼性を十分に活用しています。しかし、チェーン上にすべてのデータを保管することは非常にコストがかかるため、良い方法とは言えません。そこで、ユーザーに高速かつ効率的なデータクエリサービスを提供するために、オープン/過去の注文、取引結果、運用統計、およびチェーン上のその他のメトリックを同期し、クエリサービスを提供するオフチェーンサービスDexServerを設計しました。

DexServerには4つのサブサービスがあります。Dex-API、Dex-Crawler、Dex-Push、Dex-Taskです。すべてのサービスの中で、Dex-Crawlerが最も重要で、他の3つのサービスにデータソースを提供しています。システム全体の流れを図に示します。

Dex-API

Dex-APIは、Dex-CrawlerとDex-Taskで生成されたデータの最終的な集計に基づいて、外部システムのためのクエリインターフェースを提供します。

Dex-Crawler

クローラーサービスは、システム全体の基礎となるものです。チェーンからクロールされたデータは、その後他のサービスで使用できるようにフォーマットされ、データベースに保存されます。vDexは、dexFundとdexTradeの2つの別々の契約で構成されています。Dex-Crawlerは、2つのスマートコントラクトチェーンを別々にクロールし、データを処理し、必要に応じて複数のフォームに保存します。

クローラーサービスは、3つの主要な機能(フォークの解決、オーダーブックの集計、統計指標)を実行します。 ブロックチェーンにはロールバックとフォークが存在するという、中央集権型取引システムとは本質的に異なる点があります。 したがって、クローラーサービスの主要なタスクの1つは、コントラクトチェーンが分フォークしているかどうかを判別することです。 フォークしている場合は、フォークのheightに応じて、チェーンの状態との同期を維持するために、永続化されたデータの一部を削除する必要があります。 Dex-Crawlerは、ブロックチェーンの「前のブロック」とデータベースを使用して、コントラクトチェーンにフォークがあるかどうかを検出します。 フォークしている場合、データベースのheightですべてのデータをロールバックして、一貫性と正確さを保証します。

オーダーブックの集約は、クローラーサービスの2番目の重要な機能です。注文が発注されたり、キャンセルされたり、成立したりすると、オーダーブックはそれに応じて変化します。典型的には、オーダーブックの深さが変化したものとしてユーザーに表現されます。オーダーブックの集計が複雑になるのは、取引ペアごとに、価格の小数点以下0~Nの位置にある注文の数量と金額をグループ化する必要があるからです。そこで、性能を向上させるために、「インメモリモデリング」という手法を採用して、アグリゲータを実装しています。このようにして、すべての処理をメモリ上で行い、出力データをKafkaに送ってDex-Pushで利用します。

3番目の機能は統計指標です。 新しいマッチングが完了するたびに、Kline、Trades、Tickersの指標が変化します。異なる期間に対する追加のデータソートが必要となるため、Klineが最も複雑な実装となります。現在、ViteXでサポートされている期間は[分、時、日、30分、6時時間、12時間、週]です。すべての指標は、その後、Dex-Pushサービスで利用するためにKafkaに送信されます。

Dex-Push

Dex-Pushの仕事は、クローラーサービスで生成されたデータを時間内にユーザーに表示することです。サービスの信頼性と安定性を確保するために、クラスター展開を採用しています。また、サーバーの負荷を軽減するために、クライアントは1分に1回サーバーへのpingリクエストを開始して稼働していることを宣言し、サーバーは稼働しているクライアントにのみデータを送信するようにしています。

Dex-Task

このサービスは、運用統計の計算と集計に利用します。 トレードマイニング、マーケットメイクマイニング、紹介マイニング、配当分配、取引手数料などの統計は、スケジュールされたタスクによってオフラインで処理されます。

この記事では、DexServerとその4つのサブサービスについて紹介しました。サブサービス間で非同期通信を行うことで、結合を減らし、システムの堅牢性や保守性を向上させています。次回は、Dex-CrawlerとDex-Taskについての技術的な詳細を紹介します。ご期待ください。