From 9dcc3327d1198dfbb2d08cadbb63917e31689c46 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Thu, 13 Aug 2015 13:03:00 +0300 Subject: [PATCH 01/39] Minor changes. --- .../bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java | 1 + .../rpcconnector/events/AlertListener.java | 8 +++----- .../rpcconnector/events/BitcoinDListener.java | 5 +++-- .../rpcconnector/events/WalletListener.java | 8 +++----- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java index 1624e09..3d6d23f 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java @@ -324,6 +324,7 @@ public void setAccount(String address, String account) throws CryptoCurrencyRpcE /** * Returns up to [count] most recent transactions skipping the first [from] * transactions for account [account]. + * Sorting does not work correctly. https://github.com/bitcoin/bitcoin/issues/2853 * * @param account * @param count diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/events/AlertListener.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/events/AlertListener.java index 749bfb4..ec52cda 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/events/AlertListener.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/events/AlertListener.java @@ -15,15 +15,13 @@ public class AlertListener extends Observable implements Observer { public AlertListener(int port) throws IOException { alertListener = new BitcoinDListener(port); + alertListener.addObserver(this); + listener = new Thread((Runnable) alertListener, "alertListener"); + listener.start(); } @Override public synchronized void addObserver(Observer o) { - if (null == listener) { - alertListener.addObserver(this); - listener = new Thread((Runnable) alertListener, "alertListener"); - listener.start(); - } super.addObserver(o); } diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/events/BitcoinDListener.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/events/BitcoinDListener.java index 8adcac5..50678c6 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/events/BitcoinDListener.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/events/BitcoinDListener.java @@ -45,16 +45,17 @@ public void run() { if ((line = reader.readLine()) != null) { setChanged(); notifyObservers(line); - connection.close(); } } catch (IOException e) { e.printStackTrace(); } finally { // sockets are closed when complete. try { - if (connection != null) + if (connection != null) { connection.close(); + } } catch (IOException e) { + e.printStackTrace(); } } } diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/events/WalletListener.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/events/WalletListener.java index 502d621..675c523 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/events/WalletListener.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/events/WalletListener.java @@ -23,15 +23,13 @@ public class WalletListener extends Observable implements Observer { public WalletListener(final CryptoCurrencyRPC client, int port) throws IOException { walletListener = new BitcoinDListener(port); this.client = client; + walletListener.addObserver(this); + listener = new Thread((Runnable) walletListener, "walletListener"); + listener.start(); } @Override public synchronized void addObserver(Observer o) { - if (listener == null) { - walletListener.addObserver(this); - listener = new Thread((Runnable) walletListener, "walletListener"); - listener.start(); - } super.addObserver(o); } From cee1d08db62b5df552d2c8eb884dda1c7d9ce0cd Mon Sep 17 00:00:00 2001 From: Romantsov Date: Thu, 13 Aug 2015 13:03:38 +0300 Subject: [PATCH 02/39] Logs and exception handling in README.md --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 8fcce5a..4a9326d 100644 --- a/README.md +++ b/README.md @@ -68,4 +68,16 @@ Make sure to close sockets later: walletListener.stop(); ``` +### Logs and exception handling + +All log files are written via log4j DailyRollingFileAppender and saved in /var/log/bitcoin-rpc/ folder. + +Library can generate listed below types of Runtime exception: + +- AuthenticationException +- CallApiCryptoCurrencyRpcException +- CryptoCurrencyRpcException (base class) +- InsufficientFundsException +- RpcInvalidResponseException + > Written with [StackEdit](https://stackedit.io/). From 325c705d10d335e607675d0fc26446dd0d4166a8 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Thu, 13 Aug 2015 16:07:58 +0300 Subject: [PATCH 03/39] More detail explanation of usage walletListener in README.md --- README.md | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a9326d..1e8c4af 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,32 @@ You can register observers to capture events of wallets, and alerts: walletListener.addObserver(new Observer() { @Override public void update(Observable o, Object arg) { - System.out.println("Amount of transaction: " + ((Transaction)arg).getAmount()); + Transaction tx = (Transaction) arg; + BigDecimal amount = tx.getDetails().get(0).getAmount(); //amount of transaction + String txId = tx.getTxid(); //id of transaction + Transaction txDetails = tx.getDetails().get(0); //transaction details + + if (tx.getDetails().size() == 2) { + //both side of translation inside your bitcoind node + String sendToAddress = txDetails.getAddress(); + String receiveAddress = tx.getDetails().get(1).getAddress(); + BigDecimal fee = tx.getFee(); + } else { + //one side of translation outside of your bitcoind node + switch (txDetails.getCategory()) { + case RECEIVE: //your account on bitcoind receive bitcoin + String receiveAddress = txDetails.getAddress(); + break; + case SEND: //your account on bitcoind send bitcoin + //the address to which the coins was sent + String sendToAddress = txDetails.getAddress(); + //account in your bitcoind from which the coins was sent + String sendFromAccountName = txDetails.getAccount(); + BigDecimal fee = txDetails.getFee(); + break; + default: + //Strange transaction: MOVE or CONFLICTED + } } }); From 0bae8baa5f9f3525bda6835578eb219e2da8d33e Mon Sep 17 00:00:00 2001 From: Romantsov Date: Thu, 21 Jan 2016 19:39:58 +0200 Subject: [PATCH 04/39] Update dependencies. --- pom.xml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 34ba417..3978c5d 100644 --- a/pom.xml +++ b/pom.xml @@ -156,7 +156,7 @@ net.sourceforge.htmlunit htmlunit - 2.15 + 2.18 compile @@ -165,5 +165,11 @@ 4.12 test + + xml-apis + xml-apis + 1.4.01 + + From bcaecb53f01998b6e4fa0be206f76e2021cd82a4 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Fri, 22 Jan 2016 16:05:00 +0200 Subject: [PATCH 05/39] Rollback dependencies update. --- pom.xml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 3978c5d..2320aa6 100644 --- a/pom.xml +++ b/pom.xml @@ -156,7 +156,7 @@ net.sourceforge.htmlunit htmlunit - 2.18 + 2.15 compile @@ -165,11 +165,6 @@ 4.12 test - - xml-apis - xml-apis - 1.4.01 - From c41c5302d1fb20ea5bd9629858bb874d206339c1 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Tue, 26 Jan 2016 13:06:01 +0200 Subject: [PATCH 06/39] Fix java.lang.ClassNotFoundException: org.w3c.dom.ElementTraversal. --- pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pom.xml b/pom.xml index 2320aa6..f92cefd 100644 --- a/pom.xml +++ b/pom.xml @@ -166,5 +166,11 @@ test + + xml-apis + xml-apis + 1.4.01 + + From 785830c6146cb591dc5ba0f7c44eddc8f8322da9 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Wed, 3 Feb 2016 20:08:54 +0200 Subject: [PATCH 07/39] GetInfo call impl. --- pom.xml | 2 +- .../bitcoinlitecoin/rpcconnector/APICalls.java | 1 + .../rpcconnector/CryptoCurrencyRPC.java | 17 +++++++++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index f92cefd..89d761e 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.0.0 + 2.0.1 jar Litecoin-Bitcoin-RPC-Java-Connector diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java index eda4529..3d6b5b8 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java @@ -28,6 +28,7 @@ public enum APICalls { GET_RECEIVED_BY_ADDRESS("getreceivedbyaddress"), GET_BALANCE("getbalance"), GET_TRANSACTION("gettransaction"), + GET_INFO("getinfo"), GET_CONNECTION_COUNT("getconnectioncount"), BACKUP_WALLET("backupwallet"), DECODE_RAW_TRANSACTION("decoderawtransaction"), diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java index 3d6d23f..a1df359 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java @@ -190,6 +190,19 @@ public String getNewAddress() throws CryptoCurrencyRpcException { return jsonObj.get("result").getAsString(); } + + /** + * Returns an object containing various state info. + * + * @return + * @throws com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CryptoCurrencyRpcException + */ + public String getInfo() throws CryptoCurrencyRpcException { + JsonObject jsonObj = callAPIMethod(APICalls.GET_INFO); + cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); + return jsonObj.toString(); + } + /** * Returns a new address for receiving payments. * @@ -468,9 +481,9 @@ private JsonObject callAPIMethod(APICalls callMethod, Object... params) throws C WebResponse resp = client.getPage(req).getWebResponse(); jsonObj = new JsonParser().parse(resp.getContentAsString()).getAsJsonObject(); - StringBuffer buffer = new StringBuffer(""); + StringBuilder buffer = new StringBuilder(""); for (Object item : params) { - buffer.append(item.toString() + " | "); + buffer.append(item).append(" | "); } LOG.info("Bitcoin RPC Request: Method: " + callMethod + " Params: " + buffer.toString() + "\nBitcoin RPC Response : " + jsonObj); From 7526b99d27f0429dd89e10fe1d95dff84bcbb279 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Wed, 3 Feb 2016 20:20:18 +0200 Subject: [PATCH 08/39] Add .idea files to gitignore. --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 50456fb..ff50a6d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ ## Intellij Idea ################# *.iml - +/.idea ################# ## Eclipse ################# From 9d33c6df822116d83dbb63870d9e2cefa6a30c5a Mon Sep 17 00:00:00 2001 From: Romantsov Date: Mon, 8 Feb 2016 17:15:09 +0200 Subject: [PATCH 09/39] Update html unit version. --- pom.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 89d761e..1c723d3 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.0.1 + 2.0.2 jar Litecoin-Bitcoin-RPC-Java-Connector @@ -156,8 +156,7 @@ net.sourceforge.htmlunit htmlunit - 2.15 - compile + 2.19 junit From c11839ff5fd69a94584157a3af4347c3a4172cbe Mon Sep 17 00:00:00 2001 From: Romantsov Date: Tue, 9 Feb 2016 14:31:10 +0200 Subject: [PATCH 10/39] Change net.sourceforge.htmlunit to apache httpClient. --- pom.xml | 26 ++-- .../rpcconnector/CryptoCurrencyRPC.java | 137 +++++++++++++----- 2 files changed, 111 insertions(+), 52 deletions(-) diff --git a/pom.xml b/pom.xml index 1c723d3..31e1a28 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.0.2 + 2.1.0 jar Litecoin-Bitcoin-RPC-Java-Connector @@ -148,16 +148,24 @@ gson 2.3.1 + + org.apache.httpcomponents + httpclient + 4.4.1 + + + commons-io + commons-io + 2.4 + + log4j log4j 1.2.17 - - net.sourceforge.htmlunit - htmlunit - 2.19 - + + junit junit @@ -165,11 +173,5 @@ test - - xml-apis - xml-apis - 1.4.01 - - diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java index a1df359..dd0311d 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java @@ -1,47 +1,68 @@ package com.nitinsurana.bitcoinlitecoin.rpcconnector; -import com.gargoylesoftware.htmlunit.*; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.AuthenticationException; +import com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CallApiCryptoCurrencyRpcException; import com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CryptoCurrencyRpcException; import com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CryptoCurrencyRpcExceptionHandler; -import com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CallApiCryptoCurrencyRpcException; import com.nitinsurana.bitcoinlitecoin.rpcconnector.pojo.Transaction; +import org.apache.commons.io.IOUtils; +import org.apache.http.HttpHost; +import org.apache.http.HttpStatus; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.AuthCache; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.protocol.HttpClientContext; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.impl.auth.BasicScheme; +import org.apache.http.impl.client.BasicAuthCache; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; import org.apache.log4j.Logger; import java.math.BigDecimal; -import java.net.URL; import java.util.Arrays; import java.util.List; +import java.util.concurrent.atomic.AtomicLong; public class CryptoCurrencyRPC { public static final Logger LOG = Logger.getLogger("rpcLogger"); - private WebClient client; - private String baseUrl; private CryptoCurrencyRpcExceptionHandler cryptoCurrencyRpcExceptionHandler = new CryptoCurrencyRpcExceptionHandler(); private Gson gson = new Gson(); + private JsonParser jsonParser = new JsonParser(); - public CryptoCurrencyRPC(String rpcUser, String rpcPassword, String rpcHost, String rpcPort) throws AuthenticationException { - client = new WebClient(BrowserVersion.CHROME); - client.getOptions().setThrowExceptionOnFailingStatusCode(false); - client.getOptions().setThrowExceptionOnScriptError(false); - client.getOptions().setPrintContentOnFailingStatusCode(false); - client.getOptions().setJavaScriptEnabled(false); - client.getOptions().setCssEnabled(false); - baseUrl = new String("http://" + rpcUser + ":" + rpcPassword + "@" + rpcHost + ":" + rpcPort + "/"); + private static final String CHARACTER_ENCODING = "UTF-8"; + private String uri; + private CloseableHttpClient httpClient; + private HttpHost targetHost; + private HttpClientContext context; + private AtomicLong id = new AtomicLong(1L); + + public CryptoCurrencyRPC(final String rpcUser, final String rpcPassword, String rpcHost, String rpcPort) { + this.uri = "/"; + + httpClient = HttpClients.createDefault(); + targetHost = new HttpHost(rpcHost, Integer.parseInt(rpcPort), "http"); + CredentialsProvider credsProvider = new BasicCredentialsProvider(); + credsProvider.setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()), + new UsernamePasswordCredentials(rpcUser, rpcPassword)); + + AuthCache authCache = new BasicAuthCache(); + BasicScheme basicAuth = new BasicScheme(); + authCache.put(targetHost, basicAuth); + + context = HttpClientContext.create(); + context.setCredentialsProvider(credsProvider); + context.setAuthCache(authCache); - try { - if (client.getPage(baseUrl).getWebResponse().getStatusCode() == 401) { //401 is Http Unauthorized - throw new AuthenticationException(); - } - } catch (Exception ex) { - LOG.error(ex.getMessage(), ex); - } } /** @@ -466,31 +487,67 @@ public String sendRawTransaction(String hexString) throws CryptoCurrencyRpcExcep return jsonObj.get("result").getAsString(); } + + //Implementation from https://github.com/SulacoSoft/BitcoindConnector4J repository private JsonObject callAPIMethod(APICalls callMethod, Object... params) throws CallApiCryptoCurrencyRpcException { try { - JsonObject jsonObj = null; - WebRequest req = new WebRequest(new URL(baseUrl)); - req.setAdditionalHeader("Content-type", "application/json"); - req.setHttpMethod(HttpMethod.POST); - JSONRequestBody body = new JSONRequestBody(); - body.setMethod(callMethod.toString()); - if (params != null && params.length > 0) { - body.setParams(params); + String jsonRequest = String.format("{\"jsonrpc\": \"2.0\", \"method\": \"%s\", \"params\": [%s], \"id\": %s}", + callMethod.toString(), buildParamsString(params), id.getAndIncrement()); + + HttpPost httpPost = new HttpPost(uri); + httpPost.setEntity(new ByteArrayEntity(jsonRequest.getBytes(CHARACTER_ENCODING))); + CloseableHttpResponse response = httpClient.execute(targetHost, httpPost, context); + try { + checkHttpErrors(response.getStatusLine().getStatusCode()); + + String jsonResponse = IOUtils.toString(response.getEntity().getContent(), CHARACTER_ENCODING); + logRequest(callMethod.toString(), jsonResponse, params); + + return jsonParser.parse(jsonResponse).getAsJsonObject(); + } finally { + response.close(); } - req.setRequestBody(new Gson().toJson(body, JSONRequestBody.class)); - WebResponse resp = client.getPage(req).getWebResponse(); - jsonObj = new JsonParser().parse(resp.getContentAsString()).getAsJsonObject(); + } catch (Throwable e) { + throw new CallApiCryptoCurrencyRpcException(e.getMessage()); + } + + } - StringBuilder buffer = new StringBuilder(""); - for (Object item : params) { - buffer.append(item).append(" | "); + private String buildParamsString(Object[] args) { + StringBuilder params = new StringBuilder(); + if (args != null && args.length > 0) { + for (int i = 0; i < args.length; i++) { + if (i > 0) + params.append(","); + Object arg = args[i]; + if (arg instanceof String) + params.append(String.format("\"%s\"", arg)); + else + params.append(String.format("%s", arg)); } - LOG.info("Bitcoin RPC Request: Method: " + callMethod + " Params: " + buffer.toString() + - "\nBitcoin RPC Response : " + jsonObj); + } + return params.toString(); + } + + private void checkHttpErrors(int statusCode) { + if (statusCode != HttpStatus.SC_OK && statusCode != HttpStatus.SC_INTERNAL_SERVER_ERROR) { + if (statusCode == HttpStatus.SC_UNAUTHORIZED) + throw new CryptoCurrencyRpcException(String.format( + "Bitcoind JSON-RPC HTTP error (Probably an incorrect username or password). HTTP Status-Code %s", + statusCode)); + else + throw new CryptoCurrencyRpcException(String.format("Bitcoind JSON-RPC HTTP error. HTTP Status-Code %s", + statusCode)); + } + } - return jsonObj; - } catch (Exception e) { - throw new CallApiCryptoCurrencyRpcException(e.getMessage()); + private void logRequest(String callMethod, String jsonResponse, Object[] params) { + StringBuffer buffer = new StringBuffer(""); + for (Object item : params) { + buffer.append(item).append(" | "); } + LOG.info("Bitcoin RPC Request: Method: " + callMethod + " Params: " + buffer.toString() + + "\nBitcoin RPC Response : " + jsonResponse); + } } From 02471f5f4a5a10fe311fe8e8bdc03d54262f4365 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Tue, 23 Feb 2016 14:51:12 +0200 Subject: [PATCH 11/39] Change protocol to https. --- .../bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java index dd0311d..6faf766 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java @@ -50,7 +50,7 @@ public CryptoCurrencyRPC(final String rpcUser, final String rpcPassword, String this.uri = "/"; httpClient = HttpClients.createDefault(); - targetHost = new HttpHost(rpcHost, Integer.parseInt(rpcPort), "http"); + targetHost = new HttpHost(rpcHost, Integer.parseInt(rpcPort), "https"); CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()), new UsernamePasswordCredentials(rpcUser, rpcPassword)); @@ -62,7 +62,6 @@ public CryptoCurrencyRPC(final String rpcUser, final String rpcPassword, String context = HttpClientContext.create(); context.setCredentialsProvider(credsProvider); context.setAuthCache(authCache); - } /** From fe4e74f9d365d715f9466d494ba517fdcdd2e55c Mon Sep 17 00:00:00 2001 From: Romantsov Date: Tue, 23 Feb 2016 16:44:07 +0200 Subject: [PATCH 12/39] Localhost ssl fix. --- .../bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java index 6faf766..8cd5849 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java @@ -18,6 +18,7 @@ import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.protocol.HttpClientContext; +import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.impl.auth.BasicScheme; import org.apache.http.impl.client.BasicAuthCache; @@ -49,7 +50,7 @@ public class CryptoCurrencyRPC { public CryptoCurrencyRPC(final String rpcUser, final String rpcPassword, String rpcHost, String rpcPort) { this.uri = "/"; - httpClient = HttpClients.createDefault(); + httpClient = HttpClients.custom().setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).build(); targetHost = new HttpHost(rpcHost, Integer.parseInt(rpcPort), "https"); CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()), From 260c664b8f0b2c6ec3ef89f34bdd4973de2f3327 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Wed, 2 Mar 2016 15:43:24 +0200 Subject: [PATCH 13/39] Back to http protocol. --- .../bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java index 8cd5849..dd0311d 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java @@ -18,7 +18,6 @@ import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.protocol.HttpClientContext; -import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.impl.auth.BasicScheme; import org.apache.http.impl.client.BasicAuthCache; @@ -50,8 +49,8 @@ public class CryptoCurrencyRPC { public CryptoCurrencyRPC(final String rpcUser, final String rpcPassword, String rpcHost, String rpcPort) { this.uri = "/"; - httpClient = HttpClients.custom().setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).build(); - targetHost = new HttpHost(rpcHost, Integer.parseInt(rpcPort), "https"); + httpClient = HttpClients.createDefault(); + targetHost = new HttpHost(rpcHost, Integer.parseInt(rpcPort), "http"); CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()), new UsernamePasswordCredentials(rpcUser, rpcPassword)); @@ -63,6 +62,7 @@ public CryptoCurrencyRPC(final String rpcUser, final String rpcPassword, String context = HttpClientContext.create(); context.setCredentialsProvider(credsProvider); context.setAuthCache(authCache); + } /** From c1ba89125c8ecac2c89d30b698d3864f71ea0428 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Wed, 2 Mar 2016 15:43:48 +0200 Subject: [PATCH 14/39] Avoiding logging listOfTx requests. --- .../rpcconnector/CryptoCurrencyRPC.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java index dd0311d..bfaf756 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java @@ -542,12 +542,13 @@ private void checkHttpErrors(int statusCode) { } private void logRequest(String callMethod, String jsonResponse, Object[] params) { - StringBuffer buffer = new StringBuffer(""); - for (Object item : params) { - buffer.append(item).append(" | "); + if (!callMethod.equals(APICalls.LIST_TRANSACTIONS.toString())) { + StringBuffer buffer = new StringBuffer(""); + for (Object item : params) { + buffer.append(item).append(" | "); + } + LOG.info("Bitcoin RPC Request: Method: " + callMethod + " Params: " + buffer.toString() + + "\nBitcoin RPC Response : " + jsonResponse); } - LOG.info("Bitcoin RPC Request: Method: " + callMethod + " Params: " + buffer.toString() + - "\nBitcoin RPC Response : " + jsonResponse); - } } From 01ba0bd9aec8159e7babd99ed9b1fad8d679606e Mon Sep 17 00:00:00 2001 From: Romantsov Date: Wed, 2 Mar 2016 18:31:48 +0200 Subject: [PATCH 15/39] Update version in pom.xml. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 31e1a28..31d3d94 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.1.0 + 2.1.1 jar Litecoin-Bitcoin-RPC-Java-Connector From 416c6f61e3938529e760dd889c44d1766578affc Mon Sep 17 00:00:00 2001 From: Romantsov Date: Wed, 6 Apr 2016 17:10:57 +0300 Subject: [PATCH 16/39] Implementation of move command. --- pom.xml | 3 +-- .../bitcoinlitecoin/rpcconnector/APICalls.java | 1 + .../rpcconnector/CryptoCurrencyRPC.java | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 31d3d94..3eedfe9 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.1.1 + 2.2.0 jar Litecoin-Bitcoin-RPC-Java-Connector @@ -172,6 +172,5 @@ 4.12 test - diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java index 3d6b5b8..82c6069 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java @@ -23,6 +23,7 @@ public enum APICalls { SEND_RAW_TRANSACTION("sendrawtransaction"), SET_ACCOUNT("setaccount"), SEND_TO_ADDRESS("sendtoaddress"), + MOVE("move"), GET_ADDRESSES_BY_ACCOUNT("getaddressesbyaccount"), GET_RECEIVED_BY_ACCOUNT("getreceivedbyaccount"), GET_RECEIVED_BY_ADDRESS("getreceivedbyaddress"), diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java index bfaf756..5bc9cd1 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java @@ -320,6 +320,21 @@ public String sendFrom(String fromAccount, String toAddress, BigDecimal amount) return response.get("result").getAsString(); } + /** + * Move from one account in your wallet to another + * + * @param fromAccount + * @param toAccount + * @param amount + * @return + * @throws com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CryptoCurrencyRpcException + */ + public String move(String fromAccount, String toAccount, BigDecimal amount) throws CryptoCurrencyRpcException { + JsonObject response = callAPIMethod(APICalls.MOVE, fromAccount, toAccount, amount); + cryptoCurrencyRpcExceptionHandler.checkException(response); + return response.get("result").getAsString(); + } + /** * < amount > is a real and is rounded to the nearest 0.00000001 * From 3af064e27f300de5f75a27573f1efd829001e219 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Thu, 7 Apr 2016 13:26:25 +0300 Subject: [PATCH 17/39] Add comment to move transfer --- pom.xml | 2 +- .../bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 3eedfe9..0e09a92 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.2.0 + 2.2.1 jar Litecoin-Bitcoin-RPC-Java-Connector diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java index 5bc9cd1..6b9c058 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java @@ -329,10 +329,10 @@ public String sendFrom(String fromAccount, String toAddress, BigDecimal amount) * @return * @throws com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CryptoCurrencyRpcException */ - public String move(String fromAccount, String toAccount, BigDecimal amount) throws CryptoCurrencyRpcException { - JsonObject response = callAPIMethod(APICalls.MOVE, fromAccount, toAccount, amount); + public boolean move(String fromAccount, String toAccount, BigDecimal amount, String comment) throws CryptoCurrencyRpcException { + JsonObject response = callAPIMethod(APICalls.MOVE, fromAccount, toAccount, amount, 1, comment); cryptoCurrencyRpcExceptionHandler.checkException(response); - return response.get("result").getAsString(); + return response.get("result").getAsBoolean(); } /** From 6cfdfaa335f4765f8645ae9bb03a5560635033eb Mon Sep 17 00:00:00 2001 From: Romantsov Date: Mon, 30 May 2016 12:30:30 +0300 Subject: [PATCH 18/39] Omni protocol support. --- .../rpcconnector/APICalls.java | 10 ++- .../rpcconnector/CryptoCurrencyRPC.java | 9 ++- .../rpcconnector/OmniCryptoCurrencyRPC.java | 64 +++++++++++++++++++ .../rpcconnector/pojo/OmniTransaction.java | 25 ++++++++ 4 files changed, 102 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java create mode 100644 src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/OmniTransaction.java diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java index 82c6069..9e9b6e3 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java @@ -39,7 +39,15 @@ public enum APICalls { CREATE_RAW_TRANSACTION("createrawtransaction"), SIGN_RAW_TRANSACTION("signrawtransaction"), VALIDATE_ADDRESS("validateaddress"), - ENCRYPT_WALLET("encryptwallet"); + ENCRYPT_WALLET("encryptwallet"), + + //OMNI + OMNI_SEND("omni_send"), + OMNI_GETINFO("omni_getinfo"), + OMNI_GETBALANCE("omni_getbalance"), + OMNI_GETALLBALANCESFORID("omni_getallbalancesforid"), + OMNI_GETTRANSACTION("omni_gettransaction"), + OMNI_LISTTRANSACTIONS("omni_listtransactions"); private String value; diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java index 6b9c058..576143a 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java @@ -35,9 +35,9 @@ public class CryptoCurrencyRPC { public static final Logger LOG = Logger.getLogger("rpcLogger"); - private CryptoCurrencyRpcExceptionHandler cryptoCurrencyRpcExceptionHandler = new CryptoCurrencyRpcExceptionHandler(); - private Gson gson = new Gson(); - private JsonParser jsonParser = new JsonParser(); + protected CryptoCurrencyRpcExceptionHandler cryptoCurrencyRpcExceptionHandler = new CryptoCurrencyRpcExceptionHandler(); + protected Gson gson = new Gson(); + protected JsonParser jsonParser = new JsonParser(); private static final String CHARACTER_ENCODING = "UTF-8"; private String uri; @@ -384,7 +384,6 @@ public void setAccount(String address, String account) throws CryptoCurrencyRpcE public List listTransactions(String account, int count, int from) throws CryptoCurrencyRpcException { JsonObject jsonObj = callAPIMethod(APICalls.LIST_TRANSACTIONS, account, count, from); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); - return Arrays.asList(gson.fromJson(jsonObj.get("result").getAsJsonArray(), Transaction[].class)); } @@ -504,7 +503,7 @@ public String sendRawTransaction(String hexString) throws CryptoCurrencyRpcExcep //Implementation from https://github.com/SulacoSoft/BitcoindConnector4J repository - private JsonObject callAPIMethod(APICalls callMethod, Object... params) throws CallApiCryptoCurrencyRpcException { + protected JsonObject callAPIMethod(APICalls callMethod, Object... params) throws CallApiCryptoCurrencyRpcException { try { String jsonRequest = String.format("{\"jsonrpc\": \"2.0\", \"method\": \"%s\", \"params\": [%s], \"id\": %s}", callMethod.toString(), buildParamsString(params), id.getAndIncrement()); diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java new file mode 100644 index 0000000..c7d570d --- /dev/null +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java @@ -0,0 +1,64 @@ +package com.nitinsurana.bitcoinlitecoin.rpcconnector; + +import com.google.gson.JsonObject; +import com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CryptoCurrencyRpcException; +import com.nitinsurana.bitcoinlitecoin.rpcconnector.pojo.OmniTransaction; +import com.nitinsurana.bitcoinlitecoin.rpcconnector.pojo.Transaction; + +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.List; + +/** + * Created by d.romantsov on 25.05.2016. + */ +public class OmniCryptoCurrencyRPC extends CryptoCurrencyRPC { + private Long tokenId; + + public OmniCryptoCurrencyRPC(String rpcUser, String rpcPassword, String rpcHost, String rpcPort, long tokenId) { + super(rpcUser, rpcPassword, rpcHost, rpcPort); + this.tokenId = tokenId; + } + + @Override + public String sendFrom(String fromAccount, String toAddress, BigDecimal amount) throws CryptoCurrencyRpcException { + JsonObject response = callAPIMethod(APICalls.OMNI_SEND, fromAccount, toAddress, tokenId, amount); + cryptoCurrencyRpcExceptionHandler.checkException(response); + return response.get("result").getAsString(); + } + + @Override + public String getInfo() throws CryptoCurrencyRpcException { + JsonObject jsonObj = callAPIMethod(APICalls.OMNI_GETINFO); + cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); + return jsonObj.toString(); + } + + @Override + public BigDecimal getBalance(String account) throws CryptoCurrencyRpcException { + JsonObject jsonObj = callAPIMethod(APICalls.OMNI_GETBALANCE, account, tokenId); + cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); + return jsonObj.get("result").getAsBigDecimal(); + } + + @Override + public BigDecimal getBalance() throws CryptoCurrencyRpcException { + JsonObject jsonObj = callAPIMethod(APICalls.OMNI_GETALLBALANCESFORID, tokenId); + cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); + return jsonObj.get("result").getAsBigDecimal(); + } + + @Override + public Transaction getTransaction(String txid) throws CryptoCurrencyRpcException { + JsonObject jsonObj = callAPIMethod(APICalls.OMNI_GETTRANSACTION, txid); + cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); + return gson.fromJson(jsonObj.get("result").getAsJsonObject(), OmniTransaction.class); + } + + @Override + public List listTransactions(String account, int count, int from) throws CryptoCurrencyRpcException { + JsonObject jsonObj = callAPIMethod(APICalls.OMNI_LISTTRANSACTIONS, account, count, from); + cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); + return Arrays.asList(gson.fromJson(jsonObj.get("result").getAsJsonArray(), OmniTransaction[].class)); + } +} diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/OmniTransaction.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/OmniTransaction.java new file mode 100644 index 0000000..66700cb --- /dev/null +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/OmniTransaction.java @@ -0,0 +1,25 @@ +package com.nitinsurana.bitcoinlitecoin.rpcconnector.pojo; + +/** + * Created by d.romantsov on 25.05.2016. + */ +public class OmniTransaction extends Transaction { + private String sendingaddress; + private String referenceaddress; + + public String getReferenceaddress() { + return referenceaddress; + } + + public void setReferenceaddress(String referenceaddress) { + this.referenceaddress = referenceaddress; + } + + public String getSendingaddress() { + return sendingaddress; + } + + public void setSendingaddress(String sendingaddress) { + this.sendingaddress = sendingaddress; + } +} From 6432cf3f8842e42e2c919f7a6a101eb9b0bee41d Mon Sep 17 00:00:00 2001 From: Romantsov Date: Fri, 4 Nov 2016 18:13:23 +0200 Subject: [PATCH 19/39] Update logging. --- src/main/resources/log4j.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties index 5a60bda..465f679 100644 --- a/src/main/resources/log4j.properties +++ b/src/main/resources/log4j.properties @@ -21,5 +21,5 @@ log4j.appender.applog=org.apache.log4j.DailyRollingFileAppender log4j.appender.applog.encoding=UTF-8 log4j.appender.applog.layout=org.apache.log4j.PatternLayout log4j.appender.applog.layout.ConversionPattern=%d{yyyy:MM:dd_HH:mm} %m%n -log4j.appender.applog.File=/var/log/bitcoin-rpc/daily/day.log -log4j.appender.applog.DatePattern='.'yyyyMM:dd_HH:mm'.log' \ No newline at end of file +log4j.appender.applog.File=/var/log/bitcoin-rpc/daily/d +log4j.appender.applog.DatePatctern='.'yyyyMM:dd'.log' \ No newline at end of file From 2d21f7ebe9b53a62b273667cd0f3469b870197b5 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Mon, 30 May 2016 12:30:30 +0300 Subject: [PATCH 20/39] Omni protocol implementation. --- .../rpcconnector/APICalls.java | 10 ++- .../rpcconnector/CryptoCurrencyRPC.java | 9 ++- .../rpcconnector/OmniCryptoCurrencyRPC.java | 64 +++++++++++++++++++ .../rpcconnector/pojo/OmniTransaction.java | 25 ++++++++ 4 files changed, 102 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java create mode 100644 src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/OmniTransaction.java diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java index 82c6069..9e9b6e3 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java @@ -39,7 +39,15 @@ public enum APICalls { CREATE_RAW_TRANSACTION("createrawtransaction"), SIGN_RAW_TRANSACTION("signrawtransaction"), VALIDATE_ADDRESS("validateaddress"), - ENCRYPT_WALLET("encryptwallet"); + ENCRYPT_WALLET("encryptwallet"), + + //OMNI + OMNI_SEND("omni_send"), + OMNI_GETINFO("omni_getinfo"), + OMNI_GETBALANCE("omni_getbalance"), + OMNI_GETALLBALANCESFORID("omni_getallbalancesforid"), + OMNI_GETTRANSACTION("omni_gettransaction"), + OMNI_LISTTRANSACTIONS("omni_listtransactions"); private String value; diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java index 6b9c058..576143a 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java @@ -35,9 +35,9 @@ public class CryptoCurrencyRPC { public static final Logger LOG = Logger.getLogger("rpcLogger"); - private CryptoCurrencyRpcExceptionHandler cryptoCurrencyRpcExceptionHandler = new CryptoCurrencyRpcExceptionHandler(); - private Gson gson = new Gson(); - private JsonParser jsonParser = new JsonParser(); + protected CryptoCurrencyRpcExceptionHandler cryptoCurrencyRpcExceptionHandler = new CryptoCurrencyRpcExceptionHandler(); + protected Gson gson = new Gson(); + protected JsonParser jsonParser = new JsonParser(); private static final String CHARACTER_ENCODING = "UTF-8"; private String uri; @@ -384,7 +384,6 @@ public void setAccount(String address, String account) throws CryptoCurrencyRpcE public List listTransactions(String account, int count, int from) throws CryptoCurrencyRpcException { JsonObject jsonObj = callAPIMethod(APICalls.LIST_TRANSACTIONS, account, count, from); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); - return Arrays.asList(gson.fromJson(jsonObj.get("result").getAsJsonArray(), Transaction[].class)); } @@ -504,7 +503,7 @@ public String sendRawTransaction(String hexString) throws CryptoCurrencyRpcExcep //Implementation from https://github.com/SulacoSoft/BitcoindConnector4J repository - private JsonObject callAPIMethod(APICalls callMethod, Object... params) throws CallApiCryptoCurrencyRpcException { + protected JsonObject callAPIMethod(APICalls callMethod, Object... params) throws CallApiCryptoCurrencyRpcException { try { String jsonRequest = String.format("{\"jsonrpc\": \"2.0\", \"method\": \"%s\", \"params\": [%s], \"id\": %s}", callMethod.toString(), buildParamsString(params), id.getAndIncrement()); diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java new file mode 100644 index 0000000..c7d570d --- /dev/null +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java @@ -0,0 +1,64 @@ +package com.nitinsurana.bitcoinlitecoin.rpcconnector; + +import com.google.gson.JsonObject; +import com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CryptoCurrencyRpcException; +import com.nitinsurana.bitcoinlitecoin.rpcconnector.pojo.OmniTransaction; +import com.nitinsurana.bitcoinlitecoin.rpcconnector.pojo.Transaction; + +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.List; + +/** + * Created by d.romantsov on 25.05.2016. + */ +public class OmniCryptoCurrencyRPC extends CryptoCurrencyRPC { + private Long tokenId; + + public OmniCryptoCurrencyRPC(String rpcUser, String rpcPassword, String rpcHost, String rpcPort, long tokenId) { + super(rpcUser, rpcPassword, rpcHost, rpcPort); + this.tokenId = tokenId; + } + + @Override + public String sendFrom(String fromAccount, String toAddress, BigDecimal amount) throws CryptoCurrencyRpcException { + JsonObject response = callAPIMethod(APICalls.OMNI_SEND, fromAccount, toAddress, tokenId, amount); + cryptoCurrencyRpcExceptionHandler.checkException(response); + return response.get("result").getAsString(); + } + + @Override + public String getInfo() throws CryptoCurrencyRpcException { + JsonObject jsonObj = callAPIMethod(APICalls.OMNI_GETINFO); + cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); + return jsonObj.toString(); + } + + @Override + public BigDecimal getBalance(String account) throws CryptoCurrencyRpcException { + JsonObject jsonObj = callAPIMethod(APICalls.OMNI_GETBALANCE, account, tokenId); + cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); + return jsonObj.get("result").getAsBigDecimal(); + } + + @Override + public BigDecimal getBalance() throws CryptoCurrencyRpcException { + JsonObject jsonObj = callAPIMethod(APICalls.OMNI_GETALLBALANCESFORID, tokenId); + cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); + return jsonObj.get("result").getAsBigDecimal(); + } + + @Override + public Transaction getTransaction(String txid) throws CryptoCurrencyRpcException { + JsonObject jsonObj = callAPIMethod(APICalls.OMNI_GETTRANSACTION, txid); + cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); + return gson.fromJson(jsonObj.get("result").getAsJsonObject(), OmniTransaction.class); + } + + @Override + public List listTransactions(String account, int count, int from) throws CryptoCurrencyRpcException { + JsonObject jsonObj = callAPIMethod(APICalls.OMNI_LISTTRANSACTIONS, account, count, from); + cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); + return Arrays.asList(gson.fromJson(jsonObj.get("result").getAsJsonArray(), OmniTransaction[].class)); + } +} diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/OmniTransaction.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/OmniTransaction.java new file mode 100644 index 0000000..66700cb --- /dev/null +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/OmniTransaction.java @@ -0,0 +1,25 @@ +package com.nitinsurana.bitcoinlitecoin.rpcconnector.pojo; + +/** + * Created by d.romantsov on 25.05.2016. + */ +public class OmniTransaction extends Transaction { + private String sendingaddress; + private String referenceaddress; + + public String getReferenceaddress() { + return referenceaddress; + } + + public void setReferenceaddress(String referenceaddress) { + this.referenceaddress = referenceaddress; + } + + public String getSendingaddress() { + return sendingaddress; + } + + public void setSendingaddress(String sendingaddress) { + this.sendingaddress = sendingaddress; + } +} From c7ddcc4085dabc94845da9367905ab6378b63f81 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Fri, 4 Nov 2016 18:13:23 +0200 Subject: [PATCH 21/39] Update logging. --- src/main/resources/log4j.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties index 5a60bda..465f679 100644 --- a/src/main/resources/log4j.properties +++ b/src/main/resources/log4j.properties @@ -21,5 +21,5 @@ log4j.appender.applog=org.apache.log4j.DailyRollingFileAppender log4j.appender.applog.encoding=UTF-8 log4j.appender.applog.layout=org.apache.log4j.PatternLayout log4j.appender.applog.layout.ConversionPattern=%d{yyyy:MM:dd_HH:mm} %m%n -log4j.appender.applog.File=/var/log/bitcoin-rpc/daily/day.log -log4j.appender.applog.DatePattern='.'yyyyMM:dd_HH:mm'.log' \ No newline at end of file +log4j.appender.applog.File=/var/log/bitcoin-rpc/daily/d +log4j.appender.applog.DatePatctern='.'yyyyMM:dd'.log' \ No newline at end of file From 5d92866140f2e7f60d7d446e3c126db0e0c9ad92 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Wed, 16 Nov 2016 18:43:59 +0200 Subject: [PATCH 22/39] BitcoinD enctyption. --- pom.xml | 2 +- .../rpcconnector/APICalls.java | 1 + .../rpcconnector/CryptoCurrencyRPC.java | 61 ++++++++++++++++--- .../litecoinrpcconnector/ApiTest.java | 16 +++++ 4 files changed, 70 insertions(+), 10 deletions(-) create mode 100644 src/test/java/com/nitinsurana/litecoinrpcconnector/ApiTest.java diff --git a/pom.xml b/pom.xml index 0e09a92..f06dfaf 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.2.1 + 2.2.2 jar Litecoin-Bitcoin-RPC-Java-Connector diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java index 9e9b6e3..f87016d 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/APICalls.java @@ -40,6 +40,7 @@ public enum APICalls { SIGN_RAW_TRANSACTION("signrawtransaction"), VALIDATE_ADDRESS("validateaddress"), ENCRYPT_WALLET("encryptwallet"), + WALLET_PASSPHRASE("walletpassphrase"), //OMNI OMNI_SEND("omni_send"), diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java index 576143a..2745118 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java @@ -46,7 +46,11 @@ public class CryptoCurrencyRPC { private HttpClientContext context; private AtomicLong id = new AtomicLong(1L); - public CryptoCurrencyRPC(final String rpcUser, final String rpcPassword, String rpcHost, String rpcPort) { + private String passphrase; + private int timeToUnlockWalle; + + public CryptoCurrencyRPC(final String rpcUser, final String rpcPassword, String rpcHost, String rpcPort, + String passphrase, int timeToUnlockWalle) { this.uri = "/"; httpClient = HttpClients.createDefault(); @@ -62,17 +66,22 @@ public CryptoCurrencyRPC(final String rpcUser, final String rpcPassword, String context = HttpClientContext.create(); context.setCredentialsProvider(credsProvider); context.setAuthCache(authCache); + this.passphrase = passphrase; + this.timeToUnlockWalle=timeToUnlockWalle; + } + public CryptoCurrencyRPC(final String rpcUser, final String rpcPassword, String rpcHost, String rpcPort) { + this(rpcUser, rpcPassword, rpcHost, rpcPort, null, 0); } - /** - * Safely copies wallet.dat to destination, which can be a directory or a - * path with filename. - * - * @param destination - * @return - * @throws Exception - */ + /** + * Safely copies wallet.dat to destination, which can be a directory or a + * path with filename. + * + * @param destination + * @return + * @throws Exception + */ public boolean backupWallet(String destination) throws CryptoCurrencyRpcException { JsonObject jsonObj = callAPIMethod(APICalls.BACKUP_WALLET, destination); if (jsonObj.get("error") == null) { @@ -102,11 +111,18 @@ public JsonObject decodeRawTransaction(String hex) throws CryptoCurrencyRpcExcep * @throws com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CryptoCurrencyRpcException */ public String dumpPrivateKey(String address) throws CryptoCurrencyRpcException { + unlockWallets(); JsonObject jsonObj = callAPIMethod(APICalls.DUMP_PRIVATE_KEY, address); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); return jsonObj.get("result").getAsString(); } + public String encryptWallet(String passphrase) throws CryptoCurrencyRpcException { + JsonObject jsonObj = callAPIMethod(APICalls.ENCRYPT_WALLET, passphrase); + cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); + return jsonObj.get("result").getAsString(); + } + /** * Returns raw transaction representation for given transaction id. * @@ -315,6 +331,7 @@ public JsonArray listReceivedByAddress() throws CryptoCurrencyRpcException { * @throws com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CryptoCurrencyRpcException */ public String sendFrom(String fromAccount, String toAddress, BigDecimal amount) throws CryptoCurrencyRpcException { + unlockWallets(); JsonObject response = callAPIMethod(APICalls.SEND_FROM, fromAccount, toAddress, amount); cryptoCurrencyRpcExceptionHandler.checkException(response); return response.get("result").getAsString(); @@ -344,6 +361,7 @@ public boolean move(String fromAccount, String toAccount, BigDecimal amount, Str * @throws com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CryptoCurrencyRpcException */ public String sendToAddress(String toAddress, BigDecimal amount) throws CryptoCurrencyRpcException { + unlockWallets(); JsonObject jsonObj = callAPIMethod(APICalls.SEND_TO_ADDRESS, toAddress, amount); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); return jsonObj.get("result").getAsString(); @@ -355,6 +373,23 @@ public boolean validateAddress(String address) throws CryptoCurrencyRpcException return jsonObj.get("result").getAsJsonObject().get("isvalid").getAsBoolean(); } + /** + * Unlock wallet + * @param passphrase + * @param timeout in seconds + * @return + * @throws CryptoCurrencyRpcException + */ + public boolean wallePassphrase(String passphrase, int timeout) throws CryptoCurrencyRpcException { + try { + JsonObject jsonObj = callAPIMethod(APICalls.WALLET_PASSPHRASE, passphrase, timeout); + cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); + return true; + } catch (Exception ex) { + return false; + } + } + /** * Sets the account associated with the given address. Assigning address * that is already assigned to the same account will create a new address @@ -480,6 +515,7 @@ public Transaction createRawTransaction(JsonObject[] prevOut, JsonObject out) th * @throws com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CryptoCurrencyRpcException */ public Transaction signRawTransaction(String hexString) throws CryptoCurrencyRpcException { + unlockWallets(); JsonObject jsonObj = callAPIMethod(APICalls.SIGN_RAW_TRANSACTION,hexString); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); @@ -495,6 +531,7 @@ public Transaction signRawTransaction(String hexString) throws CryptoCurrencyRpc * @throws com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CryptoCurrencyRpcException */ public String sendRawTransaction(String hexString) throws CryptoCurrencyRpcException { + unlockWallets(); JsonObject jsonObj = callAPIMethod(APICalls.SEND_RAW_TRANSACTION,hexString); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); @@ -527,6 +564,12 @@ protected JsonObject callAPIMethod(APICalls callMethod, Object... params) throws } + protected void unlockWallets() { + if (passphrase != null) { + wallePassphrase(passphrase, timeToUnlockWalle); + } + } + private String buildParamsString(Object[] args) { StringBuilder params = new StringBuilder(); if (args != null && args.length > 0) { diff --git a/src/test/java/com/nitinsurana/litecoinrpcconnector/ApiTest.java b/src/test/java/com/nitinsurana/litecoinrpcconnector/ApiTest.java new file mode 100644 index 0000000..78f71ba --- /dev/null +++ b/src/test/java/com/nitinsurana/litecoinrpcconnector/ApiTest.java @@ -0,0 +1,16 @@ +package com.nitinsurana.litecoinrpcconnector; + +import com.nitinsurana.bitcoinlitecoin.rpcconnector.CryptoCurrencyRPC; +import org.junit.Test; + +/** + * Created by d.romantsov on 16.11.2016. + */ +public class ApiTest { + CryptoCurrencyRPC rpc = new CryptoCurrencyRPC("rpcuser", "rpcpassword", "localhost", "18332"); + + @Test + public void testWalletPassphrase() throws Exception { + //rpc.wallePassphrase("dsd", 32); + } +} From 5e93168240f8b452ac4fffa45f84fe6140e43113 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Thu, 24 Nov 2016 13:40:06 +0200 Subject: [PATCH 23/39] OmniTransaction fix. --- .../bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java index c7d570d..8bd5a74 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java @@ -3,7 +3,6 @@ import com.google.gson.JsonObject; import com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CryptoCurrencyRpcException; import com.nitinsurana.bitcoinlitecoin.rpcconnector.pojo.OmniTransaction; -import com.nitinsurana.bitcoinlitecoin.rpcconnector.pojo.Transaction; import java.math.BigDecimal; import java.util.Arrays; @@ -49,7 +48,7 @@ public BigDecimal getBalance() throws CryptoCurrencyRpcException { } @Override - public Transaction getTransaction(String txid) throws CryptoCurrencyRpcException { + public OmniTransaction getTransaction(String txid) throws CryptoCurrencyRpcException { JsonObject jsonObj = callAPIMethod(APICalls.OMNI_GETTRANSACTION, txid); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); return gson.fromJson(jsonObj.get("result").getAsJsonObject(), OmniTransaction.class); From 3176b44038742a2c60ad2a2e0263ce050ec525f3 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Thu, 24 Nov 2016 13:40:57 +0200 Subject: [PATCH 24/39] v 2.2.3 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f06dfaf..6a3792e 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.2.2 + 2.2.3 jar Litecoin-Bitcoin-RPC-Java-Connector From d8ae09dbcd1e180df6c21f89678280cf195be6c7 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Thu, 24 Nov 2016 15:06:30 +0200 Subject: [PATCH 25/39] Extended validation method. --- pom.xml | 2 +- .../bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6a3792e..9fc667d 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.2.3 + 2.2.4 jar Litecoin-Bitcoin-RPC-Java-Connector diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java index 2745118..383817e 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java @@ -373,6 +373,12 @@ public boolean validateAddress(String address) throws CryptoCurrencyRpcException return jsonObj.get("result").getAsJsonObject().get("isvalid").getAsBoolean(); } + public JsonObject checkAndValidateAddress(String address) throws CryptoCurrencyRpcException { + JsonObject jsonObj = callAPIMethod(APICalls.VALIDATE_ADDRESS, address); + cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); + return jsonObj.get("result").getAsJsonObject(); + } + /** * Unlock wallet * @param passphrase From c7ecb85e0b28fc0343b027704e6083267451e251 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Fri, 25 Nov 2016 13:32:48 +0200 Subject: [PATCH 26/39] Add UnsupportedOperationException() --- .../rpcconnector/OmniCryptoCurrencyRPC.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java index 8bd5a74..545d851 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java @@ -3,6 +3,7 @@ import com.google.gson.JsonObject; import com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CryptoCurrencyRpcException; import com.nitinsurana.bitcoinlitecoin.rpcconnector.pojo.OmniTransaction; +import com.nitinsurana.bitcoinlitecoin.rpcconnector.pojo.Transaction; import java.math.BigDecimal; import java.util.Arrays; @@ -60,4 +61,19 @@ public List listTransactions(String account, int count, int from) throws CryptoC cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); return Arrays.asList(gson.fromJson(jsonObj.get("result").getAsJsonArray(), OmniTransaction[].class)); } + + @Override + public String sendRawTransaction(String hexString) throws CryptoCurrencyRpcException { + throw new UnsupportedOperationException(); + } + + @Override + public String sendToAddress(String toAddress, BigDecimal amount) throws CryptoCurrencyRpcException { + throw new UnsupportedOperationException(); + } + + @Override + public Transaction signRawTransaction(String hexString) throws CryptoCurrencyRpcException { + throw new UnsupportedOperationException(); + } } From f8d7462aa0e0694da6553985e730f49f715bb7f8 Mon Sep 17 00:00:00 2001 From: Alex Fokin Date: Tue, 29 Nov 2016 14:18:53 +0200 Subject: [PATCH 27/39] Fix omni balance --- pom.xml | 2 +- .../bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 9fc667d..74f6f11 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.2.4 + 2.2.5 jar Litecoin-Bitcoin-RPC-Java-Connector diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java index 545d851..aad698c 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java @@ -45,7 +45,7 @@ public BigDecimal getBalance(String account) throws CryptoCurrencyRpcException { public BigDecimal getBalance() throws CryptoCurrencyRpcException { JsonObject jsonObj = callAPIMethod(APICalls.OMNI_GETALLBALANCESFORID, tokenId); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); - return jsonObj.get("result").getAsBigDecimal(); + return jsonObj.get("result").getAsJsonObject().get("balance").getAsBigDecimal(); } @Override From 44b2ae000ceb1c09bc9444fc5e706ef7012f8d45 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Tue, 29 Nov 2016 14:37:30 +0200 Subject: [PATCH 28/39] Fix get balance from address. --- .../bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java index aad698c..cfb5f18 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java @@ -38,7 +38,7 @@ public String getInfo() throws CryptoCurrencyRpcException { public BigDecimal getBalance(String account) throws CryptoCurrencyRpcException { JsonObject jsonObj = callAPIMethod(APICalls.OMNI_GETBALANCE, account, tokenId); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); - return jsonObj.get("result").getAsBigDecimal(); + return jsonObj.get("result").getAsJsonObject().get("balance").getAsBigDecimal(); } @Override From eb43d4ceea89f62e7e829cc1daed173448a4a458 Mon Sep 17 00:00:00 2001 From: Romantsov Date: Thu, 22 Dec 2016 16:49:03 +0200 Subject: [PATCH 29/39] IsMine in tx. --- pom.xml | 2 +- .../rpcconnector/pojo/Transaction.java | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 74f6f11..8c6d9b7 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.2.5 + 2.2.6 jar Litecoin-Bitcoin-RPC-Java-Connector diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/Transaction.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/Transaction.java index 7b943b7..2b0205b 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/Transaction.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/Transaction.java @@ -64,8 +64,16 @@ public static Category fromString(String text) { private String otheraccount; private String comment; private String to; - - + private boolean isMine; + + + public boolean isMine() { + return isMine; + } + + public void setMine(boolean mine) { + isMine = mine; + } public String getOtheraccount() { return otheraccount; } From 0d022eb4604484a6a9f738228d5b999aa6eaf870 Mon Sep 17 00:00:00 2001 From: DmRomantsov Date: Tue, 27 Dec 2016 15:42:27 +0200 Subject: [PATCH 30/39] Omni send fix. --- pom.xml | 2 +- .../bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 8c6d9b7..c0e984f 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.2.6 + 2.2.7 jar Litecoin-Bitcoin-RPC-Java-Connector diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java index cfb5f18..43785e3 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java @@ -22,7 +22,7 @@ public OmniCryptoCurrencyRPC(String rpcUser, String rpcPassword, String rpcHost, @Override public String sendFrom(String fromAccount, String toAddress, BigDecimal amount) throws CryptoCurrencyRpcException { - JsonObject response = callAPIMethod(APICalls.OMNI_SEND, fromAccount, toAddress, tokenId, amount); + JsonObject response = callAPIMethod(APICalls.OMNI_SEND, fromAccount, toAddress, tokenId, amount.toPlainString()); cryptoCurrencyRpcExceptionHandler.checkException(response); return response.get("result").getAsString(); } From d0e7393a1b9d31cc2c8209617258a414c75dcb45 Mon Sep 17 00:00:00 2001 From: DmRomantsov Date: Tue, 27 Dec 2016 16:19:49 +0200 Subject: [PATCH 31/39] Omni get balance fix. --- pom.xml | 2 +- .../bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index c0e984f..4376174 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.2.7 + 2.2.8 jar Litecoin-Bitcoin-RPC-Java-Connector diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java index 43785e3..f22ec80 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java @@ -38,7 +38,7 @@ public String getInfo() throws CryptoCurrencyRpcException { public BigDecimal getBalance(String account) throws CryptoCurrencyRpcException { JsonObject jsonObj = callAPIMethod(APICalls.OMNI_GETBALANCE, account, tokenId); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); - return jsonObj.get("result").getAsJsonObject().get("balance").getAsBigDecimal(); + return jsonObj.getAsJsonObject("result").getAsJsonObject("balance").get("balance").getAsBigDecimal(); } @Override From 66a41ba22f3c0146204ca9a8f69a33cf0f355ff0 Mon Sep 17 00:00:00 2001 From: DmRomantsov Date: Tue, 27 Dec 2016 16:39:49 +0200 Subject: [PATCH 32/39] Omni balance fix. --- pom.xml | 2 +- .../bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 4376174..a4466ca 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.2.8 + 2.2.9 jar Litecoin-Bitcoin-RPC-Java-Connector diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java index f22ec80..dca1c83 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java @@ -38,7 +38,7 @@ public String getInfo() throws CryptoCurrencyRpcException { public BigDecimal getBalance(String account) throws CryptoCurrencyRpcException { JsonObject jsonObj = callAPIMethod(APICalls.OMNI_GETBALANCE, account, tokenId); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); - return jsonObj.getAsJsonObject("result").getAsJsonObject("balance").get("balance").getAsBigDecimal(); + return jsonObj.getAsJsonObject("result").get("balance").getAsBigDecimal(); } @Override From 70b909e1855533fb788510a0755230fa59e35dea Mon Sep 17 00:00:00 2001 From: DmRomantsov Date: Tue, 27 Dec 2016 17:54:21 +0200 Subject: [PATCH 33/39] property id in tx. --- pom.xml | 2 +- .../rpcconnector/pojo/OmniTransaction.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a4466ca..29305a5 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.2.9 + 2.2.10 jar Litecoin-Bitcoin-RPC-Java-Connector diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/OmniTransaction.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/OmniTransaction.java index 66700cb..0e5fb1b 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/OmniTransaction.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/OmniTransaction.java @@ -6,6 +6,7 @@ public class OmniTransaction extends Transaction { private String sendingaddress; private String referenceaddress; + private Long propertyid; public String getReferenceaddress() { return referenceaddress; @@ -22,4 +23,12 @@ public String getSendingaddress() { public void setSendingaddress(String sendingaddress) { this.sendingaddress = sendingaddress; } + + public Long getPropertyid() { + return propertyid; + } + + public void setPropertyid(Long propertyid) { + this.propertyid = propertyid; + } } From 075aa2ac5971b55bdf2129322d817035b1797c41 Mon Sep 17 00:00:00 2001 From: DmRomantsov Date: Fri, 3 Feb 2017 16:10:51 +0200 Subject: [PATCH 34/39] CryptoCurrency in tx info. --- pom.xml | 6 ++--- .../rpcconnector/CryptoCurrencyRPC.java | 24 ++++++++++++++----- .../rpcconnector/OmniCryptoCurrencyRPC.java | 7 ++++-- .../rpcconnector/pojo/Transaction.java | 17 +++++++++++-- 4 files changed, 41 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index 29305a5..c2a0fcd 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.2.10 + 2.2.11 jar Litecoin-Bitcoin-RPC-Java-Connector @@ -75,8 +75,8 @@ maven-compiler-plugin 2.0.2 - 1.6 - 1.6 + 1.8 + 1.8 diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java index 383817e..eec23dc 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java @@ -30,6 +30,7 @@ import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.Collectors; public class CryptoCurrencyRPC { @@ -45,12 +46,13 @@ public class CryptoCurrencyRPC { private HttpHost targetHost; private HttpClientContext context; private AtomicLong id = new AtomicLong(1L); + protected String cryptoCurrency; private String passphrase; private int timeToUnlockWalle; public CryptoCurrencyRPC(final String rpcUser, final String rpcPassword, String rpcHost, String rpcPort, - String passphrase, int timeToUnlockWalle) { + String passphrase, int timeToUnlockWalle, String cryptoCurrency) { this.uri = "/"; httpClient = HttpClients.createDefault(); @@ -68,10 +70,15 @@ public CryptoCurrencyRPC(final String rpcUser, final String rpcPassword, String context.setAuthCache(authCache); this.passphrase = passphrase; this.timeToUnlockWalle=timeToUnlockWalle; + this.cryptoCurrency = cryptoCurrency; } public CryptoCurrencyRPC(final String rpcUser, final String rpcPassword, String rpcHost, String rpcPort) { - this(rpcUser, rpcPassword, rpcHost, rpcPort, null, 0); + this(rpcUser, rpcPassword, rpcHost, rpcPort, null, 0, "BTC"); + } + + public CryptoCurrencyRPC(final String rpcUser, final String rpcPassword, String rpcHost, String rpcPort, String cryptoCurrency) { + this(rpcUser, rpcPassword, rpcHost, rpcPort, null, 0, cryptoCurrency); } /** @@ -278,9 +285,11 @@ public BigDecimal getReceivedByAddress(String address) throws CryptoCurrencyRpcE public Transaction getTransaction(String txid) throws CryptoCurrencyRpcException { JsonObject jsonObj = callAPIMethod(APICalls.GET_TRANSACTION, txid); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); - return gson.fromJson(jsonObj.get("result").getAsJsonObject(), Transaction.class); + return gson.fromJson(jsonObj.get("result").getAsJsonObject(), Transaction.class) + .andSetCryptoCurrency(cryptoCurrency); } + /** * Returns Object that has account names as keys, account balances as * values. @@ -425,7 +434,8 @@ public void setAccount(String address, String account) throws CryptoCurrencyRpcE public List listTransactions(String account, int count, int from) throws CryptoCurrencyRpcException { JsonObject jsonObj = callAPIMethod(APICalls.LIST_TRANSACTIONS, account, count, from); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); - return Arrays.asList(gson.fromJson(jsonObj.get("result").getAsJsonArray(), Transaction[].class)); + return Arrays.stream(gson.fromJson(jsonObj.get("result").getAsJsonArray(), Transaction[].class)) + .map(tx -> tx.andSetCryptoCurrency(cryptoCurrency)).collect(Collectors.toList()); } /** @@ -509,7 +519,8 @@ public Transaction createRawTransaction(JsonObject[] prevOut, JsonObject out) th JsonObject jsonObj = callAPIMethod(APICalls.CREATE_RAW_TRANSACTION, prevOut, out); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); - return gson.fromJson(jsonObj.get("result").getAsJsonObject(), Transaction.class); + return gson.fromJson(jsonObj.get("result").getAsJsonObject(), Transaction.class) + .andSetCryptoCurrency(cryptoCurrency); } /** @@ -525,7 +536,8 @@ public Transaction signRawTransaction(String hexString) throws CryptoCurrencyRpc JsonObject jsonObj = callAPIMethod(APICalls.SIGN_RAW_TRANSACTION,hexString); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); - return gson.fromJson(jsonObj.get("result").getAsJsonObject(), Transaction.class); + return gson.fromJson(jsonObj.get("result").getAsJsonObject(), Transaction.class) + .andSetCryptoCurrency(cryptoCurrency); } /** diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java index dca1c83..3f062ff 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/OmniCryptoCurrencyRPC.java @@ -8,6 +8,7 @@ import java.math.BigDecimal; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; /** * Created by d.romantsov on 25.05.2016. @@ -52,14 +53,16 @@ public BigDecimal getBalance() throws CryptoCurrencyRpcException { public OmniTransaction getTransaction(String txid) throws CryptoCurrencyRpcException { JsonObject jsonObj = callAPIMethod(APICalls.OMNI_GETTRANSACTION, txid); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); - return gson.fromJson(jsonObj.get("result").getAsJsonObject(), OmniTransaction.class); + OmniTransaction tx = gson.fromJson(jsonObj.get("result").getAsJsonObject(), OmniTransaction.class); + tx.setCryptoCurrency(cryptoCurrency); + return tx; } @Override public List listTransactions(String account, int count, int from) throws CryptoCurrencyRpcException { JsonObject jsonObj = callAPIMethod(APICalls.OMNI_LISTTRANSACTIONS, account, count, from); cryptoCurrencyRpcExceptionHandler.checkException(jsonObj); - return Arrays.asList(gson.fromJson(jsonObj.get("result").getAsJsonArray(), OmniTransaction[].class)); + return Arrays.stream(gson.fromJson(jsonObj.get("result").getAsJsonArray(), OmniTransaction[].class)).map(tx -> tx.andSetCryptoCurrency(cryptoCurrency)).collect(Collectors.toList()); } @Override diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/Transaction.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/Transaction.java index 2b0205b..3301d4a 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/Transaction.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/pojo/Transaction.java @@ -65,7 +65,7 @@ public static Category fromString(String text) { private String comment; private String to; private boolean isMine; - + private String cryptoCurrency; public boolean isMine() { return isMine; @@ -151,7 +151,20 @@ public Transaction setBlock(long block) { this.block = block; return this; } - + + public String getCryptoCurrency() { + return cryptoCurrency; + } + + public Transaction andSetCryptoCurrency(String cryptoCurrency) { + this.cryptoCurrency = cryptoCurrency; + return this; + } + + public void setCryptoCurrency(String cryptoCurrency) { + this.cryptoCurrency = cryptoCurrency; + } + public String getHex() { return hex; } From de5d19ce2ae3c241f06254d0856a00b2098e884f Mon Sep 17 00:00:00 2001 From: DmRomantsov Date: Wed, 8 Feb 2017 18:45:59 +0200 Subject: [PATCH 35/39] Allow null as username and password --- pom.xml | 2 +- .../rpcconnector/CryptoCurrencyRPC.java | 22 ++++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index c2a0fcd..d0da749 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.2.11 + 2.2.12 jar Litecoin-Bitcoin-RPC-Java-Connector diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java index eec23dc..f403a52 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java @@ -57,17 +57,19 @@ public CryptoCurrencyRPC(final String rpcUser, final String rpcPassword, String httpClient = HttpClients.createDefault(); targetHost = new HttpHost(rpcHost, Integer.parseInt(rpcPort), "http"); - CredentialsProvider credsProvider = new BasicCredentialsProvider(); - credsProvider.setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()), - new UsernamePasswordCredentials(rpcUser, rpcPassword)); - - AuthCache authCache = new BasicAuthCache(); - BasicScheme basicAuth = new BasicScheme(); - authCache.put(targetHost, basicAuth); - context = HttpClientContext.create(); - context.setCredentialsProvider(credsProvider); - context.setAuthCache(authCache); + if (rpcUser != null && rpcPassword != null) { + CredentialsProvider credsProvider = new BasicCredentialsProvider(); + credsProvider.setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()), + new UsernamePasswordCredentials(rpcUser, rpcPassword)); + + AuthCache authCache = new BasicAuthCache(); + BasicScheme basicAuth = new BasicScheme(); + authCache.put(targetHost, basicAuth); + context.setCredentialsProvider(credsProvider); + context.setAuthCache(authCache); + } + this.passphrase = passphrase; this.timeToUnlockWalle=timeToUnlockWalle; this.cryptoCurrency = cryptoCurrency; From 8373591da262e2c74c653c3b1cef2ddfbc3f63ed Mon Sep 17 00:00:00 2001 From: DmRomantsov Date: Mon, 20 Mar 2017 17:25:06 +0200 Subject: [PATCH 36/39] Add MockCryptoCurrencyRpc. --- pom.xml | 2 +- .../rpcconnector/MockCryptoCurrencyRpc.java | 117 ++++++++++++++++++ 2 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/MockCryptoCurrencyRpc.java diff --git a/pom.xml b/pom.xml index d0da749..8ef2aac 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.2.12 + 2.2.13 jar Litecoin-Bitcoin-RPC-Java-Connector diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/MockCryptoCurrencyRpc.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/MockCryptoCurrencyRpc.java new file mode 100644 index 0000000..6529ebc --- /dev/null +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/MockCryptoCurrencyRpc.java @@ -0,0 +1,117 @@ +package com.nitinsurana.bitcoinlitecoin.rpcconnector; + +import com.google.gson.JsonArray; +import com.nitinsurana.bitcoinlitecoin.rpcconnector.exception.CryptoCurrencyRpcException; +import com.nitinsurana.bitcoinlitecoin.rpcconnector.pojo.Transaction; + +import java.math.BigDecimal; + +/** + * Created by d.romantsov on 20.03.2017. + */ +public class MockCryptoCurrencyRpc extends CryptoCurrencyRPC { + public MockCryptoCurrencyRpc() { + super(null, null, null, null, null, 0, "MOCK"); + } + + @Override + public boolean backupWallet(String destination) throws CryptoCurrencyRpcException { + return true; + } + + @Override + public String dumpPrivateKey(String address) throws CryptoCurrencyRpcException { + return address; + } + + @Override + public String encryptWallet(String passphrase) throws CryptoCurrencyRpcException { + return passphrase; + } + + @Override + public String getAccount(String address) throws CryptoCurrencyRpcException { + return "mockAccount"; + } + + @Override + public String getAccountAddress(String account) throws CryptoCurrencyRpcException { + return "n1v1XpeNaC124r9DXcBAka2XgJpcMpUBMB"; + } + + @Override + public JsonArray getAddressesByAccount(String account) throws CryptoCurrencyRpcException { + return new JsonArray(); + } + + @Override + public BigDecimal getBalance(String account) throws CryptoCurrencyRpcException { + return BigDecimal.TEN; + } + + @Override + public BigDecimal getBalance() throws CryptoCurrencyRpcException { + return BigDecimal.TEN; + } + + @Override + public BigDecimal getReceivedByAccount(String account) throws CryptoCurrencyRpcException { + return BigDecimal.TEN; + } + + @Override + public String getNewAddress() throws CryptoCurrencyRpcException { + return "n1v1XpeNaC124r9DXcBAka2XgJpcMpUBMB"; + } + + @Override + public String getInfo() throws CryptoCurrencyRpcException { + return "MockInfo"; + } + + @Override + public String getNewAddress(String account) throws CryptoCurrencyRpcException { + return "n1v1XpeNaC124r9DXcBAka2XgJpcMpUBMB"; + } + + @Override + public BigDecimal getReceivedByAddress(String address) throws CryptoCurrencyRpcException { + return BigDecimal.TEN; + } + + @Override + public Transaction getTransaction(String txid) throws CryptoCurrencyRpcException { + return new Transaction(); + } + + @Override + public String sendFrom(String fromAccount, String toAddress, BigDecimal amount) throws CryptoCurrencyRpcException { + return "asdasdasdasdasd"; + } + + @Override + public boolean move(String fromAccount, String toAccount, BigDecimal amount, String comment) throws CryptoCurrencyRpcException { + return true; + } + + @Override + public String sendToAddress(String toAddress, BigDecimal amount) throws CryptoCurrencyRpcException { + return "asdasdasdasdasd"; + } + + @Override + public boolean validateAddress(String address) throws CryptoCurrencyRpcException { + return true; + } + + + @Override + public boolean wallePassphrase(String passphrase, int timeout) throws CryptoCurrencyRpcException { + return true; + } + + @Override + public void setAccount(String address, String account) throws CryptoCurrencyRpcException { + + } +} From 4e1e21474273f571241a2c6845f7f6756b9e52b6 Mon Sep 17 00:00:00 2001 From: DmRomantsov Date: Mon, 20 Mar 2017 17:42:56 +0200 Subject: [PATCH 37/39] Add mock for txs. --- pom.xml | 2 +- .../rpcconnector/MockCryptoCurrencyRpc.java | 28 +++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 8ef2aac..41b8f27 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.2.13 + 2.2.14 jar Litecoin-Bitcoin-RPC-Java-Connector diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/MockCryptoCurrencyRpc.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/MockCryptoCurrencyRpc.java index 6529ebc..9c49847 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/MockCryptoCurrencyRpc.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/MockCryptoCurrencyRpc.java @@ -5,13 +5,37 @@ import com.nitinsurana.bitcoinlitecoin.rpcconnector.pojo.Transaction; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; /** * Created by d.romantsov on 20.03.2017. */ public class MockCryptoCurrencyRpc extends CryptoCurrencyRPC { public MockCryptoCurrencyRpc() { - super(null, null, null, null, null, 0, "MOCK"); + super(null, null, "localhost", "1245", null, 0, "MOCK"); + } + + private Transaction getMockTransaction() { + Transaction tx = new Transaction(); + tx.setAccount("mockAccount"); + tx.setAddress("n1v1XpeNaC124r9DXcBAka2XgJpcMpUBMB"); + tx.setCategory(Transaction.Category.RECEIVE); + tx.setAmount(BigDecimal.ONE); + tx.setFee(new BigDecimal("0.002")); + return tx; + } + + @Override + public List listTransactions(String account, int count, int from) throws CryptoCurrencyRpcException { + ArrayList txs= new ArrayList(); + txs.add(getMockTransaction()); + txs.add(getMockTransaction()); + txs.add(getMockTransaction()); + txs.add(getMockTransaction()); + txs.add(getMockTransaction()); + txs.add(getMockTransaction()); + return txs; } @Override @@ -81,7 +105,7 @@ public BigDecimal getReceivedByAddress(String address) throws CryptoCurrencyRpcE @Override public Transaction getTransaction(String txid) throws CryptoCurrencyRpcException { - return new Transaction(); + return getMockTransaction(); } @Override From c46150ae0d958bf9ea5b5e1005e4802cb9e2033c Mon Sep 17 00:00:00 2001 From: DmRomantsov Date: Wed, 26 Apr 2017 14:56:28 +0300 Subject: [PATCH 38/39] Allow use reletive path in host url. --- pom.xml | 2 +- .../rpcconnector/CryptoCurrencyRPC.java | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 41b8f27..89d52bd 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.2.14 + 2.2.15 jar Litecoin-Bitcoin-RPC-Java-Connector diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java index f403a52..97569f6 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/CryptoCurrencyRPC.java @@ -1,5 +1,6 @@ package com.nitinsurana.bitcoinlitecoin.rpcconnector; +import java.net.*; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonObject; @@ -52,11 +53,19 @@ public class CryptoCurrencyRPC { private int timeToUnlockWalle; public CryptoCurrencyRPC(final String rpcUser, final String rpcPassword, String rpcHost, String rpcPort, - String passphrase, int timeToUnlockWalle, String cryptoCurrency) { - this.uri = "/"; + String passphrase, int timeToUnlockWalle, String cryptoCurrency) { + String host; + try { + URL url = new URL(rpcHost); + this.uri = url.getPath(); + host=url.getHost(); + } catch (MalformedURLException ex) { + this.uri = "/"; + host=rpcHost; + } httpClient = HttpClients.createDefault(); - targetHost = new HttpHost(rpcHost, Integer.parseInt(rpcPort), "http"); + targetHost = new HttpHost(host, Integer.parseInt(rpcPort), "http"); context = HttpClientContext.create(); if (rpcUser != null && rpcPassword != null) { CredentialsProvider credsProvider = new BasicCredentialsProvider(); From 9f19a8403b7cdfb37b79da7ae89d9fa0f639d97f Mon Sep 17 00:00:00 2001 From: DmRomantsov Date: Thu, 9 Nov 2017 16:11:22 +0200 Subject: [PATCH 39/39] Tx mock impruvment. --- pom.xml | 2 +- .../rpcconnector/MockCryptoCurrencyRpc.java | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 89d52bd..58c9b2e 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ com.nitinsurana Litecoin-Bitcoin-RPC-Java-Connector - 2.2.15 + 2.2.16 jar Litecoin-Bitcoin-RPC-Java-Connector diff --git a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/MockCryptoCurrencyRpc.java b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/MockCryptoCurrencyRpc.java index 9c49847..9a3940b 100644 --- a/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/MockCryptoCurrencyRpc.java +++ b/src/main/java/com/nitinsurana/bitcoinlitecoin/rpcconnector/MockCryptoCurrencyRpc.java @@ -6,12 +6,16 @@ import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Date; import java.util.List; +import java.util.Random; /** * Created by d.romantsov on 20.03.2017. */ public class MockCryptoCurrencyRpc extends CryptoCurrencyRPC { + private Random random = new Random(); + public MockCryptoCurrencyRpc() { super(null, null, "localhost", "1245", null, 0, "MOCK"); } @@ -20,9 +24,10 @@ private Transaction getMockTransaction() { Transaction tx = new Transaction(); tx.setAccount("mockAccount"); tx.setAddress("n1v1XpeNaC124r9DXcBAka2XgJpcMpUBMB"); - tx.setCategory(Transaction.Category.RECEIVE); - tx.setAmount(BigDecimal.ONE); - tx.setFee(new BigDecimal("0.002")); + tx.setCategory(random.nextBoolean() ? Transaction.Category.RECEIVE: Transaction.Category.SEND); + tx.setAmount(new BigDecimal(random.nextDouble())); + tx.setFee(new BigDecimal(random.nextDouble()/10)); + tx.setTimereceived(new Date().getTime() - random.nextInt(10000)); return tx; }