java 对接OmniLayer钱包

上代码

如果帮助到了你 请点点关注 谢谢

@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

猜你喜欢

转载自blog.csdn.net/qq_39631683/article/details/106197284