Cosmos SDKでHello World ! その1

Takuya Fujita
Nov 25, 2019 · 8 min read
Image for post
Image for post

はじめに

2019年11月頭、Cosmos SDKのチュートリアルに”hellochain”という新しい項目が追加されました。既に”Nameservice”という別のチュートリアルが存在していましたが、それよりも簡潔で送金機能のみのチェーンを作るためのチュートリアルが、その”hellochain”となります。

今回の記事は、”hellochain”を本家の説明では足りないところを補足しながら、一緒に実装していくものになっています。
Cosmos SDKがどういうものなのか正直よくわかってないけど、とりあえず触ってホクホクしたいそこのあなたにピッタリです!(Cosmos SDKについて知りたい方は以下リンクをどうぞ)

Moduleだ、Keeperだ、Handlerだ、Messageだ〜などなど、Cosmos SDKでアプリ専用チェーンを作成するためには本来様々なことを考えなければなりません。今回の記事でもざっくり説明はしますが、先に動かしてみてからの方が興味も湧きますし、自信もついて調べる気にもなると思うので、とにかく動かしてみることを優先します。

では早速始めていきましょう!

確認

今回のチュートリアルでは、CosmosSDKというブロックチェーンを作るためのフレームワークを用いますが、その中でも”greeter”モジュールを主に実装していきます。”greeter”モジュールはCosmos SDKにデフォルトであるわけではなく、”hellochain”特有の、アプリケーション部分のモジュールのことになります。

名前が”hellochain”なので、何か他のアドレスに挨拶をする機能でも実装するのかと思われそうですが、あくまでも送金を行うためのモジュールです。ややこしいですね。Cosmos SDKのHello World! と言ってしまった手前、”hellochain”という名前をつけ、その手前、モジュール名が”greeter”になってしまっただけだと思われます。

今回のチュートリアルでは、用意された”starter”というパッケージを用いて実装します。細かい設定はその”starter”がやってくれています。その”starter”の中身も確認したい方は、このチュートリアルが終わった後に”Nameservice”チュートリアルで確認できるようになっています。

僕らが実装するプロジェクトフォルダは以下のような構成になります。

./hellochain
├── go.mod
├── Makefile
├── app.go
├── cmd
│ ├── hccli
│ │ └── main.go
│ └── hcd
│ └── main.go
└── x
└── greeter
├── client
│ ├── cli
│ │ ├── query.go
│ │ └── tx.go
├── internal
| ├── types
| | ├── msgs.go
| | └── types.go
| └─ keeper
| └── querier.go
| └── keeper.go
├── alias.go
├── module.go
└── handler.go

cmd以下にあるhccliがCLIからノードを叩くためのものであり、hcdは実際のノードの処理についての箇所になります。x以下に”greeter”モジュールがあることも確認できますね。

準備

Cosmos SDKは基本的に開発をgo言語で行うため、go言語の開発環境の用意をお願いします。(ここのハードル結構高そう)

# GOPATH以下にプロジェクトフォルダを作成しましょう。$ mkdir -p $GOPATH/src/github.com/{ .Username }/hellochain
$ cd $GOPATH/src/github.com/{ .Username }/hellochain
$ git init
# goモジュールの初期化(GOPATH以下でなければうまく実行できません)$ cd ./hellochain
$ go mod init

ここまでが基本的な準備です。
実際にコードを書いていきましょう!

アプリの設定

このアプリチェーンの設定を記述するためのapp.goを実装していきます。

cosmos-sdkやtendermintから、ブロックチェーンを構成するのに必要な部分をインポートしていることが確認できます。starterパッケージは今回のチュートリアルのために用意されている”杖”or”補助輪”的なもので、アプリチェーンを構成する上で必要なモジュールを先に実装してくれており、そのおかげで、”greeter”モジュールの実装に集中できるようになっています。

app.goでは「今回は、そのstarterパッケージがよしなにやってくれているぜ!」ということがわかればオッケーです。様々なモジュールが他にもありますが、それぞれの説明については、今回は割愛します。とりあえず動かしてみましょう。

Simple Daemon

次に、ブロックチェーンのデーモン部分を作成していきます。
それぞれ新しいファイルを作成してください。

・hcd( cmd/hcd/main.go )

・hccli( cmd/hccli/main.go )

トランザクションやクエリを投げると処理をし反応を返してくれるノード部分であるhcdと、そのトランザクションやクエリをhcdに投げるためのCLIであるhccliのファイルを作成しました。

先ほどと同様に、starterパッケージを用いていることが確認できます。starterパッケージを用いているので、それぞれ具体的に何をやっているファイルなのか、わかりにくくなってしまってますね。そちらも”Nameservice”チュートリアルで確認していただけたらと思います。

話は変わりますが、本家のチュートリアルでは、hccliのファイルの説明が抜けているため、順番通りに進めてもチェーンを立ち上げられなくなっています。要注意です。

上記の通りhccli/main.goを作成すれば問題ありません。

つづく〜

少し短いですが、キリがいいので今回はここまでとします。
次回は、アプリケーション部分である”greeter”モジュールを、必要なパーツの役割を確認しながら実装しています!(以下リンク)

https://medium.com/blockchain-engineer-blog/cosmos-sdk%E3%81%A7hello-world-%E3%81%9D%E3%81%AE%EF%BC%92-3f51455e759a

fressetsお知らせ

fressetsは積極的に採用を行っています!詳細は下記のリンクからご確認下さい。
Link: https://fressets.com/careers/careers-416/
Link: https://fressets.com/careers/careers-0/

HashHubお知らせ

■HashHubでは下記のポジションを積極採用中です!
・コミュニティマネージャー
・ブロックチェーン技術者・開発者
・ビジネスディベロップメント
詳細は下記Wantedlyのページをご覧ください。

Wantedly:https://www.wantedly.com/companies/hashhub/projects

■HashHubでは入居者募集中です!
HashHubは、ブロックチェーン業界で働いている人のためのコワーキングスペースを運営しています。ご利用をご検討の方は、下記のWEBサイトからお問い合わせください。また、最新情報はTwitterで発信中です。

HashHub:https://hashhub.tokyo/
Twitter:https://twitter.com/HashHub_Tokyo

GBEC Tech Blog

This Blog is for all Blockchain Engineer

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store