MCPcopy Create free account
hub / github.com/FirmaChain/firmachain / CreateToken

Method CreateToken

x/token/keeper/msg_server_create_token.go:13–92  ·  view source on GitHub ↗
(goCtx context.Context, msg *types.MsgCreateToken)

Source from the content-addressed store, hash-verified

11)
12
13func (ms msgServer) CreateToken(goCtx context.Context, msg *types.MsgCreateToken) (*types.MsgCreateTokenResponse, error) {
14
15 if err := msg.ValidateBasic(); err != nil {
16 return nil, err
17 }
18
19 ctx := sdk.UnwrapSDKContext(goCtx)
20
21 // ex) GAMETOKEN -> ugametoken
22 tokenID := "u" + strings.ToLower(msg.Symbol)
23
24 err := ms.keeper.CheckCommonError(tokenID, msg.Symbol, msg.Name, msg.TotalSupply)
25
26 if err != nil {
27 return nil, err
28 }
29
30 _, isFound := ms.keeper.GetTokenData(ctx, tokenID)
31
32 if isFound {
33 return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "index already set")
34 }
35
36 // send minted coins to receiver
37 receiver, err := sdk.AccAddressFromBech32(msg.Owner)
38 if err != nil {
39 return nil, err
40 }
41
42 const mintSequence = 1
43 const burnSequence = 0
44
45 var tokenData = types.TokenData{
46 Owner: msg.Owner,
47 TokenID: tokenID,
48 Name: msg.Name,
49 Symbol: msg.Symbol,
50 TokenURI: msg.TokenURI,
51 TotalSupply: msg.TotalSupply,
52 Decimal: msg.Decimal,
53 Mintable: msg.Mintable,
54 Burnable: msg.Burnable,
55 MintSequence: mintSequence,
56 BurnSequence: burnSequence,
57 }
58
59 ms.keeper.SetTokenData(ctx, tokenData)
60
61 // bank module
62 // mint
63 newCoin := sdk.NewInt64Coin(tokenID, int64(msg.TotalSupply))
64 err = ms.keeper.bankKeeper.MintCoins(ctx, types.ModuleName, sdk.NewCoins(newCoin))
65
66 if err != nil {
67 return nil, err
68 }
69
70 // transfer to account

Callers

nothing calls this directly

Calls 6

SetTokenDataMethod · 0.80
MintCoinsMethod · 0.80
ValidateBasicMethod · 0.45
CheckCommonErrorMethod · 0.45
GetTokenDataMethod · 0.45

Tested by

no test coverage detected