support goldback (XGB)

This commit is contained in:
woodser 2023-09-03 10:45:55 -04:00
parent 6a49fffb38
commit 9c2308f7a3
23 changed files with 135 additions and 121 deletions

View file

@ -40,8 +40,6 @@ import haveno.core.user.User;
import haveno.core.util.FormattingUtils;
import haveno.core.util.ParsingUtils;
import haveno.core.util.PriceUtil;
import haveno.core.util.validation.NonFiatPriceValidator;
import haveno.core.util.validation.FiatPriceValidator;
import haveno.core.util.validation.InputValidator;
import haveno.desktop.common.view.ActivatableView;
import haveno.desktop.common.view.FxmlView;
@ -313,9 +311,8 @@ public class MobileNotificationsView extends ActivatableView<GridPane, Void> {
TradeCurrency selectedItem = currencyComboBox.getSelectionModel().getSelectedItem();
if (selectedItem != null) {
selectedPriceAlertTradeCurrency = selectedItem.getCode();
boolean isFiatCurrency = CurrencyUtil.isFiatCurrency(selectedPriceAlertTradeCurrency);
priceAlertHighInputTextField.setValidator(isFiatCurrency ? new FiatPriceValidator() : new NonFiatPriceValidator());
priceAlertLowInputTextField.setValidator(isFiatCurrency ? new FiatPriceValidator() : new NonFiatPriceValidator());
priceAlertHighInputTextField.setValidator(PriceUtil.getPriceValidator(selectedPriceAlertTradeCurrency));
priceAlertLowInputTextField.setValidator(PriceUtil.getPriceValidator(selectedPriceAlertTradeCurrency));
} else {
selectedPriceAlertTradeCurrency = null;
}

View file

@ -257,15 +257,15 @@ class OfferBookChartViewModel extends ActivatableViewModel {
}
public int getMaxNumberOfPriceZeroDecimalsToColorize(Offer offer) {
return offer.isFiatOffer()
? GUIUtil.FIAT_DECIMALS_WITH_ZEROS
: GUIUtil.CRYPTOS_DECIMALS_WITH_ZEROS;
return CurrencyUtil.isVolumeRoundedToNearestUnit(offer.getCurrencyCode())
? GUIUtil.NUM_DECIMALS_UNIT
: GUIUtil.NUM_DECIMALS_PRECISE;
}
public int getZeroDecimalsForPrice(Offer offer) {
return offer.isFiatOffer()
? GUIUtil.FIAT_PRICE_DECIMALS_WITH_ZEROS
: GUIUtil.CRYPTOS_DECIMALS_WITH_ZEROS;
return CurrencyUtil.isPricePrecise(offer.getCurrencyCode())
? GUIUtil.NUM_DECIMALS_PRECISE
: GUIUtil.NUM_DECIMALS_PRICE_LESS_PRECISE;
}
public String getPrice(Offer offer) {

View file

@ -32,7 +32,6 @@ import haveno.core.offer.OfferDirection;
import haveno.core.offer.OfferUtil;
import haveno.core.offer.OpenOfferManager;
import haveno.core.payment.PaymentAccount;
import haveno.core.payment.payload.PaymentMethod;
import haveno.core.provider.price.PriceFeedService;
import haveno.core.trade.HavenoUtils;
import haveno.core.trade.handlers.TransactionResultHandler;
@ -685,8 +684,4 @@ public abstract class MutableOfferDataModel extends OfferDataModel {
public void setReserveExactAmount(boolean reserveExactAmount) {
this.reserveExactAmount = reserveExactAmount;
}
public boolean isUsingRoundedAtmCashAccount() {
return PaymentMethod.isRoundedForAtmCash(paymentAccount.getPaymentMethod().getId());
}
}

View file

@ -47,8 +47,8 @@ import haveno.core.util.PriceUtil;
import haveno.core.util.VolumeUtil;
import haveno.core.util.coin.CoinFormatter;
import haveno.core.util.coin.CoinUtil;
import haveno.core.util.validation.NonFiatPriceValidator;
import haveno.core.util.validation.FiatPriceValidator;
import haveno.core.util.validation.AmountValidator8Decimals;
import haveno.core.util.validation.AmountValidator4Decimals;
import haveno.core.util.validation.InputValidator;
import haveno.core.util.validation.MonetaryValidator;
import haveno.core.xmr.wallet.Restrictions;
@ -95,8 +95,8 @@ public abstract class MutableOfferViewModel<M extends MutableOfferDataModel> ext
private final Preferences preferences;
protected final CoinFormatter btcFormatter;
private final FiatVolumeValidator fiatVolumeValidator;
private final FiatPriceValidator fiatPriceValidator;
private final NonFiatPriceValidator nonFiatPriceValidator;
private final AmountValidator4Decimals amountValidator4Decimals;
private final AmountValidator8Decimals amountValidator8Decimals;
protected final OfferUtil offerUtil;
private String amountDescription;
@ -184,8 +184,8 @@ public abstract class MutableOfferViewModel<M extends MutableOfferDataModel> ext
@Inject
public MutableOfferViewModel(M dataModel,
FiatVolumeValidator fiatVolumeValidator,
FiatPriceValidator fiatPriceValidator,
NonFiatPriceValidator nonFiatPriceValidator,
AmountValidator4Decimals amountValidator4Decimals,
AmountValidator8Decimals amountValidator8Decimals,
XmrValidator btcValidator,
SecurityDepositValidator securityDepositValidator,
PriceFeedService priceFeedService,
@ -197,8 +197,8 @@ public abstract class MutableOfferViewModel<M extends MutableOfferDataModel> ext
super(dataModel);
this.fiatVolumeValidator = fiatVolumeValidator;
this.fiatPriceValidator = fiatPriceValidator;
this.nonFiatPriceValidator = nonFiatPriceValidator;
this.amountValidator4Decimals = amountValidator4Decimals;
this.amountValidator8Decimals = amountValidator8Decimals;
this.xmrValidator = btcValidator;
this.securityDepositValidator = securityDepositValidator;
this.priceFeedService = priceFeedService;
@ -763,7 +763,7 @@ public abstract class MutableOfferViewModel<M extends MutableOfferDataModel> ext
InputValidator.ValidationResult result = PriceUtil.isTriggerPriceValid(triggerPriceAsString,
marketPrice,
dataModel.isSellOffer(),
dataModel.isTraditionalCurrency()
dataModel.getCurrencyCode()
);
triggerPriceValidationResult.set(result);
updateButtonDisableState();
@ -1175,16 +1175,20 @@ public abstract class MutableOfferViewModel<M extends MutableOfferDataModel> ext
return getVolumeValidator().validate(input);
}
// TODO: replace with PriceUtils and VolumeUtils?
private MonetaryValidator getPriceValidator() {
return CurrencyUtil.isFiatCurrency(getTradeCurrency().getCode()) ? fiatPriceValidator : nonFiatPriceValidator;
return CurrencyUtil.isPricePrecise(getTradeCurrency().getCode()) ? amountValidator8Decimals : amountValidator4Decimals;
}
private MonetaryValidator getVolumeValidator() {
final String code = getTradeCurrency().getCode();
if (CurrencyUtil.isFiatCurrency(code)) {
return fiatVolumeValidator;
} else if (CurrencyUtil.isVolumeRoundedToNearestUnit(code)) {
return amountValidator4Decimals;
} else {
return nonFiatPriceValidator;
return amountValidator8Decimals;
}
}

View file

@ -27,8 +27,8 @@ import haveno.core.provider.price.PriceFeedService;
import haveno.core.user.Preferences;
import haveno.core.util.FormattingUtils;
import haveno.core.util.coin.CoinFormatter;
import haveno.core.util.validation.NonFiatPriceValidator;
import haveno.core.util.validation.FiatPriceValidator;
import haveno.core.util.validation.AmountValidator8Decimals;
import haveno.core.util.validation.AmountValidator4Decimals;
import haveno.desktop.Navigation;
import haveno.desktop.common.model.ViewModel;
import haveno.desktop.main.offer.MutableOfferViewModel;
@ -40,8 +40,8 @@ class CreateOfferViewModel extends MutableOfferViewModel<CreateOfferDataModel> i
@Inject
public CreateOfferViewModel(CreateOfferDataModel dataModel,
FiatVolumeValidator fiatVolumeValidator,
FiatPriceValidator fiatPriceValidator,
NonFiatPriceValidator nonFiatPriceValidator,
AmountValidator4Decimals priceValidator4Decimals,
AmountValidator8Decimals priceValidator8Decimals,
XmrValidator btcValidator,
SecurityDepositValidator securityDepositValidator,
PriceFeedService priceFeedService,
@ -52,8 +52,8 @@ class CreateOfferViewModel extends MutableOfferViewModel<CreateOfferDataModel> i
OfferUtil offerUtil) {
super(dataModel,
fiatVolumeValidator,
fiatPriceValidator,
nonFiatPriceValidator,
priceValidator4Decimals,
priceValidator8Decimals,
btcValidator,
securityDepositValidator,
priceFeedService,

View file

@ -427,7 +427,7 @@ abstract class OfferBookViewModel extends ActivatableViewModel {
}
int getNumberOfDecimalsForVolume(OfferBookListItem item) {
return item.getOffer().isFiatOffer() ? GUIUtil.FIAT_DECIMALS_WITH_ZEROS : GUIUtil.CRYPTOS_DECIMALS_WITH_ZEROS;
return CurrencyUtil.isVolumeRoundedToNearestUnit(item.getOffer().getCurrencyCode()) ? GUIUtil.NUM_DECIMALS_UNIT : GUIUtil.NUM_DECIMALS_PRECISE;
}
String getPaymentMethod(OfferBookListItem item) {

View file

@ -311,9 +311,7 @@ class TakeOfferViewModel extends ActivatableWithDataModel<TakeOfferDataModel> im
if (!isAmountEqualMinAmount(dataModel.getAmount().get()) && (!isAmountEqualMaxAmount(dataModel.getAmount().get()))) {
// We only apply the rounding if the amount is variable (minAmount is lower as amount).
// Otherwise we could get an amount lower then the minAmount set by rounding
BigInteger roundedAmount = dataModel.getOffer().isFiatOffer() ?
CoinUtil.getRoundedFiatAmount(dataModel.getAmount().get(), tradePrice, maxTradeLimit) :
CoinUtil.getRoundedTraditionalAmount(dataModel.getAmount().get(), tradePrice, maxTradeLimit);
BigInteger roundedAmount = CoinUtil.getRoundedAmount(dataModel.getAmount().get(), tradePrice, maxTradeLimit, dataModel.getOffer().getCurrencyCode(), dataModel.getOffer().getPaymentMethodId());
dataModel.applyAmount(roundedAmount);
}
amount.set(HavenoUtils.formatXmr(dataModel.getAmount().get()));
@ -582,9 +580,7 @@ class TakeOfferViewModel extends ActivatableWithDataModel<TakeOfferDataModel> im
&& !isAmountEqualMinAmount(amount) && !isAmountEqualMaxAmount(amount)) {
// We only apply the rounding if the amount is variable (minAmount is lower as amount).
// Otherwise we could get an amount lower then the minAmount set by rounding
amount = dataModel.getOffer().isFiatOffer() ?
CoinUtil.getRoundedFiatAmount(amount, price, maxTradeLimit) :
CoinUtil.getRoundedTraditionalAmount(amount, price, maxTradeLimit);
amount = CoinUtil.getRoundedAmount(dataModel.getAmount().get(), price, maxTradeLimit, dataModel.getOffer().getCurrencyCode(), dataModel.getOffer().getPaymentMethodId());
}
}
dataModel.applyAmount(amount);

View file

@ -29,8 +29,8 @@ import haveno.core.provider.price.PriceFeedService;
import haveno.core.user.Preferences;
import haveno.core.util.FormattingUtils;
import haveno.core.util.coin.CoinFormatter;
import haveno.core.util.validation.NonFiatPriceValidator;
import haveno.core.util.validation.FiatPriceValidator;
import haveno.core.util.validation.AmountValidator8Decimals;
import haveno.core.util.validation.AmountValidator4Decimals;
import haveno.desktop.Navigation;
import haveno.desktop.main.offer.MutableOfferViewModel;
import lombok.extern.slf4j.Slf4j;
@ -43,8 +43,8 @@ class DuplicateOfferViewModel extends MutableOfferViewModel<DuplicateOfferDataMo
@Inject
public DuplicateOfferViewModel(DuplicateOfferDataModel dataModel,
FiatVolumeValidator fiatVolumeValidator,
FiatPriceValidator fiatPriceValidator,
NonFiatPriceValidator nonFiatPriceValidator,
AmountValidator4Decimals priceValidator4Decimals,
AmountValidator8Decimals priceValidator8Decimals,
XmrValidator btcValidator,
SecurityDepositValidator securityDepositValidator,
PriceFeedService priceFeedService,
@ -55,8 +55,8 @@ class DuplicateOfferViewModel extends MutableOfferViewModel<DuplicateOfferDataMo
OfferUtil offerUtil) {
super(dataModel,
fiatVolumeValidator,
fiatPriceValidator,
nonFiatPriceValidator,
priceValidator4Decimals,
priceValidator8Decimals,
btcValidator,
securityDepositValidator,
priceFeedService,

View file

@ -31,8 +31,8 @@ import haveno.core.user.Preferences;
import haveno.core.util.FormattingUtils;
import haveno.core.util.PriceUtil;
import haveno.core.util.coin.CoinFormatter;
import haveno.core.util.validation.NonFiatPriceValidator;
import haveno.core.util.validation.FiatPriceValidator;
import haveno.core.util.validation.AmountValidator8Decimals;
import haveno.core.util.validation.AmountValidator4Decimals;
import haveno.desktop.Navigation;
import haveno.desktop.main.offer.MutableOfferViewModel;
@ -43,8 +43,8 @@ class EditOfferViewModel extends MutableOfferViewModel<EditOfferDataModel> {
@Inject
public EditOfferViewModel(EditOfferDataModel dataModel,
FiatVolumeValidator fiatVolumeValidator,
FiatPriceValidator fiatPriceValidator,
NonFiatPriceValidator nonFiatPriceValidator,
AmountValidator4Decimals priceValidator4Decimals,
AmountValidator8Decimals priceValidator8Decimals,
XmrValidator btcValidator,
SecurityDepositValidator securityDepositValidator,
PriceFeedService priceFeedService,
@ -55,8 +55,8 @@ class EditOfferViewModel extends MutableOfferViewModel<EditOfferDataModel> {
OfferUtil offerUtil) {
super(dataModel,
fiatVolumeValidator,
fiatPriceValidator,
nonFiatPriceValidator,
priceValidator4Decimals,
priceValidator8Decimals,
btcValidator,
securityDepositValidator,
priceFeedService,