Synopsis
There are multiple ways to interact with a node: using the CLI, gRPC, or REST endpoints.
Prerequisite Readings
Using the CLI
Now that your chain is running, it is time to try sending tokens from the first account you created to a second account. In a new terminal window, start by running the following query command:stake you granted it minus the amount you delegated via the gentx. Now, create a second account:
recipient account:
recipient account to the validator:
gentx, and the second one you just performed from the recipient account.
Using gRPC
The Protobuf ecosystem developed tools for different use cases, including code-generation from*.proto files into various languages. These tools allow the building of clients easily. Often, the client connection (i.e. the transport) can be plugged and replaced very easily. This section explores one of the most popular transports: gRPC.
Since the code generation library largely depends on your own tech stack, three alternatives are presented:
grpcurlfor generic debugging and testing,- programmatically via Go,
- CosmJS for JavaScript/TypeScript developers.
grpcurl
grpcurl is likecurl but for gRPC. It is also available as a Go library, but this tutorial uses it only as a CLI command for debugging and testing purposes. Follow the instructions in the previous link to install it.
Assuming you have a local node running (either a localnet, or connected to a live network), you should be able to run the following command to list the Protobuf services available (you can replace localhost:9090 with the gRPC server endpoint of another node, which is configured under the grpc.address field inside app.toml):
cosmos.bank.v1beta1.Query. This is called reflection, which is a Protobuf endpoint returning a description of all available endpoints. Each of these represents a different Protobuf service, and each service exposes multiple RPC methods you can query against.
In order to get a description of the service you can run the following command:
Query for historical state using grpcurl
You may also query for historical data by passing some gRPC metadata to the query: thex-cosmos-block-height metadata should contain the block to query. Using grpcurl as above, the command looks like:
Programmatically via Go
The following snippet shows how to query the state using gRPC inside a Go program. The idea is to create a gRPC connection, and use the Protobuf-generated client code to query the gRPC server.Install Cosmos SDK
x/bank’s) with one generated from any other Protobuf service. The list of all available gRPC query endpoints is coming soon.
Query for historical state using Go
Querying for historical blocks is done by adding the block height metadata in the gRPC request.CosmJS
CosmJS documentation can be found at Link.Using the REST Endpoints
As described in the gRPC guide, all gRPC services on the Cosmos SDK are made available for more convenient REST-based queries through gRPC-gateway. The format of the URL path is based on the Protobuf service method’s full-qualified name, but may contain small customizations so that final URLs look more idiomatic. For example, the REST endpoint for thecosmos.bank.v1beta1.Query/AllBalances method is GET /cosmos/bank/v1beta1/balances/{address}. Request arguments are passed as query parameters.
Note that the REST endpoints are not enabled by default. To enable them, edit the api section of your ~/.simapp/config/app.toml file:
After enabling the API, you must restart your node for the changes to take effect. Stop the node with
Ctrl+C and run simd start again.curl command to make balances request is:
localhost:1317 with the REST endpoint of your node, configured under the api.address field.
The list of all available REST endpoints is available as a Swagger specification file, which can be viewed at localhost:1317/swagger. Make sure that the api.swagger field is set to true in your app.toml file.
Query for historical state using REST
Querying for historical state is done using the HTTP headerx-cosmos-block-height. For example, a curl command would look like:
Cross-Origin Resource Sharing (CORS)
CORS policies are not enabled by default to help with security. If you would like to use the rest-server in a public environment, we recommend you provide a reverse proxy, which can be done with nginx. For testing and development purposes, there is anenabled-unsafe-cors field inside app.toml.
Congratulations!
You have successfully interacted with your Cosmos SDK node using the CLI, gRPC, and REST endpoints. You can now query state and submit transactions through multiple interfaces.Next steps
- Generate and sign transactions to learn manual transaction workflows
- Explore the gRPC and REST guide for more advanced querying techniques