From 112d871e05e64bd1ce046639015eb75ec824c81a Mon Sep 17 00:00:00 2001 From: nathanieliov Date: Tue, 7 Jan 2025 10:23:53 -0400 Subject: [PATCH] Improve switch use to handle pegins --- .../main/java/co/rsk/peg/BridgeSupport.java | 46 ++++++++++--------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/rskj-core/src/main/java/co/rsk/peg/BridgeSupport.java b/rskj-core/src/main/java/co/rsk/peg/BridgeSupport.java index 03785b106e..64407fc4e5 100644 --- a/rskj-core/src/main/java/co/rsk/peg/BridgeSupport.java +++ b/rskj-core/src/main/java/co/rsk/peg/BridgeSupport.java @@ -504,27 +504,15 @@ protected void registerPegIn( PeginProcessAction peginProcessAction = peginEvaluationResult.getPeginProcessAction(); - if (peginProcessAction == PeginProcessAction.CAN_BE_REGISTERED) { - logger.debug("[{}] Peg-in is valid, going to register", METHOD_NAME); - executePegIn(btcTx, peginInformation, totalAmount); - return; - } - - // If the peg-in cannot be registered means it should be rejected - RejectedPeginReason rejectedPeginReason = peginEvaluationResult.getRejectedPeginReason() - .map(reason -> { - logger.debug("[{}] Rejected peg-in, reason {}", METHOD_NAME, reason); - eventLogger.logRejectedPegin(btcTx, reason); - return reason; - }).orElseThrow(() -> { - // This flow should never be reached. There should always be a rejected pegin reason. - String message = "Invalid state. No rejected reason was returned for an invalid pegin."; - logger.error("[{}] {}", METHOD_NAME, message); - return new IllegalStateException(message); - }); - switch (peginProcessAction) { + case CAN_BE_REGISTERED -> { + logger.debug("[{}] Peg-in is valid, going to register", METHOD_NAME); + executePegIn(btcTx, peginInformation, totalAmount); + } case CAN_BE_REFUNDED -> { + // If the peg-in cannot be registered means it should be rejected + handleRejectedPegin(btcTx, + peginEvaluationResult); logger.debug("[{}] Refunding to address {} ", METHOD_NAME, peginInformation.getBtcRefundAddress()); generateRejectionRelease(btcTx, peginInformation.getBtcRefundAddress(), rskTxHash, @@ -532,20 +520,36 @@ protected void registerPegIn( markTxAsProcessed(btcTx); } case CANNOT_BE_REFUNDED -> { - logger.debug("[{}] Nonrefundable transaction {}.", METHOD_NAME, btcTx.getHash()); + // If the peg-in cannot be registered means it should be rejected + RejectedPeginReason rejectedPeginReason = handleRejectedPegin(btcTx, + peginEvaluationResult); + handleNonRefundablePegin(btcTx, peginInformation.getProtocolVersion(), rejectedPeginReason); if (!activations.isActive(RSKIP459)) { return; } - // Since RSKIP459, rejected peg-ins should be marked as processed markTxAsProcessed(btcTx); } } } + private RejectedPeginReason handleRejectedPegin(BtcTransaction btcTx, + PeginEvaluationResult peginEvaluationResult) { + return peginEvaluationResult.getRejectedPeginReason().map(reason -> { + logger.debug("[{handleRejectedPegin}] Rejected peg-in, reason {}", reason); + eventLogger.logRejectedPegin(btcTx, reason); + return reason; + }).orElseThrow(() -> { + // This flow should never be reached. There should always be a rejected pegin reason. + String message = "Invalid state. No rejected reason was returned for an invalid pegin."; + logger.error("[{handleRejectedPegin}] {}", message); + return new IllegalStateException(message); + }); + } + private void handleNonRefundablePegin( BtcTransaction btcTx, int protocolVersion,