From b963fd501f9e976c07011691e9191df410b2ba20 Mon Sep 17 00:00:00 2001
From: woodser <woodser@protonmail.com>
Date: Mon, 3 Jun 2024 07:45:08 -0400
Subject: [PATCH] fix contract mismatch taking sepa offer with sepa instant
 account #981

---
 core/src/main/java/haveno/core/trade/Contract.java        | 8 +++++++-
 core/src/main/java/haveno/core/trade/TradeManager.java    | 2 +-
 .../tasks/TakerSendInitTradeRequestToArbitrator.java      | 2 +-
 .../protocol/tasks/TakerSendInitTradeRequestToMaker.java  | 4 +---
 4 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/core/src/main/java/haveno/core/trade/Contract.java b/core/src/main/java/haveno/core/trade/Contract.java
index fd4bcb0d81..b0950c552f 100644
--- a/core/src/main/java/haveno/core/trade/Contract.java
+++ b/core/src/main/java/haveno/core/trade/Contract.java
@@ -263,7 +263,13 @@ public final class Contract implements NetworkPayload {
 
     // edits a contract json string
     public static String sanitizeContractAsJson(String contractAsJson) {
-        return contractAsJson; // TODO: anything to sanitize?
+        return contractAsJson
+                .replaceAll(
+                        "\"takerPaymentAccountPayload\": \\{[^}]*}",
+                        "\"takerPaymentAccountPayload\": null")
+                .replaceAll(
+                        "\"makerPaymentAccountPayload\": \\{[^}]*}",
+                        "\"makerPaymentAccountPayload\": null");
     }
 
     public void printDiff(@Nullable String peersContractAsJson) {
diff --git a/core/src/main/java/haveno/core/trade/TradeManager.java b/core/src/main/java/haveno/core/trade/TradeManager.java
index 2dc15165f7..14f85318fb 100644
--- a/core/src/main/java/haveno/core/trade/TradeManager.java
+++ b/core/src/main/java/haveno/core/trade/TradeManager.java
@@ -888,13 +888,13 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi
                     P2PService.getMyNodeAddress(),
                     null);
         }
-
         trade.getProcessModel().setUseSavingsWallet(useSavingsWallet);
         trade.getProcessModel().setFundsNeededForTrade(fundsNeededForTrade.longValueExact());
         trade.getMaker().setPaymentAccountId(offer.getOfferPayload().getMakerPaymentAccountId());
         trade.getMaker().setPubKeyRing(offer.getPubKeyRing());
         trade.getSelf().setPubKeyRing(keyRing.getPubKeyRing());
         trade.getSelf().setPaymentAccountId(paymentAccountId);
+        trade.getSelf().setPaymentMethodId(user.getPaymentAccount(paymentAccountId).getPaymentAccountPayload().getPaymentMethodId());
 
         // initialize trade protocol
         TradeProtocol tradeProtocol = createTradeProtocol(trade);
diff --git a/core/src/main/java/haveno/core/trade/protocol/tasks/TakerSendInitTradeRequestToArbitrator.java b/core/src/main/java/haveno/core/trade/protocol/tasks/TakerSendInitTradeRequestToArbitrator.java
index 76c0ab90af..b5a6e3624c 100644
--- a/core/src/main/java/haveno/core/trade/protocol/tasks/TakerSendInitTradeRequestToArbitrator.java
+++ b/core/src/main/java/haveno/core/trade/protocol/tasks/TakerSendInitTradeRequestToArbitrator.java
@@ -57,7 +57,7 @@ public class TakerSendInitTradeRequestToArbitrator extends TradeTask {
                     offer.getId(),
                     trade.getAmount().longValueExact(),
                     trade.getPrice().getValue(),
-                    offer.getOfferPayload().getPaymentMethodId(),
+                    trade.getSelf().getPaymentMethodId(),
                     trade.getMaker().getAccountId(),
                     trade.getTaker().getAccountId(),
                     trade.getMaker().getPaymentAccountId(),
diff --git a/core/src/main/java/haveno/core/trade/protocol/tasks/TakerSendInitTradeRequestToMaker.java b/core/src/main/java/haveno/core/trade/protocol/tasks/TakerSendInitTradeRequestToMaker.java
index 8f2957ea53..c6315eb174 100644
--- a/core/src/main/java/haveno/core/trade/protocol/tasks/TakerSendInitTradeRequestToMaker.java
+++ b/core/src/main/java/haveno/core/trade/protocol/tasks/TakerSendInitTradeRequestToMaker.java
@@ -54,8 +54,6 @@ public class TakerSendInitTradeRequestToMaker extends TradeTask {
             User user = processModel.getUser();
             P2PService p2PService = processModel.getP2PService();
             XmrWalletService walletService = model.getXmrWalletService();
-            String paymentAccountId = trade.getSelf().getPaymentAccountId();
-            String paymentMethodId = user.getPaymentAccount(paymentAccountId).getPaymentAccountPayload().getPaymentMethodId();
             String payoutAddress = walletService.getOrCreateAddressEntry(offer.getId(), XmrAddressEntry.Context.TRADE_PAYOUT).getAddressString();
 
             // taker signs offer using offer id as nonce to avoid challenge protocol
@@ -67,7 +65,7 @@ public class TakerSendInitTradeRequestToMaker extends TradeTask {
                     offer.getId(),
                     trade.getAmount().longValueExact(),
                     trade.getPrice().getValue(),
-                    paymentMethodId,
+                    trade.getSelf().getPaymentMethodId(),
                     null,
                     user.getAccountId(),
                     trade.getMaker().getPaymentAccountId(),