From 1790dbd542583b6bc0f0fbcc846081ce5f102f4b Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Tue, 5 Apr 2016 01:56:46 +0200 Subject: [PATCH] Changed trade period to time based instead of block based (cleanup) --- .../io/bitsquare/payment/PaymentMethod.java | 2 +- .../main/java/io/bitsquare/trade/Trade.java | 31 ++++---- .../java/io/bitsquare/trade/TradeManager.java | 2 - .../buyer/SignAndPublishDepositTxAsBuyer.java | 2 - .../ProcessDepositTxPublishedMessage.java | 3 - .../SignAndPublishDepositTxAsSeller.java | 2 - .../taker/ProcessPublishDepositTxRequest.java | 11 --- .../io/bitsquare/gui/main/MainViewModel.java | 76 +++++++++---------- .../pendingtrades/PendingTradesViewModel.java | 4 - .../steps/buyer/BuyerStep4View.java | 4 +- 10 files changed, 59 insertions(+), 78 deletions(-) diff --git a/core/src/main/java/io/bitsquare/payment/PaymentMethod.java b/core/src/main/java/io/bitsquare/payment/PaymentMethod.java index dd3bb59df5..7fa316f545 100644 --- a/core/src/main/java/io/bitsquare/payment/PaymentMethod.java +++ b/core/src/main/java/io/bitsquare/payment/PaymentMethod.java @@ -37,7 +37,7 @@ public final class PaymentMethod implements Persistable, Comparable { protected final Logger log = LoggerFactory.getLogger(this.getClass()); // time in blocks (average 10 min for one block confirmation - private static final long HOUR = 3600 * 1000; + private static final long HOUR = 3600_000; private static final long DAY = HOUR * 24; public static final String OK_PAY_ID = "OK_PAY"; diff --git a/core/src/main/java/io/bitsquare/trade/Trade.java b/core/src/main/java/io/bitsquare/trade/Trade.java index 68849b3836..e49a79122d 100644 --- a/core/src/main/java/io/bitsquare/trade/Trade.java +++ b/core/src/main/java/io/bitsquare/trade/Trade.java @@ -138,6 +138,7 @@ public abstract class Trade implements Tradable, Model { @Nullable transient private Storage storage; transient protected TradeProtocol tradeProtocol; + private transient Date maxTradePeriodDate, halfTradePeriodDate; // Immutable private final Offer offer; @@ -146,7 +147,6 @@ public abstract class Trade implements Tradable, Model { // Mutable private DecryptedMsgWithPubKey decryptedMsgWithPubKey; private Date takeOfferDate; - private int takeOfferDateAsBlockHeight; private Coin tradeAmount; private NodeAddress tradingPeerNodeAddress; protected State state; @@ -390,6 +390,22 @@ public abstract class Trade implements Tradable, Model { return null; } + @Nullable + public Date getMaxTradePeriodDate() { + if (maxTradePeriodDate == null && takeOfferDate != null) + maxTradePeriodDate = new Date(takeOfferDate.getTime() + getOffer().getPaymentMethod().getMaxTradePeriod()); + + return maxTradePeriodDate; + } + + @Nullable + public Date getHalfTradePeriodDate() { + if (halfTradePeriodDate == null && takeOfferDate != null) + halfTradePeriodDate = new Date(takeOfferDate.getTime() + getOffer().getPaymentMethod().getMaxTradePeriod() / 2); + + return halfTradePeriodDate; + } + public ReadOnlyObjectProperty stateProperty() { return stateProperty; @@ -412,6 +428,7 @@ public abstract class Trade implements Tradable, Model { return tradePeriodStateProperty; } + /////////////////////////////////////////////////////////////////////////////////////////// // Getter/Setter for Mutable objects /////////////////////////////////////////////////////////////////////////////////////////// @@ -420,18 +437,6 @@ public abstract class Trade implements Tradable, Model { return takeOfferDate; } - /*public void setTakeOfferDate(Date takeOfferDate) { - this.takeOfferDate = takeOfferDate; - }*/ - - public int getTakeOfferDateAsBlockHeight() { - return takeOfferDateAsBlockHeight; - } - - public void setTakeOfferDateAsBlockHeight(int blockHeight) { - takeOfferDateAsBlockHeight = blockHeight; - } - public void setTradingPeerNodeAddress(NodeAddress tradingPeerNodeAddress) { if (tradingPeerNodeAddress == null) log.error("tradingPeerAddress=null"); diff --git a/core/src/main/java/io/bitsquare/trade/TradeManager.java b/core/src/main/java/io/bitsquare/trade/TradeManager.java index 720cd0ce9d..50d3907e76 100644 --- a/core/src/main/java/io/bitsquare/trade/TradeManager.java +++ b/core/src/main/java/io/bitsquare/trade/TradeManager.java @@ -284,8 +284,6 @@ public class TradeManager { else trade = new BuyerAsTakerTrade(offer, amount, model.getPeerNodeAddress(), tradableListStorage); - //trade.setTakeOfferDate(new Date()); - trade.setTakeOfferDateAsBlockHeight(tradeWalletService.getBestChainHeight()); trade.setTakerPaymentAccountId(paymentAccountId); initTrade(trade, useSavingsWallet, fundsNeededForTrade); diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/buyer/SignAndPublishDepositTxAsBuyer.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/buyer/SignAndPublishDepositTxAsBuyer.java index 7afc5ffd5c..a138617dbd 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/buyer/SignAndPublishDepositTxAsBuyer.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/buyer/SignAndPublishDepositTxAsBuyer.java @@ -62,8 +62,6 @@ public class SignAndPublishDepositTxAsBuyer extends TradeTask { log.trace("takerSignAndPublishTx succeeded " + transaction); trade.setDepositTx(transaction); - //trade.setTakeOfferDate(new Date()); - trade.setTakeOfferDateAsBlockHeight(processModel.getTradeWalletService().getBestChainHeight()); trade.setState(Trade.State.TAKER_PUBLISHED_DEPOSIT_TX); complete(); diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/offerer/ProcessDepositTxPublishedMessage.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/offerer/ProcessDepositTxPublishedMessage.java index 0acf9f0436..6a418a80a3 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/offerer/ProcessDepositTxPublishedMessage.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/offerer/ProcessDepositTxPublishedMessage.java @@ -52,9 +52,6 @@ public class ProcessDepositTxPublishedMessage extends TradeTask { // update with full tx trade.setDepositTx(processModel.getTradeWalletService().addTransactionToWallet(transactionFromSerializedTx)); - //trade.setTakeOfferDate(new Date()); - trade.setTakeOfferDateAsBlockHeight(processModel.getTradeWalletService().getBestChainHeight()); - if (trade instanceof OffererTrade) processModel.getOpenOfferManager().closeOpenOffer(trade.getOffer()); diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/seller/SignAndPublishDepositTxAsSeller.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/seller/SignAndPublishDepositTxAsSeller.java index 2cdf58b956..c6f25b2b90 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/seller/SignAndPublishDepositTxAsSeller.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/seller/SignAndPublishDepositTxAsSeller.java @@ -60,8 +60,6 @@ public class SignAndPublishDepositTxAsSeller extends TradeTask { log.trace("takerSignAndPublishTx succeeded " + transaction); trade.setDepositTx(transaction); - //trade.setTakeOfferDate(new Date()); - trade.setTakeOfferDateAsBlockHeight(processModel.getTradeWalletService().getBestChainHeight()); trade.setState(Trade.State.TAKER_PUBLISHED_DEPOSIT_TX); complete(); diff --git a/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/taker/ProcessPublishDepositTxRequest.java b/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/taker/ProcessPublishDepositTxRequest.java index 816f31d1d3..f39db93f9c 100644 --- a/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/taker/ProcessPublishDepositTxRequest.java +++ b/core/src/main/java/io/bitsquare/trade/protocol/trade/tasks/taker/ProcessPublishDepositTxRequest.java @@ -66,17 +66,6 @@ public class ProcessPublishDepositTxRequest extends TradeTask { processModel.tradingPeer.setRawTransactionInputs(checkNotNull(publishDepositTxRequest.offererInputs)); processModel.setPreparedDepositTx(checkNotNull(publishDepositTxRequest.preparedDepositTx)); checkArgument(publishDepositTxRequest.offererInputs.size() > 0); - /*if (publishDepositTxRequest.openDisputeTimeAsBlockHeight != 0) { - trade.setOpenDisputeTimeAsBlockHeight(publishDepositTxRequest.openDisputeTimeAsBlockHeight); - } else { - failed("waitPeriodForOpenDisputeAsBlockHeight = 0"); - } - - if (publishDepositTxRequest.checkPaymentTimeAsBlockHeight != 0) { - trade.setCheckPaymentTimeAsBlockHeight(publishDepositTxRequest.checkPaymentTimeAsBlockHeight); - } else { - failed("notificationTimeAsBlockHeight = 0"); - }*/ // update to the latest peer address of our peer if the message is correct trade.setTradingPeerNodeAddress(processModel.getTempTradingPeerNodeAddress()); diff --git a/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java b/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java index d469c348fd..429a39dcdb 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java @@ -547,45 +547,45 @@ public class MainViewModel implements ViewModel { private void updateTradePeriodState() { tradeManager.getTrades().stream().forEach(trade -> { if (trade.getState().getPhase().ordinal() < Trade.Phase.PAYOUT_PAID.ordinal()) { - long maxTradePeriod = trade.getOffer().getPaymentMethod().getMaxTradePeriod(); - Date maxTradePeriodDate = new Date(trade.getDate().getTime() + maxTradePeriod); - Date halfTradePeriodDate = new Date(trade.getDate().getTime() + maxTradePeriod / 2); - Date now = new Date(); + Date maxTradePeriodDate = trade.getMaxTradePeriodDate(); + Date halfTradePeriodDate = trade.getHalfTradePeriodDate(); + if (maxTradePeriodDate != null && halfTradePeriodDate != null) { + Date now = new Date(); + if (now.after(maxTradePeriodDate)) + trade.setTradePeriodState(Trade.TradePeriodState.TRADE_PERIOD_OVER); + else if (now.after(halfTradePeriodDate)) + trade.setTradePeriodState(Trade.TradePeriodState.HALF_REACHED); - if (now.after(maxTradePeriodDate)) - trade.setTradePeriodState(Trade.TradePeriodState.TRADE_PERIOD_OVER); - else if (now.after(halfTradePeriodDate)) - trade.setTradePeriodState(Trade.TradePeriodState.HALF_REACHED); - - String key; - switch (trade.getTradePeriodState()) { - case NORMAL: - break; - case HALF_REACHED: - key = "displayHalfTradePeriodOver" + trade.getId(); - if (preferences.showAgain(key)) { - preferences.dontShowAgain(key, true); - new Popup().warning("Your trade with ID " + trade.getShortId() + - " has reached the half of the max. allowed trading period and " + - "is still not completed.\n\n" + - "The trade period ends on " + formatter.formatDateTime(maxTradePeriodDate) + "\n\n" + - "Please check your trade state at \"Portfolio/Open trades\" for further information.") - .show(); - } - break; - case TRADE_PERIOD_OVER: - key = "displayTradePeriodOver" + trade.getId(); - if (preferences.showAgain(key)) { - preferences.dontShowAgain(key, true); - new Popup().warning("Your trade with ID " + trade.getShortId() + - " has reached the max. allowed trading period and is " + - "not completed.\n\n" + - "The trade period ended on " + formatter.formatDateTime(maxTradePeriodDate) + "\n\n" + - "Please check your trade at \"Portfolio/Open trades\" for contacting " + - "the arbitrator.") - .show(); - } - break; + String key; + switch (trade.getTradePeriodState()) { + case NORMAL: + break; + case HALF_REACHED: + key = "displayHalfTradePeriodOver" + trade.getId(); + if (preferences.showAgain(key)) { + preferences.dontShowAgain(key, true); + new Popup().warning("Your trade with ID " + trade.getShortId() + + " has reached the half of the max. allowed trading period and " + + "is still not completed.\n\n" + + "The trade period ends on " + formatter.formatDateTime(maxTradePeriodDate) + "\n\n" + + "Please check your trade state at \"Portfolio/Open trades\" for further information.") + .show(); + } + break; + case TRADE_PERIOD_OVER: + key = "displayTradePeriodOver" + trade.getId(); + if (preferences.showAgain(key)) { + preferences.dontShowAgain(key, true); + new Popup().warning("Your trade with ID " + trade.getShortId() + + " has reached the max. allowed trading period and is " + + "not completed.\n\n" + + "The trade period ended on " + formatter.formatDateTime(maxTradePeriodDate) + "\n\n" + + "Please check your trade at \"Portfolio/Open trades\" for contacting " + + "the arbitrator.") + .show(); + } + break; + } } } }); diff --git a/gui/src/main/java/io/bitsquare/gui/main/portfolio/pendingtrades/PendingTradesViewModel.java b/gui/src/main/java/io/bitsquare/gui/main/portfolio/pendingtrades/PendingTradesViewModel.java index dbb264256b..8f549b2604 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/portfolio/pendingtrades/PendingTradesViewModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/portfolio/pendingtrades/PendingTradesViewModel.java @@ -239,10 +239,6 @@ public class PendingTradesViewModel extends ActivatableWithDataModel oldBlocks, List newBlocks) throws VerificationException { - updateDateFromBlockHeight(model.getBestChainHeight()); + updateDateFromBlockHeight(model.dataModel.getBestChainHeight()); } @Override @@ -75,7 +75,7 @@ public class BuyerStep4View extends TradeStepView { super.activate(); model.addBlockChainListener(blockChainListener); - updateDateFromBlockHeight(model.getBestChainHeight()); + updateDateFromBlockHeight(model.dataModel.getBestChainHeight()); } @Override