1、首先要安装好bitcoin core服务 上一篇有怎么安装

下面代码支持多钱包多地址动态调用,但让我没用使用多地址,根据自己的需要然后封装方法就好

2、引入jar  JavaBitcoinRpcClient

wf.bitcoin

JavaBitcoindRpcClient

1.0.0

3、 BitcoinRPC 接口

packagecom.lpz.btc.api;importcom.lpz.btc.model.TransferModel;public interfaceBitcoinRPC {/*** 创建BTC钱包地址(钱包、地址都是新创建)

*@paramwalletName 钱包名称

*@paramwalletPassword 钱包密码

*@paramaddressName 地址显示名称

*@return地址*/String createBtcAddress(String walletName,String walletPassword,String addressName);/*** 获取BTC余额

*@paramwalletName 钱包名称

*@paramaddress 地址

*@return余额*/

doublegetBtcBalance(String walletName,String address);/*** BTC转账

*@paramwalletName 钱包名称

*@paramwalletPassword 钱包密码

*@paramtoAddress 接收地址

*@paramquantity 转账数量

*@return转账状态消息*/TransferModel transfetBtc(String walletName,String walletPassword,String toAddress,doublequantity);/*** 获取地址私钥

*@paramwalletName 钱包名称

*@paramwalletPassword 钱包密码

*@paramaddress 地址

*@return私钥*/String getBtcPrivateKey(String walletName,String walletPassword,String address);/*** 导入BTC私钥(导入地址到钱包)

*@paramwalletName 钱包名称

*@paramwalletPassword 钱包密码

*@paramprivateKey 私钥

*@return是否成功*/

booleanimportBtcPrivateKey(String walletName,String walletPassword,String privateKey);

}

4、BitcoinRPCImpl 实现类

