1、首先在本地安装BTC(LTC)钱包,安装包下载地址。
2、在数据文件夹中新建bitcoin.conf(litecoin.conf),默认数据文件夹位置在 C:\Users\Administrator.PC-20170606QNRN\AppData\Roaming\BitCoin
3、打开新建的配置文件,输入以下内容
rpcuser=userrpc
rpcpassword=userpassword
rpcallowip=127.0.0.1
rpcport=61315
server=1
4、打开钱包应用程序,通过cmd命令:netstat -ano|findstr "61315"
由此可见此端口已打开。
5、新建JAVA工程,创建两个类:CoinUtils.java,Constants.java
添加MAVEN依赖
<dependency>
<groupId>com.github.briandilley.jsonrpc4j</groupId>
<artifactId>jsonrpc4j</artifactId>
<version>1.1</version>
</dependency>
6、代码如下
package com.ant.wallet;
public class Constants {
public static String RPC_USER = "userrpc";
public static String RPC_PASSWORD = "userpassword";
public static String RPC_ALLOWIP = "127.0.0.1";
public static String RPC_PORT = "61315";
}
package com.ant.wallet;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import com.googlecode.jsonrpc4j.Base64;
import com.googlecode.jsonrpc4j.JsonRpcHttpClient;
public class CoinUtils {
private static CoinUtils instance;
private static void init() throws Throwable {
if(null == instance){
instance = new CoinUtils();
}
}
private JsonRpcHttpClient client;
public CoinUtils() throws Throwable{
// 身份认证
String cred = Base64.encodeBytes((Constants.RPC_USER + ":" + Constants.RPC_PASSWORD).getBytes());
Map<String, String> headers = new HashMap<String, String>(1);
headers.put("Authorization", "Basic " + cred);
client = new JsonRpcHttpClient(new URL("http://"+Constants.RPC_ALLOWIP+":"+Constants.RPC_PORT), headers);
}
public static CoinUtils getInstance() throws Throwable {
init();
return instance;
}
/**
* 验证地址是否存在
* @param address
* @return
* @throws Throwable
*/
public String validateaddress(String address)throws Throwable{
return (String) client.invoke("validateaddress", new Object[] {address}, Object.class).toString();
}
/**
* 如果钱包加密需要临时解锁钱包
* @param password
* @param time
* @return
* @throws Throwable
*/
public String walletpassphase(String password,int time)throws Throwable{
return (String) client.invoke("walletpassphase", new Object[] {password,time}, Object.class).toString();
}
/**
* 转账到制定的账户中
* @param address
* @param amount
* @return
* @throws Throwable
*/
public String sendtoaddress(String address,double amount)throws Throwable{
return (String) client.invoke("sendtoaddress", new Object[] {address,amount}, Object.class).toString();
}
/**
* 查询账户下的交易记录
* @param account
* @param count
* @param offset
* @return
* @throws Throwable
*/
public String listtransactions(String account, int count ,int offset )throws Throwable{
return (String) client.invoke("listtransactions", new Object[] {account,count,offset}, Object.class).toString();
}
/**
* 获取地址下未花费的币量
* @param account
* @param count
* @param offset
* @return
* @throws Throwable
*/
public String listunspent( int minconf ,int maxconf ,String address)throws Throwable{
String[] addresss= new String[]{address};
return (String) client.invoke("listunspent", new Object[] {minconf,maxconf,addresss}, Object.class).toString();
}
/**
* 生成新的接收地址
* @return
* @throws Throwable
*/
public String getNewaddress() throws Throwable{
return (String) client.invoke("getnewaddress", new Object[] {}, Object.class).toString();
}
/**
* 获取钱包信息
* @return
* @throws Throwable
*/
public String getInfo() throws Throwable{
return client.invoke("getinfo", new Object[] {}, Object.class).toString();
}
}
这样就实现了使用java代码与钱包进行通信。
以上列举了几个常用的方法,其他方法详见:这里