From 8f936fff104a2b0a62f3121fa48858f3104adc17 Mon Sep 17 00:00:00 2001 From: zhangzhiqiang <745124335@qq.com> Date: Fri, 30 Aug 2019 15:04:04 +0800 Subject: [PATCH 1/2] update denom's specification --- app/v2/coinswap/internal/keeper/swap_test.go | 22 ++++++++++---------- app/v2/coinswap/internal/types/msgs.go | 10 ++++----- app/v2/coinswap/internal/types/utils.go | 6 +++--- types/coin.go | 3 ++- types/coin_test.go | 10 +++++++-- 5 files changed, 29 insertions(+), 22 deletions(-) diff --git a/app/v2/coinswap/internal/keeper/swap_test.go b/app/v2/coinswap/internal/keeper/swap_test.go index 832f2eee0..0583e43ec 100644 --- a/app/v2/coinswap/internal/keeper/swap_test.go +++ b/app/v2/coinswap/internal/keeper/swap_test.go @@ -23,10 +23,10 @@ func TestGetUniId(t *testing.T) { expectResult string expectPass bool }{ - {"denom1 is native", native, "btc-min", "u-btc", true}, - {"denom2 is native", "btc-min", native, "u-btc", true}, - {"denom1 equals denom2", "btc-min", "btc-min", "u-btc", false}, - {"neither denom is native", "eth-min", "btc-min", "u-btc", false}, + {"denom1 is native", native, "btc-min", "uni:btc", true}, + {"denom2 is native", "btc-min", native, "uni:btc", true}, + {"denom1 equals denom2", "btc-min", "btc-min", "uni:btc", false}, + {"neither denom is native", "eth-min", "btc-min", "uni:btc", false}, } for _, tc := range cases { @@ -132,23 +132,23 @@ func TestKeeperSwap(t *testing.T) { _, err = keeper.HandleSwap(ctx, msg1) require.Nil(t, err) reservePoolBalances = keeper.ak.GetAccount(ctx, reservePoolAddr).GetCoins() - require.Equal(t, "900btc-min,1112iris-atto,1000u-btc-min", reservePoolBalances.String()) + require.Equal(t, "900btc-min,1112iris-atto,1000uni:btc-min", reservePoolBalances.String()) senderBlances = keeper.ak.GetAccount(ctx, sender).GetCoins() - require.Equal(t, "99999100btc-min,99998888iris-atto,1000u-btc-min", senderBlances.String()) + require.Equal(t, "99999100btc-min,99998888iris-atto,1000uni:btc-min", senderBlances.String()) // second swap _, err = keeper.HandleSwap(ctx, msg1) require.Nil(t, err) reservePoolBalances = keeper.ak.GetAccount(ctx, reservePoolAddr).GetCoins() - require.Equal(t, "800btc-min,1252iris-atto,1000u-btc-min", reservePoolBalances.String()) + require.Equal(t, "800btc-min,1252iris-atto,1000uni:btc-min", reservePoolBalances.String()) senderBlances = keeper.ak.GetAccount(ctx, sender).GetCoins() - require.Equal(t, "99999200btc-min,99998748iris-atto,1000u-btc-min", senderBlances.String()) + require.Equal(t, "99999200btc-min,99998748iris-atto,1000uni:btc-min", senderBlances.String()) // third swap _, err = keeper.HandleSwap(ctx, msg1) require.Nil(t, err) reservePoolBalances = keeper.ak.GetAccount(ctx, reservePoolAddr).GetCoins() - require.Equal(t, "700btc-min,1432iris-atto,1000u-btc-min", reservePoolBalances.String()) + require.Equal(t, "700btc-min,1432iris-atto,1000uni:btc-min", reservePoolBalances.String()) } func createReservePool(t *testing.T) (sdk.Context, Keeper, sdk.AccAddress, sdk.AccAddress, sdk.Error, sdk.Coins, sdk.Coins) { @@ -170,9 +170,9 @@ func createReservePool(t *testing.T) (sdk.Context, Keeper, sdk.AccAddress, sdk.A //assert require.Nil(t, err) reservePoolBalances := keeper.ak.GetAccount(ctx, reservePoolAddr).GetCoins() - require.Equal(t, "1000btc-min,1000iris-atto,1000u-btc-min", reservePoolBalances.String()) + require.Equal(t, "1000btc-min,1000iris-atto,1000uni:btc-min", reservePoolBalances.String()) senderBlances := keeper.ak.GetAccount(ctx, sender).GetCoins() - require.Equal(t, "99999000btc-min,99999000iris-atto,1000u-btc-min", senderBlances.String()) + require.Equal(t, "99999000btc-min,99999000iris-atto,1000uni:btc-min", senderBlances.String()) return ctx, keeper, sender, reservePoolAddr, err, reservePoolBalances, senderBlances } diff --git a/app/v2/coinswap/internal/types/msgs.go b/app/v2/coinswap/internal/types/msgs.go index 6190c0cce..b9fa3fcd9 100644 --- a/app/v2/coinswap/internal/types/msgs.go +++ b/app/v2/coinswap/internal/types/msgs.go @@ -12,8 +12,8 @@ var ( ) const ( - FormatUniIdPrefix = "u-" - FormatUniId = FormatUniIdPrefix + "%s" + FormatUniABSPrefix = "uni:" + FormatUniId = FormatUniABSPrefix + "%s" ) /* --------------------------------------------------------------------------- */ @@ -66,13 +66,13 @@ func (msg MsgSwapOrder) ValidateBasic() sdk.Error { if !(msg.Input.Coin.IsValid() && msg.Input.Coin.IsPositive()) { return sdk.ErrInvalidCoins("input coin is invalid: " + msg.Input.Coin.String()) } - if strings.HasPrefix(msg.Input.Coin.Denom, FormatUniIdPrefix) { + if strings.HasPrefix(msg.Input.Coin.Denom, FormatUniABSPrefix) { return sdk.ErrInvalidCoins("unsupported input coin type: " + msg.Input.Coin.String()) } if !(msg.Output.Coin.IsValid() && msg.Output.Coin.IsPositive()) { return sdk.ErrInvalidCoins("output coin is invalid: " + msg.Output.Coin.String()) } - if strings.HasPrefix(msg.Output.Coin.Denom, FormatUniIdPrefix) { + if strings.HasPrefix(msg.Output.Coin.Denom, FormatUniABSPrefix) { return sdk.ErrInvalidCoins("unsupported output coin type: " + msg.Output.Coin.String()) } if msg.Input.Coin.Denom == msg.Output.Coin.Denom { @@ -139,7 +139,7 @@ func (msg MsgAddLiquidity) ValidateBasic() sdk.Error { if msg.MaxToken.Denom == sdk.IrisAtto { return sdk.ErrInvalidCoins("max token must be non-iris token") } - if strings.HasPrefix(msg.MaxToken.Denom, FormatUniIdPrefix) { + if strings.HasPrefix(msg.MaxToken.Denom, FormatUniABSPrefix) { return sdk.ErrInvalidCoins("max token must be non-liquidity token") } if msg.ExactIrisAmt.IsNil() || !msg.ExactIrisAmt.IsPositive() { diff --git a/app/v2/coinswap/internal/types/utils.go b/app/v2/coinswap/internal/types/utils.go index b294b1c2d..c409639ce 100644 --- a/app/v2/coinswap/internal/types/utils.go +++ b/app/v2/coinswap/internal/types/utils.go @@ -35,12 +35,12 @@ func GetCoinMinDenomFromUniDenom(uniDenom string) (string, sdk.Error) { if err != nil { return "", err } - return strings.TrimPrefix(uniDenom, FormatUniIdPrefix), nil + return strings.TrimPrefix(uniDenom, FormatUniABSPrefix), nil } // CheckUniDenom returns nil if the uni denom is valid func CheckUniDenom(uniDenom string) sdk.Error { - if !sdk.IsCoinMinDenomValid(uniDenom) || !strings.HasPrefix(uniDenom, FormatUniIdPrefix) { + if !sdk.IsCoinMinDenomValid(uniDenom) || !strings.HasPrefix(uniDenom, FormatUniABSPrefix) { return ErrIllegalDenom(fmt.Sprintf("illegal liquidity denomnation: %s", uniDenom)) } return nil @@ -48,7 +48,7 @@ func CheckUniDenom(uniDenom string) sdk.Error { // CheckUniId returns nil if the uni id is valid func CheckUniId(uniId string) sdk.Error { - if !sdk.IsCoinNameValid(uniId) || !strings.HasPrefix(uniId, FormatUniIdPrefix) { + if !sdk.IsCoinNameValid(uniId) || !strings.HasPrefix(uniId, FormatUniABSPrefix) { return ErrIllegalUniId(fmt.Sprintf("illegal liquidity id: %s", uniId)) } return nil diff --git a/types/coin.go b/types/coin.go index 464d9e7ac..edc565d51 100644 --- a/types/coin.go +++ b/types/coin.go @@ -564,7 +564,8 @@ func (coins Coins) Sort() Coins { var ( // Denominations can be 3 ~ 21 characters long. - reCoinName = `(u\-)?(([a-z][a-z0-9]{2,7}|x)\.)?([a-z][a-z0-9]{2,7})` + reABS = `([a-z][0-9a-z]{2}[:])?` + reCoinName = reABS + `(([a-z][a-z0-9]{2,7}|x)\.)?([a-z][a-z0-9]{2,7})` reDenom = reCoinName + `(-[a-z]{3,5})?` reAmount = `[0-9]+(\.[0-9]+)?` reSpace = `[[:space:]]*` diff --git a/types/coin_test.go b/types/coin_test.go index 87da8adde..efbf69672 100644 --- a/types/coin_test.go +++ b/types/coin_test.go @@ -407,6 +407,12 @@ func TestParse(t *testing.T) { {"11me coin, 12you coin", false, nil}, // no spaces in coin names {"1.2btc", false, nil}, // amount must be integer {"5foo-bar", true, Coins{{"foo-bar", NewInt(5)}}}, + {"5uni:gdex.eth-min", true, Coins{{"uni:gdex.eth-min", NewInt(5)}}}, + {"1un:x.btc", false, Coins{{"un:x.btc", NewInt(1)}}}, + {"1uni:x.btc", true, Coins{{"uni:x.btc", NewInt(1)}}}, + {"1 uni:x.btc", true, Coins{{"uni:x.btc", NewInt(1)}}}, + {"1uni:x.btc-min", true, Coins{{"uni:x.btc-min", NewInt(1)}}}, + {"1uni:iris-atto", true, Coins{{"uni:iris-atto", NewInt(1)}}}, } for tcIndex, tc := range cases { @@ -518,7 +524,7 @@ func TestIsCoinNameValid(t *testing.T) { {"standard native", "abc", true}, {"standard external", "x.abc", true}, {"standard gateway", "gdex.abc", true}, - {"standard uni", "u-gdex.abc", true}, + {"standard uni", "uni:gdex.abc", true}, {"with-suffix", "iris-atto", false}, {"with-suffix-min", "abc-min", false}, } @@ -544,7 +550,7 @@ func TestIsCoinMinDenomValid(t *testing.T) { {"standard native", "abc-min", true}, {"standard external", "x.abc-min", true}, {"standard gateway", "gdex.abc-min", true}, - {"standard uni", "u-gdex.abc-min", true}, + {"standard uni", "uni:gdex.abc-min", true}, {"non-suffix", "iris", false}, {"non-suffix !iris", "abc", false}, } From d6572708b94c9ff94dbf80d6245247f7c7d60ea7 Mon Sep 17 00:00:00 2001 From: zhangzhiqiang <745124335@qq.com> Date: Fri, 30 Aug 2019 16:07:43 +0800 Subject: [PATCH 2/2] fix test case error --- app/v2/coinswap/alias.go | 6 +++--- app/v2/coinswap/internal/types/test_common.go | 2 +- client/context/context.go | 2 +- types/coin_type_test.go | 7 +++---- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/app/v2/coinswap/alias.go b/app/v2/coinswap/alias.go index ede8fb7b2..6851cc1c3 100644 --- a/app/v2/coinswap/alias.go +++ b/app/v2/coinswap/alias.go @@ -41,7 +41,7 @@ var ( ) const ( - DefaultCodespace = types.DefaultCodespace - ModuleName = types.ModuleName - FormatUniIdPrefix = types.FormatUniIdPrefix + DefaultCodespace = types.DefaultCodespace + ModuleName = types.ModuleName + FormatUniABSPrefix = types.FormatUniABSPrefix ) diff --git a/app/v2/coinswap/internal/types/test_common.go b/app/v2/coinswap/internal/types/test_common.go index 7da784ea8..fcd38a910 100644 --- a/app/v2/coinswap/internal/types/test_common.go +++ b/app/v2/coinswap/internal/types/test_common.go @@ -18,7 +18,7 @@ var ( denom0 = "atom-min" denom1 = "btc-min" - unidenom = "u-btc-min" + unidenom = FormatUniABSPrefix + "btc-min" input = sdk.NewCoin(denom0, sdk.NewInt(1000)) output = sdk.NewCoin(denom1, sdk.NewInt(500)) diff --git a/client/context/context.go b/client/context/context.go index 4e6c632f0..ada5e8fe7 100644 --- a/client/context/context.go +++ b/client/context/context.go @@ -243,7 +243,7 @@ func (cliCtx CLIContext) GetCoinType(coinName string) (sdk.CoinType, error) { } if coinName == sdk.Iris { coinType = sdk.IrisCoinType - } else if strings.HasPrefix(coinName, coinswap.FormatUniIdPrefix) { + } else if strings.HasPrefix(coinName, coinswap.FormatUniABSPrefix) { return coinswap.GetUniCoinType(coinName) } else { params := asset.QueryTokenParams{ diff --git a/types/coin_type_test.go b/types/coin_type_test.go index 3843ce7e6..59e1028da 100644 --- a/types/coin_type_test.go +++ b/types/coin_type_test.go @@ -61,7 +61,7 @@ func TestGetCoin(t *testing.T) { func TestGetCoinName(t *testing.T) { testData := []struct { name, coinStr, expectName string - expectPass bool + expectPass bool }{ {"standard", "1000iris", "iris", true}, {"with -", "1000iris-atto", "iris", true}, @@ -69,7 +69,7 @@ func TestGetCoinName(t *testing.T) { {"with x.", "1000x.btc-min", "x.btc", true}, {"with decimal", "1000.001gdex.btc-min", "gdex.btc", true}, {"with decimal and numeric", "1000.001gdex1.btc1d-min", "gdex1.btc1d", true}, - {"with u-", "1000.001u-btc-min", "u-btc", true}, + {"with uni:", "1000.001uni:btc-min", "uni:btc", true}, {"invalid", "1000.001iris-min", "", false}, } @@ -92,10 +92,9 @@ func TestGetCoinNameByDenom(t *testing.T) { {"with -", "iris-atto", "iris", true}, {"with gateway", "gdex.btc-min", "gdex.btc", true}, {"with x.", "x.btc-min", "x.btc", true}, - {"with u-", "u-btc-min", "u-btc", true}, + {"with uni:", "uni:btc-min", "uni:btc", true}, {"invalid 1", "iris-min", "", false}, {"invalid 2", "iris", "iris", false}, - } for _, td := range testData {