Skip to content

Commit

Permalink
Problem: not payee set for relayer caller
Browse files Browse the repository at this point in the history
  • Loading branch information
mmsqe committed Oct 22, 2024
1 parent ad53734 commit b972a99
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 20 deletions.
40 changes: 36 additions & 4 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ import (
ibc "github.com/cosmos/ibc-go/v8/modules/core"
ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types"
ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types"
ibcchanneltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types"
porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types"
ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported"
ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper"
Expand Down Expand Up @@ -280,6 +281,37 @@ var (

type GenesisState = map[string]json.RawMessage

type CustomIBCFeeMiddleware struct {
ibcfee.IBCMiddleware
keeper ibcfeekeeper.Keeper
}

func NewIBCFeeMiddleware(app porttypes.IBCModule, k ibcfeekeeper.Keeper) CustomIBCFeeMiddleware {
return CustomIBCFeeMiddleware{
IBCMiddleware: ibcfee.NewIBCMiddleware(app, k),
keeper: k,
}
}

func (im CustomIBCFeeMiddleware) OnAcknowledgementPacket(
ctx sdk.Context,
packet ibcchanneltypes.Packet,
acknowledgement []byte,
relayer sdk.AccAddress,
) error {
im.keeper.SetPayeeAddress(ctx, relayer.String(), "", packet.SourceChannel)
return im.IBCMiddleware.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer)
}

func (im CustomIBCFeeMiddleware) OnTimeoutPacket(
ctx sdk.Context,
packet ibcchanneltypes.Packet,
relayer sdk.AccAddress,
) error {
im.keeper.SetPayeeAddress(ctx, relayer.String(), "", packet.SourceChannel)
return im.IBCMiddleware.OnTimeoutPacket(ctx, packet, relayer)
}

// App extends an ABCI application, but with most of its parameters exported.
// They are exported for convenience in creating helper functions, as object
// capabilities aren't needed for testing.
Expand Down Expand Up @@ -713,8 +745,8 @@ func New(

var transferStack porttypes.IBCModule
transferStack = transfer.NewIBCModule(app.TransferKeeper)
transferStack = middleware.NewIBCConversionModule(transferStack, app.CronosKeeper)
transferStack = ibcfee.NewIBCMiddleware(transferStack, app.IBCFeeKeeper)
transferStack = middleware.NewIBCConversionModule(transferStack, app.CronosKeeper, app.IBCFeeKeeper)
transferStack = NewIBCFeeMiddleware(transferStack, app.IBCFeeKeeper)

govKeeper := govkeeper.NewKeeper(
appCodec,
Expand All @@ -741,7 +773,7 @@ func New(

var icaControllerStack porttypes.IBCModule
icaControllerStack = icacontroller.NewIBCMiddleware(nil, app.ICAControllerKeeper)
icaControllerStack = ibcfee.NewIBCMiddleware(icaControllerStack, app.IBCFeeKeeper)
icaControllerStack = NewIBCFeeMiddleware(icaControllerStack, app.IBCFeeKeeper)
// Since the callbacks middleware itself is an ics4wrapper, it needs to be passed to the ica controller keeper
ics4Wrapper := icaControllerStack.(porttypes.Middleware)
app.ICAControllerKeeper.WithICS4Wrapper(ics4Wrapper)
Expand All @@ -750,7 +782,7 @@ func New(

var icaHostStack porttypes.IBCModule
icaHostStack = icahost.NewIBCModule(app.ICAHostKeeper)
icaHostStack = ibcfee.NewIBCMiddleware(icaHostStack, app.IBCFeeKeeper)
icaHostStack = NewIBCFeeMiddleware(icaHostStack, app.IBCFeeKeeper)

// Create static IBC router, add transfer route, then set and seal it
ibcRouter := porttypes.NewRouter()
Expand Down
22 changes: 12 additions & 10 deletions integration_tests/cosmoscli.py
Original file line number Diff line number Diff line change
Expand Up @@ -601,9 +601,12 @@ def combine_batch_multisig_tx(
def broadcast_tx(self, tx_file, **kwargs):
kwargs.setdefault("broadcast_mode", "sync")
kwargs.setdefault("output", "json")
return json.loads(
rsp = json.loads(
self.raw("tx", "broadcast", tx_file, node=self.node_rpc, **kwargs)
)
if rsp["code"] == 0:
rsp = self.event_query_tx_for(rsp["txhash"])
return rsp

def broadcast_tx_json(self, tx, **kwargs):
with tempfile.NamedTemporaryFile("w") as fp:
Expand Down Expand Up @@ -1612,10 +1615,7 @@ def register_counterparty_payee(
return rsp

def register_payee(self, port_id, channel_id, relayer, payee, **kwargs):
default_kwargs = {
"home": self.data_dir,
}
return json.loads(
rsp = json.loads(
self.raw(
"tx",
"ibc-fee",
Expand All @@ -1625,14 +1625,15 @@ def register_payee(self, port_id, channel_id, relayer, payee, **kwargs):
relayer,
payee,
"-y",
**(default_kwargs | kwargs),
home=self.data_dir,
**kwargs,
)
)
if rsp["code"] == 0:
rsp = self.event_query_tx_for(rsp["txhash"])
return rsp

def pay_packet_fee(self, port_id, channel_id, packet_seq, **kwargs):
default_kwargs = {
"home": self.data_dir,
}
rsp = json.loads(
self.raw(
"tx",
Expand All @@ -1642,7 +1643,8 @@ def pay_packet_fee(self, port_id, channel_id, packet_seq, **kwargs):
channel_id,
str(packet_seq),
"-y",
**(default_kwargs | kwargs),
home=self.data_dir,
**kwargs,
)
)
if rsp["code"] == 0:
Expand Down
11 changes: 9 additions & 2 deletions integration_tests/ibc_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,15 +218,22 @@ def prepare_network(


def register_fee_payee(src_chain, dst_chain):
port_id = "transfer"
channel_id = "channel-0"
rsp = dst_chain.register_counterparty_payee(
"transfer",
"channel-0",
port_id,
channel_id,
dst_chain.address("relayer"),
src_chain.address("signer1"),
from_="relayer",
fees="100000000basecro",
)
assert rsp["code"] == 0, rsp["raw_log"]
# relayer = src_chain.address("signer1")
# relayer_caller = eth_to_bech32(RELAYER_CALLER)
# rsp = src_chain.register_payee(
# port_id, channel_id, relayer_caller, relayer, _from=relayer_caller
# )


def assert_ready(ibc):
Expand Down
5 changes: 2 additions & 3 deletions integration_tests/test_ibc_rly.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

from .ibc_utils import (
RATIO,
RELAYER_CALLER,
assert_duplicate,
cronos_transfer_source_tokens,
cronos_transfer_source_tokens_with_proxy,
Expand Down Expand Up @@ -287,8 +286,8 @@ def test_ibc_incentivized_transfer(ibc):
acknowledge_packet(seq0),
distribute_fee(src_relayer, fee),
*send_coins(feeibc_addr, src_relayer, src_amount, fee_denom),
distribute_fee(RELAYER_CALLER, fee),
*send_coins(feeibc_addr, RELAYER_CALLER, src_amount, fee_denom),
distribute_fee(src_relayer, fee),
*send_coins(feeibc_addr, src_relayer, src_amount, fee_denom),
distribute_fee(cronos_signer2, ""),
*send_coins(feeibc_addr, cronos_signer2, 0, fee_denom),
fungible(checksum_dst_adr, cronos_signer2, amount, dst_denom),
Expand Down
14 changes: 13 additions & 1 deletion x/cronos/middleware/conversion_middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types"
ibcfeekeeper "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/keeper"
ibcfeetypes "github.com/cosmos/ibc-go/v8/modules/apps/29-fee/types"
transferTypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types"
channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types"
porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types"
Expand All @@ -19,13 +21,15 @@ var _ porttypes.UpgradableModule = (*IBCConversionModule)(nil)
type IBCConversionModule struct {
app porttypes.IBCModule
cronoskeeper cronoskeeper.Keeper
feekeeper ibcfeekeeper.Keeper
}

// NewIBCConversionModule creates a new IBCModule given the keeper and underlying application
func NewIBCConversionModule(app porttypes.IBCModule, ck cronoskeeper.Keeper) IBCConversionModule {
func NewIBCConversionModule(app porttypes.IBCModule, ck cronoskeeper.Keeper, fk ibcfeekeeper.Keeper) IBCConversionModule {
return IBCConversionModule{
app: app,
cronoskeeper: ck,
feekeeper: fk,
}
}

Expand Down Expand Up @@ -128,6 +132,14 @@ func (im IBCConversionModule) OnAcknowledgementPacket(
acknowledgement []byte,
relayer sdk.AccAddress,
) error {
if im.feekeeper.IsFeeEnabled(ctx, packet.SourcePort, packet.SourceChannel) {
var ack ibcfeetypes.IncentivizedAcknowledgement
err := ibcfeetypes.ModuleCdc.UnmarshalJSON(acknowledgement, &ack)
if err != nil {
return errors.Wrapf(err, "cannot unmarshal ICS-29 incentivized packet acknowledgement: %v", ack)
}
im.feekeeper.SetPayeeAddress(ctx, relayer.String(), ack.ForwardRelayerAddress, packet.SourceChannel)

Check warning on line 141 in x/cronos/middleware/conversion_middleware.go

View check run for this annotation

Codecov / codecov/patch

x/cronos/middleware/conversion_middleware.go#L135-L141

Added lines #L135 - L141 were not covered by tests
}
err := im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer)
if err == nil {
// Call the middle ware only at the "refund" case
Expand Down

0 comments on commit b972a99

Please sign in to comment.