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 da01fad
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 20 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
* (testground)[1649](https://github.com/crypto-org-chain/cronos/pull/1649) Fix running single validator benchmark locally.
* (cli)[#1647](https://github.com/crypto-org-chain/cronos/pull/1647) Fix node can't shutdown by signal.
* (testground)[#1652](https://github.com/crypto-org-chain/cronos/pull/1652) Remove unexpected conflicts in benchmark transactions.
* [#1654](https://github.com/crypto-org-chain/cronos/pull/1654) Set relayer as payee for relayer caller when enabled incentivized packet.

### Improvements

Expand Down
46 changes: 42 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,43 @@ 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 {
if im.keeper.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.keeper.SetPayeeAddress(ctx, relayer.String(), ack.ForwardRelayerAddress, packet.SourceChannel)
}
return im.IBCMiddleware.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer)
}

func (im CustomIBCFeeMiddleware) OnTimeoutPacket(
ctx sdk.Context,
packet ibcchanneltypes.Packet,
relayer sdk.AccAddress,
) error {
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 +751,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 +779,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 +788,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
5 changes: 4 additions & 1 deletion x/cronos/middleware/conversion_middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ 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"
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 +20,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

0 comments on commit da01fad

Please sign in to comment.