From be108a3035e9b2be8587f2dc38285fb47aa9fd15 Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Thu, 31 Dec 2015 19:27:47 +0100 Subject: [PATCH] Fix bug with failed offer removal. Fix reduced fees to avoid negative amounts --- .../main/java/io/bitsquare/btc/FeePolicy.java | 2 +- .../io/bitsquare/btc/TradeWalletService.java | 1 + .../trade/offer/OpenOfferManager.java | 22 +++++++++++++++---- .../io/bitsquare/gui/main/MainViewModel.java | 1 - .../createoffer/CreateOfferDataModel.java | 2 +- .../offer/createoffer/CreateOfferView.java | 2 +- .../createoffer/CreateOfferViewModel.java | 7 +++--- 7 files changed, 26 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/io/bitsquare/btc/FeePolicy.java b/core/src/main/java/io/bitsquare/btc/FeePolicy.java index e89daae904..51a6a5c838 100644 --- a/core/src/main/java/io/bitsquare/btc/FeePolicy.java +++ b/core/src/main/java/io/bitsquare/btc/FeePolicy.java @@ -50,7 +50,7 @@ public class FeePolicy { public static final Coin DUST = Coin.valueOf(546); //TODO for testing - public static final Coin CREATE_OFFER_FEE = Coin.valueOf(10000); // 0.0001 BTC 0.1% of 1 BTC about 0.2 EUR @ 200 EUR/BTC + public static final Coin CREATE_OFFER_FEE = Coin.valueOf(40000); // 0.0001 BTC 0.1% of 1 BTC about 0.2 EUR @ 200 EUR/BTC //public static final Coin CREATE_OFFER_FEE = Coin.valueOf(100000); // 0.001 BTC 0.1% of 1 BTC about 0.2 EUR @ 200 EUR/BTC public static final Coin TAKE_OFFER_FEE = CREATE_OFFER_FEE; //TODO for testing diff --git a/core/src/main/java/io/bitsquare/btc/TradeWalletService.java b/core/src/main/java/io/bitsquare/btc/TradeWalletService.java index f35c657d9e..e3421d59e0 100644 --- a/core/src/main/java/io/bitsquare/btc/TradeWalletService.java +++ b/core/src/main/java/io/bitsquare/btc/TradeWalletService.java @@ -141,6 +141,7 @@ public class TradeWalletService { public Transaction createTradingFeeTx(AddressEntry addressEntry, Coin tradingFee, String feeReceiverAddresses) throws InsufficientMoneyException, AddressFormatException { Transaction tradingFeeTx = new Transaction(params); + Preconditions.checkArgument(tradingFee.compareTo(FeePolicy.TX_FEE) > 0); Coin outPutAmount = tradingFee.subtract(FeePolicy.TX_FEE); tradingFeeTx.addOutput(outPutAmount, new Address(params, feeReceiverAddresses)); diff --git a/core/src/main/java/io/bitsquare/trade/offer/OpenOfferManager.java b/core/src/main/java/io/bitsquare/trade/offer/OpenOfferManager.java index 8bffd0e4cb..81764fbdf7 100644 --- a/core/src/main/java/io/bitsquare/trade/offer/OpenOfferManager.java +++ b/core/src/main/java/io/bitsquare/trade/offer/OpenOfferManager.java @@ -220,23 +220,37 @@ public class OpenOfferManager { public void onRemoveOpenOffer(Offer offer, ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) { Optional openOfferOptional = findOpenOffer(offer.getId()); - if (openOfferOptional.isPresent()) + if (openOfferOptional.isPresent()) { onRemoveOpenOffer(openOfferOptional.get(), resultHandler, errorMessageHandler); + } else { + log.warn("Offer was not found in our list of open offers. We still try to remove it from the offerbook."); + errorMessageHandler.handleErrorMessage("Offer was not found in our list of open offers. " + + "We still try to remove it from the offerbook."); + onRemoveOffer(offer); + } } public void onRemoveOpenOffer(OpenOffer openOffer, ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) { - offerBookService.removeOffer(openOffer.getOffer(), + Offer offer = openOffer.getOffer(); + offerBookService.removeOffer(offer, () -> { - openOffer.getOffer().setState(Offer.State.REMOVED); + offer.setState(Offer.State.REMOVED); openOffer.setState(OpenOffer.State.CANCELED); openOffers.remove(openOffer); closedTradableManager.add(openOffer); - //disposeCheckOfferAvailabilityRequest(offer); resultHandler.handleResult(); }, errorMessageHandler); } + // That should not be needed, but there are cases where the openOffer is removed but the offer still in the + // offerbook + public void onRemoveOffer(Offer offer) { + offerBookService.removeOffer(offer, + () -> offer.setState(Offer.State.REMOVED), + null); + } + public void reserveOpenOffer(OpenOffer openOffer) { openOffer.setState(OpenOffer.State.RESERVED); } 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 c162ba9fc3..fc86880686 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java @@ -249,7 +249,6 @@ class MainViewModel implements ViewModel { FxTimer.runLater(Duration.ofMillis(2000), () -> setBitcoinNetworkSyncProgress(walletService.downloadPercentageProperty().get()));*/ walletService.numPeersProperty().addListener((observable, oldValue, newValue) -> { - log.debug("Bitcoin peers " + newValue); numBTCPeers = (int) newValue; numBTCPeersAsString.set(String.valueOf(newValue) + " peers"); if (blockchainSyncProgress.get() >= 1 && numBTCPeers > 0) diff --git a/gui/src/main/java/io/bitsquare/gui/main/offer/createoffer/CreateOfferDataModel.java b/gui/src/main/java/io/bitsquare/gui/main/offer/createoffer/CreateOfferDataModel.java index f35875e322..f12700f172 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/offer/createoffer/CreateOfferDataModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/offer/createoffer/CreateOfferDataModel.java @@ -188,7 +188,7 @@ class CreateOfferDataModel extends ActivatableDataModel { // UI actions /////////////////////////////////////////////////////////////////////////////////////////// - Offer getOffer() { + Offer createAndGetOffer() { long fiatPrice = priceAsFiat.get() != null ? priceAsFiat.get().getValue() : 0L; long amount = amountAsCoin.get() != null ? amountAsCoin.get().getValue() : 0L; long minAmount = minAmountAsCoin.get() != null ? minAmountAsCoin.get().getValue() : 0L; diff --git a/gui/src/main/java/io/bitsquare/gui/main/offer/createoffer/CreateOfferView.java b/gui/src/main/java/io/bitsquare/gui/main/offer/createoffer/CreateOfferView.java index ad043ecda6..8e4f5d91e1 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/offer/createoffer/CreateOfferView.java +++ b/gui/src/main/java/io/bitsquare/gui/main/offer/createoffer/CreateOfferView.java @@ -200,7 +200,7 @@ public class CreateOfferView extends ActivatableViewAndModel model.onPlaceOffer(o)).show(offer); } else { diff --git a/gui/src/main/java/io/bitsquare/gui/main/offer/createoffer/CreateOfferViewModel.java b/gui/src/main/java/io/bitsquare/gui/main/offer/createoffer/CreateOfferViewModel.java index 0735e1686f..1660ca6c94 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/offer/createoffer/CreateOfferViewModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/offer/createoffer/CreateOfferViewModel.java @@ -95,6 +95,7 @@ class CreateOfferViewModel extends ActivatableWithDataModel requestPlaceOfferSuccessListener; private ChangeListener requestPlaceOfferErrorMessageListener; private ChangeListener errorMessageListener; + private Offer offer; /////////////////////////////////////////////////////////////////////////////////////////// @@ -276,7 +277,6 @@ class CreateOfferViewModel extends ActivatableWithDataModel