1
1
package keeper
2
2
3
3
import (
4
+ "strconv"
4
5
"strings"
5
6
6
7
"github.com/cosmos/cosmos-sdk/codec"
@@ -12,7 +13,6 @@ import (
12
13
"github.com/cosmos/ibc-go/v3/modules/apps/29-fee/types"
13
14
channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types"
14
15
host "github.com/cosmos/ibc-go/v3/modules/core/24-host"
15
- ibcexported "github.com/cosmos/ibc-go/v3/modules/core/exported"
16
16
)
17
17
18
18
// Middleware must implement types.ChannelKeeper and types.PortKeeper expected interfaces
@@ -77,22 +77,6 @@ func (k Keeper) GetFeeModuleAddress() sdk.AccAddress {
77
77
return k .authKeeper .GetModuleAddress (types .ModuleName )
78
78
}
79
79
80
- // SendPacket wraps IBC ChannelKeeper's SendPacket function
81
- func (k Keeper ) SendPacket (ctx sdk.Context , chanCap * capabilitytypes.Capability , packet ibcexported.PacketI ) error {
82
- return k .ics4Wrapper .SendPacket (ctx , chanCap , packet )
83
- }
84
-
85
- // WriteAcknowledgement wraps IBC ChannelKeeper's WriteAcknowledgement function
86
- func (k Keeper ) WriteAcknowledgement (
87
- ctx sdk.Context ,
88
- chanCap * capabilitytypes.Capability ,
89
- packet ibcexported.PacketI ,
90
- acknowledgement []byte ,
91
- ) error {
92
- return nil
93
- // return k.channelKeeper.WriteAcknowledgement(ctx, chanCap, packet, acknowledgement)
94
- }
95
-
96
80
// SetFeeEnabled sets a flag to determine if fee handling logic should run for the given channel
97
81
// identified by channel and port identifiers.
98
82
func (k Keeper ) SetFeeEnabled (ctx sdk.Context , portID , channelID string ) {
@@ -169,6 +153,7 @@ func (k Keeper) GetCounterpartyAddress(ctx sdk.Context, address string) (string,
169
153
return addr , true
170
154
}
171
155
156
+ // GetAllRelayerAddresses returns all registered relayer addresses
172
157
func (k Keeper ) GetAllRelayerAddresses (ctx sdk.Context ) []* types.RegisteredRelayerAddress {
173
158
store := ctx .KVStore (k .storeKey )
174
159
iterator := sdk .KVStorePrefixIterator (store , []byte (types .RelayerAddressKeyPrefix ))
@@ -189,6 +174,59 @@ func (k Keeper) GetAllRelayerAddresses(ctx sdk.Context) []*types.RegisteredRelay
189
174
return registeredAddrArr
190
175
}
191
176
177
+ // SetForwardRelayerAddress sets the forward relayer address during OnRecvPacket in case of async acknowledgement
178
+ func (k Keeper ) SetForwardRelayerAddress (ctx sdk.Context , packetId * channeltypes.PacketId , address string ) {
179
+ store := ctx .KVStore (k .storeKey )
180
+ store .Set (types .KeyForwardRelayerAddress (packetId ), []byte (address ))
181
+ }
182
+
183
+ // GetForwardRelayerAddress gets forward relayer address for a particular packet
184
+ func (k Keeper ) GetForwardRelayerAddress (ctx sdk.Context , packetId * channeltypes.PacketId ) (string , bool ) {
185
+ store := ctx .KVStore (k .storeKey )
186
+ key := types .KeyForwardRelayerAddress (packetId )
187
+ if ! store .Has (key ) {
188
+ return "" , false
189
+ }
190
+
191
+ addr := string (store .Get (key ))
192
+ return addr , true
193
+ }
194
+
195
+ // GetAllForwardRelayerAddresses returns all forward relayer addresses stored for async acknowledgements
196
+ func (k Keeper ) GetAllForwardRelayerAddresses (ctx sdk.Context ) []* types.ForwardRelayerAddress {
197
+ store := ctx .KVStore (k .storeKey )
198
+ iterator := sdk .KVStorePrefixIterator (store , []byte (types .ForwardRelayerPrefix ))
199
+ defer iterator .Close ()
200
+
201
+ var forwardRelayerAddr []* types.ForwardRelayerAddress
202
+ for ; iterator .Valid (); iterator .Next () {
203
+ keySplit := strings .Split (string (iterator .Key ()), "/" )
204
+
205
+ seq , err := strconv .ParseUint (keySplit [3 ], 0 , 64 )
206
+ if err != nil {
207
+ panic ("failed to parse packet sequence in forward relayer address mapping" )
208
+ }
209
+
210
+ packetId := channeltypes .NewPacketId (keySplit [2 ], keySplit [1 ], seq )
211
+
212
+ addr := & types.ForwardRelayerAddress {
213
+ Address : string (iterator .Value ()),
214
+ PacketId : packetId ,
215
+ }
216
+
217
+ forwardRelayerAddr = append (forwardRelayerAddr , addr )
218
+ }
219
+
220
+ return forwardRelayerAddr
221
+ }
222
+
223
+ // Deletes the forwardRelayerAddr associated with the packetId
224
+ func (k Keeper ) DeleteForwardRelayerAddress (ctx sdk.Context , packetId * channeltypes.PacketId ) {
225
+ store := ctx .KVStore (k .storeKey )
226
+ key := types .KeyForwardRelayerAddress (packetId )
227
+ store .Delete (key )
228
+ }
229
+
192
230
// Stores a Fee for a given packet in state
193
231
func (k Keeper ) SetFeeInEscrow (ctx sdk.Context , fee * types.IdentifiedPacketFee ) {
194
232
store := ctx .KVStore (k .storeKey )
0 commit comments