mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-08-20 12:18:26 -04:00
security deposit is based on trade amount
This commit is contained in:
parent
7610d65d38
commit
23525d89ee
40 changed files with 215 additions and 158 deletions
|
@ -291,8 +291,8 @@ abstract public class OfferBookView<R extends GridPane, M extends OfferBookViewM
|
|||
depositColumn.setComparator(Comparator.comparing(item -> {
|
||||
boolean isSellOffer = item.getOffer().getDirection() == OfferDirection.SELL;
|
||||
BigInteger deposit = isSellOffer ?
|
||||
item.getOffer().getBuyerSecurityDeposit() :
|
||||
item.getOffer().getSellerSecurityDeposit();
|
||||
item.getOffer().getMaxBuyerSecurityDeposit() :
|
||||
item.getOffer().getMaxSellerSecurityDeposit();
|
||||
|
||||
long amountValue = item.getOffer().getAmount().longValueExact();
|
||||
if ((deposit == null || amountValue == 0)) {
|
||||
|
@ -1015,8 +1015,8 @@ abstract public class OfferBookView<R extends GridPane, M extends OfferBookViewM
|
|||
super.updateItem(item, empty);
|
||||
if (item != null && !empty) {
|
||||
var isSellOffer = item.getOffer().getDirection() == OfferDirection.SELL;
|
||||
var deposit = isSellOffer ? item.getOffer().getBuyerSecurityDeposit() :
|
||||
item.getOffer().getSellerSecurityDeposit();
|
||||
var deposit = isSellOffer ? item.getOffer().getMaxBuyerSecurityDeposit() :
|
||||
item.getOffer().getMaxSellerSecurityDeposit();
|
||||
if (deposit == null) {
|
||||
setText(Res.get("shared.na"));
|
||||
setGraphic(null);
|
||||
|
|
|
@ -460,11 +460,11 @@ class TakeOfferDataModel extends OfferDataModel {
|
|||
}
|
||||
|
||||
public BigInteger getBuyerSecurityDeposit() {
|
||||
return offer.getBuyerSecurityDeposit();
|
||||
return offer.getOfferPayload().getBuyerSecurityDepositForTradeAmount(amount.get());
|
||||
}
|
||||
|
||||
public BigInteger getSellerSecurityDeposit() {
|
||||
return offer.getSellerSecurityDeposit();
|
||||
return offer.getOfferPayload().getSellerSecurityDepositForTradeAmount(amount.get());
|
||||
}
|
||||
|
||||
public boolean isRoundedForAtmCash() {
|
||||
|
|
|
@ -154,11 +154,11 @@ public class ContractWindow extends Overlay<ContractWindow> {
|
|||
VolumeUtil.formatVolumeWithCode(contract.getTradeVolume()));
|
||||
String securityDeposit = Res.getWithColAndCap("shared.buyer") +
|
||||
" " +
|
||||
HavenoUtils.formatXmr(offer.getBuyerSecurityDeposit(), true) +
|
||||
HavenoUtils.formatXmr(offer.getOfferPayload().getBuyerSecurityDepositForTradeAmount(contract.getTradeAmount()), true) +
|
||||
" / " +
|
||||
Res.getWithColAndCap("shared.seller") +
|
||||
" " +
|
||||
HavenoUtils.formatXmr(offer.getSellerSecurityDeposit(), true);
|
||||
HavenoUtils.formatXmr(offer.getOfferPayload().getSellerSecurityDepositForTradeAmount(contract.getTradeAmount()), true);
|
||||
addConfirmationLabelTextField(gridPane, ++rowIndex, Res.get("shared.securityDeposit"), securityDeposit);
|
||||
addConfirmationLabelTextField(gridPane,
|
||||
++rowIndex,
|
||||
|
|
|
@ -334,11 +334,11 @@ public class OfferDetailsWindow extends Overlay<OfferDetailsWindow> {
|
|||
DisplayUtils.formatDateTime(offer.getDate()));
|
||||
String value = Res.getWithColAndCap("shared.buyer") +
|
||||
" " +
|
||||
HavenoUtils.formatXmr(offer.getBuyerSecurityDeposit(), true) +
|
||||
HavenoUtils.formatXmr(offer.getOfferPayload().getMaxBuyerSecurityDeposit(), true) +
|
||||
" / " +
|
||||
Res.getWithColAndCap("shared.seller") +
|
||||
" " +
|
||||
HavenoUtils.formatXmr(offer.getSellerSecurityDeposit(), true);
|
||||
HavenoUtils.formatXmr(offer.getOfferPayload().getMaxSellerSecurityDeposit(), true);
|
||||
addConfirmationLabelLabel(gridPane, ++rowIndex, Res.get("shared.securityDeposit"), value);
|
||||
|
||||
if (countryCode != null && !isF2F)
|
||||
|
|
|
@ -203,11 +203,11 @@ public class TradeDetailsWindow extends Overlay<TradeDetailsWindow> {
|
|||
DisplayUtils.formatDateTime(trade.getDate()));
|
||||
String securityDeposit = Res.getWithColAndCap("shared.buyer") +
|
||||
" " +
|
||||
HavenoUtils.formatXmr(offer.getBuyerSecurityDeposit(), true) +
|
||||
HavenoUtils.formatXmr(offer.getMaxBuyerSecurityDeposit(), true) +
|
||||
" / " +
|
||||
Res.getWithColAndCap("shared.seller") +
|
||||
" " +
|
||||
HavenoUtils.formatXmr(offer.getSellerSecurityDeposit(), true);
|
||||
HavenoUtils.formatXmr(offer.getMaxSellerSecurityDeposit(), true);
|
||||
addConfirmationLabelTextField(gridPane, ++rowIndex, Res.get("shared.securityDeposit"), securityDeposit);
|
||||
|
||||
NodeAddress arbitratorNodeAddress = trade.getArbitratorNodeAddress();
|
||||
|
|
|
@ -210,10 +210,10 @@ public class ClosedTradesView extends ActivatableViewAndModel<VBox, ClosedTrades
|
|||
return "BTC" + tradeFee;
|
||||
}, Comparator.nullsFirst(Comparator.naturalOrder())));
|
||||
buyerSecurityDepositColumn.setComparator(nullsFirstComparing(o ->
|
||||
o.getTradable().getOffer() != null ? o.getTradable().getOffer().getBuyerSecurityDeposit() : null
|
||||
o.getTradable().getOffer() != null ? o.getTradable().getOffer().getMaxBuyerSecurityDeposit() : null
|
||||
));
|
||||
sellerSecurityDepositColumn.setComparator(nullsFirstComparing(o ->
|
||||
o.getTradable().getOffer() != null ? o.getTradable().getOffer().getSellerSecurityDeposit() : null
|
||||
o.getTradable().getOffer() != null ? o.getTradable().getOffer().getMaxSellerSecurityDeposit() : null
|
||||
));
|
||||
stateColumn.setComparator(Comparator.comparing(ClosedTradesListItem::getState));
|
||||
|
||||
|
|
|
@ -95,7 +95,7 @@ class DuplicateOfferDataModel extends MutableOfferDataModel {
|
|||
}
|
||||
|
||||
private double getBuyerSecurityAsPercent(Offer offer) {
|
||||
BigInteger offerBuyerSecurityDeposit = getBoundedBuyerSecurityDeposit(offer.getBuyerSecurityDeposit());
|
||||
BigInteger offerBuyerSecurityDeposit = getBoundedBuyerSecurityDeposit(offer.getMaxBuyerSecurityDeposit());
|
||||
double offerBuyerSecurityDepositAsPercent = CoinUtil.getAsPercentPerBtc(offerBuyerSecurityDeposit,
|
||||
offer.getAmount());
|
||||
return Math.min(offerBuyerSecurityDepositAsPercent,
|
||||
|
|
|
@ -122,13 +122,15 @@ class EditOfferDataModel extends MutableOfferDataModel {
|
|||
else
|
||||
paymentAccount.setSelectedTradeCurrency(selectedTradeCurrency);
|
||||
}
|
||||
|
||||
// TODO: update for XMR to use percent as double?
|
||||
|
||||
// If the security deposit got bounded because it was below the coin amount limit, it can be bigger
|
||||
// by percentage than the restriction. We can't determine the percentage originally entered at offer
|
||||
// creation, so just use the default value as it doesn't matter anyway.
|
||||
double buyerSecurityDepositPercent = CoinUtil.getAsPercentPerBtc(offer.getBuyerSecurityDeposit(), offer.getAmount());
|
||||
double buyerSecurityDepositPercent = CoinUtil.getAsPercentPerBtc(offer.getMaxBuyerSecurityDeposit(), offer.getAmount());
|
||||
if (buyerSecurityDepositPercent > Restrictions.getMaxBuyerSecurityDepositAsPercent()
|
||||
&& offer.getBuyerSecurityDeposit().equals(Restrictions.getMinBuyerSecurityDeposit()))
|
||||
&& offer.getMaxBuyerSecurityDeposit().equals(Restrictions.getMinBuyerSecurityDeposit()))
|
||||
buyerSecurityDepositPct.set(Restrictions.getDefaultBuyerSecurityDepositAsPercent());
|
||||
else
|
||||
buyerSecurityDepositPct.set(buyerSecurityDepositPercent);
|
||||
|
@ -199,8 +201,8 @@ class EditOfferDataModel extends MutableOfferDataModel {
|
|||
offerPayload.getVersionNr(),
|
||||
offerPayload.getBlockHeightAtOfferCreation(),
|
||||
offerPayload.getMakerFee(),
|
||||
offerPayload.getBuyerSecurityDeposit(),
|
||||
offerPayload.getSellerSecurityDeposit(),
|
||||
offerPayload.getBuyerSecurityDepositPct(),
|
||||
offerPayload.getSellerSecurityDepositPct(),
|
||||
offerPayload.getMaxTradeLimit(),
|
||||
offerPayload.getMaxTradePeriod(),
|
||||
offerPayload.isUseAutoClose(),
|
||||
|
|
|
@ -304,8 +304,8 @@ public class PendingTradesViewModel extends ActivatableWithDataModel<PendingTrad
|
|||
Trade trade = dataModel.getTrade();
|
||||
if (offer != null && trade != null && trade.getAmount() != null) {
|
||||
BigInteger securityDeposit = dataModel.isBuyer() ?
|
||||
offer.getBuyerSecurityDeposit()
|
||||
: offer.getSellerSecurityDeposit();
|
||||
offer.getMaxBuyerSecurityDeposit()
|
||||
: offer.getMaxSellerSecurityDeposit();
|
||||
|
||||
BigInteger minSecurityDeposit = dataModel.isBuyer() ?
|
||||
Restrictions.getMinBuyerSecurityDeposit() :
|
||||
|
|
|
@ -85,7 +85,6 @@ import javafx.scene.text.Text;
|
|||
import javafx.util.Callback;
|
||||
import javafx.util.Duration;
|
||||
import lombok.Getter;
|
||||
import org.bitcoinj.core.Coin;
|
||||
import org.fxmisc.easybind.EasyBind;
|
||||
import org.fxmisc.easybind.Subscription;
|
||||
|
||||
|
@ -691,8 +690,8 @@ public abstract class DisputeView extends ActivatableView<VBox, Void> {
|
|||
String paymentMethod = Res.get(contract.getPaymentMethodId());
|
||||
String currency = CurrencyUtil.getNameAndCode(contract.getOfferPayload().getCurrencyCode());
|
||||
String tradeAmount = HavenoUtils.formatXmr(contract.getTradeAmount(), true);
|
||||
String buyerDeposit = Coin.valueOf(contract.getOfferPayload().getBuyerSecurityDeposit()).toFriendlyString();
|
||||
String sellerDeposit = Coin.valueOf(contract.getOfferPayload().getSellerSecurityDeposit()).toFriendlyString();
|
||||
String buyerDeposit = HavenoUtils.formatXmr(contract.getOfferPayload().getBuyerSecurityDepositForTradeAmount(contract.getTradeAmount()), true);
|
||||
String sellerDeposit = HavenoUtils.formatXmr(contract.getOfferPayload().getSellerSecurityDepositForTradeAmount(contract.getTradeAmount()), true);
|
||||
stringBuilder.append("Payment method: ")
|
||||
.append(paymentMethod)
|
||||
.append("\n")
|
||||
|
@ -702,7 +701,7 @@ public abstract class DisputeView extends ActivatableView<VBox, Void> {
|
|||
.append("Trade amount: ")
|
||||
.append(tradeAmount)
|
||||
.append("\n")
|
||||
.append("Buyer/seller security deposit: ")
|
||||
.append("Buyer/seller security deposit %: ")
|
||||
.append(buyerDeposit)
|
||||
.append("/")
|
||||
.append(sellerDeposit)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue