💡

Ignite CLIでToken Factory moduleを作る(Cosmos SDK)

2024/09/03に公開

はじめに

Ignite CLIを使うとCosmosの開発が楽にできる。
公式のチュートリアルが丁寧なのでやってみることをお勧め。

Token Factory

tokenを新規作成するためのtoken factory moduleの例を紹介。
tokenをmintしたいケースはよくあるので使えると思う。
https://docs.ignite.com/guide/tokenfactory/tokenfactory

ソースコードはまとめている人がいたのでリンクを張ります。
https://github.com/anonimoux2k/tokenfactory

これで動きます。

ignite chain serve

実行

これでMy denomという名前のtokenをcreateできます。metadataやmax supplyなどを指定します。
(tokenfactorydは~/go/bin/ 配下に作成されるはずなので、適宜pathを通してください)

tokenfactoryd tx tokenfactory create-denom uignite "My denom" IGNITE 6 "some/url" 1000000000 true --from alice

これでcreateしたトークンの一覧を取得できます。

tokenfactoryd query tokenfactory list-denom

これでcreateしたトークンを実際に特定のアドレスにmintできます。

tokenfactoryd tx tokenfactory mint-and-send-tokens uignite 1200 cosmos16x46rxvtkmgph6jnkqs80tzlzk6wpy6ftrgh6t --from alice

Balanceを確認すると1200 tokenがmintされていることが確認できます。

tokenfactoryd query bank balances cosmos16x46rxvtkmgph6jnkqs80tzlzk6wpy6ftrgh6t

実装の一部

実装はownershipの管理をするaccount moduleと、tokenの実装を管理するbank moduleをインポートして行います。詳細はtutorialを読んでください。

package types

import (
    sdk "github.com/cosmos/cosmos-sdk/types"
    authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
)

type AccountKeeper interface {
    GetAccount(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI
    GetModuleAddress(name string) sdk.AccAddress
    GetModuleAccount(ctx sdk.Context, moduleName string) authtypes.ModuleAccountI
}

type BankKeeper interface {
    SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error
    MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error
    SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins
}

結論

auth module, bank moduleを使って、tokenをmintするためのtoken factory moduleが実装できる。

Discussion