Skip to content

Commit a970700

Browse files
authored
Merge branch 'main' into colin/11-migration-scripts
2 parents e326f74 + 2548ab5 commit a970700

File tree

6 files changed

+40
-7
lines changed

6 files changed

+40
-7
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
4949

5050
### API Breaking
5151

52+
* (modules) [\#206](https://github.com/cosmos/ibc-go/pull/206) Expose `relayer sdk.AccAddress` on `OnRecvPacket`, `OnAcknowledgementPacket`, `OnTimeoutPacket` module callbacks to enable incentivization.
5253
* (02-client) [\#181](https://github.com/cosmos/ibc-go/pull/181) Remove 'InitialHeight' from UpdateClient Proposal. Only copy over latest consensus state from substitute client.
5354
* (06-solomachine) [\#169](https://github.com/cosmos/ibc-go/pull/169) Change FrozenSequence to boolean in solomachine ClientState. The solo machine proto package has been bumped from `v1` to `v2`.
5455
* (module/core/02-client) [\#165](https://github.com/cosmos/ibc-go/pull/165) Remove GetFrozenHeight from the ClientState interface.

docs/migrations/ibc-migration-043.md

+2
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,8 @@ Application developers need to update their `OnRecvPacket` callback logic.
143143

144144
The `OnRecvPacket` callback has been modified to only return the acknowledgement. The acknowledgement returned must implement the `Acknowledgement` interface. The acknowledgement should indicate if it represents a successful processing of a packet by returning true on `Success()` and false in all other cases. A return value of false on `Success()` will result in all state changes which occurred in the callback being discarded. More information can be found in the [documentation](https://github.com/cosmos/ibc-go/blob/main/docs/custom.md#receiving-packets).
145145

146+
The `OnRecvPacket`, `OnAcknowledgementPacket`, and `OnTimeoutPacket` callbacks are now passed the `sdk.AccAddress` of the relayer who relayed the IBC packet. Applications may use or ignore this information.
147+
146148
## IBC Event changes
147149

148150
The `packet_data` attribute has been deprecated in favor of `packet_data_hex`, in order to provide standardized encoding/decoding of packet data in events. While the `packet_data` event still exists, all relayers and IBC Event consumers are strongly encouraged to switch over to using `packet_data_hex` as soon as possible.

modules/apps/transfer/module.go

+3
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,7 @@ func (am AppModule) OnChanCloseConfirm(
323323
func (am AppModule) OnRecvPacket(
324324
ctx sdk.Context,
325325
packet channeltypes.Packet,
326+
relayer sdk.AccAddress,
326327
) ibcexported.Acknowledgement {
327328
ack := channeltypes.NewResultAcknowledgement([]byte{byte(1)})
328329

@@ -360,6 +361,7 @@ func (am AppModule) OnAcknowledgementPacket(
360361
ctx sdk.Context,
361362
packet channeltypes.Packet,
362363
acknowledgement []byte,
364+
relayer sdk.AccAddress,
363365
) (*sdk.Result, error) {
364366
var ack channeltypes.Acknowledgement
365367
if err := types.ModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil {
@@ -411,6 +413,7 @@ func (am AppModule) OnAcknowledgementPacket(
411413
func (am AppModule) OnTimeoutPacket(
412414
ctx sdk.Context,
413415
packet channeltypes.Packet,
416+
relayer sdk.AccAddress,
414417
) (*sdk.Result, error) {
415418
var data types.FungibleTokenPacketData
416419
if err := types.ModuleCdc.UnmarshalJSON(packet.GetData(), &data); err != nil {

modules/core/05-port/types/module.go

+3
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,19 @@ type IBCModule interface {
6767
OnRecvPacket(
6868
ctx sdk.Context,
6969
packet channeltypes.Packet,
70+
relayer sdk.AccAddress,
7071
) exported.Acknowledgement
7172

7273
OnAcknowledgementPacket(
7374
ctx sdk.Context,
7475
packet channeltypes.Packet,
7576
acknowledgement []byte,
77+
relayer sdk.AccAddress,
7678
) (*sdk.Result, error)
7779

7880
OnTimeoutPacket(
7981
ctx sdk.Context,
8082
packet channeltypes.Packet,
83+
relayer sdk.AccAddress,
8184
) (*sdk.Result, error)
8285
}

modules/core/keeper/msg_server.go

+25-4
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,11 @@ func (k Keeper) ChannelCloseConfirm(goCtx context.Context, msg *channeltypes.Msg
424424
func (k Keeper) RecvPacket(goCtx context.Context, msg *channeltypes.MsgRecvPacket) (*channeltypes.MsgRecvPacketResponse, error) {
425425
ctx := sdk.UnwrapSDKContext(goCtx)
426426

427+
relayer, err := sdk.AccAddressFromBech32(msg.Signer)
428+
if err != nil {
429+
return nil, sdkerrors.Wrap(err, "Invalid address for msg Signer")
430+
}
431+
427432
// Lookup module by channel capability
428433
module, cap, err := k.ChannelKeeper.LookupModuleByChannel(ctx, msg.Packet.DestinationPort, msg.Packet.DestinationChannel)
429434
if err != nil {
@@ -444,7 +449,7 @@ func (k Keeper) RecvPacket(goCtx context.Context, msg *channeltypes.MsgRecvPacke
444449
// Perform application logic callback
445450
// Cache context so that we may discard state changes from callback if the acknowledgement is unsuccessful.
446451
cacheCtx, writeFn := ctx.CacheContext()
447-
ack := cbs.OnRecvPacket(cacheCtx, msg.Packet)
452+
ack := cbs.OnRecvPacket(cacheCtx, msg.Packet, relayer)
448453
if ack == nil || ack.Success() {
449454
// write application state changes for asynchronous and successful acknowledgements
450455
writeFn()
@@ -478,6 +483,12 @@ func (k Keeper) RecvPacket(goCtx context.Context, msg *channeltypes.MsgRecvPacke
478483
// Timeout defines a rpc handler method for MsgTimeout.
479484
func (k Keeper) Timeout(goCtx context.Context, msg *channeltypes.MsgTimeout) (*channeltypes.MsgTimeoutResponse, error) {
480485
ctx := sdk.UnwrapSDKContext(goCtx)
486+
487+
relayer, err := sdk.AccAddressFromBech32(msg.Signer)
488+
if err != nil {
489+
return nil, sdkerrors.Wrap(err, "Invalid address for msg Signer")
490+
}
491+
481492
// Lookup module by channel capability
482493
module, cap, err := k.ChannelKeeper.LookupModuleByChannel(ctx, msg.Packet.SourcePort, msg.Packet.SourceChannel)
483494
if err != nil {
@@ -496,7 +507,7 @@ func (k Keeper) Timeout(goCtx context.Context, msg *channeltypes.MsgTimeout) (*c
496507
}
497508

498509
// Perform application logic callback
499-
_, err = cbs.OnTimeoutPacket(ctx, msg.Packet)
510+
_, err = cbs.OnTimeoutPacket(ctx, msg.Packet, relayer)
500511
if err != nil {
501512
return nil, sdkerrors.Wrap(err, "timeout packet callback failed")
502513
}
@@ -527,6 +538,11 @@ func (k Keeper) Timeout(goCtx context.Context, msg *channeltypes.MsgTimeout) (*c
527538
func (k Keeper) TimeoutOnClose(goCtx context.Context, msg *channeltypes.MsgTimeoutOnClose) (*channeltypes.MsgTimeoutOnCloseResponse, error) {
528539
ctx := sdk.UnwrapSDKContext(goCtx)
529540

541+
relayer, err := sdk.AccAddressFromBech32(msg.Signer)
542+
if err != nil {
543+
return nil, sdkerrors.Wrap(err, "Invalid address for msg Signer")
544+
}
545+
530546
// Lookup module by channel capability
531547
module, cap, err := k.ChannelKeeper.LookupModuleByChannel(ctx, msg.Packet.SourcePort, msg.Packet.SourceChannel)
532548
if err != nil {
@@ -547,7 +563,7 @@ func (k Keeper) TimeoutOnClose(goCtx context.Context, msg *channeltypes.MsgTimeo
547563
// Perform application logic callback
548564
// NOTE: MsgTimeout and MsgTimeoutOnClose use the same "OnTimeoutPacket"
549565
// application logic callback.
550-
_, err = cbs.OnTimeoutPacket(ctx, msg.Packet)
566+
_, err = cbs.OnTimeoutPacket(ctx, msg.Packet, relayer)
551567
if err != nil {
552568
return nil, sdkerrors.Wrap(err, "timeout packet callback failed")
553569
}
@@ -578,6 +594,11 @@ func (k Keeper) TimeoutOnClose(goCtx context.Context, msg *channeltypes.MsgTimeo
578594
func (k Keeper) Acknowledgement(goCtx context.Context, msg *channeltypes.MsgAcknowledgement) (*channeltypes.MsgAcknowledgementResponse, error) {
579595
ctx := sdk.UnwrapSDKContext(goCtx)
580596

597+
relayer, err := sdk.AccAddressFromBech32(msg.Signer)
598+
if err != nil {
599+
return nil, sdkerrors.Wrap(err, "Invalid address for msg Signer")
600+
}
601+
581602
// Lookup module by channel capability
582603
module, cap, err := k.ChannelKeeper.LookupModuleByChannel(ctx, msg.Packet.SourcePort, msg.Packet.SourceChannel)
583604
if err != nil {
@@ -596,7 +617,7 @@ func (k Keeper) Acknowledgement(goCtx context.Context, msg *channeltypes.MsgAckn
596617
}
597618

598619
// Perform application logic callback
599-
_, err = cbs.OnAcknowledgementPacket(ctx, msg.Packet, msg.Acknowledgement)
620+
_, err = cbs.OnAcknowledgementPacket(ctx, msg.Packet, msg.Acknowledgement, relayer)
600621
if err != nil {
601622
return nil, sdkerrors.Wrap(err, "acknowledge packet callback failed")
602623
}

testing/mock/mock.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
abci "github.com/tendermint/tendermint/abci/types"
1818

1919
channeltypes "github.com/cosmos/ibc-go/modules/core/04-channel/types"
20+
porttypes "github.com/cosmos/ibc-go/modules/core/05-port/types"
2021
host "github.com/cosmos/ibc-go/modules/core/24-host"
2122
"github.com/cosmos/ibc-go/modules/core/exported"
2223
)
@@ -34,6 +35,8 @@ var (
3435
MockCanaryCapabilityName = "mock canary capability name"
3536
)
3637

38+
var _ porttypes.IBCModule = AppModule{}
39+
3740
// Expected Interface
3841
// PortKeeper defines the expected IBC port keeper
3942
type PortKeeper interface {
@@ -189,7 +192,7 @@ func (am AppModule) OnChanCloseConfirm(sdk.Context, string, string) error {
189192
}
190193

191194
// OnRecvPacket implements the IBCModule interface.
192-
func (am AppModule) OnRecvPacket(ctx sdk.Context, packet channeltypes.Packet) exported.Acknowledgement {
195+
func (am AppModule) OnRecvPacket(ctx sdk.Context, packet channeltypes.Packet, relayer sdk.AccAddress) exported.Acknowledgement {
193196
// set state by claiming capability to check if revert happens return
194197
am.scopedKeeper.NewCapability(ctx, MockCanaryCapabilityName)
195198
if bytes.Equal(MockPacketData, packet.GetData()) {
@@ -202,11 +205,11 @@ func (am AppModule) OnRecvPacket(ctx sdk.Context, packet channeltypes.Packet) ex
202205
}
203206

204207
// OnAcknowledgementPacket implements the IBCModule interface.
205-
func (am AppModule) OnAcknowledgementPacket(sdk.Context, channeltypes.Packet, []byte) (*sdk.Result, error) {
208+
func (am AppModule) OnAcknowledgementPacket(sdk.Context, channeltypes.Packet, []byte, sdk.AccAddress) (*sdk.Result, error) {
206209
return nil, nil
207210
}
208211

209212
// OnTimeoutPacket implements the IBCModule interface.
210-
func (am AppModule) OnTimeoutPacket(sdk.Context, channeltypes.Packet) (*sdk.Result, error) {
213+
func (am AppModule) OnTimeoutPacket(sdk.Context, channeltypes.Packet, sdk.AccAddress) (*sdk.Result, error) {
211214
return nil, nil
212215
}

0 commit comments

Comments
 (0)