diff --git a/core/src/main/java/bisq/core/account/witness/AccountAgeWitnessService.java b/core/src/main/java/bisq/core/account/witness/AccountAgeWitnessService.java index b634f01a8d..8eabd852ea 100644 --- a/core/src/main/java/bisq/core/account/witness/AccountAgeWitnessService.java +++ b/core/src/main/java/bisq/core/account/witness/AccountAgeWitnessService.java @@ -414,14 +414,16 @@ public class AccountAgeWitnessService { AccountAgeWitness accountAgeWitness, AccountAge accountAgeCategory, OfferPayload.Direction direction, - PaymentMethod paymentMethod) { + PaymentMethod paymentMethod, + boolean isMyLimit) { if (CurrencyUtil.isCryptoCurrency(currencyCode) || !PaymentMethod.hasChargebackRisk(paymentMethod, currencyCode) || direction == OfferPayload.Direction.SELL) { return maxTradeLimit.value; } - long limit = OfferRestrictions.TOLERATED_SMALL_TRADE_AMOUNT.value; + long limit = isMyLimit ? OfferRestrictions.TOLERATED_SMALL_AMOUNT_SELF.value : + OfferRestrictions.TOLERATED_SMALL_AMOUNT_PEER.value; var factor = signedBuyFactor(accountAgeCategory); if (factor > 0) { limit = MathUtils.roundDoubleToLong((double) maxTradeLimit.value * factor); @@ -509,7 +511,8 @@ public class AccountAgeWitnessService { accountAgeWitness, accountAgeCategory, direction, - paymentAccount.getPaymentMethod()); + paymentAccount.getPaymentMethod(), + true); } /////////////////////////////////////////////////////////////////////////////////////////// @@ -571,14 +574,14 @@ public class AccountAgeWitnessService { checkNotNull(offer); // In case we don't find the witness we check if the trade amount is above the - // TOLERATED_SMALL_TRADE_AMOUNT (0.01 BTC) and only in that case return false. + // TOLERATED_SMALL_AMOUNT_PEER and only in that case return false. return findWitness(offer) .map(witness -> verifyPeersTradeLimit(offer, tradeAmount, witness, new Date(), errorMessageHandler)) - .orElse(isToleratedSmalleAmount(tradeAmount)); + .orElse(isPeerToleratedSmallAmount(tradeAmount)); } - private boolean isToleratedSmalleAmount(Coin tradeAmount) { - return tradeAmount.value <= OfferRestrictions.TOLERATED_SMALL_TRADE_AMOUNT.value; + private boolean isPeerToleratedSmallAmount(Coin tradeAmount) { + return tradeAmount.value <= OfferRestrictions.TOLERATED_SMALL_AMOUNT_PEER.value; } @@ -642,7 +645,7 @@ public class AccountAgeWitnessService { OfferPayload.Direction direction = offer.isMyOffer(keyRing) ? offer.getMirroredDirection() : offer.getDirection(); peersCurrentTradeLimit = getTradeLimit(defaultMaxTradeLimit, currencyCode, peersWitness, - accountAgeCategory, direction, offer.getPaymentMethod()); + accountAgeCategory, direction, offer.getPaymentMethod(), false); } // Makers current trade limit cannot be smaller than that in the offer boolean result = tradeAmount.value <= peersCurrentTradeLimit; diff --git a/core/src/main/java/bisq/core/offer/OfferRestrictions.java b/core/src/main/java/bisq/core/offer/OfferRestrictions.java index 856b7a6e20..c052c5bc4f 100644 --- a/core/src/main/java/bisq/core/offer/OfferRestrictions.java +++ b/core/src/main/java/bisq/core/offer/OfferRestrictions.java @@ -36,7 +36,11 @@ public class OfferRestrictions { return new Date().after(REQUIRE_UPDATE_DATE); } - public static Coin TOLERATED_SMALL_TRADE_AMOUNT = Coin.parseCoin("0.01"); + // These values should generally be the same. However, to avoid voiding offers created with a higher limit + // the TOLERATED_SMALL_AMOUNT_PEER value can be set to the higher limit to allow those offers to be taken + // for a while. + public static Coin TOLERATED_SMALL_AMOUNT_SELF = Coin.parseCoin("0.0025"); + public static Coin TOLERATED_SMALL_AMOUNT_PEER = Coin.parseCoin("0.01"); static boolean hasOfferMandatoryCapability(Offer offer, Capability mandatoryCapability) { Map extraDataMap = offer.getOfferPayload().getExtraDataMap(); diff --git a/desktop/src/main/java/bisq/desktop/main/account/content/fiataccounts/FiatAccountsView.java b/desktop/src/main/java/bisq/desktop/main/account/content/fiataccounts/FiatAccountsView.java index 7330a398de..44a9d9e601 100644 --- a/desktop/src/main/java/bisq/desktop/main/account/content/fiataccounts/FiatAccountsView.java +++ b/desktop/src/main/java/bisq/desktop/main/account/content/fiataccounts/FiatAccountsView.java @@ -66,6 +66,7 @@ import bisq.desktop.util.validation.HalCashValidator; import bisq.desktop.util.validation.IBANValidator; import bisq.desktop.util.validation.InteracETransferValidator; import bisq.desktop.util.validation.JapanBankTransferValidator; +import bisq.desktop.util.validation.LengthValidator; import bisq.desktop.util.validation.MoneyBeamValidator; import bisq.desktop.util.validation.PerfectMoneyValidator; import bisq.desktop.util.validation.PopmoneyValidator; @@ -76,7 +77,6 @@ import bisq.desktop.util.validation.TransferwiseValidator; import bisq.desktop.util.validation.USPostalMoneyOrderValidator; import bisq.desktop.util.validation.UpholdValidator; import bisq.desktop.util.validation.WeChatPayValidator; -import bisq.desktop.util.validation.LengthValidator; import bisq.core.account.witness.AccountAgeWitnessService; import bisq.core.locale.Res; @@ -271,7 +271,7 @@ public class FiatAccountsView extends PaymentAccountsView ext if (minAmount.get() != null) minAmountValidationResult.set(isBtcInputValid(minAmount.get())); - } else if (amount.get() != null && btcValidator.getMaxTradeLimit() != null && btcValidator.getMaxTradeLimit().value == OfferRestrictions.TOLERATED_SMALL_TRADE_AMOUNT.value) { + } else if (amount.get() != null && btcValidator.getMaxTradeLimit() != null && btcValidator.getMaxTradeLimit().value == OfferRestrictions.TOLERATED_SMALL_AMOUNT_SELF.value) { amount.set(btcFormatter.formatCoin(btcValidator.getMaxTradeLimit())); new Popup().information(Res.get("popup.warning.tradeLimitDueAccountAgeRestriction.buyer", - btcFormatter.formatCoinWithCode(OfferRestrictions.TOLERATED_SMALL_TRADE_AMOUNT), + btcFormatter.formatCoinWithCode(OfferRestrictions.TOLERATED_SMALL_AMOUNT_SELF), Res.get("offerbook.warning.newVersionAnnouncement"))) .width(900) .show(); diff --git a/desktop/src/main/java/bisq/desktop/main/offer/offerbook/OfferBookView.java b/desktop/src/main/java/bisq/desktop/main/offer/offerbook/OfferBookView.java index 14c78bf5b9..df2bcf1169 100644 --- a/desktop/src/main/java/bisq/desktop/main/offer/offerbook/OfferBookView.java +++ b/desktop/src/main/java/bisq/desktop/main/offer/offerbook/OfferBookView.java @@ -1117,7 +1117,7 @@ public class OfferBookView extends ActivatableViewAndModel im if (dataModel.wouldCreateDustForMaker()) amountValidationResult.set(new InputValidator.ValidationResult(false, Res.get("takeOffer.validation.amountLargerThanOfferAmountMinusFee"))); - } else if (btcValidator.getMaxTradeLimit() != null && btcValidator.getMaxTradeLimit().value == OfferRestrictions.TOLERATED_SMALL_TRADE_AMOUNT.value) { + } else if (btcValidator.getMaxTradeLimit() != null && btcValidator.getMaxTradeLimit().value == OfferRestrictions.TOLERATED_SMALL_AMOUNT_PEER.value) { if (dataModel.getDirection() == OfferPayload.Direction.BUY) { new Popup().information(Res.get("popup.warning.tradeLimitDueAccountAgeRestriction.seller", - btcFormatter.formatCoinWithCode(OfferRestrictions.TOLERATED_SMALL_TRADE_AMOUNT), + btcFormatter.formatCoinWithCode(OfferRestrictions.TOLERATED_SMALL_AMOUNT_PEER), Res.get("offerbook.warning.newVersionAnnouncement"))) .width(900) .show(); } else { new Popup().information(Res.get("popup.warning.tradeLimitDueAccountAgeRestriction.buyer", - btcFormatter.formatCoinWithCode(OfferRestrictions.TOLERATED_SMALL_TRADE_AMOUNT), + btcFormatter.formatCoinWithCode(OfferRestrictions.TOLERATED_SMALL_AMOUNT_PEER), Res.get("offerbook.warning.newVersionAnnouncement"))) .width(900) .show();