FISCO BCOS JAVA SDK(环境搭建)
前言
参考官方文档
提示:以下是本篇文章正文内容,下面案例可供参考
一、环境准备
1.开发工具
Java:JDK 14 (JDK1.8 至JDK 14都支持) IDE:IntelliJ IDE.
安装官网
2.开发环境
搭建一条FISCO BCOS链 FISCO BCOS安装搭建。
二、开发步骤
1.创建一个Gradle应用
2.引入Java SDK
在build.gradle中引入Java SDK
compile ('org.fisco-bcos.java-sdk:fisco-bcos-java-sdk:2.7.2')
如果您使用maven 通过以下方法引入Java SDK
<dependency>
<groupId>org.fisco-bcos.java-sdk</groupId>
<artifactId>fisco-bcos-java-sdk</artifactId>
<version>2.7.2</version>
</dependency>
3.配置SDK证书
SDK证书位于(搭建第一个区块链网络)~/fisco/nodes/127.0.0.1/sdk/目录 或者直接拷贝该文件夹 后续在对其中的配置文件进行修改
4.准备智能合约
控制台console和java-sdk-demo均提供了工具,可以将solidity合约生成出调用该合约java工具类。本例中使用console做为例子. 使用java-sdk-demo给智能合约生成调用它的Java工具类” 首先,下载控制台。
cd ~/fisco/console
然后,将您要用到的Solidity智能合约放入~/fisco/console/contracts/solidity的目录。本次我们用console中的HelloWorld.sol作为例子。保证HelloWorld.sol在指定的目录下。
cd ~/fisco/console/contracts/solidity
ls
生成调用HelloWorld.sol智能合约的java类 代码如下(示例):
bash sol2java.sh org.com.fisco
未执行该脚本时: 执行脚本进行合约编译
5.创建配置文件
在项目中创建配置文件config.toml, 可参照配置向导进行配置,也可以参照config-example.toml,
将编译生出的ABI和BIN以及两个配置文件放到resource目录下 把编译生成的java类,放到新建包(org.com.fisco)下,点击构建项目无报错。 对配置文件进行修改,IDE工具在Windows系统,区块链网络为centos7服务器上。 如果是虚拟机我们用ifconfig查看IP进行配置,服务器就用服务器ip地址
log4j.propertise配置如下:
log4j.rootLogger=DEBUG, file
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern='_'yyyyMMddHH'.log'
log4j.appender.file.File=./log/console.log
log4j.appender.file.Append=true
log4j.appender.file.filter.traceFilter=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C{1}.%M(%L) | %m%n
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C{1}.%M(%L) | %m%n
config-example.toml文件配置如下: 修改:
[cryptoMaterial]
certPath = "conf"
[network]
peers=["101.37.116.199:20200", "101.37.116.199:20201"]
[account]
keyStoreDir = "account"
accountFileFormat = "pem"
[threadPool]
maxBlockingQueueSize = "102400"
也可以通过xml配置. 使用xml配置进行配置”。
6.使用Java SDK部署和调用智能合约
BcosSDKTest代码如下(示例): 官方示例代码
public class BcosSDKTest { // 获取配置文件路径 public final String configFile = BcosSDKTest.class.getClassLoader().getResource(“config-example.toml”).getPath(); public void testClient() throws ConfigException { // 初始化BcosSDK BcosSDK sdk = BcosSDK.build(configFile); // 为群组1初始化client Client client = sdk.getClient(Integer.valueOf(1));
// 获取群组1的块高
BlockNumber blockNumber = client.getBlockNumber();
// 向群组1部署HelloWorld合约
CryptoKeyPair cryptoKeyPair = client.getCryptoSuite().getCryptoKeyPair();
HelloWorld helloWorld = HelloWorld.deploy(client, cryptoKeyPair);
// 调用HelloWorld合约的get接口
String getValue = helloWorld.get();
// 调用HelloWorld合约的set接口
TransactionReceipt receipt = helloWorld.set("Hello, fisco");
} }
本运用中代码如下:
package org.com.fisco;
import org.fisco.bcos.sdk.BcosSDK;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.client.protocol.response.BcosBlock;
import org.fisco.bcos.sdk.client.protocol.response.BcosTransactionReceipt;
import org.fisco.bcos.sdk.client.protocol.response.BlockNumber;
import org.fisco.bcos.sdk.config.exceptions.ConfigException;
import org.fisco.bcos.sdk.crypto.CryptoSuite;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.transaction.codec.decode.TransactionDecoderInterface;
import org.fisco.bcos.sdk.transaction.codec.decode.TransactionDecoderService;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;
import org.junit.Test;
public class BcosSDKTest
{
// 获取配置文件路径
public final String configFile = BcosSDKTest.class.getClassLoader().getResource("config-example.toml").getPath();
@Test
public void testClient() throws ConfigException {
// 初始化BcosSDK
BcosSDK sdk = BcosSDK.build(configFile);
// 为群组1初始化client
Client client = sdk.getClient(Integer.valueOf(1));
// 获取群组1的块高
BlockNumber blockNumber = client.getBlockNumber();
// 向群组1部署HelloWorld合约
CryptoKeyPair cryptoKeyPair = client.getCryptoSuite().getCryptoKeyPair();
HelloWorld helloWorld = null;
try {
helloWorld = HelloWorld.deploy(client, cryptoKeyPair);
} catch (ContractException e) {
e.printStackTrace();
}
// 调用HelloWorld合约的get接口
String getValue= null;
try {
getValue = helloWorld.get();
} catch (ContractException e) {
e.printStackTrace();
}
// 调用HelloWorld合约的set接口
TransactionReceipt receipt = helloWorld.set("Hello, fisco");
BcosBlock block = client.getBlockByNumber(blockNumber.getBlockNumber(), false); //得到块的信息
Object o = block.getBlock().getTransactions().get(0).get(); //在块中得到交易哈希
Object b = block.getBlock().getHash();//在块中得到区块哈希
Object c=block.getBlock().getNumber();//当前块高
BcosTransactionReceipt transactionReceipt = client.getTransactionReceipt((String) o); //通过交易哈希得到交易回执
CryptoSuite cryptoSuite = client.getCryptoSuite(); // 获取当前群组对应的密码学接口
// 构造TransactionDecoderService实例,传入是否密钥类型参数。 事务解码器接口
TransactionDecoderInterface decoder = new TransactionDecoderService(cryptoSuite);
String setValue = decoder.decodeReceiptMessage(transactionReceipt.getResult().getInput());
System.out.println("getValue:"+getValue);
System.out.println("setValue:"+setValue);
System.out.println("receipt:"+receipt);
}
}
7.运用测试
首先确保我们的区块链网络节点处于运行状态 测试结果:
总结
欢迎交流!
|