快速入门

1 环境要求

  • Java开发环境:JDK1.8 或者以上版本
  • FISCO BCOS节点:请参考FISCO BCOS安装搭建

2 Java应用引入SDK

2.1 使用gradle引入SDK

compile ('org.fisco-bcos.java-sdk:java-sdk:2.6.1-rc1')

2.2 使用maven引入SDK

<dependency>
    <groupId>org.fisco-bcos.java-sdk</groupId>
    <artifactId>java-sdk</artifactId>
    <version>2.6.1-rc1</version>
</dependency>

3 SDK证书配置

参考java sdk证书配置

注解

  • 大部分场景仅需要配置 certPath 配置项即可,其他配置项不需额外配置;
  • SDK证书获取:若参考 安装 搭建区块链,则参考 这里nodes/${ip}/sdk/ 目录下的证书拷贝到 certPath 指定的路径;若区块链节点参考 运维部署工具 搭建,则参考 这里generator/meta 文件夹下的SDK证书拷贝到 certPath 指定路径,`certPath`默认为`conf`目录;
  • SDK与节点间SSL连接方式,可通过节点配置项 sm_crypto_channel 判断,该配置项详细说明请参考 FISCO BCOS配置文件与配置项说明 .

将SDK证书拷贝到java sdk的示例如下(这里假设SDK证书位于~/fisco/nodes/127.0.0.1/sdk目录):

# 假设SDK证书位于~/fisco/nodes/127.0.0.1/sdk/目录
mkdir -p conf && cp -r ~/fisco/nodes/127.0.0.1/sdk/* conf

4 solidity代码转java代码

控制台console和java sdk均提供了将solidity代码转换为java代码的工具。

4.1 使用控制台提供的工具

控制台v2.6+提供了sol2java.sh脚本可将solidity转换为java代码, sol2java.sh使用方法如下:

$ bash sol2java.sh -h
# Compile Solidity Tool
./sol2java.sh [packageName] [solidityFilePath] [javaCodeOutputDir]
 	 packageName:
 		 the package name of the generated Java class file
 	 solidityFilePath:
 		 (optional) the solidity file path or the directory where solidity files located, default: contracts/solidity
 	 javaCodeOutputDir:
 		 (optional) the directory where the generated Java files located, default: contracts/sdk/java

参数如下:

  • packageName: 生成Java文件的包名
  • solidityFilePath: (可选)solidity文件的路径,支持文件路径和目录路径两种方式,参数为目录时将目录下所有的solidity文件进行编译转换。默认目录为contracts/solidity
  • javaCodeOutputDir: (可选)生成Java文件的目录,默认生成在contracts/sdk/java目录。

~/fisco/console/contracts/solidity路径下的sol文件转为java代码的示例如下:

$ mkdir -p ~/fisco && cd ~/fisco
# 获取控制台
$ curl -#LO https://github.com/FISCO-BCOS/console/releases/download/v2.6.1/download_console.sh && bash download_console.sh
$ cd ~/fisco/console
# 将sol转为java代码,指定java包名为org.com.fisco
$ bash sol2java.sh org.com.fisco

使用java-sdk或控制台将solidity代码转换为java代码后,即可将生成的java代码拷贝到规划的包路径,通过调用该java代码部署和调用合约。

4.2 使用java-sdk提供的工具

$ mkdir -p ~/fisco && cd ~/fisco
# 获取java-sdk代码
$ git clone https://github.com/FISCO-BCOS/java-sdk
# 编译
$ ./gradlew clean build -x test
# 进入sdk-demo/dist目录,创建合约存放目录
$ cd sdk-demo/dist && mkdir -p contracts/solidity
# 将需要转换为java代码的sol文件拷贝到~/fisco/java-sdk/dist/contracts/solidity路径下
# 转换sol, 其中${packageName}是生成的java代码包路径
# 生成的java代码位于 ~/fisco/java-sdk/dist/contracts/sdk/java目录下
java -cp "apps/*:lib/*:conf/" org.fisco.bcos.sdk.demo.codegen.DemoSolcToJava ${packageName}

5 SDK使用示例

注解

java sdk同时支持将 solidity 转换为 java 文件后,调用相应的 java 方法部署和调用合约,也支持构造交易的方式部署和调用合约,这里主要展示前者的调用方法,后者详细的使用方法请参考 这里

5.1 BcosSDK初始化

BcosSDK是使用java sdk开发应用时必须初始化的对象,目前同时支持通过tomlxml配置文件初始化BcosSDK对象。

5.1.1 通过toml配置文件初始化BcosSDK

java sdk toml配置文件说明请参考这里,配置示例请参考java sdk源码的src/test/resources/config-example.toml或配置文件说明的第三节配置示例, 通过toml配置文件初始化BcosSDK的代码示例如下:

public class BcosSDKTest
{
    public BcosSDK initBcosSDK()
    {
        String configFile = BcosSDKTest.class.getClassLoader().getResource("config-example.toml").getPath();
        return BcosSDK.build(configFile);
    }
}

5.1.2 通过xml配置文件初始化BcosSDK

为了适配更多场景,java sdk支持使用xml初始化BcosSDK, xml配置示例请参考java sdk源码的src/test/resources/applicationContext-sample.xml, 配置项的含义参考配置说明.

通过xml配置文件初始化BcosSDK之前,需要先引入spring

通过gradle引入spring如下

def spring_version = "4.3.27.RELEASE"
List spring = [
        "org.springframework:spring-core:$spring_version",
        "org.springframework:spring-beans:$spring_version",
        "org.springframework:spring-context:$spring_version",
        "org.springframework:spring-tx:$spring_version",
]
compile spring

通过maven引入spring如下

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.3.27.RELEASE</version>

    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>4.3.27.RELEASE</version>

    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.27.RELEASE</version>

    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>4.3.27.RELEASE</version>
</dependency>

使用applicationContext-sample初始化BcosSDK如下

ApplicationContext context =
    new ClassPathXmlApplicationContext("classpath:applicationContext-sample.xml");
BcosSDK sdk = context.getBean(BcosSDK.class);

5.2 部署和调用合约

以使用java sdk调用群组1的getBlockNumber接口获取群组1最新块高,并向群组1部署和调用HelloWorld合约为例,对应的示例代码如下:

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");
     }
}