Cosmos-sdkのチュートリアルを触ってみる その6

Takuya Fujita
Aug 9, 2019 · 17 min read

前回の続きを書いていきます。前回までのリンクは以下の通りです。

気がついたらリンクの数だけでも結構な量になってしまいました。
結構な量になってしまいますが、あとちょっとです!!

前回まででapp.goに対して、storeに接続するためのkeyとKeeperの設定を行ないました。Keeperの定義の続きをやっていきます。

前回までだとコンストラクターに重要なものが抜けていました。今から、

・必要なモジュールから必要なKeeperのインスタンス化
・それぞれのKeeperが必要とするstoreKeysの生成
・それぞれのモジュールからのHandlerの登録
・それぞれのモジュールからQuerierの登録
・baseAppのマルチストアに提供されているkeyへのKVStoreのマウント
・アプリケーションの初期ステートを定義するためのinitChainerを設定

をやっていくみたいです。マウントって接続先に対して、存在を認識させることなんですね。

コンストラクタを以下のように書き換えていきます。前回同様app.goファイルです。
かなり長くなっています。上の項目を意識しながら読んでいきましょう。

// NewNameServiceApp is a constructor function for nameServiceApp
func NewNameServiceApp(logger log.Logger, db dbm.DB) *nameServiceApp {

長い長い!!一つの関数が長すぎる!!

まず、storeKeysの生成を行なってその後、各Keeperのインスタンス化を行なっているのが確認できると思います。

app.SetInitChainer()関数では、genesis.jsonというステートに関するファイルが、チェーン開始時にちゃんとアプリケーションのステートに反映される方法を定義しています。次に追記するExportAppStateAndValidators()関数は、アプリケーションの初期状態のブートストラップを行うのに役立ちます。

今の所、これら二つの関数についてあまり気にする必要はありません。
また他にもBeginBlocker,EndBlocker,LoadHeightといういくつかのメソッドを追記していく必要があります。久しぶりにブロックチェーンっぽいワードが出てきていますね。

コンストラクタではinitChainer()関数を宣言していますが、まだ定義されていません。作成して行きましょう。

// GenesisState represents chain state at the start of the chain. Any initial state (account balances) are stored here.
type Genesis State map[string]json.RawMessage

最後に、amino形式のcodecを行うための関数を加えます。

// MakeCodec generates the necessary codecs for Amino
func MakeCodec() *codec.Codec {
var cdc = codec.New()
ModuleBasics.RegisterCodec(cdc)
sdk.RegisterCodec(cdc)
codec.RegisterCrypto(cdc)
return cdc
}

これで、モジュールを含め、アプリケーション部分は全て作成し終えたので、次回からは、それらを動かすためのエントリーポイントを作成して行きます!

今回結構短くなりましたが、キリが悪いのでここまでとします。その5とその6で1セットという感じになります。

お知らせ

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

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

■ブロックチェーンエンジニア集中講座開講中!
HashHubではブロックチェーンエンジニアを育成するための短期集中講座を開講しています。お申込み、詳細は下記のページをご覧ください。

ブロックチェーンエンジニア集中講座:https://www.blockchain-edu.jp/

GBEC Tech Blog

This Blog is for all Blockchain Engineer

Takuya Fujita

Written by

GBEC Tech Blog

This Blog is for all Blockchain Engineer

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade