mirror of
https://github.com/bisq-network/bisq.git
synced 2025-02-24 15:10:44 +01:00
Merge pull request #6998 from jmacxx/allow_mediation_failed_closed_trades
Allow mediation of failed and closed trades
This commit is contained in:
commit
5872e9e1d6
7 changed files with 42 additions and 15 deletions
|
@ -371,7 +371,7 @@ class CoreTradesService {
|
||||||
failedTradesManager.getTradeById(tradeId).ifPresentOrElse(failedTrade -> {
|
failedTradesManager.getTradeById(tradeId).ifPresentOrElse(failedTrade -> {
|
||||||
verifyCanUnfailTrade(failedTrade);
|
verifyCanUnfailTrade(failedTrade);
|
||||||
failedTradesManager.removeTrade(failedTrade);
|
failedTradesManager.removeTrade(failedTrade);
|
||||||
tradeManager.addFailedTradeToPendingTrades(failedTrade);
|
tradeManager.addTradeToPendingTrades(failedTrade);
|
||||||
log.info("Failed trade {} changed to open trade.", tradeId);
|
log.info("Failed trade {} changed to open trade.", tradeId);
|
||||||
}, () -> {
|
}, () -> {
|
||||||
throw new NotFoundException(format("failed trade '%s' not found", tradeId));
|
throw new NotFoundException(format("failed trade '%s' not found", tradeId));
|
||||||
|
|
|
@ -38,6 +38,7 @@ import bisq.core.support.dispute.messages.PeerOpenedDisputeMessage;
|
||||||
import bisq.core.support.messages.ChatMessage;
|
import bisq.core.support.messages.ChatMessage;
|
||||||
import bisq.core.trade.ClosedTradableManager;
|
import bisq.core.trade.ClosedTradableManager;
|
||||||
import bisq.core.trade.TradeManager;
|
import bisq.core.trade.TradeManager;
|
||||||
|
import bisq.core.trade.bisq_v1.FailedTradesManager;
|
||||||
import bisq.core.trade.bisq_v1.TradeDataValidation;
|
import bisq.core.trade.bisq_v1.TradeDataValidation;
|
||||||
import bisq.core.trade.model.bisq_v1.Contract;
|
import bisq.core.trade.model.bisq_v1.Contract;
|
||||||
import bisq.core.trade.model.bisq_v1.Trade;
|
import bisq.core.trade.model.bisq_v1.Trade;
|
||||||
|
@ -91,6 +92,7 @@ public abstract class DisputeManager<T extends DisputeList<Dispute>> extends Sup
|
||||||
protected final BtcWalletService btcWalletService;
|
protected final BtcWalletService btcWalletService;
|
||||||
protected final TradeManager tradeManager;
|
protected final TradeManager tradeManager;
|
||||||
protected final ClosedTradableManager closedTradableManager;
|
protected final ClosedTradableManager closedTradableManager;
|
||||||
|
private final FailedTradesManager failedTradesManager;
|
||||||
protected final OpenOfferManager openOfferManager;
|
protected final OpenOfferManager openOfferManager;
|
||||||
protected final PubKeyRing pubKeyRing;
|
protected final PubKeyRing pubKeyRing;
|
||||||
protected final DisputeListService<T> disputeListService;
|
protected final DisputeListService<T> disputeListService;
|
||||||
|
@ -116,6 +118,7 @@ public abstract class DisputeManager<T extends DisputeList<Dispute>> extends Sup
|
||||||
WalletsSetup walletsSetup,
|
WalletsSetup walletsSetup,
|
||||||
TradeManager tradeManager,
|
TradeManager tradeManager,
|
||||||
ClosedTradableManager closedTradableManager,
|
ClosedTradableManager closedTradableManager,
|
||||||
|
FailedTradesManager failedTradesManager,
|
||||||
OpenOfferManager openOfferManager,
|
OpenOfferManager openOfferManager,
|
||||||
DaoFacade daoFacade,
|
DaoFacade daoFacade,
|
||||||
KeyRing keyRing,
|
KeyRing keyRing,
|
||||||
|
@ -128,6 +131,7 @@ public abstract class DisputeManager<T extends DisputeList<Dispute>> extends Sup
|
||||||
this.btcWalletService = btcWalletService;
|
this.btcWalletService = btcWalletService;
|
||||||
this.tradeManager = tradeManager;
|
this.tradeManager = tradeManager;
|
||||||
this.closedTradableManager = closedTradableManager;
|
this.closedTradableManager = closedTradableManager;
|
||||||
|
this.failedTradesManager = failedTradesManager;
|
||||||
this.openOfferManager = openOfferManager;
|
this.openOfferManager = openOfferManager;
|
||||||
this.daoFacade = daoFacade;
|
this.daoFacade = daoFacade;
|
||||||
this.pubKeyRing = keyRing.getPubKeyRing();
|
this.pubKeyRing = keyRing.getPubKeyRing();
|
||||||
|
@ -447,21 +451,37 @@ public abstract class DisputeManager<T extends DisputeList<Dispute>> extends Sup
|
||||||
|
|
||||||
// Not-dispute-requester receives that msg from dispute agent
|
// Not-dispute-requester receives that msg from dispute agent
|
||||||
protected void onPeerOpenedDisputeMessage(PeerOpenedDisputeMessage peerOpenedDisputeMessage) {
|
protected void onPeerOpenedDisputeMessage(PeerOpenedDisputeMessage peerOpenedDisputeMessage) {
|
||||||
|
Dispute dispute = peerOpenedDisputeMessage.getDispute();
|
||||||
|
tradeManager.getTradeById(dispute.getTradeId()).ifPresentOrElse(
|
||||||
|
trade -> peerOpenedDisputeForTrade(peerOpenedDisputeMessage, dispute, trade),
|
||||||
|
() -> closedTradableManager.getTradableById(dispute.getTradeId()).ifPresentOrElse(
|
||||||
|
closedTradable -> newDisputeRevertsClosedTrade(peerOpenedDisputeMessage, dispute, (Trade)closedTradable),
|
||||||
|
() -> failedTradesManager.getTradeById(dispute.getTradeId()).ifPresent(
|
||||||
|
trade -> newDisputeRevertsFailedTrade(peerOpenedDisputeMessage, dispute, trade))));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void newDisputeRevertsFailedTrade(PeerOpenedDisputeMessage peerOpenedDisputeMessage, Dispute dispute, Trade trade) {
|
||||||
|
log.info("Peer dispute ticket received, reverting failed trade {} to pending", trade.getShortId());
|
||||||
|
failedTradesManager.removeTrade(trade);
|
||||||
|
tradeManager.addTradeToPendingTrades(trade);
|
||||||
|
peerOpenedDisputeForTrade(peerOpenedDisputeMessage, dispute, trade);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void newDisputeRevertsClosedTrade(PeerOpenedDisputeMessage peerOpenedDisputeMessage, Dispute dispute, Trade trade) {
|
||||||
|
log.info("Peer dispute ticket received, reverting closed trade {} to pending", trade.getShortId());
|
||||||
|
closedTradableManager.remove(trade);
|
||||||
|
tradeManager.addTradeToPendingTrades(trade);
|
||||||
|
peerOpenedDisputeForTrade(peerOpenedDisputeMessage, dispute, trade);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void peerOpenedDisputeForTrade(PeerOpenedDisputeMessage peerOpenedDisputeMessage, Dispute dispute, Trade trade) {
|
||||||
|
String errorMessage = null;
|
||||||
T disputeList = getDisputeList();
|
T disputeList = getDisputeList();
|
||||||
if (disputeList == null) {
|
if (disputeList == null) {
|
||||||
log.warn("disputes is null");
|
log.warn("disputes is null");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String errorMessage = null;
|
|
||||||
Dispute dispute = peerOpenedDisputeMessage.getDispute();
|
|
||||||
|
|
||||||
Optional<Trade> optionalTrade = tradeManager.getTradeById(dispute.getTradeId());
|
|
||||||
if (optionalTrade.isEmpty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Trade trade = optionalTrade.get();
|
|
||||||
try {
|
try {
|
||||||
DisputeValidation.validateDisputeData(dispute, btcWalletService);
|
DisputeValidation.validateDisputeData(dispute, btcWalletService);
|
||||||
DisputeValidation.validateNodeAddresses(dispute, config);
|
DisputeValidation.validateNodeAddresses(dispute, config);
|
||||||
|
|
|
@ -42,6 +42,7 @@ import bisq.core.support.messages.ChatMessage;
|
||||||
import bisq.core.support.messages.SupportMessage;
|
import bisq.core.support.messages.SupportMessage;
|
||||||
import bisq.core.trade.ClosedTradableManager;
|
import bisq.core.trade.ClosedTradableManager;
|
||||||
import bisq.core.trade.TradeManager;
|
import bisq.core.trade.TradeManager;
|
||||||
|
import bisq.core.trade.bisq_v1.FailedTradesManager;
|
||||||
import bisq.core.trade.model.Tradable;
|
import bisq.core.trade.model.Tradable;
|
||||||
import bisq.core.trade.model.bisq_v1.Contract;
|
import bisq.core.trade.model.bisq_v1.Contract;
|
||||||
import bisq.core.trade.model.bisq_v1.Trade;
|
import bisq.core.trade.model.bisq_v1.Trade;
|
||||||
|
@ -91,13 +92,14 @@ public final class ArbitrationManager extends DisputeManager<ArbitrationDisputeL
|
||||||
WalletsSetup walletsSetup,
|
WalletsSetup walletsSetup,
|
||||||
TradeManager tradeManager,
|
TradeManager tradeManager,
|
||||||
ClosedTradableManager closedTradableManager,
|
ClosedTradableManager closedTradableManager,
|
||||||
|
FailedTradesManager failedTradesManager,
|
||||||
OpenOfferManager openOfferManager,
|
OpenOfferManager openOfferManager,
|
||||||
DaoFacade daoFacade,
|
DaoFacade daoFacade,
|
||||||
KeyRing keyRing,
|
KeyRing keyRing,
|
||||||
ArbitrationDisputeListService arbitrationDisputeListService,
|
ArbitrationDisputeListService arbitrationDisputeListService,
|
||||||
Config config,
|
Config config,
|
||||||
PriceFeedService priceFeedService) {
|
PriceFeedService priceFeedService) {
|
||||||
super(p2PService, tradeWalletService, walletService, walletsSetup, tradeManager, closedTradableManager,
|
super(p2PService, tradeWalletService, walletService, walletsSetup, tradeManager, closedTradableManager, failedTradesManager,
|
||||||
openOfferManager, daoFacade, keyRing, arbitrationDisputeListService, config, priceFeedService);
|
openOfferManager, daoFacade, keyRing, arbitrationDisputeListService, config, priceFeedService);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ import bisq.core.support.messages.ChatMessage;
|
||||||
import bisq.core.support.messages.SupportMessage;
|
import bisq.core.support.messages.SupportMessage;
|
||||||
import bisq.core.trade.ClosedTradableManager;
|
import bisq.core.trade.ClosedTradableManager;
|
||||||
import bisq.core.trade.TradeManager;
|
import bisq.core.trade.TradeManager;
|
||||||
|
import bisq.core.trade.bisq_v1.FailedTradesManager;
|
||||||
import bisq.core.trade.model.bisq_v1.Trade;
|
import bisq.core.trade.model.bisq_v1.Trade;
|
||||||
import bisq.core.trade.protocol.bisq_v1.DisputeProtocol;
|
import bisq.core.trade.protocol.bisq_v1.DisputeProtocol;
|
||||||
import bisq.core.trade.protocol.bisq_v1.model.ProcessModel;
|
import bisq.core.trade.protocol.bisq_v1.model.ProcessModel;
|
||||||
|
@ -88,13 +89,14 @@ public final class MediationManager extends DisputeManager<MediationDisputeList>
|
||||||
WalletsSetup walletsSetup,
|
WalletsSetup walletsSetup,
|
||||||
TradeManager tradeManager,
|
TradeManager tradeManager,
|
||||||
ClosedTradableManager closedTradableManager,
|
ClosedTradableManager closedTradableManager,
|
||||||
|
FailedTradesManager failedTradesManager,
|
||||||
OpenOfferManager openOfferManager,
|
OpenOfferManager openOfferManager,
|
||||||
DaoFacade daoFacade,
|
DaoFacade daoFacade,
|
||||||
KeyRing keyRing,
|
KeyRing keyRing,
|
||||||
MediationDisputeListService mediationDisputeListService,
|
MediationDisputeListService mediationDisputeListService,
|
||||||
Config config,
|
Config config,
|
||||||
PriceFeedService priceFeedService) {
|
PriceFeedService priceFeedService) {
|
||||||
super(p2PService, tradeWalletService, walletService, walletsSetup, tradeManager, closedTradableManager,
|
super(p2PService, tradeWalletService, walletService, walletsSetup, tradeManager, closedTradableManager, failedTradesManager,
|
||||||
openOfferManager, daoFacade, keyRing, mediationDisputeListService, config, priceFeedService);
|
openOfferManager, daoFacade, keyRing, mediationDisputeListService, config, priceFeedService);
|
||||||
p2PService.getNetworkNode().addMessageListener(this); // listening for FileTransferPart message
|
p2PService.getNetworkNode().addMessageListener(this); // listening for FileTransferPart message
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,7 @@ import bisq.core.support.messages.ChatMessage;
|
||||||
import bisq.core.support.messages.SupportMessage;
|
import bisq.core.support.messages.SupportMessage;
|
||||||
import bisq.core.trade.ClosedTradableManager;
|
import bisq.core.trade.ClosedTradableManager;
|
||||||
import bisq.core.trade.TradeManager;
|
import bisq.core.trade.TradeManager;
|
||||||
|
import bisq.core.trade.bisq_v1.FailedTradesManager;
|
||||||
import bisq.core.trade.model.bisq_v1.Trade;
|
import bisq.core.trade.model.bisq_v1.Trade;
|
||||||
|
|
||||||
import bisq.network.p2p.AckMessageSourceType;
|
import bisq.network.p2p.AckMessageSourceType;
|
||||||
|
@ -55,6 +56,7 @@ import bisq.common.util.Tuple2;
|
||||||
|
|
||||||
import org.bitcoinj.core.NetworkParameters;
|
import org.bitcoinj.core.NetworkParameters;
|
||||||
import org.bitcoinj.core.Transaction;
|
import org.bitcoinj.core.Transaction;
|
||||||
|
import org.bitcoinj.core.TransactionConfidence;
|
||||||
import org.bitcoinj.core.TransactionInput;
|
import org.bitcoinj.core.TransactionInput;
|
||||||
import org.bitcoinj.core.TransactionOutPoint;
|
import org.bitcoinj.core.TransactionOutPoint;
|
||||||
import org.bitcoinj.core.TransactionOutput;
|
import org.bitcoinj.core.TransactionOutput;
|
||||||
|
@ -92,6 +94,7 @@ public final class RefundManager extends DisputeManager<RefundDisputeList> {
|
||||||
WalletsSetup walletsSetup,
|
WalletsSetup walletsSetup,
|
||||||
TradeManager tradeManager,
|
TradeManager tradeManager,
|
||||||
ClosedTradableManager closedTradableManager,
|
ClosedTradableManager closedTradableManager,
|
||||||
|
FailedTradesManager failedTradesManager,
|
||||||
OpenOfferManager openOfferManager,
|
OpenOfferManager openOfferManager,
|
||||||
DaoFacade daoFacade,
|
DaoFacade daoFacade,
|
||||||
DelayedPayoutTxReceiverService delayedPayoutTxReceiverService,
|
DelayedPayoutTxReceiverService delayedPayoutTxReceiverService,
|
||||||
|
@ -100,7 +103,7 @@ public final class RefundManager extends DisputeManager<RefundDisputeList> {
|
||||||
Config config,
|
Config config,
|
||||||
PriceFeedService priceFeedService,
|
PriceFeedService priceFeedService,
|
||||||
MempoolService mempoolService) {
|
MempoolService mempoolService) {
|
||||||
super(p2PService, tradeWalletService, walletService, walletsSetup, tradeManager, closedTradableManager,
|
super(p2PService, tradeWalletService, walletService, walletsSetup, tradeManager, closedTradableManager, failedTradesManager,
|
||||||
openOfferManager, daoFacade, keyRing, refundDisputeListService, config, priceFeedService);
|
openOfferManager, daoFacade, keyRing, refundDisputeListService, config, priceFeedService);
|
||||||
this.delayedPayoutTxReceiverService = delayedPayoutTxReceiverService;
|
this.delayedPayoutTxReceiverService = delayedPayoutTxReceiverService;
|
||||||
|
|
||||||
|
|
|
@ -801,7 +801,7 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi
|
||||||
failedTradesManager.add(trade);
|
failedTradesManager.add(trade);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addFailedTradeToPendingTrades(Trade trade) {
|
public void addTradeToPendingTrades(Trade trade) {
|
||||||
if (!trade.isInitialized()) {
|
if (!trade.isInitialized()) {
|
||||||
initPersistedTrade(trade);
|
initPersistedTrade(trade);
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,7 +102,7 @@ class FailedTradesDataModel extends ActivatableDataModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
failedTradesManager.removeTrade(trade);
|
failedTradesManager.removeTrade(trade);
|
||||||
tradeManager.addFailedTradeToPendingTrades(trade);
|
tradeManager.addTradeToPendingTrades(trade);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue