快速入门

标签:java-sdk 引入Java SDK


1. 安装环境

  • Java:JDK 14 (JDK1.8 至JDK 14都支持)

    首先,在官网上下载JDK14并安装

    然后,修改环境变量

    # 确认您当前的java版本
    $ java -version
    # 确认您的java路径
    $ ls Library/Java/JavaVirtualMachines
    # 返回
    # jdk-14.0.2.jdk
    
    # 如果使用的是bash
    $ vim .bash_profile 
    # 在文件中加入JAVA_HOME的路径
    # export JAVA_HOME = Library/Java/JavaVirtualMachines/jdk-14.0.2.jdk/Contents/Home 
    $ source .bash_profile
    
    # 如果使用的是zash
    $ vim .zashrc
    # 在文件中加入JAVA_HOME的路径
    # export JAVA_HOME = Library/Java/JavaVirtualMachines/jdk-14.0.2.jdk/Contents/Home 
    $ source .zashrc
    
    # 确认您的java版本
    $ java -version
    # 返回
    # java version "14.0.2" 2020-07-14
    # Java(TM) SE Runtime Environment (build 14.0.2+12-46)
    # Java HotSpot(TM) 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)
    
  • IDE:IntelliJ IDE.

    进入IntelliJ IDE官网,下载并安装社区版IntelliJ IDE

../../../_images/install_java_intellij.gif

2. 搭建一条FISCO BCOS链

请参考FISCO BCOS安装搭建。

3. 开发智能合约应用

第一步. 创建一个Gradle应用

在IntelliJ IDE中创建一个gradle项目。勾选Gradle和Java

../../../_images/create.gif

第二步. 引入Java SDK

在build.gradle中引入Java SDK

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

如果您使用maven 通过以下方法引入Java SDK

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

第三步. 配置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

../../../_images/import_sdk.gif

第四步. 准备智能合约

控制台consolejava-sdk-demo均提供了工具,可以将solidity合约生成出调用该合约java工具类。本例中使用console做为例子,使用java-sdk-demo的例子请看第6章“附录一. 使用java-sdk-demo给智能合约生成调用它的Java工具类” 首先,下载控制台。

$ mkdir -p ~/fisco && cd ~/fisco
# 获取控制台
$ curl -#LO https://github.com/FISCO-BCOS/console/releases/download/v2.7.1/download_console.sh && bash download_console.sh
$ cd ~/fisco/console

然后,将您要用到的Solidity智能合约放入~/fisco/console/contracts/solidity的目录。本次我们用console中的HelloWorld.sol作为例子。保证HelloWorld.sol在指定的目录下。

# 当前目录~/fisco/console
$ ls contracts/solidity 

得到返回

HelloWorld.sol	KVTableTest.sol	ShaTest.sol	Table.sol	TableTest.sol

接着,生成调用该智能合约的java类

# 使用sol2java.sh将contracts/solidity下的所有合约编译产生bin,abi,java工具类。
# 当前目录~/fisco/console
$ bash sol2java.sh org.com.fisco
# 以上命令中参数“org.com.fisco”是指定产生的java类所属的包名。
# ./sol2java.sh [packageName] [solidityFilePath] [javaCodeOutputDir]

sol2java.sh的用法可以参照第4章 “附录二. sol2java.sh脚本的使用方法”。

得到返回

*** Compile solidity TableTest.sol*** 
INFO: Compile for solidity TableTest.sol success.
*** Convert solidity to java  for TableTest.sol success ***

*** Compile solidity KVTableTest.sol*** 
INFO: Compile for solidity KVTableTest.sol success.
*** Convert solidity to java  for KVTableTest.sol success ***

*** Compile solidity HelloWorld.sol*** 
INFO: Compile for solidity HelloWorld.sol success.
*** Convert solidity to java  for HelloWorld.sol success ***

*** Compile solidity Table.sol*** 
INFO: Compile for solidity Table.sol success.
*** Convert solidity to java  for Table.sol success ***

*** Compile solidity ShaTest.sol*** 
INFO: Compile for solidity ShaTest.sol success.
*** Convert solidity to java  for ShaTest.sol success ***

查看编译结果

$ ls contracts/sdk/java/org/com/fisco 
# 得到返回
# HelloWorld.java		KVTableTest.java	ShaTest.java		Table.java		TableTest.java

**最后, 将编译得到的HelloWorld.java放入应用中。**注意:在应用中所放的位置要与我们设定的包名相同。

(操作示范请看如下gif动图,动画总共有2分40秒,请耐心等待观看,请勿点击图片,如果点击图片将从头开始播放。)

../../../_images/prepare_contract.gif

第五步. 创建配置文件

在项目中创建配置文件config.toml, 可参照配置向导进行配置,也可以参照config-example.toml,

通过xml配置请参照第4章“附录三. 使用xml配置进行配置”。

第六步. 使用Java SDK部署和调用智能合约

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

4. 附录

附录一. 使用java-sdk-demo给智能合约生成调用它的Java工具类

$ mkdir -p ~/fisco && cd ~/fisco
# 获取java-sdk代码
$ git clone https://github.com/FISCO-BCOS/java-sdk-demo
$ cd java-sdk-demo
# 编译
$ ./gradlew clean build -x test
# 进入sdk-demo/dist目录,创建合约存放目录
$ cd 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}

附录二. sol2java.sh脚本的使用方法

控制台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目录

附录三. 使用xml配置进行配置

为了适配更多场景,java sdk支持使用xml初始化BcosSDK, xml配置示例请参考java sdk源码的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);