mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-07-29 17:58:56 -04:00
Fix bug with failed offer removal. Fix reduced fees to avoid negative amounts
This commit is contained in:
parent
860ffd2aff
commit
be108a3035
7 changed files with 26 additions and 11 deletions
|
@ -50,7 +50,7 @@ public class FeePolicy {
|
||||||
public static final Coin DUST = Coin.valueOf(546);
|
public static final Coin DUST = Coin.valueOf(546);
|
||||||
|
|
||||||
//TODO for testing
|
//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 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;
|
public static final Coin TAKE_OFFER_FEE = CREATE_OFFER_FEE;
|
||||||
//TODO for testing
|
//TODO for testing
|
||||||
|
|
|
@ -141,6 +141,7 @@ public class TradeWalletService {
|
||||||
public Transaction createTradingFeeTx(AddressEntry addressEntry, Coin tradingFee, String feeReceiverAddresses)
|
public Transaction createTradingFeeTx(AddressEntry addressEntry, Coin tradingFee, String feeReceiverAddresses)
|
||||||
throws InsufficientMoneyException, AddressFormatException {
|
throws InsufficientMoneyException, AddressFormatException {
|
||||||
Transaction tradingFeeTx = new Transaction(params);
|
Transaction tradingFeeTx = new Transaction(params);
|
||||||
|
Preconditions.checkArgument(tradingFee.compareTo(FeePolicy.TX_FEE) > 0);
|
||||||
Coin outPutAmount = tradingFee.subtract(FeePolicy.TX_FEE);
|
Coin outPutAmount = tradingFee.subtract(FeePolicy.TX_FEE);
|
||||||
tradingFeeTx.addOutput(outPutAmount, new Address(params, feeReceiverAddresses));
|
tradingFeeTx.addOutput(outPutAmount, new Address(params, feeReceiverAddresses));
|
||||||
|
|
||||||
|
|
|
@ -220,23 +220,37 @@ public class OpenOfferManager {
|
||||||
|
|
||||||
public void onRemoveOpenOffer(Offer offer, ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) {
|
public void onRemoveOpenOffer(Offer offer, ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) {
|
||||||
Optional<OpenOffer> openOfferOptional = findOpenOffer(offer.getId());
|
Optional<OpenOffer> openOfferOptional = findOpenOffer(offer.getId());
|
||||||
if (openOfferOptional.isPresent())
|
if (openOfferOptional.isPresent()) {
|
||||||
onRemoveOpenOffer(openOfferOptional.get(), resultHandler, errorMessageHandler);
|
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) {
|
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);
|
openOffer.setState(OpenOffer.State.CANCELED);
|
||||||
openOffers.remove(openOffer);
|
openOffers.remove(openOffer);
|
||||||
closedTradableManager.add(openOffer);
|
closedTradableManager.add(openOffer);
|
||||||
//disposeCheckOfferAvailabilityRequest(offer);
|
|
||||||
resultHandler.handleResult();
|
resultHandler.handleResult();
|
||||||
},
|
},
|
||||||
errorMessageHandler);
|
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) {
|
public void reserveOpenOffer(OpenOffer openOffer) {
|
||||||
openOffer.setState(OpenOffer.State.RESERVED);
|
openOffer.setState(OpenOffer.State.RESERVED);
|
||||||
}
|
}
|
||||||
|
|
|
@ -249,7 +249,6 @@ class MainViewModel implements ViewModel {
|
||||||
FxTimer.runLater(Duration.ofMillis(2000), () -> setBitcoinNetworkSyncProgress(walletService.downloadPercentageProperty().get()));*/
|
FxTimer.runLater(Duration.ofMillis(2000), () -> setBitcoinNetworkSyncProgress(walletService.downloadPercentageProperty().get()));*/
|
||||||
|
|
||||||
walletService.numPeersProperty().addListener((observable, oldValue, newValue) -> {
|
walletService.numPeersProperty().addListener((observable, oldValue, newValue) -> {
|
||||||
log.debug("Bitcoin peers " + newValue);
|
|
||||||
numBTCPeers = (int) newValue;
|
numBTCPeers = (int) newValue;
|
||||||
numBTCPeersAsString.set(String.valueOf(newValue) + " peers");
|
numBTCPeersAsString.set(String.valueOf(newValue) + " peers");
|
||||||
if (blockchainSyncProgress.get() >= 1 && numBTCPeers > 0)
|
if (blockchainSyncProgress.get() >= 1 && numBTCPeers > 0)
|
||||||
|
|
|
@ -188,7 +188,7 @@ class CreateOfferDataModel extends ActivatableDataModel {
|
||||||
// UI actions
|
// UI actions
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
Offer getOffer() {
|
Offer createAndGetOffer() {
|
||||||
long fiatPrice = priceAsFiat.get() != null ? priceAsFiat.get().getValue() : 0L;
|
long fiatPrice = priceAsFiat.get() != null ? priceAsFiat.get().getValue() : 0L;
|
||||||
long amount = amountAsCoin.get() != null ? amountAsCoin.get().getValue() : 0L;
|
long amount = amountAsCoin.get() != null ? amountAsCoin.get().getValue() : 0L;
|
||||||
long minAmount = minAmountAsCoin.get() != null ? minAmountAsCoin.get().getValue() : 0L;
|
long minAmount = minAmountAsCoin.get() != null ? minAmountAsCoin.get().getValue() : 0L;
|
||||||
|
|
|
@ -200,7 +200,7 @@ public class CreateOfferView extends ActivatableViewAndModel<AnchorPane, CreateO
|
||||||
|
|
||||||
private void onPlaceOffer() {
|
private void onPlaceOffer() {
|
||||||
if (model.isAuthenticated()) {
|
if (model.isAuthenticated()) {
|
||||||
Offer offer = model.getOffer();
|
Offer offer = model.createAndGetOffer();
|
||||||
if (model.getShowPlaceOfferConfirmation()) {
|
if (model.getShowPlaceOfferConfirmation()) {
|
||||||
offerDetailsPopup.onPlaceOffer(o -> model.onPlaceOffer(o)).show(offer);
|
offerDetailsPopup.onPlaceOffer(o -> model.onPlaceOffer(o)).show(offer);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -95,6 +95,7 @@ class CreateOfferViewModel extends ActivatableWithDataModel<CreateOfferDataModel
|
||||||
private ChangeListener<Boolean> requestPlaceOfferSuccessListener;
|
private ChangeListener<Boolean> requestPlaceOfferSuccessListener;
|
||||||
private ChangeListener<String> requestPlaceOfferErrorMessageListener;
|
private ChangeListener<String> requestPlaceOfferErrorMessageListener;
|
||||||
private ChangeListener<String> errorMessageListener;
|
private ChangeListener<String> errorMessageListener;
|
||||||
|
private Offer offer;
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -276,7 +277,6 @@ class CreateOfferViewModel extends ActivatableWithDataModel<CreateOfferDataModel
|
||||||
requestPlaceOfferSuccess.removeListener(requestPlaceOfferSuccessListener);
|
requestPlaceOfferSuccess.removeListener(requestPlaceOfferSuccessListener);
|
||||||
errorMessage.removeListener(requestPlaceOfferErrorMessageListener);
|
errorMessage.removeListener(requestPlaceOfferErrorMessageListener);
|
||||||
|
|
||||||
Offer offer = dataModel.getOffer();
|
|
||||||
if (offer != null && errorMessageListener != null)
|
if (offer != null && errorMessageListener != null)
|
||||||
offer.errorMessageProperty().removeListener(errorMessageListener);
|
offer.errorMessageProperty().removeListener(errorMessageListener);
|
||||||
}
|
}
|
||||||
|
@ -476,8 +476,9 @@ class CreateOfferViewModel extends ActivatableWithDataModel<CreateOfferDataModel
|
||||||
return paymentLabel;
|
return paymentLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Offer getOffer() {
|
public Offer createAndGetOffer() {
|
||||||
return dataModel.getOffer();
|
offer = dataModel.createAndGetOffer();
|
||||||
|
return offer;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean hasAcceptedArbitrators() {
|
boolean hasAcceptedArbitrators() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue