Do not persist offer security deposit in user settings

Fixes #4426
Always calculate the suggested security deposit based on asset price
volatility rather than using a persisted value as the minimum.
This commit is contained in:
jmacxx 2020-09-22 11:39:02 -05:00
parent de71811827
commit 3e22b6e98d
No known key found for this signature in database
GPG key ID: 155297BABFE94A1B
2 changed files with 12 additions and 18 deletions

View file

@ -174,7 +174,7 @@ public abstract class MutableOfferDataModel extends OfferDataModel implements Bs
addressEntry = btcWalletService.getOrCreateAddressEntry(offerId, AddressEntry.Context.OFFER_FUNDING);
useMarketBasedPrice.set(preferences.isUsePercentageBasedPrice());
buyerSecurityDeposit.set(preferences.getBuyerSecurityDepositAsPercent(null));
buyerSecurityDeposit.set(Restrictions.getMinBuyerSecurityDepositAsPercent());
btcBalanceListener = new BalanceListener(getAddressEntry().getAddress()) {
@Override
@ -334,10 +334,10 @@ public abstract class MutableOfferDataModel extends OfferDataModel implements Bs
}
private void setSuggestedSecurityDeposit(PaymentAccount paymentAccount) {
var minSecurityDeposit = preferences.getBuyerSecurityDepositAsPercent(getPaymentAccount());
var minSecurityDeposit = Restrictions.getMinBuyerSecurityDepositAsPercent();
try {
if (getTradeCurrency() == null) {
setBuyerSecurityDeposit(minSecurityDeposit, false);
setBuyerSecurityDeposit(minSecurityDeposit);
return;
}
// Get average historic prices over for the prior trade period equaling the lock time
@ -360,7 +360,7 @@ public abstract class MutableOfferDataModel extends OfferDataModel implements Bs
var min = extremes[0];
var max = extremes[1];
if (min == 0d || max == 0d) {
setBuyerSecurityDeposit(minSecurityDeposit, false);
setBuyerSecurityDeposit(minSecurityDeposit);
return;
}
// Suggested deposit is double the trade range over the previous lock time period, bounded by min/max deposit
@ -640,12 +640,8 @@ public abstract class MutableOfferDataModel extends OfferDataModel implements Bs
this.volume.set(volume);
}
void setBuyerSecurityDeposit(double value, boolean persist) {
void setBuyerSecurityDeposit(double value) {
this.buyerSecurityDeposit.set(value);
if (persist) {
// Only expected to persist for manually changed deposit values
preferences.setBuyerSecurityDepositAsPercent(value, getPaymentAccount());
}
}
protected boolean isUseMarketBasedPriceValue() {

View file

@ -421,7 +421,7 @@ public abstract class MutableOfferViewModel<M extends MutableOfferDataModel> ext
securityDepositStringListener = (ov, oldValue, newValue) -> {
if (!ignoreSecurityDepositStringListener) {
if (securityDepositValidator.validate(newValue).isValid) {
setBuyerSecurityDepositToModel(false);
setBuyerSecurityDepositToModel();
dataModel.calculateTotalToPay();
}
updateButtonDisableState();
@ -898,7 +898,7 @@ public abstract class MutableOfferViewModel<M extends MutableOfferDataModel> ext
.width(800)
.actionButtonText(Res.get("createOffer.resetToDefault"))
.onAction(() -> {
dataModel.setBuyerSecurityDeposit(defaultSecurityDeposit, false);
dataModel.setBuyerSecurityDeposit(defaultSecurityDeposit);
ignoreSecurityDepositStringListener = true;
buyerSecurityDeposit.set(FormattingUtils.formatToPercent(dataModel.getBuyerSecurityDeposit().get()));
ignoreSecurityDepositStringListener = false;
@ -915,7 +915,7 @@ public abstract class MutableOfferViewModel<M extends MutableOfferDataModel> ext
}
private void applyBuyerSecurityDepositOnFocusOut() {
setBuyerSecurityDepositToModel(true);
setBuyerSecurityDepositToModel();
ignoreSecurityDepositStringListener = true;
buyerSecurityDeposit.set(FormattingUtils.formatToPercent(dataModel.getBuyerSecurityDeposit().get()));
ignoreSecurityDepositStringListener = false;
@ -1146,13 +1146,11 @@ public abstract class MutableOfferViewModel<M extends MutableOfferDataModel> ext
}
}
private void setBuyerSecurityDepositToModel(boolean persistPreference) {
private void setBuyerSecurityDepositToModel() {
if (buyerSecurityDeposit.get() != null && !buyerSecurityDeposit.get().isEmpty()) {
dataModel.setBuyerSecurityDeposit(ParsingUtils.parsePercentStringToDouble(buyerSecurityDeposit.get()),
persistPreference);
dataModel.setBuyerSecurityDeposit(ParsingUtils.parsePercentStringToDouble(buyerSecurityDeposit.get()));
} else {
dataModel.setBuyerSecurityDeposit(Restrictions.getDefaultBuyerSecurityDepositAsPercent(),
persistPreference);
dataModel.setBuyerSecurityDeposit(Restrictions.getDefaultBuyerSecurityDepositAsPercent());
}
}
@ -1160,7 +1158,7 @@ public abstract class MutableOfferViewModel<M extends MutableOfferDataModel> ext
// If the security deposit in the model is not valid percent
String value = FormattingUtils.formatToPercent(dataModel.getBuyerSecurityDeposit().get());
if (!securityDepositValidator.validate(value).isValid) {
dataModel.setBuyerSecurityDeposit(Restrictions.getDefaultBuyerSecurityDepositAsPercent(), false);
dataModel.setBuyerSecurityDeposit(Restrictions.getDefaultBuyerSecurityDepositAsPercent());
}
}