上代码
如果帮助到了你 请点点关注 谢谢
@Data
public class BtcApi {
Logger logger = Logger.getLogger(BtcApi.class) ;
private String rpcUrl ;
private String rpcName ;
private String rpcPwd ;
private static final String coinName = "BTC" ;
// 创建新地址
private static final String getnewaddress = "getnewaddress" ;
// 验证地址是否存在
private static final String validateaddress = "validateaddress" ;
// 转账
private static final String sendtoaddress = "sendtoaddress" ;
// 获取余额
private static final String getbalance = "getbalance" ;
// 解锁钱包(设置钱包密码时使用)
private static final String walletpassphrase = "walletpassphrase" ;
// 查询区块信息
private static final String listtransactions = "listtransactions" ;
public BtcApi(String rpcUrl, String rpcName, String rpcPwd) {
this.rpcUrl = rpcUrl;
this.rpcName = rpcName;
this.rpcPwd = rpcPwd;
}
public static BtcApi getInitialization(String rpcUrl, String rpcName, String rpcPwd){
return new BtcApi(rpcUrl,rpcName,rpcPwd);
}
private JSONObject doRequest(String method, Object[] params) { JSONObject param = new JSONObject();
param.put("id", System.currentTimeMillis());
param.put("jsonrpc", "2.0");
param.put("method", method);
if (params != null) {
param.put("params", params);
}
String creb = Base64.encodeBase64String((rpcName+":"+rpcPwd).getBytes());
Map headers = new HashMap<>(2);
headers.put("Authorization", "Basic " + creb);
return JSON.parseObject(HttpUtil.jsonPost(this.rpcUrl, headers, param.toJSONString()));
}
private boolean isError(JSONObject jsonObject) {
if ((jsonObject == null) || ((StringUtils.isNotEmpty(jsonObject.getString("error"))) && (jsonObject.get("error") != "null"))) {
logger.error("error:"+jsonObject.getString("error"));
return true;
}
return false;
}
/**
* 创建地址
* @param obj
* @return
*/
private String newAddress(String obj) {
try{
JSONObject jsonObject = doRequest(getnewaddress, new Object[]{});
if(isError(jsonObject)){
logger.error("生成地址错误!");
return "" ;
}
return jsonObject.getString("result");
}catch (Exception e){
e.printStackTrace();
logger.error("获取"+coinName+"链接失败!");
}
return "" ;
}
/**
* 获取余额
* @param address
* @return
*/
private double getBalanceNumber(String address) {
try {
JSONObject json = doRequest(getbalance, new Object[0]);
if (isError(json)) {
this.logger.error("获取"+coinName+"余额:" + json.get("error"));
return new BigDecimal(0).doubleValue();
}
return NumberUtils.roundBigDecimal(new BigDecimal(json.getDouble("result").doubleValue()), 8).doubleValue();
} catch (Exception e) {
this.logger.error("==============虚拟币-"+coinName+"getbalance失败!");
e.printStackTrace();
return new BigDecimal(0).doubleValue() ;
}
}
/**
* 解锁钱包
* @param pwd
* @param times
* @return
*/
private boolean walletpassphrase(String pwd, long times) {
try {
JSONObject obj = doRequest(walletpassphrase, new Object[] { pwd, Long.valueOf(times) });
if (isError(obj)) {
return false;
}
return true;
}
catch (Exception e) {
this.logger.error("==============虚拟币-"+coinName+"解锁失败!==========");
e.printStackTrace();
}return false;
}
/**
* 转账
* @param pwd
* @param address
* @param amt
* @return
*/
private synchronized String sendtoaddress(String pwd, String address, double amt)
{
try
{
boolean flag = walletpassphrase(pwd, 10L); // 解鎖錢包
if (flag) {
JSONObject json = doRequest("sendtoaddress", new Object[] { address, Double.valueOf(amt) });
logger.error("=============="+coinName+"转账返回:"+json);
if (isError(json)) {
logger.error(coinName+" 转帐给{" + address + "} value:{" + amt + "} 失败 :" + json.get("error"));
return "";
}
logger.error(coinName+" 转币给{" + address + "} value:{" + amt + "} 成功");
return json.getString("result");
}
logger.error("==============虚拟币-"+coinName+"walletpassphrase失败!");
}
catch (Exception e)
{
logger.error("==============虚拟币-"+coinName+"sendtoaddress失败!");
e.printStackTrace();
}
return "";
}
/**
* 获取区块信息
* @param account
* @param pageLimit
* @param pageIndex
* @param scanBlock
* @return
*/
private List<Transactions> getBlock(String account, int pageLimit, int pageIndex, long scanBlock) {
try
{
JSONObject json = doRequest(listtransactions, new Object[] { account, Integer.valueOf(pageLimit), Integer.valueOf(pageIndex)});
if (isError(json)) {
this.logger.error("获取"+coinName+"地址失败:" + json.get("error"));
return null;
}
System.out.println(JSONArray.parseArray(json.getString("result")));
return JSONArray.parseArray(json.getString("result"), Transactions.class);
} catch (Exception e) {
this.logger.error("==============虚拟币-"+coinName+"getRecord失败!");
e.printStackTrace();
return null ;
}
}
/**
* 验证地址
* @param address
* @return
*/
private boolean vailedAddress(String address) {
JSONObject json = doRequest(validateaddress, new Object[] { address });
if (isError(json)) {
this.logger.error(coinName+"验证地址失败:" + json.get("error"));
return false;
}
return json.getJSONObject("result").getBoolean("isvalid").booleanValue();
}
}
下期更新Java 对接Eth