From a43ac1d5ec75b8f1c4890732ada33ed1ea603384 Mon Sep 17 00:00:00 2001 From: Dennis Ruhe Date: Sat, 19 May 2018 11:48:33 +0200 Subject: [PATCH 1/4] Added EFL support --- .../batm/server/extensions/Currencies.java | 2 + .../CoinmarketcapRateSource.java | 20 ++- .../egulden/EguldenAddressValidator.java | 51 +++++++ .../extra/egulden/EguldenExtension.java | 128 ++++++++++++++++++ .../egulden/sources/FixPriceRateSource.java | 54 ++++++++ .../wallets/eguldend/EguldendRPCWallet.java | 120 ++++++++++++++++ .../src/main/resources/batm-extensions.xml | 13 ++ .../src/main/resources/efl.png | Bin 0 -> 8621 bytes .../batm/server/extensions/test/Tester.java | 2 + 9 files changed, 387 insertions(+), 3 deletions(-) create mode 100644 server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/egulden/EguldenAddressValidator.java create mode 100644 server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/egulden/EguldenExtension.java create mode 100644 server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/egulden/sources/FixPriceRateSource.java create mode 100644 server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/egulden/wallets/eguldend/EguldendRPCWallet.java create mode 100644 server_extensions_extra/src/main/resources/efl.png diff --git a/server_extensions_api/src/main/java/com/generalbytes/batm/server/extensions/Currencies.java b/server_extensions_api/src/main/java/com/generalbytes/batm/server/extensions/Currencies.java index cdda894..6c5bc99 100644 --- a/server_extensions_api/src/main/java/com/generalbytes/batm/server/extensions/Currencies.java +++ b/server_extensions_api/src/main/java/com/generalbytes/batm/server/extensions/Currencies.java @@ -27,6 +27,7 @@ public class Currencies { public static final String BCH = "BCH"; //Bitcoin Cash public static final String BTX = "BTX"; //BitCore public static final String ETH = "ETH"; + public static final String EFL = "EFL"; public static final String LTC = "LTC"; public static final String VIA = "VIA"; public static final String DEX = "DEX"; @@ -71,6 +72,7 @@ public class Currencies { crypto.add(BTC); crypto.add(BCH); crypto.add(BTX); + crypto.add(EFL); crypto.add(ETH); crypto.add(LTC); crypto.add(VIA); diff --git a/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/dash/sources/coinmarketcap/CoinmarketcapRateSource.java b/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/dash/sources/coinmarketcap/CoinmarketcapRateSource.java index 823df81..d11fa6c 100644 --- a/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/dash/sources/coinmarketcap/CoinmarketcapRateSource.java +++ b/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/dash/sources/coinmarketcap/CoinmarketcapRateSource.java @@ -45,6 +45,7 @@ public class CoinmarketcapRateSource implements IRateSource { result.add(Currencies.XMR); result.add(Currencies.POT); result.add(Currencies.FLASH); + result.add(Currencies.EFL); return result; } @@ -69,14 +70,27 @@ public class CoinmarketcapRateSource implements IRateSource { if (!getFiatCurrencies().contains(fiatCurrency)) { return null; } + + /** + * Cannot get specific ticker by coin code, only by name or 'id value' + * Get specific ID values for your coin from https://api.coinmarketcap.com/v2/listings/ + * for instance data[105] -> id 234 for e-Gulden + */ + CMCTicker[] tickers; - if(Currencies.FLASH.equalsIgnoreCase(cryptoCurrency)){ - tickers = api.getTickers(cryptoCurrency,fiatCurrency); - }else + if(Currencies.FLASH.equalsIgnoreCase(cryptoCurrency)) { + tickers = api.getTickers(cryptoCurrency, fiatCurrency); + } else if (Currencies.EFL.equalsIgnoreCase(cryptoCurrency)) { + tickers = api.getTickers("234", fiatCurrency); + } else { tickers = api.getTickers(fiatCurrency); + } for (int i = 0; i < tickers.length; i++) { CMCTicker ticker = tickers[i]; + + System.out.println("Ticker symbol: " + ticker.getSymbol()); + if (cryptoCurrency.equalsIgnoreCase(ticker.getSymbol())) { if (Currencies.EUR.equalsIgnoreCase(fiatCurrency)) { return ticker.getPrice_eur(); diff --git a/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/egulden/EguldenAddressValidator.java b/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/egulden/EguldenAddressValidator.java new file mode 100644 index 0000000..20bf9cb --- /dev/null +++ b/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/egulden/EguldenAddressValidator.java @@ -0,0 +1,51 @@ +/************************************************************************************* + * Copyright (C) 2014-2016 GENERAL BYTES s.r.o. All rights reserved. + * + * This software may be distributed and modified under the terms of the GNU + * General Public License version 2 (GPL2) as published by the Free Software + * Foundation and appearing in the file GPL2.TXT included in the packaging of + * this file. Please note that GPL2 Section 2[b] requires that all works based + * on this software must also be made publicly available under the terms of + * the GPL2 ("Copyleft"). + * + * Contact information + * ------------------- + * + * GENERAL BYTES s.r.o. + * Web : http://www.generalbytes.com + * + ************************************************************************************/ +package com.generalbytes.batm.server.extensions.extra.egulden; + +import com.generalbytes.batm.server.coinutil.AddressFormatException; +import com.generalbytes.batm.server.coinutil.Base58; +import com.generalbytes.batm.server.extensions.ICryptoAddressValidator; + +public class EguldenAddressValidator implements ICryptoAddressValidator { + + @Override + public boolean isAddressValid(String address) { + if (address.startsWith("L") || address.startsWith("E")) { + try { + Base58.decodeToBigInteger(address); + Base58.decodeChecked(address); + } catch (AddressFormatException e) { + e.printStackTrace(); + return false; + } + return true; + }else{ + return false; + } + } + + @Override + public boolean isPaperWalletSupported() { + return false; + } + + @Override + public boolean mustBeBase58Address() { + return true; + } +} diff --git a/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/egulden/EguldenExtension.java b/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/egulden/EguldenExtension.java new file mode 100644 index 0000000..ec11431 --- /dev/null +++ b/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/egulden/EguldenExtension.java @@ -0,0 +1,128 @@ +/************************************************************************************* + * Copyright (C) 2014-2016 GENERAL BYTES s.r.o. All rights reserved. + * + * This software may be distributed and modified under the terms of the GNU + * General Public License version 2 (GPL2) as published by the Free Software + * Foundation and appearing in the file GPL2.TXT included in the packaging of + * this file. Please note that GPL2 Section 2[b] requires that all works based + * on this software must also be made publicly available under the terms of + * the GPL2 ("Copyleft"). + * + * Contact information + * ------------------- + * + * GENERAL BYTES s.r.o. + * Web : http://www.generalbytes.com + * + ************************************************************************************/ +package com.generalbytes.batm.server.extensions.extra.egulden; + +import com.generalbytes.batm.server.extensions.*; +import com.generalbytes.batm.server.extensions.extra.egulden.sources.FixPriceRateSource; +import com.generalbytes.batm.server.extensions.extra.egulden.wallets.eguldend.EguldendRPCWallet; +import com.generalbytes.batm.server.extensions.watchlist.IWatchList; + +import java.math.BigDecimal; +import java.util.HashSet; +import java.util.Set; +import java.util.StringTokenizer; + +public class EguldenExtension implements IExtension{ + @Override + public String getName() { + return "BATM e-Gulden extension"; + } + + @Override + public IExchange createExchange(String exchangeLogin) { + return null; + } + + @Override + public IWallet createWallet(String walletLogin) { + if (walletLogin !=null && !walletLogin.trim().isEmpty()) { + StringTokenizer st = new StringTokenizer(walletLogin,":"); + String walletType = st.nextToken(); + + if ("eguldend".equalsIgnoreCase(walletType)) { + //"eguldend:protocol:user:password:ip:port:accountname" + + String protocol = st.nextToken(); + String username = st.nextToken(); + String password = st.nextToken(); + String hostname = st.nextToken(); + String port = st.nextToken(); + String accountName =""; + if (st.hasMoreTokens()) { + accountName = st.nextToken(); + } + + + if (protocol != null && username != null && password != null && hostname !=null && port != null && accountName != null) { + String rpcURL = protocol +"://" + username +":" + password + "@" + hostname +":" + port; + return new EguldendRPCWallet(rpcURL,accountName); + } + } + } + return null; + } + + @Override + public ICryptoAddressValidator createAddressValidator(String cryptoCurrency) { + if (Currencies.EFL.equalsIgnoreCase(cryptoCurrency)) { + return new EguldenAddressValidator(); + } + return null; + } + + @Override + public IPaperWalletGenerator createPaperWalletGenerator(String cryptoCurrency) { + return null; + } + + @Override + public IPaymentProcessor createPaymentProcessor(String paymentProcessorLogin) { + return null; //no payment processors available + } + + @Override + public IRateSource createRateSource(String sourceLogin) { + if (sourceLogin != null && !sourceLogin.trim().isEmpty()) { + StringTokenizer st = new StringTokenizer(sourceLogin,":"); + String exchangeType = st.nextToken(); + + if ("eflfix".equalsIgnoreCase(exchangeType)) { + BigDecimal rate = BigDecimal.ZERO; + if (st.hasMoreTokens()) { + try { + rate = new BigDecimal(st.nextToken()); + } catch (Throwable e) { + } + } + String preferedFiatCurrency = Currencies.USD; + if (st.hasMoreTokens()) { + preferedFiatCurrency = st.nextToken().toUpperCase(); + } + return new FixPriceRateSource(rate, preferedFiatCurrency); + } + + } + return null; + } + @Override + public Set getSupportedCryptoCurrencies() { + Set result = new HashSet(); + result.add(Currencies.EFL); + return result; + } + + @Override + public Set getSupportedWatchListsNames() { + return null; + } + + @Override + public IWatchList getWatchList(String name) { + return null; + } +} diff --git a/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/egulden/sources/FixPriceRateSource.java b/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/egulden/sources/FixPriceRateSource.java new file mode 100644 index 0000000..875435e --- /dev/null +++ b/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/egulden/sources/FixPriceRateSource.java @@ -0,0 +1,54 @@ +package com.generalbytes.batm.server.extensions.extra.egulden.sources; + +import com.generalbytes.batm.server.extensions.Currencies; +import com.generalbytes.batm.server.extensions.Currencies; +import com.generalbytes.batm.server.extensions.IRateSource; + +import java.math.BigDecimal; +import java.util.HashSet; +import java.util.Set; + +public class FixPriceRateSource implements IRateSource { + private BigDecimal rate = BigDecimal.ZERO; + + private String preferedFiatCurrency = Currencies.USD; + + public FixPriceRateSource(BigDecimal rate,String preferedFiatCurrency) { + this.rate = rate; + for (String fiatCurrency : Currencies.FIAT_CURRENCIES) { + if (fiatCurrency.equalsIgnoreCase(preferedFiatCurrency)) { + this.preferedFiatCurrency = fiatCurrency; + break; + } + } + } + + @Override + public Set getCryptoCurrencies() { + Set result = new HashSet(); + result.add(Currencies.EFL); + return result; + } + + @Override + public BigDecimal getExchangeRateLast(String cryptoCurrency, String fiatCurrency) { + if (Currencies.EFL.equalsIgnoreCase(cryptoCurrency)) { + return rate; + } + return null; + } + + @Override + public Set getFiatCurrencies() { + Set result = new HashSet(); + result.add(Currencies.USD); + result.add(Currencies.EUR); + return result; + } + + @Override + public String getPreferredFiatCurrency() { + return preferedFiatCurrency; + } + +} diff --git a/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/egulden/wallets/eguldend/EguldendRPCWallet.java b/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/egulden/wallets/eguldend/EguldendRPCWallet.java new file mode 100644 index 0000000..4995a66 --- /dev/null +++ b/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/egulden/wallets/eguldend/EguldendRPCWallet.java @@ -0,0 +1,120 @@ +/************************************************************************************* + * Copyright (C) 2014-2016 GENERAL BYTES s.r.o. All rights reserved. + * + * This software may be distributed and modified under the terms of the GNU + * General Public License version 2 (GPL2) as published by the Free Software + * Foundation and appearing in the file GPL2.TXT included in the packaging of + * this file. Please note that GPL2 Section 2[b] requires that all works based + * on this software must also be made publicly available under the terms of + * the GPL2 ("Copyleft"). + * + * Contact information + * ------------------- + * + * GENERAL BYTES s.r.o. + * Web : http://www.generalbytes.com + * + ************************************************************************************/ +package com.generalbytes.batm.server.extensions.extra.egulden.wallets.eguldend; + +import com.azazar.bitcoin.jsonrpcclient.BitcoinException; +import com.azazar.bitcoin.jsonrpcclient.BitcoinJSONRPCClient; +import com.generalbytes.batm.server.extensions.Currencies; +import com.generalbytes.batm.server.extensions.IWallet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.math.BigDecimal; +import java.net.MalformedURLException; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class EguldendRPCWallet implements IWallet{ + private static final Logger log = LoggerFactory.getLogger(EguldendRPCWallet.class); + private static final String CRYPTO_CURRENCY = Currencies.EFL; + + public EguldendRPCWallet(String rpcURL, String accountName) { + this.rpcURL = rpcURL; + this.accountName = accountName; + } + + private String rpcURL; + private String accountName; + + @Override + public Set getCryptoCurrencies() { + Set result = new HashSet(); + result.add(CRYPTO_CURRENCY); + return result; + + } + + @Override + public String getPreferredCryptoCurrency() { + return CRYPTO_CURRENCY; + } + + @Override + public String sendCoins(String destinationAddress, BigDecimal amount, String cryptoCurrency, String description) { + if (!CRYPTO_CURRENCY.equalsIgnoreCase(cryptoCurrency)) { + log.error("Eguldend wallet error: unknown cryptocurrency."); + return null; + } + + log.info("Eguldend sending coins from " + accountName + " to: " + destinationAddress + " " + amount); + try { + String result = getClient(rpcURL).sendFrom(accountName, destinationAddress,amount.doubleValue()); + log.debug("result = " + result); + return result; + } catch (BitcoinException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public String getCryptoAddress(String cryptoCurrency) { + if (!CRYPTO_CURRENCY.equalsIgnoreCase(cryptoCurrency)) { + log.error("Eguldend wallet error: unknown cryptocurrency."); + return null; + } + + try { + List addressesByAccount = getClient(rpcURL).getAddressesByAccount(accountName); + if (addressesByAccount == null || addressesByAccount.size() == 0) { + return null; + }else{ + return addressesByAccount.get(0); + } + } catch (BitcoinException e) { + e.printStackTrace(); + return null; + } + } + + @Override + public BigDecimal getCryptoBalance(String cryptoCurrency) { + if (!CRYPTO_CURRENCY.equalsIgnoreCase(cryptoCurrency)) { + log.error("Eguldend wallet error: unknown cryptocurrency: " + cryptoCurrency); + return null; + } + try { + double balance = getClient(rpcURL).getBalance(accountName); + return BigDecimal.valueOf(balance); + } catch (BitcoinException e) { + e.printStackTrace(); + return null; + } + } + + private BitcoinJSONRPCClient getClient(String rpcURL) { + try { + return new BitcoinJSONRPCClient(rpcURL); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/server_extensions_extra/src/main/resources/batm-extensions.xml b/server_extensions_extra/src/main/resources/batm-extensions.xml index 23ac2c9..7844d09 100644 --- a/server_extensions_extra/src/main/resources/batm-extensions.xml +++ b/server_extensions_extra/src/main/resources/batm-extensions.xml @@ -64,6 +64,7 @@ XMR POT BTX + EFL @@ -477,4 +478,16 @@ + + + + + + + + + EFL + + + diff --git a/server_extensions_extra/src/main/resources/efl.png b/server_extensions_extra/src/main/resources/efl.png new file mode 100644 index 0000000000000000000000000000000000000000..b3f2759ba21cfeb690954f10a01ba1e434863315 GIT binary patch literal 8621 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 literal 0 HcmV?d00001 diff --git a/server_extensions_test/src/main/java/com/generalbytes/batm/server/extensions/test/Tester.java b/server_extensions_test/src/main/java/com/generalbytes/batm/server/extensions/test/Tester.java index c705d50..60cb592 100644 --- a/server_extensions_test/src/main/java/com/generalbytes/batm/server/extensions/test/Tester.java +++ b/server_extensions_test/src/main/java/com/generalbytes/batm/server/extensions/test/Tester.java @@ -411,6 +411,8 @@ public class Tester { } System.out.println(" " + cryptoCurrency); } + System.out.println("Selected Crypto Currency: "+ selectedCryptoCurrency); + final BigDecimal exchangeRateLast = rs.getExchangeRateLast(selectedCryptoCurrency, preferredFiatCurrency); if (exchangeRateLast != null) { System.out.println("Exchange Rate Last: 1 " + selectedCryptoCurrency + " = " + exchangeRateLast.stripTrailingZeros().toPlainString() + " " + preferredFiatCurrency); From a78b820bf9947fa8467d11c39e56e3688b1e783a Mon Sep 17 00:00:00 2001 From: Dennis Ruhe Date: Sat, 19 May 2018 11:50:34 +0200 Subject: [PATCH 2/4] Reverted change in tester file --- .../com/generalbytes/batm/server/extensions/test/Tester.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/server_extensions_test/src/main/java/com/generalbytes/batm/server/extensions/test/Tester.java b/server_extensions_test/src/main/java/com/generalbytes/batm/server/extensions/test/Tester.java index 60cb592..c705d50 100644 --- a/server_extensions_test/src/main/java/com/generalbytes/batm/server/extensions/test/Tester.java +++ b/server_extensions_test/src/main/java/com/generalbytes/batm/server/extensions/test/Tester.java @@ -411,8 +411,6 @@ public class Tester { } System.out.println(" " + cryptoCurrency); } - System.out.println("Selected Crypto Currency: "+ selectedCryptoCurrency); - final BigDecimal exchangeRateLast = rs.getExchangeRateLast(selectedCryptoCurrency, preferredFiatCurrency); if (exchangeRateLast != null) { System.out.println("Exchange Rate Last: 1 " + selectedCryptoCurrency + " = " + exchangeRateLast.stripTrailingZeros().toPlainString() + " " + preferredFiatCurrency); From cb5c725c40e210f6c1959805ef1931504419e3a7 Mon Sep 17 00:00:00 2001 From: Artur Kowalski Date: Wed, 13 Jun 2018 19:31:28 +0200 Subject: [PATCH 3/4] Fix Futurocoin YobitRateSource --- .../extra/futurocoin/sources/yobit/dto/YobitResponse.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/futurocoin/sources/yobit/dto/YobitResponse.java b/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/futurocoin/sources/yobit/dto/YobitResponse.java index 8f2e2d7..bed0d1c 100644 --- a/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/futurocoin/sources/yobit/dto/YobitResponse.java +++ b/server_extensions_extra/src/main/java/com/generalbytes/batm/server/extensions/extra/futurocoin/sources/yobit/dto/YobitResponse.java @@ -1,13 +1,13 @@ package com.generalbytes.batm.server.extensions.extra.futurocoin.sources.yobit.dto; public class YobitResponse { - private Ticker fot_usd; + private Ticker fto_usd; public Ticker getFto_usd() { - return fot_usd; + return fto_usd; } - public void setFot_usd(Ticker fot_usd) { - this.fot_usd = fot_usd; + public void setFto_usd(Ticker fto_usd) { + this.fto_usd = fto_usd; } } From 74ad55dc2b11c846e119673dd3646a0e49408e3e Mon Sep 17 00:00:00 2001 From: Radovan Panak Date: Thu, 21 Jun 2018 15:01:42 +0200 Subject: [PATCH 4/4] BATM-510 - improve double entries removal - improve equals() and hashCode() implementations (generated by IDEA) - remove failing test (constant value gets compared against non-constant XML file) - fix indent in extensions XML file --- server_extensions_extra/src/main/resources/batm-extensions.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server_extensions_extra/src/main/resources/batm-extensions.xml b/server_extensions_extra/src/main/resources/batm-extensions.xml index 5073b59..2bfeca0 100644 --- a/server_extensions_extra/src/main/resources/batm-extensions.xml +++ b/server_extensions_extra/src/main/resources/batm-extensions.xml @@ -447,7 +447,7 @@ - +