Skip to content

Commit

Permalink
refactor: the cli only supports the main unit coin (#353)
Browse files Browse the repository at this point in the history
  • Loading branch information
Dreamer authored Apr 11, 2023
1 parent 9916747 commit ed68a47
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 35 deletions.
6 changes: 3 additions & 3 deletions modules/token/client/cli/tx.go
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ func GetCmdMintToken() *cobra.Command {
}
}

coin, token, err := parseCoin(clientCtx, args[0])
coin, token, err := parseMainCoin(clientCtx, args[0])
if err != nil {
return err
}
Expand Down Expand Up @@ -292,7 +292,7 @@ func GetCmdBurnToken() *cobra.Command {
return err
}

coin, _, err := parseCoin(clientCtx, args[0])
coin, _, err := parseMainCoin(clientCtx, args[0])
if err != nil {
return err
}
Expand Down Expand Up @@ -392,7 +392,7 @@ func GetCmdSwapFeeToken() *cobra.Command {
}
}

coin, _, err := parseCoin(clientCtx, args[0])
coin, _, err := parseMainCoin(clientCtx, args[0])
if err != nil {
return err
}
Expand Down
9 changes: 7 additions & 2 deletions modules/token/client/cli/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package cli

import (
"context"
"fmt"

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

func parseCoin(cliCtx client.Context, denom string) (sdk.Coin, v1.TokenI, error) {
decCoin, err := sdk.ParseDecCoin(denom)
func parseMainCoin(cliCtx client.Context, coinStr string) (sdk.Coin, v1.TokenI, error) {
decCoin, err := sdk.ParseDecCoin(coinStr)
if err != nil {
return sdk.Coin{}, nil, err
}
Expand All @@ -52,6 +53,10 @@ func parseCoin(cliCtx client.Context, denom string) (sdk.Coin, v1.TokenI, error)
return sdk.Coin{}, nil, err
}

if token.GetSymbol() != decCoin.Denom {
return sdk.Coin{}, nil, fmt.Errorf("the cli currently only supports the main unit: %s", token.GetSymbol())
}

coin, err := token.ToMinCoin(decCoin)
if err != nil {
return sdk.Coin{}, nil, err
Expand Down
5 changes: 5 additions & 0 deletions modules/token/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ func NewKeeper(
}
}

// Codec returns a k.cdc.
func (k Keeper) Codec() codec.Codec {
return k.cdc
}

// Logger returns a module-specific logger.
func (k Keeper) Logger(ctx sdk.Context) log.Logger {
return ctx.Logger().With("module", fmt.Sprintf("irismod/%s", types.ModuleName))
Expand Down
43 changes: 40 additions & 3 deletions modules/token/keeper/legacy_grpc_query.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@ package keeper
import (
"context"

"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"

"github.com/cosmos/cosmos-sdk/codec"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"

v1 "github.com/irisnet/irismod/modules/token/types/v1"
"github.com/irisnet/irismod/modules/token/types/v1beta1"
)
Expand All @@ -11,13 +17,15 @@ var _ v1beta1.QueryServer = legacyQueryServer{}

type legacyQueryServer struct {
server v1.QueryServer
cdc codec.Codec
}

// NewLegacyQueryServer returns an implementation of the token QueryServer interface
// for the provided Keeper.
func NewLegacyQueryServer(server v1.QueryServer) v1beta1.QueryServer {
func NewLegacyQueryServer(server v1.QueryServer, cdc codec.Codec) v1beta1.QueryServer {
return &legacyQueryServer{
server: server,
cdc: cdc,
}
}

Expand All @@ -28,7 +36,13 @@ func (q legacyQueryServer) Token(c context.Context, req *v1beta1.QueryTokenReque
if err != nil {
return nil, err
}
return &v1beta1.QueryTokenResponse{Token: res.Token}, nil

v1beta1Token, err := v1TokenToV1beta1(q.cdc, res.Token)
if err != nil {
return nil, err
}

return &v1beta1.QueryTokenResponse{Token: v1beta1Token}, nil
}

func (q legacyQueryServer) Tokens(c context.Context, req *v1beta1.QueryTokensRequest) (*v1beta1.QueryTokensResponse, error) {
Expand All @@ -39,7 +53,16 @@ func (q legacyQueryServer) Tokens(c context.Context, req *v1beta1.QueryTokensReq
if err != nil {
return nil, err
}
return &v1beta1.QueryTokensResponse{Tokens: res.Tokens, Pagination: res.Pagination}, nil

var tokens []*codectypes.Any
for _, token := range res.Tokens {
v1beta1Token, err := v1TokenToV1beta1(q.cdc, token)
if err != nil {
return nil, err
}
tokens = append(tokens, v1beta1Token)
}
return &v1beta1.QueryTokensResponse{Tokens: tokens, Pagination: res.Pagination}, nil
}

func (q legacyQueryServer) Fees(c context.Context, req *v1beta1.QueryFeesRequest) (*v1beta1.QueryFeesResponse, error) {
Expand Down Expand Up @@ -82,3 +105,17 @@ func (q legacyQueryServer) TotalBurn(c context.Context, req *v1beta1.QueryTotalB
BurnedCoins: res.BurnedCoins,
}, nil
}

func v1TokenToV1beta1(cdc codec.Codec, v1token *codectypes.Any) (*codectypes.Any, error) {
var v1beta1Token v1beta1.Token
if err := cdc.Unmarshal(v1token.GetValue(), &v1beta1Token); err != nil {
return nil, err
}

any, err := codectypes.NewAnyWithValue(&v1beta1Token)
if err != nil {
return nil, status.Error(codes.Internal, err.Error())
}

return any, nil
}
2 changes: 1 addition & 1 deletion modules/token/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ func (am AppModule) RegisterServices(cfg module.Configurator) {
v1.RegisterQueryServer(cfg.QueryServer(), am.keeper)

v1beta1.RegisterMsgServer(cfg.MsgServer(), keeper.NewLegacyMsgServerImpl(v1MsgServer, am.keeper))
v1beta1.RegisterQueryServer(cfg.QueryServer(), keeper.NewLegacyQueryServer(am.keeper))
v1beta1.RegisterQueryServer(cfg.QueryServer(), keeper.NewLegacyQueryServer(am.keeper, am.keeper.Codec()))

}

Expand Down
16 changes: 4 additions & 12 deletions modules/token/types/v1/token.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,12 +111,8 @@ func (t Token) GetOwner() sdk.AccAddress {

// ToMainCoin returns the main denom coin from args
func (t Token) ToMainCoin(coin sdk.Coin) (sdk.DecCoin, error) {
if t.Symbol != coin.Denom && t.MinUnit != coin.Denom {
return sdk.NewDecCoinFromDec(coin.Denom, sdk.ZeroDec()), sdkerrors.Wrapf(tokentypes.ErrTokenNotExists, "token not match")
}

if t.Symbol == coin.Denom {
return sdk.NewDecCoin(coin.Denom, coin.Amount), nil
if t.MinUnit != coin.Denom {
return sdk.NewDecCoinFromDec(coin.Denom, sdk.ZeroDec()), sdkerrors.Wrapf(tokentypes.ErrTokenNotExists, "not the token min_unit")
}

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

// ToMinCoin returns the min denom coin from args
func (t Token) ToMinCoin(coin sdk.DecCoin) (newCoin sdk.Coin, err error) {
if t.Symbol != coin.Denom && t.MinUnit != coin.Denom {
return sdk.NewCoin(coin.Denom, sdk.ZeroInt()), sdkerrors.Wrapf(tokentypes.ErrTokenNotExists, "token not match")
}

if t.MinUnit == coin.Denom {
return sdk.NewCoin(coin.Denom, coin.Amount.TruncateInt()), nil
if t.Symbol != coin.Denom {
return sdk.NewCoin(coin.Denom, sdk.ZeroInt()), sdkerrors.Wrapf(tokentypes.ErrTokenNotExists, "not the token symbol")
}

precision := new(big.Int).Exp(tenInt, big.NewInt(int64(t.Scale)), nil)
Expand Down
14 changes: 0 additions & 14 deletions modules/token/types/v1/token_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,6 @@ func TestToken_ToMinCoin(t *testing.T) {
want: sdk.NewCoin(token.MinUnit, sdk.NewInt(10)),
success: (i == 0),
},
{
name: fmt.Sprintf("Min Coin to Min Coin Success,scale=%d", i),
wantErr: false,
args: args{coin: sdk.NewDecCoin(token.MinUnit, sdk.NewInt(10))},
want: sdk.NewCoin(token.MinUnit, sdk.NewInt(10)),
success: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand Down Expand Up @@ -94,13 +87,6 @@ func TestToken_ToMainCoin(t *testing.T) {
wantErr bool
success bool
}{
{
name: "Main Coin to Main Coin",
wantErr: false,
args: args{coin: sdk.NewCoin(token.Symbol, sdk.NewInt(10))},
want: sdk.NewInt64DecCoin(token.Symbol, 10),
success: true,
},
{
name: "Min Coin to Main Coin Failed",
wantErr: false,
Expand Down

0 comments on commit ed68a47

Please sign in to comment.