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 Date takeOfferDate;
private Coin tradeAmount;
private long tradePrice;
private NodeAddress tradingPeerNodeAddress;
@Nullable
private String takeOfferFeeTxId;
protected State state;
private DisputeState disputeState = DisputeState.NONE;
private TradePeriodState tradePeriodState = TradePeriodState.NORMAL;
@ -166,9 +169,6 @@ public abstract class Trade implements Tradable, Model {
transient private StringProperty errorMessageProperty;
transient private ObjectProperty<Coin> tradeAmountProperty;
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.
public void updateDepositTxFromWallet(TradeWalletService tradeWalletService) {
public void updateDepositTxFromWallet() {
if (depositTx != null)
setDepositTx(tradeWalletService.getWalletTx(depositTx.getHash()));
setDepositTx(processModel.getTradeWalletService().getWalletTx(depositTx.getHash()));
}
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();
}
public boolean isDepositFeePaid() {
return state.getPhase() != null && state.getPhase().ordinal() >= Phase.DEPOSIT_PAID.ordinal();
}
public State getState() {
return state;
}

View File

@ -173,25 +173,18 @@ public class TradeManager {
private void initPendingTrades() {
Log.traceCall();
//List<Trade> failedTrades = new ArrayList<>();
for (Trade trade : trades) {
// We continue an interrupted trade.
// TODO
/* if (trade.isFailedState()) {
failedTrades.add(trade);
}
else {*/
trade.setStorage(tradableListStorage);
trade.updateDepositTxFromWallet(tradeWalletService);
initTrade(trade, trade.getProcessModel().getUseSavingsWallet(), trade.getProcessModel().getFundsNeededForTrade());
// }
if (trade.isDepositFeePaid()) {
trade.updateDepositTxFromWallet();
initTrade(trade, trade.getProcessModel().getUseSavingsWallet(), trade.getProcessModel().getFundsNeededForTrade());
} else if (trade.isTakerFeePaid()) {
addTradeToFailedTrades(trade);
} else {
removePreparedTrade(trade);
}
}
pendingTradesInitialized.set(true);
//failedTrades.stream().filter(Trade::isTakerFeePaid).forEach(this::addTradeToFailedTrades);
}
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
public void addTradeToClosedTrades(Trade trade) {
trades.remove(trade);
removeTrade(trade);
closedTradableManager.add(trade);
}
// If trade is in already in critical state (if taker role: taker fee; both roles: after deposit published)
// we move the trade to failedTradesManager
public void addTradeToFailedTrades(Trade trade) {
trades.remove(trade);
removeTrade(trade);
failedTradesManager.add(trade);
}
// 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.
public void removePreparedTrade(Trade trade) {
removeTrade(trade);
}
public void removeTrade(Trade 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);
}