@@ -416,7 +416,7 @@ func (i IBCHandler) IBCReceivePacketCallback(
416
416
return err
417
417
}
418
418
419
- var funds wasmvmtypes.Array [wasmvmtypes. Coin ]
419
+ var transfer * wasmvmtypes.IBCTransferCallback
420
420
421
421
var parsedAck channeltypes.Acknowledgement_Result
422
422
err = json .Unmarshal (ack .Acknowledgement (), & parsedAck )
@@ -432,37 +432,40 @@ func (i IBCHandler) IBCReceivePacketCallback(
432
432
return errorsmod .Wrap (err , "unmarshal transfer packet data" )
433
433
}
434
434
435
+ // just making sure we have a valid address
435
436
receiverAddr , err := sdk .AccAddressFromBech32 (transferData .Receiver )
436
437
if err != nil {
437
438
return err
438
439
}
439
- // we only want to tell the contract about the funds if the transfer was sent to the contract
440
- if receiverAddr .Equals (contractAddr ) {
441
- // fill funds with the transfer amount
442
-
443
- // For a more in-depth explanation of the logic here, see the transfer module implementation:
444
- // https://github.com/cosmos/ibc-go/blob/a6217ab02a4d57c52a938eeaff8aeb383e523d12/modules/apps/transfer/keeper/relay.go#L147-L175
445
- if transferData .Token .Denom .HasPrefix (packet .GetSourcePort (), packet .GetSourceChannel ()) {
446
- // this is a denom coming from this chain, being sent back again
447
- // remove prefix
448
- transferData .Token .Denom .Trace = transferData .Token .Denom .Trace [1 :]
449
- } else {
450
- // prefixing happens on the receiving end, so we need to do that here
451
- trace := []transfertypes.Hop {transfertypes .NewHop (packet .GetDestPort (), packet .GetDestChannel ())}
452
- transferData .Token .Denom .Trace = append (trace , transferData .Token .Denom .Trace ... )
453
- }
454
-
455
- funds = append (funds , wasmvmtypes.Coin {
456
- Denom : transferData .Token .GetDenom ().IBCDenom (),
457
- Amount : transferData .Token .GetAmount (),
458
- })
440
+
441
+ // For a more in-depth explanation of the logic here, see the transfer module implementation:
442
+ // https://github.com/cosmos/ibc-go/blob/a6217ab02a4d57c52a938eeaff8aeb383e523d12/modules/apps/transfer/keeper/relay.go#L147-L175
443
+ if transferData .Token .Denom .HasPrefix (packet .GetSourcePort (), packet .GetSourceChannel ()) {
444
+ // this is a denom coming from this chain, being sent back again
445
+ // remove prefix
446
+ transferData .Token .Denom .Trace = transferData .Token .Denom .Trace [1 :]
447
+ } else {
448
+ // prefixing happens on the receiving end, so we need to do that here
449
+ trace := []transfertypes.Hop {transfertypes .NewHop (packet .GetDestPort (), packet .GetDestChannel ())}
450
+ transferData .Token .Denom .Trace = append (trace , transferData .Token .Denom .Trace ... )
451
+ }
452
+
453
+ transfer = & wasmvmtypes.IBCTransferCallback {
454
+ Receiver : receiverAddr .String (),
455
+ Sender : transferData .Sender ,
456
+ Funds : wasmvmtypes.Array [wasmvmtypes.Coin ]{
457
+ {
458
+ Denom : transferData .Token .GetDenom ().IBCDenom (),
459
+ Amount : transferData .Token .GetAmount (),
460
+ },
461
+ },
459
462
}
460
463
}
461
464
462
465
msg := wasmvmtypes.IBCDestinationCallbackMsg {
463
- Ack : wasmvmtypes.IBCAcknowledgement {Data : ack .Acknowledgement ()},
464
- Packet : newIBCPacket (packet ),
465
- Funds : funds ,
466
+ Ack : wasmvmtypes.IBCAcknowledgement {Data : ack .Acknowledgement ()},
467
+ Packet : newIBCPacket (packet ),
468
+ Transfer : transfer ,
466
469
}
467
470
468
471
err = i .keeper .IBCDestinationCallback (cachedCtx , contractAddr , msg )
0 commit comments