Skip to content

Commit

Permalink
fix middleware build
Browse files Browse the repository at this point in the history
  • Loading branch information
yihuang committed Jan 14, 2025
1 parent 6ad8eb3 commit 95da30a
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 36 deletions.
5 changes: 2 additions & 3 deletions x/cronos/events/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ var (
IcaEvents map[string]*EventDescriptor
RelayerValueDecoders = ValueDecoders{
channeltypes.AttributeKeyDataHex: ConvertPacketData,
transfertypes.AttributeKeyAmount: ConvertAmount,
transfertypes.AttributeKeyTokens: ConvertAmount,
banktypes.AttributeKeyRecipient: ConvertAccAddressFromBech32,
banktypes.AttributeKeySpender: ConvertAccAddressFromBech32,
banktypes.AttributeKeyReceiver: ConvertAccAddressFromBech32,
Expand All @@ -36,8 +36,7 @@ var (
ibcfeetypes.AttributeKeyFee: ReturnStringAsIs,
transfertypes.AttributeKeyDenom: ReturnStringAsIs,
transfertypes.AttributeKeyRefundReceiver: ConvertAccAddressFromBech32,
transfertypes.AttributeKeyRefundDenom: ReturnStringAsIs,
transfertypes.AttributeKeyRefundAmount: ReturnStringAsIs,
transfertypes.AttributeKeyRefundTokens: ReturnStringAsIs,
}
IcaValueDecoders = ValueDecoders{
cronoseventstypes.AttributeKeySeq: ConvertUint64,
Expand Down
4 changes: 2 additions & 2 deletions x/cronos/keeper/params.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,11 @@ func (k Keeper) GetSourceChannelID(ctx sdk.Context, ibcVoucherDenom string) (cha
if err != nil {
return "", errors.Wrapf(types.ErrIbcCroDenomInvalid, "%s is invalid", ibcVoucherDenom)
}
denomTrace, exists := k.transferKeeper.GetDenomTrace(ctx, hexDenomBytes)
denomTrace, exists := k.transferKeeper.GetDenom(ctx, hexDenomBytes)
if !exists {
return "", errors.Wrapf(types.ErrIbcCroDenomInvalid, "%s is invalid", ibcVoucherDenom)
}

// the path has for format port/channelId
return strings.Split(denomTrace.Path, "/")[1], nil
return denomTrace.Trace[1].ChannelId, nil
}
3 changes: 2 additions & 1 deletion x/cronos/keeper/precompiles/relayer.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,8 @@ func (bc *RelayerContract) RequiredGas(input []byte) (gas uint64) {
if err = ibctransfertypes.ModuleCdc.UnmarshalJSON(msg.Packet.GetData(), &data); err != nil {
panic(err)
}
if ibctransfertypes.ReceiverChainIsSource(msg.Packet.GetSourcePort(), msg.Packet.GetSourceChannel(), data.Denom) {
denom := ibctransfertypes.ExtractDenomFromPath(data.Denom)
if denom.HasPrefix(msg.Packet.GetSourcePort(), msg.Packet.GetSourceChannel()) {
requiredGas = GasWhenReceiverChainIsSource
}
}
Expand Down
15 changes: 7 additions & 8 deletions x/cronos/keeper/precompiles/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,6 @@ import (
"github.com/evmos/ethermint/x/evm/statedb"
)

type NativeMessage interface {
proto.Message
GetSigners() []sdk.AccAddress
}

type Executor struct {
cdc codec.Codec
stateDB ExtStateDB
Expand All @@ -29,7 +24,7 @@ type Executor struct {
// exec is a generic function that executes the given action in statedb, and marshal/unmarshal the input/output
func exec[Req any, PReq interface {
*Req
NativeMessage
proto.Message
}, Resp proto.Message](
e *Executor,
action func(context.Context, PReq) (Resp, error),
Expand All @@ -39,11 +34,15 @@ func exec[Req any, PReq interface {
return nil, fmt.Errorf("fail to Unmarshal %T %w", msg, err)
}

signers := msg.GetSigners()
signers, _, err := e.cdc.GetMsgV1Signers(msg)
if err != nil {
return nil, fmt.Errorf("fail to get signers %w", err)
}

if len(signers) != 1 {
return nil, errors.New("don't support multi-signers message")
}
caller := common.BytesToAddress(signers[0].Bytes())
caller := common.BytesToAddress(signers[0])
if caller != e.caller {
return nil, fmt.Errorf("caller is not authenticated: expected %s, got %s", e.caller.Hex(), caller.Hex())
}
Expand Down
40 changes: 19 additions & 21 deletions x/cronos/middleware/conversion_middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,12 +98,13 @@ func (im IBCConversionModule) OnChanCloseConfirm(
// OnRecvPacket implements the IBCModule interface.
func (im IBCConversionModule) OnRecvPacket(
ctx sdk.Context,
channelVersion string,
packet channeltypes.Packet,
relayer sdk.AccAddress,
) exported.Acknowledgement {
ack := im.app.OnRecvPacket(ctx, packet, relayer)
ack := im.app.OnRecvPacket(ctx, channelVersion, packet, relayer)
if ack.Success() {
data, err := im.getFungibleTokenPacketData(packet)
data, err := transferTypes.UnmarshalPacketData(packet.GetData(), channelVersion)
if err != nil {
return channeltypes.NewErrorAcknowledgement(errors.Wrap(sdkerrors.ErrUnknownRequest,
"cannot unmarshal ICS-20 transfer packet data in middleware"))
Expand All @@ -124,11 +125,12 @@ func (im IBCConversionModule) OnRecvPacket(
// OnAcknowledgementPacket implements the IBCModule interface
func (im IBCConversionModule) OnAcknowledgementPacket(
ctx sdk.Context,
channelVersion string,
packet channeltypes.Packet,
acknowledgement []byte,
relayer sdk.AccAddress,
) error {
err := im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer)
err := im.app.OnAcknowledgementPacket(ctx, channelVersion, packet, acknowledgement, relayer)
if err == nil {
// Call the middle ware only at the "refund" case
var ack channeltypes.Acknowledgement
Expand All @@ -137,7 +139,7 @@ func (im IBCConversionModule) OnAcknowledgementPacket(
"cannot unmarshal ICS-20 transfer packet acknowledgement in middleware: %v", err)
}
if _, ok := ack.Response.(*channeltypes.Acknowledgement_Error); ok {
data, err := im.getFungibleTokenPacketData(packet)
data, err := transferTypes.UnmarshalPacketData(packet.GetData(), channelVersion)
if err != nil {
return err
}
Expand All @@ -154,13 +156,14 @@ func (im IBCConversionModule) OnAcknowledgementPacket(
// OnTimeoutPacket implements the IBCModule interface
func (im IBCConversionModule) OnTimeoutPacket(
ctx sdk.Context,
channelVersion string,
packet channeltypes.Packet,
relayer sdk.AccAddress,
) error {
err := im.app.OnTimeoutPacket(ctx, packet, relayer)
err := im.app.OnTimeoutPacket(ctx, channelVersion, packet, relayer)
// If no error on the refund
if err == nil {
data, err := im.getFungibleTokenPacketData(packet)
data, err := transferTypes.UnmarshalPacketData(packet.GetData(), channelVersion)
if err != nil {
return err
}
Expand All @@ -181,12 +184,12 @@ func (im IBCConversionModule) getFungibleTokenPacketData(packet channeltypes.Pac
return data, nil
}

func (im IBCConversionModule) convertVouchers(ctx sdk.Context, data transferTypes.FungibleTokenPacketData, denom string, isSender bool) error {
func (im IBCConversionModule) convertVouchers(ctx sdk.Context, data transferTypes.FungibleTokenPacketDataV2, denom string, isSender bool) error {
// parse the transfer amount
transferAmount, ok := sdkmath.NewIntFromString(data.Amount)
transferAmount, ok := sdkmath.NewIntFromString(data.Tokens[0].Amount)
if !ok {
return errors.Wrapf(transferTypes.ErrInvalidAmount,
"unable to parse transfer amount (%s) into sdk.Int in middleware", data.Amount)
"unable to parse transfer amount (%s) into sdk.Int in middleware", data.Tokens[0].Amount)
}
token := sdk.NewCoin(denom, transferAmount)
if isSender {
Expand All @@ -206,22 +209,17 @@ func (im IBCConversionModule) canBeConverted(ctx sdk.Context, denom string) bool
return found
}

func (im IBCConversionModule) getIbcDenomFromDataForRefund(data transferTypes.FungibleTokenPacketData) string {
return transferTypes.ParseDenomTrace(data.Denom).IBCDenom()
func (im IBCConversionModule) getIbcDenomFromDataForRefund(data transferTypes.FungibleTokenPacketDataV2) string {
return data.Tokens[0].Denom.Base
}

func (im IBCConversionModule) getIbcDenomFromPacketAndData(
packet channeltypes.Packet, data transferTypes.FungibleTokenPacketData,
packet channeltypes.Packet, data transferTypes.FungibleTokenPacketDataV2,
) string {
if transferTypes.ReceiverChainIsSource(packet.GetSourcePort(), packet.GetSourceChannel(), data.Denom) {
voucherPrefix := transferTypes.GetDenomPrefix(packet.GetSourcePort(), packet.GetSourceChannel())
unprefixedDenom := data.Denom[len(voucherPrefix):]
denom := unprefixedDenom
denomTrace := transferTypes.ParseDenomTrace(unprefixedDenom)
if denomTrace.Path != "" {
denom = denomTrace.IBCDenom()
}
return denom
denom := data.Tokens[0].Denom
if denom.HasPrefix(packet.GetSourcePort(), packet.GetSourceChannel()) {
denom.Trace = denom.Trace[1:]
return denom.IBCDenom()
}

// since SendPacket did not prefix the denomination, we must prefix denomination here
Expand Down
2 changes: 1 addition & 1 deletion x/cronos/types/interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ type BankKeeper interface {
// TransferKeeper defines the expected interface needed to transfer coin through IBC.
type TransferKeeper interface {
Transfer(goCtx context.Context, msg *types.MsgTransfer) (*types.MsgTransferResponse, error)
GetDenomTrace(ctx sdk.Context, denomTraceHash tmbytes.HexBytes) (types.DenomTrace, bool)
GetDenom(ctx sdk.Context, denomTraceHash tmbytes.HexBytes) (types.Denom, bool)
}

// AccountKeeper defines the expected account keeper interface
Expand Down

0 comments on commit 95da30a

Please sign in to comment.