Skip to content

Commit

Permalink
fix ibc transfer parsing inside eth tx
Browse files Browse the repository at this point in the history
  • Loading branch information
vincentysc committed Aug 1, 2024
1 parent 9b0076a commit 3a3da60
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 29 deletions.
63 changes: 35 additions & 28 deletions usecase/parser/ibc/msg.go
Original file line number Diff line number Diff line change
Expand Up @@ -927,41 +927,43 @@ func ParseMsgTransfer(
}

log := utils.NewParsedTxsResultLog(&parserParams.TxsResult.Log[parserParams.MsgIndex])
event := log.GetEventByType("send_packet")
if event == nil {
panic("missing `send_packet` event in TxsResult log")
}

if parserParams.IsEthereumTxInnerMsg {
// Transfer application, MsgTransfer
packetData := event.MustGetAttributeByKey("packet_data")
var fungiblePacketData ibc_model.FungibleTokenPacketData
events := log.GetEventsByType("send_packet")

if unmarshalErr := jsoniter.Unmarshal([]byte(packetData), &fungiblePacketData); unmarshalErr != nil {
panic("unable to parse `send_packet` event, key `packet_data`")
}
var msgTransferParams ibc_model.MsgTransferParams
for _, event := range events {
// Transfer application, MsgTransfer
packetData := event.MustGetAttributeByKey("packet_data")
var fungiblePacketData ibc_model.FungibleTokenPacketData

if unmarshalErr := jsoniter.Unmarshal([]byte(packetData), &fungiblePacketData); unmarshalErr != nil {
panic("unable to parse `send_packet` event, key `packet_data`")
}

msgTransferParams := ibc_model.MsgTransferParams{
RawMsgTransfer: ibc_model.RawMsgTransfer{
Token: ibc_model.MsgTransferToken{
Denom: fungiblePacketData.Denom,
Amount: fungiblePacketData.Amount,
msgTransferParams = ibc_model.MsgTransferParams{
RawMsgTransfer: ibc_model.RawMsgTransfer{
Token: ibc_model.MsgTransferToken{
Denom: fungiblePacketData.Denom,
Amount: fungiblePacketData.Amount,
},
Sender: fungiblePacketData.Sender,
Receiver: fungiblePacketData.Receiver,
SourcePort: event.MustGetAttributeByKey("packet_src_port"),
SourceChannel: event.MustGetAttributeByKey("packet_src_channel"),
TimeoutHeight: MustParseHeight(event.MustGetAttributeByKey("packet_timeout_height")),
TimeoutTimestamp: event.MustGetAttributeByKey("packet_timeout_timestamp"),
},
Sender: fungiblePacketData.Sender,
Receiver: fungiblePacketData.Receiver,
SourcePort: event.MustGetAttributeByKey("packet_src_port"),
SourceChannel: event.MustGetAttributeByKey("packet_src_channel"),
TimeoutHeight: MustParseHeight(event.MustGetAttributeByKey("packet_timeout_height")),
TimeoutTimestamp: event.MustGetAttributeByKey("packet_timeout_timestamp"),
},

PacketSequence: typeconv.MustAtou64(event.MustGetAttributeByKey("packet_sequence")),
DestinationPort: event.MustGetAttributeByKey("packet_dst_port"),
DestinationChannel: event.MustGetAttributeByKey("packet_dst_channel"),
ChannelOrdering: event.MustGetAttributeByKey("packet_channel_ordering"),
ConnectionID: event.MustGetAttributeByKey("packet_connection"),
PacketData: fungiblePacketData,
PacketSequence: typeconv.MustAtou64(event.MustGetAttributeByKey("packet_sequence")),
DestinationPort: event.MustGetAttributeByKey("packet_dst_port"),
DestinationChannel: event.MustGetAttributeByKey("packet_dst_channel"),
ChannelOrdering: event.MustGetAttributeByKey("packet_channel_ordering"),
ConnectionID: event.MustGetAttributeByKey("packet_connection"),
PacketData: fungiblePacketData,
}
}

// Getting possible signer address from Msg
var possibleSignerAddresses []string
possibleSignerAddresses = append(possibleSignerAddresses, msgTransferParams.Sender)
Expand All @@ -973,6 +975,11 @@ func ParseMsgTransfer(
)}, possibleSignerAddresses
}

event := log.GetEventByType("send_packet")
if event == nil {
panic("missing `send_packet` event in TxsResult log")
}

packetData := event.MustGetAttributeByKey("packet_data")
var fungiblePacketData ibc_model.FungibleTokenPacketData
if unmarshalErr := jsoniter.Unmarshal([]byte(packetData), &fungiblePacketData); unmarshalErr != nil {
Expand Down
3 changes: 2 additions & 1 deletion usecase/parser/msg.go
Original file line number Diff line number Diff line change
Expand Up @@ -2505,7 +2505,8 @@ func ParseMsgEthereumTx(
// parse msgTransfer
case log.HasEvent("send_packet"):
{
if log.GetEventByType("send_packet") != nil {
sendEvents := log.GetEventsByType("send_packet")
if len(sendEvents) > 0 {
parserParams.IsEthereumTxInnerMsg = true
cmds, signers := ibc.ParseMsgTransfer(parserParams)
commands = append(commands, cmds...)
Expand Down

0 comments on commit 3a3da60

Please sign in to comment.