Skip to content

Commit 80e72b8

Browse files
committed
do not revert trade funds on init timeout until error processing
1 parent deb92b7 commit 80e72b8

File tree

2 files changed

+21
-14
lines changed

2 files changed

+21
-14
lines changed

core/src/main/java/haveno/core/trade/Trade.java

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1812,27 +1812,17 @@ public void onProtocolInitializationError() {
18121812
return;
18131813
}
18141814

1815-
// unreserve taker's key images
1816-
if (this instanceof TakerTrade) {
1817-
ThreadUtils.submitToPool(() -> {
1818-
xmrWalletService.thawOutputs(getSelf().getReserveTxKeyImages());
1819-
});
1820-
}
1821-
1822-
// unreserve maker's open offer
1823-
Optional<OpenOffer> openOffer = processModel.getOpenOfferManager().getOpenOffer(this.getId());
1824-
if (this instanceof MakerTrade && openOffer.isPresent()) {
1825-
processModel.getOpenOfferManager().unreserveOpenOffer(openOffer.get());
1826-
}
1827-
18281815
// remove if deposit not requested or is failed
18291816
if (!isDepositRequested() || isDepositRequestFailed()) {
18301817
removeTradeOnError();
18311818
return;
18321819
}
18331820

18341821
// done if wallet already deleted
1835-
if (!walletExists()) return;
1822+
if (!walletExists()) {
1823+
removeTradeOnError();
1824+
return;
1825+
}
18361826

18371827
// set error height
18381828
if (processModel.getTradeProtocolErrorHeight() == 0) {
@@ -1927,6 +1917,19 @@ private void removeTradeOnError() {
19271917
forceCloseWallet();
19281918
if (isDepositRequested()) getWallet();
19291919

1920+
// unreserve taker's key images
1921+
if (this instanceof TakerTrade) {
1922+
ThreadUtils.submitToPool(() -> {
1923+
xmrWalletService.thawOutputs(getSelf().getReserveTxKeyImages());
1924+
});
1925+
}
1926+
1927+
// unreserve maker's open offer
1928+
Optional<OpenOffer> openOffer = processModel.getOpenOfferManager().getOpenOffer(this.getId());
1929+
if (this instanceof MakerTrade && openOffer.isPresent()) {
1930+
processModel.getOpenOfferManager().unreserveOpenOffer(openOffer.get());
1931+
}
1932+
19301933
// clear and shut down trade
19311934
onShutDownStarted();
19321935
clearAndShutDown();

core/src/main/java/haveno/core/trade/TradeManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -920,6 +920,10 @@ public void onTakeOffer(BigInteger amount,
920920
// ensure trade is not already open
921921
Optional<Trade> tradeOptional = getOpenTrade(offer.getId());
922922
if (tradeOptional.isPresent()) throw new RuntimeException("Cannot create trade protocol because trade with ID " + offer.getId() + " is already open");
923+
924+
// ensure failed trade is not processing
925+
tradeOptional = getFailedTrade(offer.getId());
926+
if (tradeOptional.isPresent() && tradeOptional.get().walletExists()) throw new RuntimeException("Cannot create trade protocol because trade with ID " + offer.getId() + " has failed but is not processed");
923927

924928
// create trade
925929
Trade trade;

0 commit comments

Comments
 (0)