メインコンテンツへスキップ
以下の例は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のクエリ

過去のブロックのクエリは、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
}