# RCJava
**Repository Path**: yourkeychen/RCJava
## Basic Information
- **Project Name**: RCJava
- **Description**: Java连接RepChain,提交交易,获取块数据等的示范,主要功能在dev_sdk与dev_sdk_preview分支,dev_sdk对应于RepChain0.8,dev_sdk_preview对应于最新的RepChain_preview,api文档:https://apidoc.gitee.com/BTAJL/RCJava/
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 9
- **Created**: 2020-06-23
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 区块链
## README
# **RCJava**
***
#### 项目介绍
Java SDK for RepChain,供开发人员调用,构造交易、提交交易以及获取交易或块数据,同步获取块数据
#### 软件架构
- src/main目录下
* **`com.client`** 该package下的类,主要用来构造sdk 客户端,客户端可以用来构造交易、提交交易、获取交易或块数据
> - RepChainJksClient 使用jks来构造客户端
> - RepChainKeyClient 使用privateKey来构造客户端
> - RepChainPemClient 使用pem(私钥)来构造客户端
* **`com.crypto`** 该package下的类,主要是加密相关的工具类,包括签名与Hash等
* **`com.dao`** 该package下的类,是同步服务的底层类,供示例
* **`com.Example`** 该package下的类,主要是一些代码示例
* **`com.protos`** protobuf相关类,交易与块的相关操作
* **`com.utils`** 该package下,主要是一些工具类
> - CertUtil 证书相关工具类
> - KeyUtil key操作相关的工具类
> - PemUtil Pem操作相关的工具类
- src/test
* 主要是相关工具类的测试用例,用户可参考此示例代码来构造交易、提交交易以及使用相关工具类
#### 安装教程
1. 项目基于MAVEN构建,搭建好MAVEN环境
2. jdk1.8
#### 使用说明
1. Example
1. Commit.java Test.java用来构建签名交易并提交
2. Receive.java 通过API获得块链信息以及指定高度的块
3. ExampleClient.java 用来订阅WebSocket消息
4. Model下的是一些pojo,SupplyType对应供应链,Transfer对应转账
* 提交交易
* 无回调提交
* 设置客户端,初始化密钥(不涉及提交交易的话,可以不用初始化密钥)
**可使用RepJksChainClient、RepKeyChainClient或RepPemChainClient,来构造客户端**
```
String host = "192.168.2.115:8081";
RepJksChainClient client = new RepJksChainClient(host);
client.setJks("jks/mykeystore_1.jks","123","1");
Peer.CertId certId = Peer.CertId.newBuilder().setCreditCode("121000005l35120456").setCertName("node1").build(); // 签名ID
String str_trans = Files.asCharSource(new File("Json/transfer_1.json"), Charsets.UTF_8).read();
//这个是给转账交易示范用的,此ID需要与repchain合约部署的一致
Peer.ChaincodeId contractAssetsId = Peer.ChaincodeId.newBuilder().setChaincodeName("ContractAssetsTPL").setVersion(1).build();
String txid = UUID.randomUUID().toString().replace("-", "");
Peer.Transaction transfer = client.createTransactionForInvoke(txid, certId, contractAssetsId, "transfer" ,str_trans);
String transferStr = Hex.encodeHexString(transfer.toByteArray());
// 字符串提交
JSONObject transferResult = client.postTranByString(JSONObject.toJSONString(transferStr));
// 流式提交
JSONObject transferResult1 = client.postTranByStream(transfer);
```
* 有回调提交
```
client.postTranByString(Test.this, JSONObject.toJSONString(transferstr),transfer);
```
* 同步块功能的使用
* 同步块的客户端,配合Observer使用
* 首先构建wsSynclient,其次,A要继承Observer,然后注册A实例到wsSynclient实例。
* 启动wsSyncClient实例。
```
server = new wsSyncClient(new URI("ws://" + "192.168.**.**:8081" + "/event"));
// 也可以直接使用host构造
server = new wsSyncClient("192.168.**.**:8081");
Observer repchain = new User("RepChain");
server.createObserverList();
server.registerObserver(repchain);
server.connect();
```
#### 参与贡献
1. Fork 本项目
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request