packagecom.lpz.btc.api.impl;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;importcom.lpz.btc.api.BitcoinRPC;importcom.lpz.btc.wf.bitcoin.javabitcoindrpcclient.BitcoinJSONRPCClient;importcom.lpz.btc.model.exchange.TransferModel;importcom.lpz.setting.DefaultBtc;importorg.apache.log4j.Logger;importjava.math.BigDecimal;importjava.net.MalformedURLException;importjava.net.URL;importjava.util.ArrayList;importjava.util.List;public class BitcoinRPCImpl implementsBitcoinRPC {private Logger logger=Logger.getLogger(BitcoinRPCImpl.class);private DefaultBtc defaultBtc=newDefaultBtc();private String user=defaultBtc.BTCRPCUSER;//lpzprivate String password=defaultBtc.BTCRPPASSWORD;//lpzprivate String port=defaultBtc.BTCRPCPORT;//18332 因为测试网是18332 主网是8332private String host=defaultBtc.BTCRPCALLOWIP;//127.0.0.1private final int WALLET_PASS_PHRASE_TIME_OUT=60;

@OverridepublicString createBtcAddress(String walletName, String walletPassword, String addressName) {try{//获取BTC客户端默认钱包

BitcoinJSONRPCClient bitcoinClient=getBitcoinClient("");//创建钱包

String walletResult=bitcoinClient.query("createwallet",walletName).toString();

logger.info("钱包("+walletName+")创建成功返回==>"+walletResult+"");//获取当前BTC客户端钱包

bitcoinClient=getBitcoinClient(walletName);//设置钱包密码

bitcoinClient.encryptWallet(walletPassword);//创建地址

returnbitcoinClient.getNewAddress(addressName);

}catch(Exception e){

logger.error("创建钱包地址异常==>"+e.getMessage());

}return null;

}

@Overridepublic doublegetBtcBalance(String walletName, String address) {try{

List jsonArrayList=getListAddressInfo(walletName);for(JSONArray jsonArray:jsonArrayList){if(jsonArray.getString(0).equals(address)){return jsonArray.getDoubleValue(1);

}

}

}catch(Exception e){

logger.error("钱包("+walletName+")地址("+address+")获取余额异常==>"+e.getMessage());

}return 0;

}

@Overridepublic TransferModel transfetBtc(String walletName, String walletPassword, String toAddress, doublequantity) {

TransferModel transferModel=newTransferModel();

transferModel.status=transferModel.status_101;try{

BitcoinJSONRPCClient bitcoinClient=getBitcoinClient(walletName);//获取钱包余额

double balance =bitcoinClient.getBalance().doubleValue();if(balance

transferModel.message="余额不足";

transferModel.status=transferModel.status_103;

}else{//输入钱包密码

bitcoinClient.walletPassPhrase(walletPassword,WALLET_PASS_PHRASE_TIME_OUT);//开始转账

String result=bitcoinClient.sendToAddress(toAddress, BigDecimal.valueOf(quantity));

logger.info("钱包("+walletName+")成功转账"+quantity+"个btc到"+toAddress+"交易hash==>"+result);

transferModel.message="转账成功";

transferModel.status=transferModel.status_100;

}

}catch(Exception e){

transferModel.message="BTC转账异常";

logger.error("钱包("+walletName+")转账"+quantity+"个btc到"+toAddress+"异常==>"+e.getMessage());

}returntransferModel;

}

@OverridepublicString getBtcPrivateKey(String walletName, String walletPassword, String address) {try{

BitcoinJSONRPCClient bitcoinClient=getBitcoinClient(walletName);

bitcoinClient.walletPassPhrase(walletPassword,WALLET_PASS_PHRASE_TIME_OUT);

Object addressPrivate=bitcoinClient.query("dumpprivkey",address);returnaddressPrivate.toString();

}catch(Exception e){

logger.error("获取地址("+address+")私钥异常==>"+e.getMessage());

}return null;

}

@Overridepublic booleanimportBtcPrivateKey(String walletName, String walletPassword, String privateKey) {try{

BitcoinJSONRPCClient bitcoinClient=getBitcoinClient(walletName);

bitcoinClient.walletPassPhrase(walletPassword,WALLET_PASS_PHRASE_TIME_OUT);

bitcoinClient.importPrivKey(privateKey);return true;

}catch(Exception e){

logger.error("导入地址私钥("+privateKey.substring(10)+"******)到钱包("+walletName+")异常==>"+e.getMessage());

}return false;

}/*** 获取BTC客户端

*@paramwalletName 钱包名称

*@returnBTC客户端*/

privateBitcoinJSONRPCClient getBitcoinClient(String walletName){

BitcoinJSONRPCClient bitcoinClient=null;try{

URL url= new URL("http://" + user + ‘:‘ + password + "@" + host + ":" + port + "/wallet/"+walletName+"");

bitcoinClient= newBitcoinJSONRPCClient(url);

}catch(MalformedURLException e) {

logger.error("获取BTC RPC错误==>"+e.getMessage());

}returnbitcoinClient;

}/*** 获取所有钱包地址信息

*@paramwalletName 钱包名称

*@return所有地址信息*/

private ListgetListAddressInfo(String walletName){

BitcoinJSONRPCClient bitcoinClient=getBitcoinClient(walletName);

List resultList=new ArrayList();try{

Object walletAddressAll=bitcoinClient.query("listaddressgroupings");

JSONArray jsonArrayAll=JSON.parseArray(JSON.toJSONString(walletAddressAll));for(int i=0;i

JSONArray walletArray=JSON.parseArray(jsonArrayAll.get(i).toString());for(int j=0;j

JSONArray jsonArray=JSON.parseArray(walletArray.getString(j));

resultList.add(jsonArray);

}

}

}catch(Exception e){

logger.error("钱包("+walletName+")获取所有地址信息异常==>"+e.getMessage());

}returnresultList;

}

}

5、测试调用 BitcoinRPCTest

package com.lpz;

import com.lpz.btc.api.BitcoinRPC;

import com.lpz.btc.api.impl.BitcoinRPCImpl;

import org.apache.log4j.Logger;

import org.junit.Test;

public class BitcoinRPCTest {

private Logger logger=Logger.getLogger(BitcoinRPCTest.class);

BitcoinRPC bitcoinRPC=new BitcoinRPCImpl();

@Test

public void getBalance(){

String walletName="lpz";

String address="2N1UMYA6poo3JFFnV3kGC5T5yrw81nRBQP4";

double balance=bitcoinRPC.getBtcBalance(walletName,address);

logger.info("钱包("+walletName+")的余额是==>"+balance);

}

@Test

public void createBtcAddress(){

String walletName="lpz_tld";

String walletPassword="lpz_tld";

String addressName="lpz_tld";

String newAddress=bitcoinRPC.createBtcAddress(walletName,walletPassword,addressName);

logger.info("钱包("+walletName+")地址==>"+newAddress);

}

}

