move locked funds to available for failed trades

This commit is contained in:
Manfred Karrer 2016-04-17 15:59:22 +02:00
parent 25773311e2
commit e0598ef050
2 changed files with 28 additions and 22 deletions

View file

@ -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;
} }

View file

@ -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()) {
initTrade(trade, trade.getProcessModel().getUseSavingsWallet(), trade.getProcessModel().getFundsNeededForTrade()); trade.updateDepositTxFromWallet();
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);
} }