以下の例はGoで記述されていますが、PythonおよびTS SDKもノード/Injectiveとのプログラム的な対話に使用できます。
以下のスニペットは、Goプログラム内でgRPCを使用してstateをクエリする方法を示しています。gRPC接続を作成し、Protobufで生成されたクライアントコードを使用してgRPCサーバーにクエリを送信します。
import (
"context"
"fmt"
"google.golang.org/grpc"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/tx"
)
func queryState() error {
myAddress, err := sdk.AccAddressFromBech32("inj...")
if err != nil {
return err
}
// gRPCサーバーへの接続を作成します。
grpcConn := grpc.Dial(
"127.0.0.1:9090", // gRPCサーバーのアドレス
grpc.WithInsecure(), // SDKはトランスポートセキュリティメカニズムをサポートしていません。
)
defer grpcConn.Close()
// x/bankサービスをクエリするためのgRPCクライアントを作成します。
bankClient := banktypes.NewQueryClient(grpcConn)
bankRes, err := bankClient.Balance(
context.Background(),
&banktypes.QueryBalanceRequest{Address: myAddress, Denom: "inj"},
)
if err != nil {
return err
}
fmt.Println(bankRes.GetBalance()) // アカウント残高を出力
return nil
}
Goを使用した過去のstateのクエリ
過去のブロックのstateをクエリするには、gRPCリクエストにブロック高のメタデータを付与します。
import (
"context"
"fmt"
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"
grpctypes "github.com/cosmos/cosmos-sdk/types/grpc"
"github.com/cosmos/cosmos-sdk/types/tx"
)
func queryState() error {
// --省略--
var header metadata.MD
bankRes, err = bankClient.Balance(
metadata.AppendToOutgoingContext(context.Background(), grpctypes.GRPCBlockHeightHeader, "12"), // リクエストにメタデータを追加
&banktypes.QueryBalanceRequest{Address: myAddress, Denom: denom},
grpc.Header(&header), // レスポンスからヘッダーを取得
)
if err != nil {
return err
}
blockHeight = header.Get(grpctypes.GRPCBlockHeightHeader)
fmt.Println(blockHeight) // ブロック高を出力(12)
return nil
}
Last modified on April 24, 2026