效果如下:

还有一点就是我代码里面没有使用BitcoinJSONRPCClient 这个jar 用的是源码

copy代码使用的时候,引包哪里改成使用jar就好了,

然后就是jar里面包含了老版本的方法,有些方法在bitcoin core控制台不能使用的话,在java里面也会抛异常 "找不到此方法"的

eq:上一篇里面move(转账)方法 java里面使用此方法就会抛异常

###最后一点是我自己测试使用的

packagecom.lpz.exchange.biz;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;importorg.apache.log4j.Logger;importwf.bitcoin.javabitcoindrpcclient.BitcoinJSONRPCClient;importwf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient;importjava.math.BigDecimal;importjava.net.MalformedURLException;importjava.net.URL;importjava.util.List;public classTestBitcoinCore {private static Logger logger= Logger.getLogger(TestBitcoinCore.class);private static voidjavaBitcoin(){

String user= "lpz";

String password= "lpz";

String host= "127.0.0.1";//String host = "192.168.86.1";

String port = "18332";try{//错误:Wallet file not specified (must request wallet RPC through /wallet/ uri-path)."}

URL url = new URL("http://" + user + ‘:‘ + password + "@" + host + ":" + port + "/wallet/");

BitcoinJSONRPCClient bitcoinClient= newBitcoinJSONRPCClient(url);// //创建钱包//String walletName="longpizi5";//String returnWallet=bitcoinClient.query("createwallet",walletName).toString();//System.out.println(returnWallet);//设置钱包密码//bitcoinClient.encryptWallet("TLD6_1zns");//修改钱包密码 walletpassphrasechange//bitcoinClient.query("TLD6_1zns","原密码","新密码");//未测试//获取钱包信息

System.out.println("钱包信息:"+JSON.toJSONString(bitcoinClient.getWalletInfo()));//导入钱包//bitcoinClient.dumpWallet("C:\\Users\\THIS_ODK\\Desktop\\lpz.dat");//System.out.println(JSON.toJSONString());//System.out.println(bitcoinClient.backupWallet(););//创建账号//String addressName="longlin1";//String account=bitcoinClient.getNewAddress(addressName);//System.out.println("账号地址:"+account);//获取余额 getbalance 错误:dummy first argument must be excluded or set to \"*\"."

BigDecimal balance =bitcoinClient.getBalance();

System.out.println(balance);//获取账号信息 listaddressgroupings

List receivedAddressList=bitcoinClient.listReceivedByAddress();

System.out.println("钱包地址信息1:"+JSON.toJSONString(receivedAddressList));

Object o_listAddress=bitcoinClient.query("listaddressgroupings");

System.out.println("钱包地址信息2:"+JSON.toJSONString(o_listAddress));//获取地址私钥 dumpprivkey//输入钱包密码//bitcoinClient.walletPassPhrase("TLD6_1zns",60);//Object o_getAddressPrivate=bitcoinClient.query("dumpprivkey","2N1y1DGtXUbajM5SWyo9yRgiWAqQcPUyVEA");//System.out.println("获取地址私钥:"+ JSON.toJSONString(o_getAddressPrivate));

/*//转账 sendtoaddress 错误: Please enter the wallet passphrase with walletpassphrase first."

//输入钱包密码

bitcoinClient.walletPassPhrase("TLD6_1zns",5000);

//开始转账

String result=bitcoinClient.sendToAddress("2N1y1DGtXUbajM5SWyo9yRgiWAqQcPUyVEA", BigDecimal.valueOf(0.01));

System.out.println("交易ID:"+result);*/

//锁定钱包:walletlock 钱包解锁:walletpassphrase//*

} catch(MalformedURLException e) {

e.printStackTrace();

}

}public static voidmain(String[] args){

javaBitcoin();

}

}

原文:https://www.cnblogs.com/longpizi/p/10900351.html

