Skip to content

Commit 6928af7

Browse files
authored
ics29:fix: counterparty addr must contain channelID (#937)
* fix: counterparty address must chain channelID * nit: updating var name * test: adding validation check for channelID * nit: fn names
1 parent 74afccd commit 6928af7

18 files changed

+228
-113
lines changed

docs/ibc/proto-docs.md

+2
Original file line numberDiff line numberDiff line change
@@ -830,6 +830,7 @@ RegisteredRelayerAddress contains the address and counterparty address for a spe
830830
| ----- | ---- | ----- | ----------- |
831831
| `address` | [string](#string) | | |
832832
| `counterparty_address` | [string](#string) | | |
833+
| `channel_id` | [string](#string) | | |
833834

834835

835836

@@ -1041,6 +1042,7 @@ MsgRegisterCounterpartyAddress is the request type for registering the counterpa
10411042
| ----- | ---- | ----- | ----------- |
10421043
| `address` | [string](#string) | | |
10431044
| `counterparty_address` | [string](#string) | | |
1045+
| `channel_id` | [string](#string) | | |
10441046

10451047

10461048

modules/apps/29-fee/ibc_module.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ func (im IBCModule) OnRecvPacket(
196196

197197
ack := im.app.OnRecvPacket(ctx, packet, relayer)
198198

199-
forwardRelayer, found := im.keeper.GetCounterpartyAddress(ctx, relayer.String())
199+
forwardRelayer, found := im.keeper.GetCounterpartyAddress(ctx, relayer.String(), packet.DestinationChannel)
200200

201201
// incase of async aknowledgement (ack == nil) store the ForwardRelayer address for use later
202202
if ack == nil && found {

modules/apps/29-fee/ibc_module_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,7 @@ func (suite *FeeTestSuite) TestOnRecvPacket() {
487487
{
488488
"forward address is not found",
489489
func() {
490-
suite.chainB.GetSimApp().IBCFeeKeeper.SetCounterpartyAddress(suite.chainB.GetContext(), suite.chainA.SenderAccount.GetAddress().String(), "")
490+
suite.chainB.GetSimApp().IBCFeeKeeper.SetCounterpartyAddress(suite.chainB.GetContext(), suite.chainA.SenderAccount.GetAddress().String(), "", suite.path.EndpointB.ChannelID)
491491
},
492492
false,
493493
true,
@@ -514,7 +514,7 @@ func (suite *FeeTestSuite) TestOnRecvPacket() {
514514
cbs, ok := suite.chainB.App.GetIBCKeeper().Router.GetRoute(module)
515515
suite.Require().True(ok)
516516

517-
suite.chainB.GetSimApp().IBCFeeKeeper.SetCounterpartyAddress(suite.chainB.GetContext(), suite.chainA.SenderAccount.GetAddress().String(), suite.chainB.SenderAccount.GetAddress().String())
517+
suite.chainB.GetSimApp().IBCFeeKeeper.SetCounterpartyAddress(suite.chainB.GetContext(), suite.chainA.SenderAccount.GetAddress().String(), suite.chainB.SenderAccount.GetAddress().String(), suite.path.EndpointB.ChannelID)
518518

519519
// malleate test case
520520
tc.malleate()

modules/apps/29-fee/keeper/genesis.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ func (k Keeper) InitGenesis(ctx sdk.Context, state types.GenesisState) {
1212
k.SetFeeInEscrow(ctx, fee)
1313
}
1414

15-
for _, addr := range state.RegisteredRelayers {
16-
k.SetCounterpartyAddress(ctx, addr.Address, addr.CounterpartyAddress)
15+
for _, relayer := range state.RegisteredRelayers {
16+
k.SetCounterpartyAddress(ctx, relayer.Address, relayer.CounterpartyAddress, relayer.ChannelId)
1717
}
1818

1919
for _, forwardAddr := range state.ForwardRelayers {

modules/apps/29-fee/keeper/genesis_test.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ func (suite *KeeperTestSuite) TestInitGenesis() {
4343
{
4444
Address: sender,
4545
CounterpartyAddress: counterparty,
46+
ChannelId: ibctesting.FirstChannelID,
4647
},
4748
},
4849
}
@@ -59,7 +60,7 @@ func (suite *KeeperTestSuite) TestInitGenesis() {
5960
suite.Require().True(isEnabled)
6061

6162
// check relayers
62-
addr, found := suite.chainA.GetSimApp().IBCFeeKeeper.GetCounterpartyAddress(suite.chainA.GetContext(), sender)
63+
addr, found := suite.chainA.GetSimApp().IBCFeeKeeper.GetCounterpartyAddress(suite.chainA.GetContext(), sender, ibctesting.FirstChannelID)
6364
suite.Require().True(found)
6465
suite.Require().Equal(genesisState.RegisteredRelayers[0].CounterpartyAddress, addr)
6566
}
@@ -84,7 +85,7 @@ func (suite *KeeperTestSuite) TestExportGenesis() {
8485
sender := suite.chainA.SenderAccount.GetAddress().String()
8586
counterparty := suite.chainB.SenderAccount.GetAddress().String()
8687
// set counterparty address
87-
suite.chainA.GetSimApp().IBCFeeKeeper.SetCounterpartyAddress(suite.chainA.GetContext(), sender, counterparty)
88+
suite.chainA.GetSimApp().IBCFeeKeeper.SetCounterpartyAddress(suite.chainA.GetContext(), sender, counterparty, ibctesting.FirstChannelID)
8889

8990
// set forward relayer address
9091
suite.chainA.GetSimApp().IBCFeeKeeper.SetForwardRelayerAddress(suite.chainA.GetContext(), packetID, sender)

modules/apps/29-fee/keeper/keeper.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -135,15 +135,15 @@ func (k Keeper) DisableAllChannels(ctx sdk.Context) {
135135

136136
// SetCounterpartyAddress maps the destination chain relayer address to the source relayer address
137137
// The receiving chain must store the mapping from: address -> counterpartyAddress for the given channel
138-
func (k Keeper) SetCounterpartyAddress(ctx sdk.Context, address, counterpartyAddress string) {
138+
func (k Keeper) SetCounterpartyAddress(ctx sdk.Context, address, counterpartyAddress, channelID string) {
139139
store := ctx.KVStore(k.storeKey)
140-
store.Set(types.KeyRelayerAddress(address), []byte(counterpartyAddress))
140+
store.Set(types.KeyCounterpartyRelayer(address, channelID), []byte(counterpartyAddress))
141141
}
142142

143143
// GetCounterpartyAddress gets the relayer counterparty address given a destination relayer address
144-
func (k Keeper) GetCounterpartyAddress(ctx sdk.Context, address string) (string, bool) {
144+
func (k Keeper) GetCounterpartyAddress(ctx sdk.Context, address, channelID string) (string, bool) {
145145
store := ctx.KVStore(k.storeKey)
146-
key := types.KeyRelayerAddress(address)
146+
key := types.KeyCounterpartyRelayer(address, channelID)
147147

148148
if !store.Has(key) {
149149
return "", false
@@ -156,7 +156,7 @@ func (k Keeper) GetCounterpartyAddress(ctx sdk.Context, address string) (string,
156156
// GetAllRelayerAddresses returns all registered relayer addresses
157157
func (k Keeper) GetAllRelayerAddresses(ctx sdk.Context) []types.RegisteredRelayerAddress {
158158
store := ctx.KVStore(k.storeKey)
159-
iterator := sdk.KVStorePrefixIterator(store, []byte(types.RelayerAddressKeyPrefix))
159+
iterator := sdk.KVStorePrefixIterator(store, []byte(types.CounterpartyRelayerAddressKeyPrefix))
160160
defer iterator.Close()
161161

162162
var registeredAddrArr []types.RegisteredRelayerAddress
@@ -166,6 +166,7 @@ func (k Keeper) GetAllRelayerAddresses(ctx sdk.Context) []types.RegisteredRelaye
166166
addr := types.RegisteredRelayerAddress{
167167
Address: keySplit[1],
168168
CounterpartyAddress: string(iterator.Value()),
169+
ChannelId: keySplit[2],
169170
}
170171

171172
registeredAddrArr = append(registeredAddrArr, addr)

modules/apps/29-fee/keeper/keeper_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -152,12 +152,13 @@ func (suite *KeeperTestSuite) TestGetAllRelayerAddresses() {
152152
sender := suite.chainA.SenderAccount.GetAddress().String()
153153
counterparty := suite.chainB.SenderAccount.GetAddress().String()
154154

155-
suite.chainA.GetSimApp().IBCFeeKeeper.SetCounterpartyAddress(suite.chainA.GetContext(), sender, counterparty)
155+
suite.chainA.GetSimApp().IBCFeeKeeper.SetCounterpartyAddress(suite.chainA.GetContext(), sender, counterparty, ibctesting.FirstChannelID)
156156

157157
expectedAddr := []types.RegisteredRelayerAddress{
158158
{
159159
Address: sender,
160160
CounterpartyAddress: counterparty,
161+
ChannelId: ibctesting.FirstChannelID,
161162
},
162163
}
163164

modules/apps/29-fee/keeper/msg_server.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ func (k Keeper) RegisterCounterpartyAddress(goCtx context.Context, msg *types.Ms
1818
ctx := sdk.UnwrapSDKContext(goCtx)
1919

2020
k.SetCounterpartyAddress(
21-
ctx, msg.Address, msg.CounterpartyAddress,
21+
ctx, msg.Address, msg.CounterpartyAddress, msg.ChannelId,
2222
)
2323

2424
k.Logger(ctx).Info("Registering counterparty address for relayer.", "Address:", msg.Address, "Counterparty Address:", msg.CounterpartyAddress)

modules/apps/29-fee/keeper/msg_server_test.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package keeper_test
33
import (
44
"github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types"
55
channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types"
6+
ibctesting "github.com/cosmos/ibc-go/v3/testing"
67
)
78

89
func (suite *KeeperTestSuite) TestRegisterCounterpartyAddress() {
@@ -35,14 +36,14 @@ func (suite *KeeperTestSuite) TestRegisterCounterpartyAddress() {
3536
sender = suite.chainA.SenderAccount.GetAddress().String()
3637
counterparty = suite.chainB.SenderAccount.GetAddress().String()
3738
tc.malleate()
38-
msg := types.NewMsgRegisterCounterpartyAddress(sender, counterparty)
39+
msg := types.NewMsgRegisterCounterpartyAddress(sender, counterparty, ibctesting.FirstChannelID)
3940

4041
_, err := suite.chainA.SendMsgs(msg)
4142

4243
if tc.expPass {
4344
suite.Require().NoError(err) // message committed
4445

45-
counterpartyAddress, _ := suite.chainA.GetSimApp().IBCFeeKeeper.GetCounterpartyAddress(ctx, suite.chainA.SenderAccount.GetAddress().String())
46+
counterpartyAddress, _ := suite.chainA.GetSimApp().IBCFeeKeeper.GetCounterpartyAddress(ctx, suite.chainA.SenderAccount.GetAddress().String(), ibctesting.FirstChannelID)
4647
suite.Require().Equal(counterparty, counterpartyAddress)
4748
} else {
4849
suite.Require().Error(err)

modules/apps/29-fee/transfer_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func (suite *FeeTestSuite) TestFeeTransfer() {
4646
// to differentiate from the chainA.SenderAccount for checking successful relay payouts
4747
relayerAddress := suite.chainB.SenderAccount.GetAddress()
4848

49-
msgRegister := types.NewMsgRegisterCounterpartyAddress(suite.chainB.SenderAccount.GetAddress().String(), relayerAddress.String())
49+
msgRegister := types.NewMsgRegisterCounterpartyAddress(suite.chainB.SenderAccount.GetAddress().String(), relayerAddress.String(), ibctesting.FirstChannelID)
5050
_, err = suite.chainB.SendMsgs(msgRegister)
5151
suite.Require().NoError(err) // message committed
5252

modules/apps/29-fee/types/genesis.pb.go

+89-37
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

modules/apps/29-fee/types/keys.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ const (
2424
// FeeEnabledPrefix is the key prefix for storing fee enabled flag
2525
FeeEnabledKeyPrefix = "feeEnabled"
2626

27-
// RelayerAddressKeyPrefix is the key prefix for relayer address mapping
28-
RelayerAddressKeyPrefix = "relayerAddress"
27+
// CounterpartyRelayerAddressKeyPrefix is the key prefix for relayer address mapping
28+
CounterpartyRelayerAddressKeyPrefix = "relayerAddress"
2929

3030
// FeeInEscrowPrefix is the key prefix for fee in escrow mapping
3131
FeeInEscrowPrefix = "feeInEscrow"
@@ -47,9 +47,9 @@ func FeeEnabledKey(portID, channelID string) []byte {
4747
return []byte(fmt.Sprintf("%s/%s/%s", FeeEnabledKeyPrefix, portID, channelID))
4848
}
4949

50-
// KeyRelayerAddress returns the key for relayer address -> counteryparty address mapping
51-
func KeyRelayerAddress(address string) []byte {
52-
return []byte(fmt.Sprintf("%s/%s", RelayerAddressKeyPrefix, address))
50+
// KeyCounterpartyRelayer returns the key for relayer address -> counteryparty address mapping
51+
func KeyCounterpartyRelayer(address, channelID string) []byte {
52+
return []byte(fmt.Sprintf("%s/%s/%s", CounterpartyRelayerAddressKeyPrefix, address, channelID))
5353
}
5454

5555
// KeyForwardRelayerAddress returns the key for packetID -> forwardAddress mapping

0 commit comments

Comments
 (0)