Skip to content

Commit 0b303e4

Browse files
committed
Cleanup
1 parent 5b55926 commit 0b303e4

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

x/wasm/ibc.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package wasm
22

33
import (
4+
"encoding/json"
45
"math"
56
"slices"
67

@@ -416,21 +417,26 @@ func (i IBCHandler) IBCReceivePacketCallback(
416417
}
417418

418419
var funds wasmvmtypes.Array[wasmvmtypes.Coin]
419-
// detect successful transfer
420-
successAck := []byte(`{"result":"AQ=="}`) // TODO: hardcoded check is not nice
420+
421+
var parsedAck channeltypes.Acknowledgement_Result
422+
err = json.Unmarshal(ack.Acknowledgement(), &parsedAck)
423+
424+
// detect successful IBC transfer, meaning:
425+
// 1. it was sent to the transfer module
426+
// 2. the acknowledgement was successful
421427
if packet.GetDestPort() == i.transferKeeper.GetPort(cachedCtx) &&
422-
ack.Success() && slices.Equal(ack.Acknowledgement(), successAck) {
423-
// decode packet
428+
ack.Success() && err == nil && slices.Equal(parsedAck.Result, []byte{1}) {
429+
424430
transferData, err := transfertypes.UnmarshalPacketData(packet.GetData(), version, "")
425431
if err != nil {
426432
return errorsmod.Wrap(err, "unmarshal transfer packet data")
427433
}
428434

429-
// validate receiver address
430435
receiverAddr, err := sdk.AccAddressFromBech32(transferData.Receiver)
431436
if err != nil {
432437
return err
433438
}
439+
// we only want to tell the contract about the funds if the transfer was sent to the contract
434440
if receiverAddr.Equals(contractAddr) {
435441
// fill funds with the transfer amount
436442

0 commit comments

Comments
 (0)