MultiBaasによるブロックチェーンイベント監視:ポーリング、WebSockets、Webhooks

2024/01/17

ブロックチェーンからデータを取得することは、決して簡単ではありません。トランザクションは非同期にブロックへ取り込まれ、オンチェーンの状態は「最終的一貫性(eventually consistent)」という性質を持つためです。

それでも、多くのアプリケーションではほぼリアルタイムでの状態更新が求められます。代表的な例としては、以下のようなケースが挙げられます。

  • DAOの投票が完了したタイミングでメールを送信したい

  • RPGゲームで、オンチェーンイベントに応じてHPを即座に更新したい

  • トークン送金が完了したらユーザーに通知したい

ブロックチェーンの状態変化をリアルタイムに近い形で取得する方法は、主に次の3つです。

  • ポーリング(Polling)

  • WebSocket

  • Webhook

本記事では、それぞれの仕組みと特徴を解説し、オンチェーンの状態変化をどのように監視できるかを紹介します。

MultiBaasとは

MultiBaas は、ブロックチェーンをアプリケーションへ統合するプロセスを簡素化するために設計されたSaaSプラットフォームです。
DAppの開発支援に加え、ブロックチェーン上のイベントを監視し、それに応じた処理を実行するためのツール群を提供しています。

状態変化を取得する方法①:ポーリング(Polling)

ポーリングは、イベントモニタリングの従来の方法で、定期的にブロックチェーンに更新を問い合わせることを含みます。実装は簡単ですが、ポーリングにはレイテンシリソース消費のトレードオフがあります。

分散型アプリケーションにおけるポーリングの一般的な動作は次のとおりです:

⏱️ アプリケーションまたはクライアントは、ブロックチェーンネットワークに更新を問い合わせる特定の時間間隔またはスケジュールを設定

📞 各ポーリング間隔で、APIやSDKを通じてブロックチェーンにリクエストを送信

🔍 APIはクエリを受信し、結果をレスポンスとしてクライアントに返却

✉️ レスポンスには、トランザクションの詳細、ブロック情報、スマートコントラクトデータなど、要求されたデータや情報が含まれる

✅ アプリケーションまたはクライアントは、レスポンスを受け取り、システムを更新したり、アクションを引き起こしたり情報をユーザーに表示したりする

🔁 レスポンス処理後、次のポーリング間隔まで待機し、ブロックチェーンネットワークの新しい更新を確認するためにリクエストを繰り返す

ポーリングはブロックチェーンからデータを取得するのに効果的ですが、WebSocketsやWebhooksのような他のメカニズムと比較すると、効率的でも即時でもありません。

状態変化を取得する方法②:WebSocket(双方向・リアルタイム通信)

WebSocketは、クライアントとサーバー間で双方向通信を可能にする単一のTCP接続を介したフルデュプレックス通信チャネルを提供する通信プロトコルです。 すなわち、1本のTCP接続上で双方向通信を行えるプロトコルです。MultiBaasでは、拡張機能として指定したアドレスに紐づくスマートコントラクトイベントをWebSocketストリームで配信できます。

MultiBaasにおけるWebSocketの基本的な流れは以下の通りです。

🔗 クライアントとMultiBaasの間でWebSocket接続を確立

↔️ ブロックチェーン上でイベントが発生すると、MultiBaasがそれを検知

📡 イベント情報が即座にWebSocket経由でクライアントへプッシュされる

✅ クライアントアプリケーションは、MultiBaasのWebSocket接続を介してブロックチェーンデータの継続的なストリームを受信

定期的な問い合わせを行う必要がなく、常時接続による即時配信が可能なため、次のような用途に適しています。

  • チャットアプリケーション

  • リアルタイム共同編集ツール

  • ライブデータ表示

InfuraなどのノードプロバイダーやEVM JSON-RPCをWebSocket経由で直接利用する方法もあります。Infura Polygon WSS APIでWebSocketサブスクリプションを使用する方法

ただし、その場合には次のような課題があります。

  • イベントの手動デコードが必要

  • チェーン再編成(reorg)への対応

  • ノードの切断や遅延への対処

MultiBaasでは、これらの複雑さをプラットフォーム側で自動的に処理します。

状態変化を取得する方法③:Webhook(イベント通知)

Webhook は、ブロックチェーン上で特定のイベントが発生した際に、指定したHTTPエンドポイントへ通知を送る仕組みです。

これらは簡単な原則で機能します:ブロックチェーン上で特定のイベントが発生すると、Webhookがトリガーされます。このWebhookは、その後、指定されたHTTPエンドポイントまたはURLに通知を送信し、通常はアプリケーションやサーバーで、ほぼリアルタイムでイベントの詳細を提供します。

MultiBaasのWebhooksの基本的な流れは以下の通りです:

🔔 ブロックチェーン上でトランザクション確定やスマートコントラクト実行などのイベントが発生

🪝MultiBaasがそのイベントを検知し、Webhookをトリガー

📦 イベント内容(トランザクション情報、ブロック情報、コントラクトデータなど)を含むペイロードを生成

📩 指定されたエンドポイントまたはURLにHTTP POSTリクエストを送信し、イベントの詳細を含むペイロードを配信

✅ 受信側アプリケーションがデータを処理し、通知送信や内部処理を実行

MultiBaasでは、Webhookに以下のような処理が組み込まれており、実装負担を大幅に軽減します。

  • イベントの重複排除

  • トランザクション状態の管理

  • リトライとバックオフ処理の自動化

Webhookは、例えば暗号資産取引所での売買通知や、ECプラットフォーム(Shopifyなど)における取引完了通知と同様の用途に適しています。

まとめ:どの方法を選ぶべきか?

最適な方法は、ユースケースによって異なります

  • 即時性が最重要(チャット、ライブ表示、リアルタイム連携)
    WebSocket

  • 定期的に状態を確認できれば十分(価格ダッシュボードなど)
    ポーリング

  • ユーザーへの通知やバックエンド処理をトリガーしたい
    Webhook

MultiBaasを始めるには

MultiBaasでは、これらの手法を試せる無料の本番アカウントを用意しています。
サインアップはこちらから行えます。

Webhookについては、詳細なWebhookのドキュメントもご用意しています。
WebSocketはカスタム設定が必要となるため、利用をご希望の場合はお問い合わせください

WebSocketプログラミング全般については、別途ガイドのこちらも参考にしていただけます。