# 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