bitcoin jsonrpc java_BitcoinCore JSONRPC Java使用创建账号,获取余额,转账等等...相关推荐

  1. BitcoinCore JSONRPC Java使用,创建账号,获取余额,转账等等...

    1.首先要安装好bitcoin core服务 上一篇有怎么安装 下面代码支持多钱包多地址动态调用,但让我没用使用多地址,根据自己的需要然后封装方法就好 2.引入jar  JavaBitcoinRpcC ...

  2. 捷微jeewx , 免费开源(java)微信公众账号管家系统发布

    JeeWx, 微信管家平台,简称"捷微". 捷微是一款免费开源的JAVA微信公众账号开发平台.   平台介绍: 一.捷微Jeewx简介 Jeewx是一个开源.高效.敏捷的微信开发平 ...

  3. Java学习之路1——安装JDK1.8||安装idea2022||Java项目创建【重拾Java】

    Java学习之路1--安装JDK1.8||安装idea2022[重拾Java] 前言 安装 安装JDK1.8 安装idea2022(JetBrains Toolbox) Java项目创建 创建 项目结 ...

  4. 免费Java虚拟主机账号管理思路

    Java很热门,但JSP空间却很稀少,价格很昂贵.因此,免费的Java虚拟主机有很大的需求.然而,Java虚拟主机(独立Tomcat的)独享资源,提供太多免费账号,会导致服务器崩溃,而且免费在线申请的 ...

  5. 捷微jeewx 免费开源 java 微信公众账号管家系统发布

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! JeeW ...

  6. Android下使用JDBC连接Mysql实现创建账号

    毕设选到了一个Android应用的选题,自学了一个多月开始动手,大概就是一个家政app,要能发布需求等等. 既然有这方面的需求,就肯定需要实现数据同步,网上教学视频里一般都是教的SQLite,那玩意是 ...

  7. 在RHEL7或CentOS7中修改创建账号时系统默认UID、GID最小起始值及其他设置

    大家应该都知道,在Linux系统中,1000以下的UID是系统保留的UID.随意修改系统上某些帐号的 UID 很可能会导致某些程序无法进行,甚至导致系统无法顺利运行.我们可以通过/usr/share/ ...

  8. 阿里云rds for mysql平台介绍_阿里云RDS for MySQL实例创建账号和数据库?

    本文介绍如何为RDS for MySQL实例创建账号和数据库. 账号类型RDS for MySQL实例支持两种数据库账号:高权限账号和普通账号.您可以在控制台管理所有账号和数据库,账号拥有的具体权限请 ...

  9. Java中创建泛型数组

    Java中创建泛型数组 使用泛型时,我想很多人肯定尝试过如下的代码,去创建一个泛型数组 T[] array = new T[]; 当我们写出这样的代码时编译器会报Cannot create a gen ...

最新文章

  1. 双屏全屏跳回到主屏_双屏双倍乐趣?华硕灵耀X2 Duo笔记本评测
  2. C# GDI+ 文字 阴影,描边 的实现
  3. java list wordcount,初试spark java WordCount
  4. Microsoft Dynamics CRM 2015 新增功能 介绍 高级查找功能
  5. 注册中心—常见注册中心组件对比分析
  6. 【题意+推导讲解】1031 Hello World for U (20 分)_15行代码AC
  7. BSP和JSP里的UI元素ID生成逻辑
  8. mysql常驻内存_MySQL的内存和相关问题排查
  9. 【Nginx那些事】nginx配置实例(二)负载均衡
  10. 百度发起机器阅读理解竞赛,提供中文数据集,获胜团队奖10万
  11. 深度相机(七)--体感设备对比
  12. 安全使用Mac教程 – 使用文件保险箱加密 Mac 数据
  13. 高斯克吕格投影知识总结
  14. html怎样制作表格模板,Word怎么做入职表格模板
  15. 通用单目标跟踪综述《Handcrafted and Deep Trackers: A Review of Recent Object Tracking Approaches》
  16. PDF能编辑吗,PDF文件怎么拆分页面
  17. 预计招收150人,往年有机试,清华计算机系夏令营来袭
  18. odb 使用指南(三)持久化对象的处理
  19. linux bootrom ftp,H3C交换机通过以太口应用ftp方式升级bootrom软件
  20. QGIS基本功|5 QGIS图层进阶(二)- 连接属性表

热门文章

  1. 前端自适应----单位rem
  2. 第一次作业:读优秀博文有感
  3. python sort dict 总结
  4. mac brew安装mysql
  5. 快速获得数据库连接字符串的小窍门
  6. linux crontab 怎么用,Linux crontab 如何使用
  7. RTT的线程同步篇——信号量
  8. CCF201712-2 游戏
  9. js 下拉层级多选_js控制的多级下拉菜单
  10. libssl-dev linux下载,libssl