diff --git a/core/src/main/java/io/bisq/core/btc/BaseCurrencyNetwork.java b/core/src/main/java/io/bisq/core/btc/BaseCurrencyNetwork.java index e20c9374f0..fc61a380bd 100644 --- a/core/src/main/java/io/bisq/core/btc/BaseCurrencyNetwork.java +++ b/core/src/main/java/io/bisq/core/btc/BaseCurrencyNetwork.java @@ -79,16 +79,15 @@ public enum BaseCurrencyNetwork { public Coin getDefaultMinFee() { switch (BisqEnvironment.getBaseCurrencyNetwork().getCurrencyCode()) { case "BTC": - return org.bitcoinj.core.Transaction.REFERENCE_DEFAULT_MIN_TX_FEE; + return FeeService.BTC_REFERENCE_DEFAULT_MIN_TX_FEE; case "LTC": - return Coin.valueOf(FeeService.LTC_DEFAULT_TX_FEE); + return FeeService.LTC_REFERENCE_DEFAULT_MIN_TX_FEE; case "DOGE": - return Coin.valueOf(FeeService.DOGE_DEFAULT_TX_FEE); + return FeeService.DOGE_REFERENCE_DEFAULT_MIN_TX_FEE; case "DASH": - return Coin.valueOf(FeeService.DASH_DEFAULT_TX_FEE); + return FeeService.DASH_REFERENCE_DEFAULT_MIN_TX_FEE; default: - // TODO check what is the right fee at DOGE - return Coin.valueOf(100000); + throw new RuntimeException("Unsupported code at getDefaultMinFee: " + BisqEnvironment.getBaseCurrencyNetwork().getCurrencyCode()); } } } diff --git a/core/src/main/java/io/bisq/core/btc/Restrictions.java b/core/src/main/java/io/bisq/core/btc/Restrictions.java index c1b734e4de..0857458abf 100644 --- a/core/src/main/java/io/bisq/core/btc/Restrictions.java +++ b/core/src/main/java/io/bisq/core/btc/Restrictions.java @@ -57,7 +57,7 @@ public class Restrictions { case "DOGE": MIN_TRADE_AMOUNT = Coin.valueOf(1_000_000_000L); // 0.03 EUR at DOGE price 0.003 EUR; case "DASH": - MIN_TRADE_AMOUNT = Coin.valueOf(20_000L); // 0.03 EUR at DOGE price 0.003 EUR; + MIN_TRADE_AMOUNT = Coin.valueOf(20_000L); // 0.03 EUR at @ 150 EUR/DASH; break; } return MIN_TRADE_AMOUNT; @@ -76,7 +76,7 @@ public class Restrictions { MAX_BUYER_SECURITY_DEPOSIT = Coin.valueOf(20_000_000_000_000L); // 500 EUR @ 0.0025 EUR/DOGE; break; case "DASH": - MAX_BUYER_SECURITY_DEPOSIT = Coin.valueOf(333_333_333L); // 500 EUR @ 0.0025 EUR/DOGE; + MAX_BUYER_SECURITY_DEPOSIT = Coin.valueOf(300_000_000L); // 450 EUR @ 150 EUR/DASH; break; } @@ -90,13 +90,13 @@ public class Restrictions { MIN_BUYER_SECURITY_DEPOSIT = Coin.valueOf(100_000); // 2.5 EUR @ 2500 EUR/BTC break; case "LTC": - MIN_BUYER_SECURITY_DEPOSIT = Coin.valueOf(6_000_000); // 2.5 EUR @ 40 EUR/LTC + MIN_BUYER_SECURITY_DEPOSIT = Coin.valueOf(6_000_000); // 2.4 EUR @ 40 EUR/LTC break; case "DOGE": MIN_BUYER_SECURITY_DEPOSIT = Coin.valueOf(100_000_000_000L); // 2.5 EUR @ 0.0025 EUR/DOGE; break; case "DASH": - MIN_BUYER_SECURITY_DEPOSIT = Coin.valueOf(1_666_666L); // 2.5 EUR @ 0.0025 EUR/DOGE; + MIN_BUYER_SECURITY_DEPOSIT = Coin.valueOf(1_500_000L); // 2.5 EUR @ 150 EUR/DASH; break; } return MIN_BUYER_SECURITY_DEPOSIT; @@ -134,7 +134,7 @@ public class Restrictions { SELLER_SECURITY_DEPOSIT = Coin.valueOf(1_000_000_000_000L); // 25 EUR @ 0.0025 EUR/DOGE; break; case "DASH": - SELLER_SECURITY_DEPOSIT = Coin.valueOf(16_666_666L); // 25 EUR @ 150 EUR/DASH; + SELLER_SECURITY_DEPOSIT = Coin.valueOf(15_000_000L); // 25 EUR @ 150 EUR/DASH; break; } return SELLER_SECURITY_DEPOSIT; diff --git a/core/src/main/java/io/bisq/core/payment/payload/PaymentMethod.java b/core/src/main/java/io/bisq/core/payment/payload/PaymentMethod.java index f2bcdc388a..383cdaf4b2 100644 --- a/core/src/main/java/io/bisq/core/payment/payload/PaymentMethod.java +++ b/core/src/main/java/io/bisq/core/payment/payload/PaymentMethod.java @@ -139,8 +139,8 @@ public final class PaymentMethod implements PersistablePayload, Comparable { break; case "DASH": // av. price June 2017: 150 EUR/DASH - maxTradeLimitMidRisk = Coin.parseCoin("8"); - maxTradeLimitLowRisk = Coin.parseCoin("16"); + maxTradeLimitMidRisk = Coin.parseCoin("10"); + maxTradeLimitLowRisk = Coin.parseCoin("20"); break; default: diff --git a/core/src/main/java/io/bisq/core/provider/fee/FeeService.java b/core/src/main/java/io/bisq/core/provider/fee/FeeService.java index 0121f25245..fdf51f057f 100644 --- a/core/src/main/java/io/bisq/core/provider/fee/FeeService.java +++ b/core/src/main/java/io/bisq/core/provider/fee/FeeService.java @@ -29,6 +29,7 @@ import javafx.beans.property.IntegerProperty; import javafx.beans.property.ReadOnlyIntegerProperty; import javafx.beans.property.SimpleIntegerProperty; import org.bitcoinj.core.Coin; +import org.bitcoinj.core.Transaction; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,15 +43,23 @@ import static com.google.common.base.Preconditions.checkNotNull; public class FeeService { private static final Logger log = LoggerFactory.getLogger(FeeService.class); - // https://litecoin.info/Transaction_fees - //0.001 (LTC)/kb -> 0.00100000 sat/kb -> 100 sat/byte - public static final long LTC_DEFAULT_TX_FEE = 500; // min fee is 0.001 LTC 200 bytes with 500 -> 100000 - public static final long BTC_DEFAULT_TX_FEE = 200; - public static final long DOGE_DEFAULT_TX_FEE = 500000; // min tx size is about 200 bytes -> 1 DOGE - public static final long DASH_DEFAULT_TX_FEE = 10000; // 10000 now, 1000 in sept 2017 + // fixed min fee + public static final Coin BTC_REFERENCE_DEFAULT_MIN_TX_FEE = Transaction.REFERENCE_DEFAULT_MIN_TX_FEE; // 5000 + // https://litecoin.info/Transaction_fees min fee is 100_000 + public static final Coin LTC_REFERENCE_DEFAULT_MIN_TX_FEE = Coin.valueOf(100_000); + // min fee is 1 DOGE + public static final Coin DOGE_REFERENCE_DEFAULT_MIN_TX_FEE = Coin.valueOf(1_000_000_000); + //TODO check + // min tx fee per tx is 10000 now, 1000 in sept 2017 + public static final Coin DASH_REFERENCE_DEFAULT_MIN_TX_FEE = Coin.valueOf(10_000); + + // DEFAULT_TX_FEE used in FeeRequestService for non-BTC currencies and for BTC only if we cannot access fee service + // fees are per byte + public static final long BTC_DEFAULT_TX_FEE = 200; // fees are between 50-400 sat/byte so we try to stay in average + public static final long LTC_DEFAULT_TX_FEE = LTC_REFERENCE_DEFAULT_MIN_TX_FEE.value / 200; + public static final long DOGE_DEFAULT_TX_FEE = DOGE_REFERENCE_DEFAULT_MIN_TX_FEE.value / 200; // 200 bytes tx -> 200*5_000_000L=1_000_000_000 (1 DOGE) + public static final long DASH_DEFAULT_TX_FEE = DASH_REFERENCE_DEFAULT_MIN_TX_FEE.value / 200; // 200 bytes tx -> 200*50=10000 - // Dust limit for LTC is 100 000 sat - // https://litecoin.info/Transaction_fees private static long MIN_MAKER_FEE_IN_BASE_CUR; private static long MIN_TAKER_FEE_IN_BASE_CUR; private static long DEFAULT_MAKER_FEE_IN_BASE_CUR; @@ -85,36 +94,38 @@ public class FeeService { baseCurrencyCode = BisqEnvironment.getBaseCurrencyNetwork().getCurrencyCode(); /* How to calculate: - def nr_satoshi(price_per_one, target_price): - return target_price*100000000/price_per_one + MIN_MAKER_FEE_IN_BASE_CUR = target fiat price * 100000000 / price (in btc: 0.5*100000000/2500) + DEFAULT_MAKER_FEE_IN_BASE_CUR = target fiat price * (100000000 / price) / maxTradeAmount + (in btc: 5*100000000/2500 / 1) + (in ltc: 5*100000000/40 / 50) */ switch (baseCurrencyCode) { case "BTC": - MIN_MAKER_FEE_IN_BASE_CUR = 20_000; // 0.5 USD at BTC price 2500 USD for 1 BTC + MIN_MAKER_FEE_IN_BASE_CUR = 20_000; // 0.5 USD at BTC price 2500 USD MIN_TAKER_FEE_IN_BASE_CUR = 20_000; - DEFAULT_MAKER_FEE_IN_BASE_CUR = 200_000; // 5 USD at BTC price 2500 USD + DEFAULT_MAKER_FEE_IN_BASE_CUR = 200_000; // 5 USD at BTC price 2500 USD for 1 BTC (maxTradeAmount) DEFAULT_TAKER_FEE_IN_BASE_CUR = 300_000; // 7.5 USD at BTC price 2500 USD txFeePerByte = BTC_DEFAULT_TX_FEE; break; case "LTC": - MIN_MAKER_FEE_IN_BASE_CUR = 1_200_000; // 0.5 USD at LTC price 40 USD for 50 LTC + MIN_MAKER_FEE_IN_BASE_CUR = 1_200_000; // 0.5 USD at LTC price 40 USD MIN_TAKER_FEE_IN_BASE_CUR = 1_200_000; - DEFAULT_MAKER_FEE_IN_BASE_CUR = 240_000; // 5 USD at LTC price 40 USD + DEFAULT_MAKER_FEE_IN_BASE_CUR = 240_000; // 5 USD at LTC price 40 USD for 50 LTC (maxTradeAmount) DEFAULT_TAKER_FEE_IN_BASE_CUR = 360_000; // 7.5 USD at LTC price 40 USD txFeePerByte = LTC_DEFAULT_TX_FEE; break; case "DOGE": - MIN_MAKER_FEE_IN_BASE_CUR = 32_000; // 0.5 USD at DOGE price 0.003 USD 80_000_000_000L - MIN_TAKER_FEE_IN_BASE_CUR = 32_000; - DEFAULT_MAKER_FEE_IN_BASE_CUR = 320_000; // 5 USD at DOGE price 0.003 USD 800_000_000_000L - DEFAULT_TAKER_FEE_IN_BASE_CUR = 480_000; // 7.5 USD at DOGE price 0.003 USD 1_200_000_000_000L + MIN_MAKER_FEE_IN_BASE_CUR = 20_000_000_000L; // 0.5 USD at DOGE price 0.003 USD + MIN_TAKER_FEE_IN_BASE_CUR = 20_000_000_000L; + DEFAULT_MAKER_FEE_IN_BASE_CUR = 200_000; // 5 USD at DOGE price 0.003 USD for 800 000 DOGE (maxTradeAmount) + DEFAULT_TAKER_FEE_IN_BASE_CUR = 300_000; // 7.5 USD at DOGE price 0.003 USD txFeePerByte = DOGE_DEFAULT_TX_FEE; break; case "DASH": - MIN_MAKER_FEE_IN_BASE_CUR = 333_333; // 0.5 USD at DASH price 150 USD - MIN_TAKER_FEE_IN_BASE_CUR = 333_333; - DEFAULT_MAKER_FEE_IN_BASE_CUR = 3_333_333; // 5 USD at DOGE price 0.003 USD - DEFAULT_TAKER_FEE_IN_BASE_CUR = 5_000_000; // 7.5 USD at DOGE price 0.003 USD + MIN_MAKER_FEE_IN_BASE_CUR = 300_000; // 0.5 USD at DASH price 150 USD + MIN_TAKER_FEE_IN_BASE_CUR = 300_000; + DEFAULT_MAKER_FEE_IN_BASE_CUR = 160_000; // 5 USD at DASH price 150 USD + DEFAULT_TAKER_FEE_IN_BASE_CUR = 240_000; // 7.5 USD at DASH price 150 USD for 20 DASH (maxTradeAmount) txFeePerByte = DASH_DEFAULT_TX_FEE; break; default: diff --git a/core/src/main/java/io/bisq/core/provider/price/PriceFeedService.java b/core/src/main/java/io/bisq/core/provider/price/PriceFeedService.java index 0b9dfdd80a..747acf47e2 100644 --- a/core/src/main/java/io/bisq/core/provider/price/PriceFeedService.java +++ b/core/src/main/java/io/bisq/core/provider/price/PriceFeedService.java @@ -231,8 +231,8 @@ public class PriceFeedService { cache.putAll(priceMap); break; case "LTC": - case "DASH": case "DOGE": + case "DASH": // apply conversion of btc based price to baseCurrencyCode based with btc/baseCurrencyCode price MarketPrice baseCurrencyPrice = priceMap.get(baseCurrencyCode); Map convertedPriceMap = new HashMap<>(); diff --git a/pom.xml b/pom.xml index e7af7cb745..2f4fabe3aa 100644 --- a/pom.xml +++ b/pom.xml @@ -99,7 +99,7 @@ org.libdohj libdohj-core - 0.14.1 + 0.14.2 com.google.code.findbugs