Skip to content

Commit ed68a47

Browse files
author
Dreamer
authored
refactor: the cli only supports the main unit coin (#353)
1 parent 9916747 commit ed68a47

File tree

7 files changed

+60
-35
lines changed

7 files changed

+60
-35
lines changed

modules/token/client/cli/tx.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ func GetCmdMintToken() *cobra.Command {
229229
}
230230
}
231231

232-
coin, token, err := parseCoin(clientCtx, args[0])
232+
coin, token, err := parseMainCoin(clientCtx, args[0])
233233
if err != nil {
234234
return err
235235
}
@@ -292,7 +292,7 @@ func GetCmdBurnToken() *cobra.Command {
292292
return err
293293
}
294294

295-
coin, _, err := parseCoin(clientCtx, args[0])
295+
coin, _, err := parseMainCoin(clientCtx, args[0])
296296
if err != nil {
297297
return err
298298
}
@@ -392,7 +392,7 @@ func GetCmdSwapFeeToken() *cobra.Command {
392392
}
393393
}
394394

395-
coin, _, err := parseCoin(clientCtx, args[0])
395+
coin, _, err := parseMainCoin(clientCtx, args[0])
396396
if err != nil {
397397
return err
398398
}

modules/token/client/cli/utils.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package cli
22

33
import (
44
"context"
5+
"fmt"
56

67
"github.com/cosmos/cosmos-sdk/client"
78
sdk "github.com/cosmos/cosmos-sdk/types"
@@ -41,8 +42,8 @@ func queryToken(cliCtx client.Context, denom string) (v1.TokenI, error) {
4142
return evi, err
4243
}
4344

44-
func parseCoin(cliCtx client.Context, denom string) (sdk.Coin, v1.TokenI, error) {
45-
decCoin, err := sdk.ParseDecCoin(denom)
45+
func parseMainCoin(cliCtx client.Context, coinStr string) (sdk.Coin, v1.TokenI, error) {
46+
decCoin, err := sdk.ParseDecCoin(coinStr)
4647
if err != nil {
4748
return sdk.Coin{}, nil, err
4849
}
@@ -52,6 +53,10 @@ func parseCoin(cliCtx client.Context, denom string) (sdk.Coin, v1.TokenI, error)
5253
return sdk.Coin{}, nil, err
5354
}
5455

56+
if token.GetSymbol() != decCoin.Denom {
57+
return sdk.Coin{}, nil, fmt.Errorf("the cli currently only supports the main unit: %s", token.GetSymbol())
58+
}
59+
5560
coin, err := token.ToMinCoin(decCoin)
5661
if err != nil {
5762
return sdk.Coin{}, nil, err

modules/token/keeper/keeper.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ func NewKeeper(
5050
}
5151
}
5252

53+
// Codec returns a k.cdc.
54+
func (k Keeper) Codec() codec.Codec {
55+
return k.cdc
56+
}
57+
5358
// Logger returns a module-specific logger.
5459
func (k Keeper) Logger(ctx sdk.Context) log.Logger {
5560
return ctx.Logger().With("module", fmt.Sprintf("irismod/%s", types.ModuleName))

modules/token/keeper/legacy_grpc_query.go

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@ package keeper
33
import (
44
"context"
55

6+
"google.golang.org/grpc/codes"
7+
"google.golang.org/grpc/status"
8+
9+
"github.com/cosmos/cosmos-sdk/codec"
10+
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
11+
612
v1 "github.com/irisnet/irismod/modules/token/types/v1"
713
"github.com/irisnet/irismod/modules/token/types/v1beta1"
814
)
@@ -11,13 +17,15 @@ var _ v1beta1.QueryServer = legacyQueryServer{}
1117

1218
type legacyQueryServer struct {
1319
server v1.QueryServer
20+
cdc codec.Codec
1421
}
1522

1623
// NewLegacyQueryServer returns an implementation of the token QueryServer interface
1724
// for the provided Keeper.
18-
func NewLegacyQueryServer(server v1.QueryServer) v1beta1.QueryServer {
25+
func NewLegacyQueryServer(server v1.QueryServer, cdc codec.Codec) v1beta1.QueryServer {
1926
return &legacyQueryServer{
2027
server: server,
28+
cdc: cdc,
2129
}
2230
}
2331

@@ -28,7 +36,13 @@ func (q legacyQueryServer) Token(c context.Context, req *v1beta1.QueryTokenReque
2836
if err != nil {
2937
return nil, err
3038
}
31-
return &v1beta1.QueryTokenResponse{Token: res.Token}, nil
39+
40+
v1beta1Token, err := v1TokenToV1beta1(q.cdc, res.Token)
41+
if err != nil {
42+
return nil, err
43+
}
44+
45+
return &v1beta1.QueryTokenResponse{Token: v1beta1Token}, nil
3246
}
3347

3448
func (q legacyQueryServer) Tokens(c context.Context, req *v1beta1.QueryTokensRequest) (*v1beta1.QueryTokensResponse, error) {
@@ -39,7 +53,16 @@ func (q legacyQueryServer) Tokens(c context.Context, req *v1beta1.QueryTokensReq
3953
if err != nil {
4054
return nil, err
4155
}
42-
return &v1beta1.QueryTokensResponse{Tokens: res.Tokens, Pagination: res.Pagination}, nil
56+
57+
var tokens []*codectypes.Any
58+
for _, token := range res.Tokens {
59+
v1beta1Token, err := v1TokenToV1beta1(q.cdc, token)
60+
if err != nil {
61+
return nil, err
62+
}
63+
tokens = append(tokens, v1beta1Token)
64+
}
65+
return &v1beta1.QueryTokensResponse{Tokens: tokens, Pagination: res.Pagination}, nil
4366
}
4467

4568
func (q legacyQueryServer) Fees(c context.Context, req *v1beta1.QueryFeesRequest) (*v1beta1.QueryFeesResponse, error) {
@@ -82,3 +105,17 @@ func (q legacyQueryServer) TotalBurn(c context.Context, req *v1beta1.QueryTotalB
82105
BurnedCoins: res.BurnedCoins,
83106
}, nil
84107
}
108+
109+
func v1TokenToV1beta1(cdc codec.Codec, v1token *codectypes.Any) (*codectypes.Any, error) {
110+
var v1beta1Token v1beta1.Token
111+
if err := cdc.Unmarshal(v1token.GetValue(), &v1beta1Token); err != nil {
112+
return nil, err
113+
}
114+
115+
any, err := codectypes.NewAnyWithValue(&v1beta1Token)
116+
if err != nil {
117+
return nil, status.Error(codes.Internal, err.Error())
118+
}
119+
120+
return any, nil
121+
}

modules/token/module.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ func (am AppModule) RegisterServices(cfg module.Configurator) {
118118
v1.RegisterQueryServer(cfg.QueryServer(), am.keeper)
119119

120120
v1beta1.RegisterMsgServer(cfg.MsgServer(), keeper.NewLegacyMsgServerImpl(v1MsgServer, am.keeper))
121-
v1beta1.RegisterQueryServer(cfg.QueryServer(), keeper.NewLegacyQueryServer(am.keeper))
121+
v1beta1.RegisterQueryServer(cfg.QueryServer(), keeper.NewLegacyQueryServer(am.keeper, am.keeper.Codec()))
122122

123123
}
124124

modules/token/types/v1/token.go

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,8 @@ func (t Token) GetOwner() sdk.AccAddress {
111111

112112
// ToMainCoin returns the main denom coin from args
113113
func (t Token) ToMainCoin(coin sdk.Coin) (sdk.DecCoin, error) {
114-
if t.Symbol != coin.Denom && t.MinUnit != coin.Denom {
115-
return sdk.NewDecCoinFromDec(coin.Denom, sdk.ZeroDec()), sdkerrors.Wrapf(tokentypes.ErrTokenNotExists, "token not match")
116-
}
117-
118-
if t.Symbol == coin.Denom {
119-
return sdk.NewDecCoin(coin.Denom, coin.Amount), nil
114+
if t.MinUnit != coin.Denom {
115+
return sdk.NewDecCoinFromDec(coin.Denom, sdk.ZeroDec()), sdkerrors.Wrapf(tokentypes.ErrTokenNotExists, "not the token min_unit")
120116
}
121117

122118
precision := new(big.Int).Exp(tenInt, big.NewInt(int64(t.Scale)), nil)
@@ -127,12 +123,8 @@ func (t Token) ToMainCoin(coin sdk.Coin) (sdk.DecCoin, error) {
127123

128124
// ToMinCoin returns the min denom coin from args
129125
func (t Token) ToMinCoin(coin sdk.DecCoin) (newCoin sdk.Coin, err error) {
130-
if t.Symbol != coin.Denom && t.MinUnit != coin.Denom {
131-
return sdk.NewCoin(coin.Denom, sdk.ZeroInt()), sdkerrors.Wrapf(tokentypes.ErrTokenNotExists, "token not match")
132-
}
133-
134-
if t.MinUnit == coin.Denom {
135-
return sdk.NewCoin(coin.Denom, coin.Amount.TruncateInt()), nil
126+
if t.Symbol != coin.Denom {
127+
return sdk.NewCoin(coin.Denom, sdk.ZeroInt()), sdkerrors.Wrapf(tokentypes.ErrTokenNotExists, "not the token symbol")
136128
}
137129

138130
precision := new(big.Int).Exp(tenInt, big.NewInt(int64(t.Scale)), nil)

modules/token/types/v1/token_test.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,6 @@ func TestToken_ToMinCoin(t *testing.T) {
5252
want: sdk.NewCoin(token.MinUnit, sdk.NewInt(10)),
5353
success: (i == 0),
5454
},
55-
{
56-
name: fmt.Sprintf("Min Coin to Min Coin Success,scale=%d", i),
57-
wantErr: false,
58-
args: args{coin: sdk.NewDecCoin(token.MinUnit, sdk.NewInt(10))},
59-
want: sdk.NewCoin(token.MinUnit, sdk.NewInt(10)),
60-
success: true,
61-
},
6255
}
6356
for _, tt := range tests {
6457
t.Run(tt.name, func(t *testing.T) {
@@ -94,13 +87,6 @@ func TestToken_ToMainCoin(t *testing.T) {
9487
wantErr bool
9588
success bool
9689
}{
97-
{
98-
name: "Main Coin to Main Coin",
99-
wantErr: false,
100-
args: args{coin: sdk.NewCoin(token.Symbol, sdk.NewInt(10))},
101-
want: sdk.NewInt64DecCoin(token.Symbol, 10),
102-
success: true,
103-
},
10490
{
10591
name: "Min Coin to Main Coin Failed",
10692
wantErr: false,

0 commit comments

Comments
 (0)