package com.util;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;
import com.googlecode.jsonrpc4j.Base64;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
/**
*
*/
public class BtcRpc {
protected static final String user = ""; //rpc接口用户名
protected static final String password = "";//rpc接口密码
private static String cred = ”;
private static String url = null;
private static JSONObject json;
public static void main(String[] args) {
}
/**
* 根据交易签名发送交易
* @param sign 交易签名
* @return
*/
public static String sendBTCSign(String sign) {
String msg="error:发送交易失败";
try {
JSONObject result = JSONObject.fromObject(sendRawTransaction(sign));
System.out.println("发送签名结果:"+result);
//如果转账成功
if(result.get("result")==null){
//获取错误信息
msg=net.sf.json.JSONObject.fromObject(result.get("error")).getString("message");
}else{
String txid=result.getString("result");
if (txid.length() == 64) {
msg="success:".concat(txid);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return msg;
}
/**
* 导入地址
* @param address
* @return
*/
public static String importAddress(String address) {
Object[] str = {address};
json = new JSONObject();
try {
json.put("method", "importaddress");
json.put("params", str);
json.put("id", Object.class);
} catch (JSONException e) {
e.printStackTrace();
}
String result = post(json);
return result;
}
/**
* 根据hash查询交易详情
* @param hash
* @return
*/
public static String getRawTransaction(String hash) {
Object[] str = {hash,1};
json = new JSONObject();
try {
json.put("method", "getrawtransaction");
json.put("params", str);
json.put("id", Object.class);
} catch (JSONException e) {
e.printStackTrace();
}
String result = post(json);
return result;
}
/**
* 获取块高
* @return
*/
public static String getBlockCount() {
Object[] str = {};
json = new JSONObject();
try {
json.put("method", "getblockcount");
json.put("params", str);
json.put("id", Object.class);
} catch (JSONException e) {
e.printStackTrace();
}
String result = post(json);
return result;
}
/**
* 根据块hash获取块信息
*
* @param blockHash
* @returnlock
*/
public static Object getBlock(String blockHash) {
Object[] str = {blockHash, 1};
json = new JSONObject();
try {
json.put("method", "getblock");
json.put("params", str);
json.put("id", Object.class);
} catch (JSONException e) {
e.printStackTrace();
}
System.out.println(post(json));
return post(json);
}
/**
* 返回所有账户的交易
* @return
*/
public static String listTransactions(){
Object[] str = {};
json = new JSONObject();
try {
json.put("method", "listsinceblock");
json.put("params", str);
json.put("id", Object.class);
} catch (JSONException e) {
e.printStackTrace();
}
String result = post(json);
return result;
}
/**
* 获取btc中间费率
* @return
*/
public static int getBtcHalfFree(){
//fastestFee-最快费率 halfHourFee-中间费率 hourFee-最低费率
int free=0;
try {
net.sf.json.JSONObject object=net.sf.json.JSONObject.fromObject(get("https://bitcoinfees.21.co/api/v1/fees/recommended"));
free=Integer.parseInt(object.get("halfHourFee").toString());
} catch (Exception e) {
e.printStackTrace();
}
return free;
}
/**
* 根据块高度获取块哈希
* @param height
* @return
*/
public static String getBlockHash(int height){
Object[] str = {height};
json = new JSONObject();
try {
json.put("method", "getblockhash");
json.put("params", str);
json.put("id", Object.class);
} catch (JSONException e) {
e.printStackTrace();
}
return post(json);
}
/**
* 查询代币余额
* @param address
* @param contactAddress
* @return
*/
public static double getTokenBalance(String address, int contactAddress) {
double price=0;
try {
Object[] str = {address,contactAddress};
json = new JSONObject();
json.put("method", "omni_getbalance");
json.put("params", str);
json.put("id", Object.class);
net.sf.json.JSONObject object=net.sf.json.JSONObject.fromObject(post(json));
price=object.getJSONObject("result").getDouble("balance");
} catch (Exception e) {
}
return price;
}
/**
* 根据签名发送交易
* @param sign 交易签名
* @return
* @throws JSONException
*/
public static String sendRawTransaction(String sign) throws JSONException{
Object[] str = {sign};
JSONObject json = new JSONObject();
json.put("method", "sendrawtransaction");
json.put("params", str);
json.put("id", Object.class);
String result = post(json);
return result;
}
/**
* https://insight.bitpay.com/api/addr/"+address+"/utxo
* 拉取比特大陆的utxo(参考https://wiki.trezor.io/)
* @param address
* @return
*/
public static JSONObject getBtcUtxo(String address){
JSONObject jsonObject = null;
try {
jsonObject = JSONObject.fromObject(getHttpResponse("https://bitcoinblockexplorers.com/api/addrs/"+address+"/utxo"));;
} catch (Exception e) {
e.printStackTrace();
}
return jsonObject;
}
/**
* 查询代币交易
*
* @param txHash
* @return
*/
public static String getTokentransaction(String txHash) {
String transaction = "";
try {
Object[] str = {txHash};
json = new JSONObject();
json.put("method", "omni_gettransaction");
json.put("params", str);
json.put("id", Object.class);
net.sf.json.JSONObject object = net.sf.json.JSONObject.fromObject(post(json));
transaction = object.getJSONObject("result").toString();
} catch (Exception e) {
}
return transaction;
}
/**
* 查询代币交易
*
* @param
* @return
*/
public static String getTokenSend(String fromaddress, String toaddress, Integer propertyid, BigDecimal amount) {
String transaction = "";
try {
Object[] str = {fromaddress, toaddress, propertyid, amount};
json = new JSONObject();
json.put("method", "omni_send");
json.put("params", str);
json.put("id", Object.class);
net.sf.json.JSONObject object = net.sf.json.JSONObject.fromObject(post(json));
transaction = object.getJSONObject("result").toString();
} catch (Exception e) {
}
return transaction;
}
/**
* 查询代币交易
*
* @param
* @return
*/
public static JSONObject getlistblocktransactions(long index) {
net.sf.json.JSONObject object = null;
try {
Object[] str = {index};
json = new JSONObject();
json.put("method", "omni_listblocktransactions");
json.put("params", str);
json.put("id", Object.class);
object = net.sf.json.JSONObject.fromObject(post(json));
} catch (Exception e) {
}
return object;
}
/** * https://bitcoinblockexplorers.com/API/addr/" + address + "/balance
* 获取地址余额 * @param address * @return */
public static JSONObject getBalance(String address){
JSONObject jsonObject = null;
try {
jsonObject = JSONObject.fromObject(getHttpResponse("https://blockchain.info/unspent?active="+address));
} catch (Exception e) {
e.printStackTrace();
}
return jsonObject;
}
/** * rpc请求post * @param json * @return */
public static String post(JSONObject json) {
HttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost(url);
post.setHeader("Content-Type", "application/json")
post.setHeader("Authorization", "Basic " + cred);
String result = "";
try {
StringEntity s = new StringEntity(json.toString(), "utf-8");
s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json")); post.setEntity(s);
// 发送请求
HttpResponse httpResponse = client.execute(post);
// 获取响应输入流 InputStream inStream = httpResponse.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader( inStream, "utf-8"));
StringBuilder strber = new StringBuilder(); String line = null;
while ((line = reader.readLine()) != null)
strber.append(line); inStream.close(); result = strber.toString();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/** * get请求 * @param url * @return */
public static String get(String url) {
HttpClient client = HttpClients.createDefault();
HttpGet get = new HttpGet(url);
get.setHeader("Content-Type", "application/json"); String result = "";
try {
// 发送请求
HttpResponse httpResponse = client.execute(get);
// 获取响应输入流
InputStream inStream = httpResponse.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader( inStream, "utf-8"));
StringBuilder strber = new StringBuilder(); String line = null;
while ((line = reader.readLine()) != null) strber.append(line);
inStream.close(); result = strber.toString();
} catch (Exception e) { e.printStackTrace(); }
return result;
}
/** * 获取http请求返回结果 * @param allConfigUrl * @return */
public static String getHttpResponse(String allConfigUrl) {
BufferedReader in = null;
StringBuffer result = null;
try {
URI uri = new URI(allConfigUrl);
URL url = uri.toURL();
URLConnection connection = url.openConnection();
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Charset", "utf-8");
connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
connection.connect();
connection.setConnectTimeout(60*1000);//超时60秒 result = new StringBuffer();
in = new BufferedReader(new InputStreamReader( connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result.append(line);
}
return result.toString();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
return null;
}
}
https://blog.csdn.net/jiujiuming/article/details/103988712