@@ -305,33 +305,17 @@ public byte[] onRecvPacket(byte[] packet, Address relayer) {
305
305
306
306
Address receiverAddr = Address .fromString (data .receiver );
307
307
308
- if (isSource ) {
309
- String denomOnly = data .denom .substring (denomPrefix .length ());
310
-
311
- if (isNativeAsset (denomOnly )) {
312
- try {
313
- Context .transfer (receiverAddr , data .amount );
314
- } catch (Exception e ) {
315
- ack = ICS20Lib .FAILED_ACKNOWLEDGEMENT_JSON ;
316
- }
308
+ try {
309
+ if (isSource ) {
310
+ String denomOnly = data .denom .substring (denomPrefix .length ());
311
+ handleSourceToken (denomOnly , receiverAddr , data .amount , data .memo );
317
312
} else {
318
- try {
319
- Address tokenContractAddress = getTokenContractAddress (denomOnly );
320
- Context .call (tokenContractAddress , "transfer" , receiverAddr , data .amount , data .memo .getBytes ());
321
- } catch (Exception e ) {
322
- ack = ICS20Lib .FAILED_ACKNOWLEDGEMENT_JSON ;
323
- }
324
- }
325
- } else {
326
- denomPrefix = getDenomPrefix (packetDb .getDestinationPort (), packetDb .getDestinationChannel ());
327
- String prefixedDenom = denomPrefix + data .denom ;
328
-
329
- try {
330
- Address tokenContractAddress = getTokenContractAddress (prefixedDenom );
331
- Context .call (tokenContractAddress , "mint" , receiverAddr , data .amount );
332
- } catch (Exception e ) {
333
- ack = ICS20Lib .FAILED_ACKNOWLEDGEMENT_JSON ;
313
+ denomPrefix = getDenomPrefix (packetDb .getDestinationPort (), packetDb .getDestinationChannel ());
314
+ String prefixedDenom = denomPrefix + data .denom ;
315
+ handleDestinationToken (prefixedDenom , receiverAddr , data .amount );
334
316
}
317
+ } catch (Exception e ) {
318
+ ack = ICS20Lib .FAILED_ACKNOWLEDGEMENT_JSON ;
335
319
}
336
320
337
321
return ack ;
@@ -366,6 +350,40 @@ public void onTimeoutPacket(byte[] packet, Address relayer) {
366
350
refundTokens (packetDb );
367
351
}
368
352
353
+ /**
354
+ * Refunds tokens based on the provided packet.
355
+ *
356
+ * @param packet the packet containing the token data
357
+ */
358
+ private void refundTokens (Packet packet ) {
359
+ ICS20Lib .FungibleTokenPacketData data = ICS20Lib .unmarshalFungibleTokenPacketData (packet .getData ());
360
+
361
+ String denomPrefix = getDenomPrefix (packet .getSourcePort (), packet .getSourceChannel ());
362
+ boolean isSource = !data .denom .startsWith (denomPrefix );
363
+
364
+ Address sender = Address .fromString (data .sender );
365
+
366
+ if (isSource ) {
367
+ handleSourceToken (data .denom , sender , data .amount , data .memo );
368
+ } else {
369
+ handleDestinationToken (data .denom , sender , data .amount );
370
+ }
371
+ }
372
+
373
+ private void handleSourceToken (String denom , Address address , BigInteger amount , String memo ) {
374
+ if (isNativeAsset (denom )) {
375
+ Context .transfer (address , amount );
376
+ } else {
377
+ Address tokenContractAddress = getTokenContractAddress (denom );
378
+ Context .call (tokenContractAddress , "transfer" , address , amount , memo .getBytes ());
379
+ }
380
+ }
381
+
382
+ private void handleDestinationToken (String denom , Address address , BigInteger amount ) {
383
+ Address tokenContractAddress = getTokenContractAddress (denom );
384
+ Context .call (tokenContractAddress , "mint" , address , amount );
385
+ }
386
+
369
387
/**
370
388
* Initializes the channel opening process.
371
389
*
@@ -461,33 +479,6 @@ public void onChanCloseConfirm(String portId, String channelId) {
461
479
onlyIBC ();
462
480
}
463
481
464
- /**
465
- * Refunds tokens based on the provided packet.
466
- *
467
- * @param packet the packet containing the token data
468
- */
469
- private void refundTokens (Packet packet ) {
470
- ICS20Lib .FungibleTokenPacketData data = ICS20Lib .unmarshalFungibleTokenPacketData (packet .getData ());
471
-
472
- String denomPrefix = getDenomPrefix (packet .getSourcePort (), packet .getSourceChannel ());
473
- boolean isSource = !data .denom .startsWith (denomPrefix );
474
-
475
- Address sender = Address .fromString (data .sender );
476
-
477
- if (isSource ) {
478
- if (isNativeAsset (data .denom )) {
479
- Context .transfer (sender , data .amount );
480
- return ;
481
- }
482
-
483
- Address tokenContractAddress = getTokenContractAddress (data .denom );
484
- Context .call (tokenContractAddress , "transfer" , sender , data .amount , data .memo .getBytes ());
485
- } else {
486
- Address tokenContractAddress = getTokenContractAddress (data .denom );
487
- Context .call (tokenContractAddress , "mint" , sender , data .amount );
488
- }
489
- }
490
-
491
482
private static String getDenomPrefix (String port , String channel ) {
492
483
return port + "/" + channel + "/" ;
493
484
}
0 commit comments