mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-08-18 03:10:52 -04:00
move locked funds to available for failed trades
This commit is contained in:
parent
25773311e2
commit
e0598ef050
2 changed files with 28 additions and 22 deletions
|
@ -148,7 +148,10 @@ public abstract class Trade implements Tradable, Model {
|
||||||
private DecryptedMsgWithPubKey decryptedMsgWithPubKey;
|
private DecryptedMsgWithPubKey decryptedMsgWithPubKey;
|
||||||
private Date takeOfferDate;
|
private Date takeOfferDate;
|
||||||
private Coin tradeAmount;
|
private Coin tradeAmount;
|
||||||
|
private long tradePrice;
|
||||||
private NodeAddress tradingPeerNodeAddress;
|
private NodeAddress tradingPeerNodeAddress;
|
||||||
|
@Nullable
|
||||||
|
private String takeOfferFeeTxId;
|
||||||
protected State state;
|
protected State state;
|
||||||
private DisputeState disputeState = DisputeState.NONE;
|
private DisputeState disputeState = DisputeState.NONE;
|
||||||
private TradePeriodState tradePeriodState = TradePeriodState.NORMAL;
|
private TradePeriodState tradePeriodState = TradePeriodState.NORMAL;
|
||||||
|
@ -166,9 +169,6 @@ public abstract class Trade implements Tradable, Model {
|
||||||
transient private StringProperty errorMessageProperty;
|
transient private StringProperty errorMessageProperty;
|
||||||
transient private ObjectProperty<Coin> tradeAmountProperty;
|
transient private ObjectProperty<Coin> tradeAmountProperty;
|
||||||
transient private ObjectProperty<Fiat> tradeVolumeProperty;
|
transient private ObjectProperty<Fiat> tradeVolumeProperty;
|
||||||
@Nullable
|
|
||||||
private String takeOfferFeeTxId;
|
|
||||||
private long tradePrice;
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -271,9 +271,9 @@ public abstract class Trade implements Tradable, Model {
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// The deserialized tx has not actual confidence data, so we need to get the fresh one from the wallet.
|
// The deserialized tx has not actual confidence data, so we need to get the fresh one from the wallet.
|
||||||
public void updateDepositTxFromWallet(TradeWalletService tradeWalletService) {
|
public void updateDepositTxFromWallet() {
|
||||||
if (depositTx != null)
|
if (depositTx != null)
|
||||||
setDepositTx(tradeWalletService.getWalletTx(depositTx.getHash()));
|
setDepositTx(processModel.getTradeWalletService().getWalletTx(depositTx.getHash()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDepositTx(Transaction tx) {
|
public void setDepositTx(Transaction tx) {
|
||||||
|
@ -338,6 +338,10 @@ public abstract class Trade implements Tradable, Model {
|
||||||
return state.getPhase() != null && state.getPhase().ordinal() >= Phase.TAKER_FEE_PAID.ordinal();
|
return state.getPhase() != null && state.getPhase().ordinal() >= Phase.TAKER_FEE_PAID.ordinal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDepositFeePaid() {
|
||||||
|
return state.getPhase() != null && state.getPhase().ordinal() >= Phase.DEPOSIT_PAID.ordinal();
|
||||||
|
}
|
||||||
|
|
||||||
public State getState() {
|
public State getState() {
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,25 +173,18 @@ public class TradeManager {
|
||||||
private void initPendingTrades() {
|
private void initPendingTrades() {
|
||||||
Log.traceCall();
|
Log.traceCall();
|
||||||
|
|
||||||
//List<Trade> failedTrades = new ArrayList<>();
|
|
||||||
for (Trade trade : trades) {
|
for (Trade trade : trades) {
|
||||||
// We continue an interrupted trade.
|
|
||||||
|
|
||||||
// TODO
|
|
||||||
/* if (trade.isFailedState()) {
|
|
||||||
failedTrades.add(trade);
|
|
||||||
}
|
|
||||||
else {*/
|
|
||||||
trade.setStorage(tradableListStorage);
|
trade.setStorage(tradableListStorage);
|
||||||
trade.updateDepositTxFromWallet(tradeWalletService);
|
if (trade.isDepositFeePaid()) {
|
||||||
|
trade.updateDepositTxFromWallet();
|
||||||
initTrade(trade, trade.getProcessModel().getUseSavingsWallet(), trade.getProcessModel().getFundsNeededForTrade());
|
initTrade(trade, trade.getProcessModel().getUseSavingsWallet(), trade.getProcessModel().getFundsNeededForTrade());
|
||||||
|
} else if (trade.isTakerFeePaid()) {
|
||||||
|
addTradeToFailedTrades(trade);
|
||||||
// }
|
} else {
|
||||||
|
removePreparedTrade(trade);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pendingTradesInitialized.set(true);
|
pendingTradesInitialized.set(true);
|
||||||
|
|
||||||
//failedTrades.stream().filter(Trade::isTakerFeePaid).forEach(this::addTradeToFailedTrades);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleInitialTakeOfferRequest(TradeMessage message, NodeAddress peerNodeAddress) {
|
private void handleInitialTakeOfferRequest(TradeMessage message, NodeAddress peerNodeAddress) {
|
||||||
|
@ -345,21 +338,30 @@ public class TradeManager {
|
||||||
|
|
||||||
// If trade was completed (closed without fault but might be closed by a dispute) we move it to the closed trades
|
// If trade was completed (closed without fault but might be closed by a dispute) we move it to the closed trades
|
||||||
public void addTradeToClosedTrades(Trade trade) {
|
public void addTradeToClosedTrades(Trade trade) {
|
||||||
trades.remove(trade);
|
removeTrade(trade);
|
||||||
closedTradableManager.add(trade);
|
closedTradableManager.add(trade);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If trade is in already in critical state (if taker role: taker fee; both roles: after deposit published)
|
// If trade is in already in critical state (if taker role: taker fee; both roles: after deposit published)
|
||||||
// we move the trade to failedTradesManager
|
// we move the trade to failedTradesManager
|
||||||
public void addTradeToFailedTrades(Trade trade) {
|
public void addTradeToFailedTrades(Trade trade) {
|
||||||
trades.remove(trade);
|
removeTrade(trade);
|
||||||
failedTradesManager.add(trade);
|
failedTradesManager.add(trade);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If trade is in preparation (if taker role: before taker fee is paid; both roles: before deposit published)
|
// If trade is in preparation (if taker role: before taker fee is paid; both roles: before deposit published)
|
||||||
// we just remove the trade from our list. We don't store those trades.
|
// we just remove the trade from our list. We don't store those trades.
|
||||||
public void removePreparedTrade(Trade trade) {
|
public void removePreparedTrade(Trade trade) {
|
||||||
|
removeTrade(trade);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeTrade(Trade trade) {
|
||||||
trades.remove(trade);
|
trades.remove(trade);
|
||||||
|
|
||||||
|
walletService.swapTradeEntryToAvailableEntry(trade.getId(), AddressEntry.Context.OFFER_FUNDING);
|
||||||
|
walletService.swapTradeEntryToAvailableEntry(trade.getId(), AddressEntry.Context.RESERVED_FOR_TRADE);
|
||||||
|
walletService.swapTradeEntryToAvailableEntry(trade.getId(), AddressEntry.Context.MULTI_SIG);
|
||||||
|
walletService.swapTradeEntryToAvailableEntry(trade.getId(), AddressEntry.Context.TRADE_PAYOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue