メインコンテンツへスキップ
Protobufエコシステムでは、*.protoファイルからさまざまな言語へのコード生成を含む、さまざまなユースケース向けのツールが開発されています。これらのツールにより、クライアントを簡単に構築できます。多くの場合、クライアント接続(トランスポート)は簡単にプラグインおよび置換できます。ここでは一般的なトランスポート方法であるgRPCについて説明します。 コード生成ライブラリは技術スタックに大きく依存するため、ここでは2つの方法のみを紹介します:
  • 汎用的なデバッグおよびテスト用のgrpcurl
  • Go、Python、またはTSによるプログラム的な方法

grpcurl

grpcurlは、gRPC版のcurlです。GoライブラリとしてもGoから利用可能ですが、ここではデバッグおよびテスト目的のCLIコマンドとしてのみ使用します。インストール方法については、上記リンクの手順に従ってください。 ローカルノードが稼働している場合(localnetまたはライブネットワークに接続済み)、以下のコマンドを実行して利用可能なProtobufサービスの一覧を取得できます。localhost:9090は、app.tomlgrpc.addressフィールドで設定された別のノードのgRPCサーバーエンドポイントに置き換えることができます:
grpcurl -plaintext localhost:9090 list
cosmos.bank.v1beta1.QueryのようなgRPCサービスの一覧が表示されます。これはリフレクションと呼ばれ、利用可能なすべてのエンドポイントの説明を返すProtobufエンドポイントです。これらはそれぞれ異なるProtobufサービスを表し、各サービスはクエリ可能な複数のRPCメソッドを公開しています。 サービスの詳細を取得するには、以下のコマンドを実行します:
# 確認したいサービス
grpcurl \
    localhost:9090 \
    describe cosmos.bank.v1beta1.Query                  
RPCコールを実行してノードから情報を取得することも可能です:
grpcurl \
    -plaintext
    -d '{"address":"$MY_VALIDATOR"}' \
    localhost:9090 \
    cosmos.bank.v1beta1.Query/AllBalances

grpcurlを使用した過去のstateのクエリ

gRPCリクエストにgRPCメタデータを渡すことで、過去のデータをクエリすることもできます。x-cosmos-block-heightメタデータにクエリ対象のブロックを含める必要があります。grpcurlを使用する場合、コマンドは以下のようになります:
grpcurl \
    -plaintext \
    -H "x-cosmos-block-height: 279256" \
    -d '{"address":"$MY_VALIDATOR"}' \
    localhost:9090 \
    cosmos.bank.v1beta1.Query/AllBalances
そのブロックのstateがノードによってまだプルーニングされていない場合、このクエリは空でないレスポンスを返します。

トランザクションの送信

gRPCおよびRESTを使用してトランザクションを送信するには、トランザクションの生成、署名、そしてブロードキャストという追加手順が必要です。 詳細についてはトランザクションを参照してください。