ブロックチェーンのトランザクションは非同期で行われ、状態は最終的にしか一貫しないことを考えると、ブロックチェーンからデータを取得するのは難しいかもしれない。
ブロックチェーンからほぼリアルタイムのデータ更新を得るには、3つの主要な方法がある:ポーリング、ウェブソケット、ウェブフックだ。なぜブロックチェーンのデータ更新が必要なのでしょうか。例えば、DAOの投票が完了したときにメールを送りたいとき、ロールプレイングゲームで画面上のヒットポイントを更新したいとき、送金が完了したときに通知を受け取りたいときなどです。
この記事では、これら3つの方法がどのように機能するのか、そしてオンチェーンの状態変化を監視するために今日からどのように使用できるのかを紹介する。
MultiBaasとは。アプリケーションへのブロックチェーンの統合を合理化するために設計されたMultiBaasは、開発者にDAppsを開発するだけでなく、ブロックチェーン上のイベントを監視し、応答するための一連のツールを提供するSaaSプラットフォームです。
状態変化のポーリング
イベント監視の伝統的な手法であるポーリングは、ブロックチェーンに定期的に更新を問い合わせる。実装は簡単ですが、ポーリングには レイテンシーと リソース消費のトレードオフが伴います。
分散型アプリケーションのポーリングの一般的な仕組みはこうだ:
⏱️ アプリケーションやクライアントは、ブロックチェーン・ネットワークに更新を問い合わせる特定の時間間隔やスケジュールを設定する。
📞 各ポーリング間隔で、 アプリケーションは、通常 API または SDK を介してブロックチェーンネットワークにリクエストを送信する。
🔍 APIはクエリーを受け取り、それを処理し、クライアントへの応答としてデータを返す。
✉️ レスポンスには、トランザクションの詳細、ブロック情報、スマートコントラクトのデータなど、要求されたデータや情報が含まれる。
アプリケーションまたはクライアントは応答を受信し、データを処理する。自身のシステムを更新したり、アクションをトリガーしたり、ユーザーに情報を表示したりします。
応答を処理した後、アプリケーションは次のポーリング間隔まで待機し、ブロックチェーン・ネットワーク上の新しい更新をチェックするためにリクエストを繰り返す。
ポーリングはブロックチェーンからデータを取得するのに有効ではあるが、WebSocketやWebhooksのような他のメカニズムほど効率的でもタイムリーでもない。
ウェブソケット:効率的な双方向通信
WebSocketは、単一のTCPコネクション上で全二重通信チャネルを提供する通信プロトコルであり、クライアントとサーバー間の双方向通信を可能にします。MultiBaasは高度な機能として、指定されたアドレスのスマートコントラクトイベントのWebSocketストリームを提供します。
ここでは、WebSocketがMultiBaasでどのように動作するかの一般的な説明をします:
クライアントとMultiBaasの間にWebSocket接続が確立されます。
↔️ ブロックチェーン上でイベントが発生すると、MultiBaasはその通知を受け取ります。その後、MultiBaasはWebSocket接続を介してクライアントアプリケーションにデータをプッシュします。
✅ クライアントアプリケーションは、MultiBaasとのWebSocket接続を通じてブロックチェーンデータの連続ストリームを受信できます。
WebSocket接続は、定期的なポーリングや頻繁な更新リクエストに依存する代わりに、持続的な接続と即時のデータ転送を可能にし、チャットアプリケーション、リアルタイムコラボレーションツール、ライブデータストリーミングなど、即時更新やブロックチェーンとのインタラクションを必要とするライブアプリケーションに最適です。
あるいは、Infuraのようなノードプロバイダと EVM JSON RPC API over WebSocketsを使用することで、WebSocketを使用してブロックチェーンイベントを監視することも可能です。以下は、Infura Polygon WSS APIでWebSocket Subscriptionsを使用する方法のウォークスルーです。
ブロックチェーンノードのウェブソケットと直接やりとりする場合の課題には、次のようなものがある:
- 手動でイベントをデコードする
- チェーン再編への対応
- ノードの離脱や遅れへの対応
MultiBaasはこの複雑さを自動的に処理してくれます。
ウェブフック
Webhookは、ブロックチェーンのイベント発生に関する通知を設定可能なHTTPエンドポイントに送信します。ブロックチェーン上で特定のイベントが発生すると、ウェブフックがトリガーされます。このウェブフックは、指定されたHTTPエンドポイントまたはURL(通常はアプリケーションまたはサーバー)に通知を送信し、イベントの詳細をほぼリアルタイムで提供します。
ここでは、MultiBaasのWebhookがどのように機能するのか、大まかな概要を説明します:
🔔 ブロックに新しい取引が追加されたり、スマートコントラクトが実行されるなど、ブロックチェーンネットワーク上で特定のイベントが発生すること。
MultiBaasなどのウェブフックプロバイダーがイベントを検出し、対応するウェブフックをトリガーします。
📦 ウェブフックは、取引詳細、ブロック情報、スマートコントラクトデータなど、イベントに関する関連情報を含むペイロードを生成する。
📩 ウェブフックは、指定されたエンドポイントまたは URL に HTTP POSTリクエストを送信し、イベント詳細のペイロードを配信します。
✅ 受信側のアプリケーションまたはエンドポイントのサーバーは、受信したリク エストを処理し、ペイロードデータを抽出する。アプリケーションは受信したデータを使用して、自身のシステムを更新したり、アクショ ンをトリガーしたり、ユーザーに通知したりすることができる。
MultiBaasは、ブロックチェーンイベントの重複排除、ブロックチェーントランザクションのステートフル管理、バックオフによる自動再試行などを処理するロジックを内蔵しているため、データを取得するプロセスをさらに抽象化・単純化する。
Webhookは、取引所での暗号資産取引で実用的な用途を見出すことができる。例えば、購入や売却などの資産取引をユーザーに知らせるプッシュ通知を可能にするために使用できる。eコマースでは、Shopifyのようなプラットフォームがトランザクションが発生したときに通知を送信できるようにする。
概要
あなたの用途にはどれが最適ですか。
ユースケースによる。
チャット・アプリケーションやリアルタイム・コラボレーション・ツールの構築、あるいはライブ・データ・ストリーミングのために、ライブの即時更新が必要な場合、WebSocketストリーミングが必要です。
しかし、トークンの価格を監視するダッシュボードを作っていたり、オープンな接続を必要としない場合は、ポーリングを使うことができる。
オンチェーン・イベントに関するプッシュ通知をユーザーが受け取れるようなシステムを構築する必要がある場合は、ウェブフックを使用するとよいでしょう。
MultiBaasを始める
MultiBaasの無料プロダクションアカウントを作成して、これらのテクニックを試すことができます。詳しくはwebhooks のドキュメントをご覧ください。 WebSocket はカスタム設定が必要ですので、MultiBaas で WebSocket を利用したい場合はお問い合わせください。WebSocketを使ったプログラミングに関する一般的な情報はこちらをご覧ください。