メインコンテンツへスキップ
このガイドでは、Anyメッセージとクエリを用いてCosmWasmからInjectiveのモジュールおよびクエリを操作する方法を包括的に解説します。JSONエンコードされたメッセージに依存していた古いinjective-cosmwasmパッケージは、現在メンテナンスされておらず古くなる可能性があります。本ガイドでは、より効率的でモダンなCosmWasm標準に準拠した、protobufエンコードされたAnyメッセージとクエリを使用する推奨アプローチに焦点を当てます。

CosmWasmにおけるAnyメッセージとは?

CosmWasmにおいてAnyメッセージはCosmosMsg enumの一部であり、チェーンがサポートするprotobufのAny型でラップされたメッセージを送信できる仕組みです。これらは(stargateフィーチャーフラグ下で引き続き利用可能な)非推奨のStargateメッセージを置き換え、命名と構文が改善されています。Anyメッセージはcosmwasm_2_0でフィーチャーゲートされており、CosmWasm 2.0を実行しているチェーン(Injectiveでサポート済み)が必要です。CosmosMsg定義の抜粋は以下のとおりです:
type_urlはprotobufメッセージの型を指定し、valueはシリアライズされたメッセージデータを含みます。

なぜこの方法を使うのか?

injective-cosmwasmパッケージはJSONベースのメッセージを使用しており、効率が低く、将来のアップデートとの互換性が維持されない可能性があります。新しいAnyメッセージ方式はprotobufエンコーディングを使用し、より優れたパフォーマンス、型安全性、CosmWasm 2.0+との互換性を提供します。これが現在、Injectiveのモジュールおよびクエリと連携するための推奨方法です。

メッセージの送信

メッセージを送信するには、protobufメッセージを作成し、エンコードしてAnyメッセージにラップします。以下はInjectiveのexchangeモジュールにスポットマーケット注文を作成する例です。

例:スポットマーケット注文の作成

手順:
  1. 注文の詳細を含むMsgCreateSpotMarketOrder protobufメッセージを構築します。
  2. prost::Message::encodeを使用してバイト列にエンコードします。
  3. 正しいtype_urlを指定してAnyMsgにラップします。
  4. CosmosMsg::Anyとして返します。
このアプローチは、適切なprotobufメッセージとtype_urlを使用することで、他のモジュール(例:auction、tokenfactory)にも応用できます。

クエリの実行

クエリはInjectiveQueryWrapperを伴うQuerierWrapperを使用して実行します。injective_stdの組み込みquerierを使用するか、生のクエリを送信できます。以下は異なるモジュールの例です。

例:スポットマーケットのクエリ(Exchangeモジュール)

手順:
  1. deps.querierからExchangeQuerierを作成します。
  2. market_idを指定してspot_marketを呼び出します。
  3. レスポンスをJSONにシリアライズし、Binaryとして返します。

例:Bankパラメータのクエリ(Bankモジュール)

手順:
  1. deps.querierからBankQuerierを作成します。
  2. paramsを呼び出してbankモジュールのパラメータを取得します。
  3. 結果をシリアライズして返します。

その他のモジュールでの利用

同じ原則は、auction、insurance、oracle、permissions、tokenfactoryなどの他のInjectiveモジュールや、Cosmosのネイティブモジュールにも適用されます。例:
  • Auctionモジュール:クエリにはAuctionQuerierを使用、またはMsgBidAnyメッセージとしてエンコードします。
  • TokenfactoryモジュールMsgCreateDenomをエンコードするか、TokenFactoryQuerierを使用します。
具体的なメッセージ型およびquerierについてはinjective_stdを参照してください。
最終更新日 2026年5月11日