http://www.omnilayer.org/download.html
tar -xzvf omnicore-0.3.1-osx64.tar.gz /cw_usdt_test/
cd /cw_usdt_test
(路径可以自己随意替换,到时自己能找到就可以)
cp omnicore-0.3.1/lib/* /lib
mkdir tsdata
cd tsdata
(同样可以自己更改路径)
vim bitcoin.conf
键入以下内容
server=1
rpcuser=123456
rpcpassword=abcdef
rpcallowip=0.0.0.0
rpcport=8888
txindex=1
保存退出
:wq!
rpcuser、rpcpassword、rpcport、rpcallowip这几个是给连接程序用的。如果你按照我上面的记录设置了文件,那么你的Rpc调用类就应该是这样的
public class Constants {
public static final String RPC_USER = "123456";
public static final String RPC_PASSWORD = "abcdef";
public static final String RPC_ALLOWIP = "http://127.0.0.1";
public static final String RPC_PORT = "8888";
}
public class RpcClient {
Logger log = LoggerFactory.getLogger(getClass());
private static final String URL = Constants.RPC_ALLOWIP + ":" + Constants.RPC_PORT;
private JsonRpcHttpClient mClient;
public RpcClient() {
String cred = Base64.encodeBase64String((Constants.RPC_USER + ":" + Constants.RPC_PASSWORD).getBytes());
Map headers = new HashMap<>(1);
headers.put("Authorization", "Basic " + cred);
try {
this.mClient = new JsonRpcHttpClient(new URL(URL), headers);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
/**
*
* @param method 方法名
* @param var 参数
* @return 结果
*/
public String engine(@NotNull String method, Object... var) {
return engine(method, String.class, var);
}
/**
*
* @param method 方法名
* @param clazz 返回类型
* @param var 参数
* @return 结果
*/
public T engine(@NotNull String method, Class clazz, Object... var) {
try {
return mClient.invoke(method, var, clazz);
} catch (Throwable throwable) {
String message = throwable.getMessage();
Throwable cause = throwable.getCause();
log.error("error cause=" + cause);
log.error("error message=" + throwable);
try {
BaseRPCresponse res = JSON.parseObject(message, BaseRPCresponse.class);
BaseRPCresponse.ErrorBean error = res.getError();
throw new BaseException(String.valueOf(error.getCode()), error.getMessage());
} catch (Exception e) {
e.printStackTrace();
throw new BaseException("W000", e.getMessage());
}
}
}
}
上面是一个Java连接rpc的类,包括调用方法。
cd omnicore-3.0.1/bin
./omnicored -conf=/cw_usdt_test/tsdata/bitcoin.conf -datadir=/cw_usdt_test/tsdata/ -testnet
(我这里启动的是测试链,如果你启动是主链记得把-testnet这个去掉)
这时候可以进入/cw_usdt_test/tsdata/testnet3 查看debug.log
在debug.log里可以看到同步的信息。(不管是公链还是测试链,这里同步都需要几天的时间)
我们再次进入到文件夹
cd /cw_usdt_test/omnicore-0.3.1/bin/
生成地址
./omnicore-cli -conf=/cw_usdt_test/tsdata/bitcoin.conf -datadir=/cw_usdt_test/tsdata/ -testnet getnewaddress
具体的可以运行
./omnicore-cli -conf=/cw_usdt_test/tsdata/bitcoin.conf -datadir=/cw_usdt_test/tsdata/ -testnet help
里面有所有的方法和说明
比如想查看哪个具体方法的参数说明可以这样
./omnicore-cli -conf=/cw_usdt_test/tsdata/bitcoin.conf -datadir=/cw_usdt_test/tsdata/ -testnet help getnewaddress
到这一个USDT、BTC的节点就已经搭建成功了,因为USDT是基于Btc的,所以转账时要求对应的address里必须要有足够多的比特币作为转账手续费,如果没有会提示余额不足。同时也要注意。其中rpc执行转账时调用方法omni_funded_sendall会把地址内所有的比特币都发送出去。omni_send转账才会花费较少的比特币。
对应上面的那段JAVA代码,执行的调用语句是这个样子的
//propertyid是链的ID,主链是31 测试链是1
omniUtil.engine("omni_send", fromaddress, toaddress, propertyid, String.valueOf(amount));
如果你想开发,根据交易哈希获取交易详情要经过两次rpc调用才可以,在这就不详细说了,如果有需要可以评论留下联系方式,咱们一起探讨。