环境 : ubuntu20
xuperchain 5.3
go 1.17
springboot : 2.5.14
前言
请提前启动好xchain的节点,我选择简单启一个xchain节点作为测试,并且使用默认端口37101
SpringBoot项目初始化
我们先进行SpringBoot项目的配置进行讲解,这里有一个空的SpringBoot项目[这个项目目前只导入了SpringWeb依赖和hutool包]。
然后我们需要在项目的pom.xml
里面导入xchain的sdk依赖包
<dependency><groupId>com.baidu.xuper</groupId><artifactId>xuper-java-sdk</artifactId><version>0.3.0</version>
</dependency>
导入成功效果
配置xchain参数说明
然后我们在application.properties
文件进行编写相关xchain配置
server.port=7070 # web服务的端口号xuperchain.keys=/src/main/resources/ # 节点管理员的私钥文件路径
xuperchain.client.url=192.168.19.133:37101 # 节点的ip和端口
这个节点管理员的私钥我们选择存放在resources文件夹里面,并且需要命名为private.key
这个私钥我们在xuperchain项目的output/data/keys/private.key,使用其他多节点搭建的方式,管理员私钥文件也会存在节点的data/keys目录下
配置 XchainConfig
然后我们编写一个XchainConfig类,进行配置加载接入
package com.yijiuyiyi.helloworld.config;import com.baidu.xuper.api.Account;
import com.baidu.xuper.api.XuperClient;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;import javax.annotation.PostConstruct;@Configuration
public class XchainConfig {@Value("${xuperchain.client.url}")private String url;@Value("${xuperchain.keys}")private String key;XuperClient client;Account account;@PostConstructpublic void initField() {client = new XuperClient(url); // 创建客户端 String keyPath = System.getProperty("user.dir")+key; // 由于Account.create()方法需要绝对路径,所以需要用此代码获取完整的路径account = Account.create(keyPath);System.out.println("path: "+keyPath);System.out.println("成功初始化");}}
我们重启一下项目,如果不报错,证明配置加载成功
调用xchain的获取区块高度
这里我们创建一个controller类,然后写一个get方法,方法里面是使用client去获取xchain的信息,我们这次去获取一个当前的区块高度
package com.yijiuyiyi.helloworld.controller;import com.baidu.xuper.api.XuperClient;
import com.baidu.xuper.pb.XchainOuterClass;
import com.yijiuyiyi.helloworld.config.XchainConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;@RestController
public class BlockController {@Autowiredprivate XchainConfig xchainConfig;@GetMapping("/getBlockHeight")public Map<String, Object> getBlockHeight(){XuperClient client = xchainConfig.getClient();XchainOuterClass.BCStatus bcs = client.getBlockchainStatus("xuper");XchainOuterClass.InternalBlock getBlocks = bcs.getBlock();long height = getBlocks.getHeight();Map<String,Object> map = new HashMap<>();map.put("height",height);return map;}
}
然后重启项目,使用postman进行测试此接口
成功获取区块高度
结语
这是简单的xchain对接springboot项目,接下来的篇章将介绍和使用xchain的javasdk包下的方法,进行部署合约,调用合约,查询合约等相关接口功能