快速入门¶
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证书配置。
注解
将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开发应用时必须初始化的对象,目前同时支持通过toml和xml配置文件初始化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");
}
}