From 0547b2c1338b8b933d4784266acdff90e790176d Mon Sep 17 00:00:00 2001 From: Charly Date: Wed, 2 Mar 2022 18:06:13 +0100 Subject: [PATCH 1/4] add function + test --- modules/apps/29-fee/keeper/keeper.go | 13 +++------- modules/apps/29-fee/types/keys.go | 18 ++++++++++++- modules/apps/29-fee/types/keys_test.go | 36 ++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 10 deletions(-) diff --git a/modules/apps/29-fee/keeper/keeper.go b/modules/apps/29-fee/keeper/keeper.go index 4a3dfbdeb4a..9e709aa0c76 100644 --- a/modules/apps/29-fee/keeper/keeper.go +++ b/modules/apps/29-fee/keeper/keeper.go @@ -1,8 +1,6 @@ package keeper import ( - "strings" - "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" @@ -162,12 +160,9 @@ func (k Keeper) GetAllRelayerAddresses(ctx sdk.Context) []types.RegisteredRelaye var registeredAddrArr []types.RegisteredRelayerAddress for ; iterator.Valid(); iterator.Next() { - keySplit := strings.Split(string(iterator.Key()), "/") - - addr := types.RegisteredRelayerAddress{ - Address: keySplit[1], - CounterpartyAddress: string(iterator.Value()), - ChannelId: keySplit[2], + addr, err := types.ParseKeyCounterpartyRelayer(string(iterator.Key()), string(iterator.Value())) + if err != nil { + panic(err) } registeredAddrArr = append(registeredAddrArr, addr) @@ -265,7 +260,7 @@ func (k Keeper) HasFeesInEscrow(ctx sdk.Context, packetID channeltypes.PacketId) return store.Has(key) } -// SetFeesInEscrow sets the given packet fees in escrow keyed by the packetID +// SetFeesInEscrow sets the given packet fees in escrow keyed by the packetID func (k Keeper) SetFeesInEscrow(ctx sdk.Context, packetID channeltypes.PacketId, fees types.PacketFees) { store := ctx.KVStore(k.storeKey) bz := k.MustMarshalFees(fees) diff --git a/modules/apps/29-fee/types/keys.go b/modules/apps/29-fee/types/keys.go index e619bde8806..b2fa6321c29 100644 --- a/modules/apps/29-fee/types/keys.go +++ b/modules/apps/29-fee/types/keys.go @@ -71,11 +71,27 @@ func ParseKeyFeeEnabled(key string) (portID, channelID string, err error) { return portID, channelID, nil } -// KeyCounterpartyRelayer returns the key for relayer address -> counteryparty address mapping +// KeyCounterpartyRelayer returns the key for relayer address -> counterparty address mapping func KeyCounterpartyRelayer(address, channelID string) []byte { return []byte(fmt.Sprintf("%s/%s/%s", CounterpartyRelayerAddressKeyPrefix, address, channelID)) } +// ParseKeyCounterpartyRelayer returns the registered relayer address -> counterparty address mapping +func ParseKeyCounterpartyRelayer(key string, counterpartyAddress string) (RegisteredRelayerAddress, error) { + keySplit := strings.Split(key, "/") + if len(keySplit) != 3 { + return RegisteredRelayerAddress{}, sdkerrors.Wrapf( + sdkerrors.ErrLogic, "key provided is incorrect: the key split has incorrect length, expected %d, got %d", 3, len(keySplit), + ) + } + + return RegisteredRelayerAddress{ + Address: keySplit[1], + CounterpartyAddress: counterpartyAddress, + ChannelId: keySplit[2], + }, nil +} + // KeyForwardRelayerAddress returns the key for packetID -> forwardAddress mapping func KeyForwardRelayerAddress(packetId channeltypes.PacketId) []byte { return []byte(fmt.Sprintf("%s/%s/%s/%d", ForwardRelayerPrefix, packetId.PortId, packetId.ChannelId, packetId.Sequence)) diff --git a/modules/apps/29-fee/types/keys_test.go b/modules/apps/29-fee/types/keys_test.go index 85c6b107f5f..abb7cd4770f 100644 --- a/modules/apps/29-fee/types/keys_test.go +++ b/modules/apps/29-fee/types/keys_test.go @@ -134,3 +134,39 @@ func TestParseKeyForwardRelayerAddress(t *testing.T) { } } } + +func TestParseKeyCounterpartyRelayer(t *testing.T) { + var ( + relayerAddress = "relayer_address" + counterpartyRelayerAddress = "counterparty_address" + ) + + testCases := []struct { + name string + key string + expPass bool + }{ + { + "success", + string(types.KeyCounterpartyRelayer(relayerAddress, ibctesting.FirstChannelID)), + true, + }, + { + "incorrect key - key split has incorrect length", + "relayerAddress/relayer_address/transfer/channel-0", + false, + }, + } + + for _, tc := range testCases { + registeredAddr, err := types.ParseKeyCounterpartyRelayer(tc.key, counterpartyRelayerAddress) + validRegisteredAddr := types.RegisteredRelayerAddress{relayerAddress, counterpartyRelayerAddress, ibctesting.FirstChannelID} + + if tc.expPass { + require.NoError(t, err) + require.Equal(t, validRegisteredAddr, registeredAddr) + } else { + require.Error(t, err) + } + } +} From ce027d78c425bc82549500f05e9616a528ada1e9 Mon Sep 17 00:00:00 2001 From: Charly Date: Thu, 3 Mar 2022 16:05:59 +0100 Subject: [PATCH 2/4] update per requested changes --- modules/apps/29-fee/keeper/keeper.go | 8 +++++++- modules/apps/29-fee/types/keys.go | 10 +++------- modules/apps/29-fee/types/keys_test.go | 5 +++-- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/modules/apps/29-fee/keeper/keeper.go b/modules/apps/29-fee/keeper/keeper.go index 0fe6a85ef08..c0c43dbecc6 100644 --- a/modules/apps/29-fee/keeper/keeper.go +++ b/modules/apps/29-fee/keeper/keeper.go @@ -171,11 +171,17 @@ func (k Keeper) GetAllRelayerAddresses(ctx sdk.Context) []types.RegisteredRelaye var registeredAddrArr []types.RegisteredRelayerAddress for ; iterator.Valid(); iterator.Next() { - addr, err := types.ParseKeyCounterpartyRelayer(string(iterator.Key()), string(iterator.Value())) + address, channelID, err := types.ParseKeyCounterpartyRelayer(string(iterator.Key())) if err != nil { panic(err) } + addr := types.RegisteredRelayerAddress{ + Address: address, + CounterpartyAddress: string(iterator.Value()), + ChannelId: channelID, + } + registeredAddrArr = append(registeredAddrArr, addr) } diff --git a/modules/apps/29-fee/types/keys.go b/modules/apps/29-fee/types/keys.go index da57d6c5743..388a9defce7 100644 --- a/modules/apps/29-fee/types/keys.go +++ b/modules/apps/29-fee/types/keys.go @@ -70,19 +70,15 @@ func KeyCounterpartyRelayer(address, channelID string) []byte { } // ParseKeyCounterpartyRelayer returns the registered relayer address -> counterparty address mapping -func ParseKeyCounterpartyRelayer(key string, counterpartyAddress string) (RegisteredRelayerAddress, error) { +func ParseKeyCounterpartyRelayer(key string) (address string, channelID string, error error) { keySplit := strings.Split(key, "/") if len(keySplit) != 3 { - return RegisteredRelayerAddress{}, sdkerrors.Wrapf( + return "", "", sdkerrors.Wrapf( sdkerrors.ErrLogic, "key provided is incorrect: the key split has incorrect length, expected %d, got %d", 3, len(keySplit), ) } - return RegisteredRelayerAddress{ - Address: keySplit[1], - CounterpartyAddress: counterpartyAddress, - ChannelId: keySplit[2], - }, nil + return keySplit[1], keySplit[2], nil } // KeyForwardRelayerAddress returns the key for packetID -> forwardAddress mapping diff --git a/modules/apps/29-fee/types/keys_test.go b/modules/apps/29-fee/types/keys_test.go index a9ad9af0b65..6e564b4b1f6 100644 --- a/modules/apps/29-fee/types/keys_test.go +++ b/modules/apps/29-fee/types/keys_test.go @@ -164,12 +164,13 @@ func TestParseKeyCounterpartyRelayer(t *testing.T) { } for _, tc := range testCases { - registeredAddr, err := types.ParseKeyCounterpartyRelayer(tc.key, counterpartyRelayerAddress) + address, channelID, err := types.ParseKeyCounterpartyRelayer(tc.key) validRegisteredAddr := types.RegisteredRelayerAddress{relayerAddress, counterpartyRelayerAddress, ibctesting.FirstChannelID} if tc.expPass { require.NoError(t, err) - require.Equal(t, validRegisteredAddr, registeredAddr) + require.Equal(t, validRegisteredAddr.Address, address) + require.Equal(t, validRegisteredAddr.ChannelId, channelID) } else { require.Error(t, err) } From 73ee75d6d855641464e4eb3a17624f1b816c5600 Mon Sep 17 00:00:00 2001 From: Charly Date: Thu, 3 Mar 2022 16:07:44 +0100 Subject: [PATCH 3/4] update comment --- modules/apps/29-fee/types/keys.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/apps/29-fee/types/keys.go b/modules/apps/29-fee/types/keys.go index 388a9defce7..2a6c091eca4 100644 --- a/modules/apps/29-fee/types/keys.go +++ b/modules/apps/29-fee/types/keys.go @@ -69,7 +69,7 @@ func KeyCounterpartyRelayer(address, channelID string) []byte { return []byte(fmt.Sprintf("%s/%s/%s", CounterpartyRelayerAddressKeyPrefix, address, channelID)) } -// ParseKeyCounterpartyRelayer returns the registered relayer address -> counterparty address mapping +// ParseKeyCounterpartyRelayer returns the registered relayer address and channelID given the used to store the counterpartyrelayer address func ParseKeyCounterpartyRelayer(key string) (address string, channelID string, error error) { keySplit := strings.Split(key, "/") if len(keySplit) != 3 { From 21b63158a4a968437726c1e0b4aa88d97e8ddde1 Mon Sep 17 00:00:00 2001 From: Charly Date: Thu, 3 Mar 2022 16:53:09 +0100 Subject: [PATCH 4/4] last comments --- modules/apps/29-fee/types/keys.go | 2 +- modules/apps/29-fee/types/keys_test.go | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/modules/apps/29-fee/types/keys.go b/modules/apps/29-fee/types/keys.go index 2a6c091eca4..68154661d6e 100644 --- a/modules/apps/29-fee/types/keys.go +++ b/modules/apps/29-fee/types/keys.go @@ -69,7 +69,7 @@ func KeyCounterpartyRelayer(address, channelID string) []byte { return []byte(fmt.Sprintf("%s/%s/%s", CounterpartyRelayerAddressKeyPrefix, address, channelID)) } -// ParseKeyCounterpartyRelayer returns the registered relayer address and channelID given the used to store the counterpartyrelayer address +// ParseKeyCounterpartyRelayer returns the registered relayer address and channelID used to store the counterpartyrelayer address func ParseKeyCounterpartyRelayer(key string) (address string, channelID string, error error) { keySplit := strings.Split(key, "/") if len(keySplit) != 3 { diff --git a/modules/apps/29-fee/types/keys_test.go b/modules/apps/29-fee/types/keys_test.go index 6e564b4b1f6..518b2d65604 100644 --- a/modules/apps/29-fee/types/keys_test.go +++ b/modules/apps/29-fee/types/keys_test.go @@ -142,8 +142,7 @@ func TestParseKeyForwardRelayerAddress(t *testing.T) { func TestParseKeyCounterpartyRelayer(t *testing.T) { var ( - relayerAddress = "relayer_address" - counterpartyRelayerAddress = "counterparty_address" + relayerAddress = "relayer_address" ) testCases := []struct { @@ -165,12 +164,11 @@ func TestParseKeyCounterpartyRelayer(t *testing.T) { for _, tc := range testCases { address, channelID, err := types.ParseKeyCounterpartyRelayer(tc.key) - validRegisteredAddr := types.RegisteredRelayerAddress{relayerAddress, counterpartyRelayerAddress, ibctesting.FirstChannelID} if tc.expPass { require.NoError(t, err) - require.Equal(t, validRegisteredAddr.Address, address) - require.Equal(t, validRegisteredAddr.ChannelId, channelID) + require.Equal(t, relayerAddress, address) + require.Equal(t, ibctesting.FirstChannelID, channelID) } else { require.Error(t, err) }