💡
Ignite CLIでToken Factory moduleを作る(Cosmos SDK)
はじめに
Ignite CLIを使うとCosmosの開発が楽にできる。
公式のチュートリアルが丁寧なのでやってみることをお勧め。
Token Factory
tokenを新規作成するためのtoken factory moduleの例を紹介。
tokenをmintしたいケースはよくあるので使えると思う。
ソースコードはまとめている人がいたのでリンクを張ります。
これで動きます。
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