Skip to content

Commit

Permalink
allow offer trigger price outside of current price
Browse files Browse the repository at this point in the history
  • Loading branch information
woodser committed Feb 14, 2025
1 parent 7ba72dc commit 867f72d
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 23 deletions.
15 changes: 14 additions & 1 deletion core/src/main/java/haveno/core/offer/OpenOfferManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -595,6 +595,7 @@ public void activateOpenOffer(OpenOffer openOffer,
offerBookService.activateOffer(offer,
() -> {
openOffer.setState(OpenOffer.State.AVAILABLE);
applyTriggerState(openOffer);
requestPersistence();
log.debug("activateOpenOffer, offerId={}", offer.getId());
resultHandler.handleResult();
Expand All @@ -603,6 +604,13 @@ public void activateOpenOffer(OpenOffer openOffer,
}
}

private void applyTriggerState(OpenOffer openOffer) {
if (openOffer.getState() != OpenOffer.State.AVAILABLE) return;
if (TriggerPriceService.isTriggered(priceFeedService.getMarketPrice(openOffer.getOffer().getCurrencyCode()), openOffer)) {
openOffer.deactivate(true);
}
}

public void deactivateOpenOffer(OpenOffer openOffer,
boolean deactivatedByTrigger,
ResultHandler resultHandler,
Expand Down Expand Up @@ -688,7 +696,12 @@ public void editOpenOfferPublish(Offer editedOffer,
removeOpenOffer(openOffer);

OpenOffer editedOpenOffer = new OpenOffer(editedOffer, triggerPrice, openOffer);
editedOpenOffer.setState(originalState);
if (originalState == OpenOffer.State.DEACTIVATED && openOffer.isDeactivatedByTrigger()) {
editedOpenOffer.setState(OpenOffer.State.AVAILABLE);
applyTriggerState(editedOpenOffer);
} else {
editedOpenOffer.setState(originalState);
}

addOpenOffer(editedOpenOffer);

Expand Down
23 changes: 2 additions & 21 deletions core/src/main/java/haveno/core/util/PriceUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,27 +69,8 @@ public static InputValidator.ValidationResult isTriggerPriceValid(String trigger
if (!result.isValid) {
return result;
}

long triggerPriceAsLong = PriceUtil.getMarketPriceAsLong(triggerPriceAsString, marketPrice.getCurrencyCode());
long marketPriceAsLong = PriceUtil.getMarketPriceAsLong("" + marketPrice.getPrice(), marketPrice.getCurrencyCode());
String marketPriceAsString = FormattingUtils.formatMarketPrice(marketPrice.getPrice(), marketPrice.getCurrencyCode());

boolean isCryptoCurrency = CurrencyUtil.isCryptoCurrency(currencyCode);
if ((isSellOffer && !isCryptoCurrency) || (!isSellOffer && isCryptoCurrency)) {
if (triggerPriceAsLong >= marketPriceAsLong) {
return new InputValidator.ValidationResult(false,
Res.get("createOffer.triggerPrice.invalid.tooHigh", marketPriceAsString));
} else {
return new InputValidator.ValidationResult(true);
}
} else {
if (triggerPriceAsLong <= marketPriceAsLong) {
return new InputValidator.ValidationResult(false,
Res.get("createOffer.triggerPrice.invalid.tooLow", marketPriceAsString));
} else {
return new InputValidator.ValidationResult(true);
}
}

return new InputValidator.ValidationResult(true);
}

public static Price marketPriceToPrice(MarketPrice marketPrice) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -692,7 +692,7 @@ public TableCell<OpenOfferListItem, OpenOfferListItem> call(TableColumn<OpenOffe
AutoTooltipSlideToggleButton checkBox;

private void updateState(@NotNull OpenOffer openOffer) {
if (checkBox != null) checkBox.setSelected(!openOffer.isDeactivated());
if (checkBox != null) checkBox.setSelected(openOffer.getState() == OpenOffer.State.AVAILABLE);
}

@Override
Expand Down

0 comments on commit 867f72d

Please sign in to comment.