Skip to main content
Version: nightly

"Hello world!" Blockchain Tutorial with IGNITE® CLI

Introduction

In this tutorial, you'll build a simple blockchain using IGNITE® CLI that responds to a custom query with Hello %s!, where %s is a name passed in the query. This will enhance your understanding of creating custom queries in a Cosmos SDK blockchain.

Setup and Scaffold​

  1. Create a New Blockchain:

    ignite cosmos scaffold chain hello
  2. Navigate to the Blockchain Directory:

    cd hello

Adding a Custom Query​

  • Scaffold the Query:
ignite cosmos scaffold query say-hello name --response name

This command generates code for a new query, say-hello, which accepts a name, an input, and returns it in the response.

  • Understanding the Scaffolded Code:

    • proto/hello/hello/query.proto: Defines the request and response structure.
    • x/hello/module/autocli.go: Contains commands for the query, using AutoCLI.
    • x/hello/keeper/query_say_hello.go: Houses the logic for the query response.

Customizing the Query Response​

In the Cosmos SDK, queries are requests for information from the blockchain, used to access data like the ledger's current state or transaction details. While the SDK offers several built-in query methods, developers can also craft custom queries for specific data retrieval or complex operations.

  • Modify query_say_hello.go:

Update the SayHello function in x/hello/keeper/query_say_hello.go to return a personalized greeting query.

x/hello/keeper/query_say_hello.go
package keeper

import (
"context"
"fmt"

"hello/x/hello/types"

"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)

func (q queryServer) SayHello(ctx context.Context, req *types.QuerySayHelloRequest) (*types.QuerySayHelloResponse, error) {
if req == nil {
return nil, status.Error(codes.InvalidArgument, "invalid request")
}

// TODO: Process the query

// Custom Response
return &types.QuerySayHelloResponse{Name: fmt.Sprintf("Hello %s!", req.Name)}, nil
}

Running the Blockchain​

  1. Start the Blockchain:
ignite cosmos chain serve
  1. Test the Query:

Use the command-line interface to submit a query.

hellod q hello say-hello world

Expect a response: Hello world!

Conclusion​

Congratulations! 🎉 You've successfully created a blockchain module with a custom query using IGNITE® CLI. Through this tutorial, you've learned how to scaffold a chain, add a custom query, and modify the logic for personalized responses. This experience illustrates the power of IGNITE® CLI in streamlining blockchain development and the importance of understanding the underlying code for customization.