Skip to content

Commit ba41a62

Browse files
committed
check for invalid state on payment sent & received acks
1 parent 70a0322 commit ba41a62

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

core/src/main/java/haveno/core/trade/protocol/TradeProtocol.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -817,6 +817,10 @@ private void onAckMessageAux(AckMessage ackMessage, NodeAddress sender) {
817817

818818
// handle ack message for PaymentSentMessage, which automatically re-sends if not ACKed in a certain time
819819
if (ackMessage.getSourceMsgClassName().equals(PaymentSentMessage.class.getSimpleName())) {
820+
if (trade.getState().ordinal() < Trade.State.BUYER_CONFIRMED_PAYMENT_SENT.ordinal()) {
821+
log.warn("Received AckMessage for PaymentSentMessage but trade is in unexpected state, ignoring. Sender={}, trade={} {}, state={}, success={}, error={}, messageUid={}", sender, trade.getClass().getSimpleName(), trade.getId(), trade.getState(), ackMessage.isSuccess(), ackMessage.getErrorMessage(), ackMessage.getSourceUid());
822+
return;
823+
}
820824
if (peer == trade.getSeller()) {
821825
trade.getSeller().setPaymentSentAckMessage(ackMessage);
822826
if (ackMessage.isSuccess()) trade.setStateIfValidTransitionTo(Trade.State.SELLER_RECEIVED_PAYMENT_SENT_MSG);
@@ -826,7 +830,7 @@ private void onAckMessageAux(AckMessage ackMessage, NodeAddress sender) {
826830
trade.getArbitrator().setPaymentSentAckMessage(ackMessage);
827831
processModel.getTradeManager().requestPersistence();
828832
} else {
829-
log.warn("Received AckMessage from unexpected peer for {}, sender={}, trade={} {}, messageUid={}, success={}, errorMsg={}", ackMessage.getSourceMsgClassName(), sender, trade.getClass().getSimpleName(), trade.getId(), ackMessage.getSourceUid(), ackMessage.isSuccess(), ackMessage.getErrorMessage());
833+
log.warn("Received AckMessage from unexpected peer for {}, sender={}, trade={} {}, messageUid={}, success={}, error={}", ackMessage.getSourceMsgClassName(), sender, trade.getClass().getSimpleName(), trade.getId(), ackMessage.getSourceUid(), ackMessage.isSuccess(), ackMessage.getErrorMessage());
830834
return;
831835
}
832836
}
@@ -835,6 +839,12 @@ private void onAckMessageAux(AckMessage ackMessage, NodeAddress sender) {
835839
// TODO: trade state can be reset twice if both peers nack before published payout is detected
836840
// TODO: do not reset state if payment received message is acknowledged because payout is likely broadcast?
837841
if (ackMessage.getSourceMsgClassName().equals(PaymentReceivedMessage.class.getSimpleName())) {
842+
843+
// check if invalid state
844+
if (trade.getState().ordinal() < Trade.State.SELLER_CONFIRMED_PAYMENT_RECEIPT.ordinal()) {
845+
log.warn("Received AckMessage for PaymentReceivedMessage but trade is in unexpected state, ignoring. Sender={}, trade={} {}, state={}, success={}, error={}, messageUid={}", sender, trade.getClass().getSimpleName(), trade.getId(), trade.getState(), ackMessage.isSuccess(), ackMessage.getErrorMessage(), ackMessage.getSourceUid());
846+
return;
847+
}
838848

839849
// ack message from buyer
840850
if (peer == trade.getBuyer()) {

0 commit comments

Comments
 (0)