springboot整合fisco
Spring Boot连接Fisco Bcos区块链
使用spring boot连接Fisco Bcos,在Fisco Bcos的官方提供了Java-Sdk工具用于连接
Java SDK 提供了访问 FISCO BCOS 节点的Java API,支持节点状态查询、部署和调用合约等功能,基于Java SDK可开发区块链应用,目前支持FISCO BCOS 2.0+。
搭建环境
fisco bcos环境的搭建这里就略过了,可上官方文档上进行查看:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest
webase-front 环境的搭建: https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE-Install/developer.html
spring boot环境搭建这里也略过, 可以进行百度.
这里使用的IDEA
请确保有fisco bcos环境和spring boot环境才进行下一步:
首先式pom.xml对项目依赖的引用
注: 我的fisco bcos安装在fisco中
//sprin boot项目必须要用到依赖,里面包含jdk版,字符编码和spring boot各种三方工具
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.2</version>
</parent>
//指定java版本
<properties><java.version>11</java.version>
</properties>
这里的spring boot的spring-boot-starter-parent 依赖版本不要过高,否则会报java 版本的错误,尽量选2.4.2,这个版本是肯定可以的
引用三方工具的依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.fisco-bcos</groupId><artifactId>solcJ</artifactId><version>0.4.25.1</version></dependency>//使用到连接fisco bcos java sdk工具<dependency><groupId>org.fisco-bcos.java-sdk</groupId><artifactId>fisco-bcos-java-sdk</artifactId><version>2.7.2</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.1.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency></dependencies>
配置环境
先把fisoc bcos的密钥复制到resource下的conf文件
fisco bcos密钥文件地址为: nodes/{ip}/sdk/*
下的所有文件,复制完成后就可以进行下一步
当然也可以通过webase-front 得到密钥文件:
打开浏览器输入webase-front 的url地址: http://ip:5002/WEBASE-Front
在 合约管理 >>> 合约IDE >> 随便打开一个自己写好的智能合约>> SDK证书下载>>选择文件下载位置, 就可以了
引入完成后,就可以写application.yml配置文件
server:port: 5023
fisco:cryptoMaterial:certPath: "conf"network:peers:#改自己ip- "8.142.75.*:20200"amop:# - publicKeys: [ "conf/amop/consumer_public_key_1.pem" ]# topicName: "PrivateTopic1"# - password: "123456"# privateKey: "conf/amop/consumer_private_key.p12"# topicName: "PrivateTopic2"account:keyStoreDir: "account"# accountFilePath: "conf"accountFileFormat: "pem"# accountAddress: "0x"# password: ""threadPool:# channelProcessorThreadSize: "16"# receiptProcessorThreadSize: "16"maxBlockingQueueSize: "102400"
最简单的测试
读取application中配置好的数据,使用实体类接收,需要用到的注解:
@ConfigurationProperties(prefix = "fisco")
,用于读取application中fisco中配置的数据
@Data
@ToString
@Component
@ConfigurationProperties(prefix = "fisco")
public class FiscoCnfig {private Map<String, Object> cryptoMaterial;public Map<String, List<String>> network;public List<AmopTopic> amop;public Map<String, Object> account;public Map<String, Object> threadPool;
}
初始化BcosSDK这个工具类
@Slf4j
@Data
@Component
public class FiscoBcos {@Autowiredprivate FiscoCnfig fiscoConfig;private BcosSDK bcosSDK;@PostConstructpublic void init() {ConfigProperty configProperty = loadProperty();try {ConfigOption configOption = new ConfigOption(configProperty, CryptoType.ECDSA_TYPE);bcosSDK = new BcosSDK(configOption);} catch (ConfigException e) {log.error("init error: {}", e);}}private ConfigProperty loadProperty() {ConfigProperty configProperty = new ConfigProperty();configProperty.setCryptoMaterial(fiscoConfig.getCryptoMaterial());configProperty.setAccount(fiscoConfig.getAccount());Map network = fiscoConfig.getNetwork();configProperty.setNetwork(network);configProperty.setAmop(fiscoConfig.getAmop());configProperty.setThreadPool(fiscoConfig.getThreadPool());return configProperty;}
}
控制器器类的编写, 在浏览器上显示出区块链的块高
@RestController
public class fiscoController {@Autowiredprivate FiscoBcos fiscoBcos;@RequestMapping("block")public String Number(){BcosSDK bcosSDK = fiscoBcos.getBcosSDK();Client client = bcosSDK.getClient(Integer.valueOf(1));BlockNumber blockNumber = client.getBlockNumber();return blockNumber.getBlockNumber().toString();}
}
接下来就来写springboot项目的启动类,
@SpringBootApplication
public class FiscoApplication {public static void main(String[] args) {SpringApplication.run(FiscoApplication.class, args);}
}
启动spring boot项目后,在浏览器的地址上输入:http:localhost:5023/block就可以看到你区块链上当前块高了
调用合约
1.编写合约和部署合约
编写智能合约
请确保合约在fisco bcos文件下的 fisco/console/contracts/solidity
目录下
pragma solidity ^0.4.24;contract structs{struct Student {uint256 id;string name; //姓名}Student[] public students;uint256 public nextId = 1;//添加一个学生function addStudent(string memory name)public{Student memory student = Student({id: nextId,name: name});students.push(student);nextId ++;}//查找学生function find(uint256 id)private view returns(uint256){for(uint256 i = 0; i < students.length; i++){if(students[i].id == id){return i;}}revert("User not found");}//找到学生基本信息function read(uint256 id)public view returns(string name){uint256 i = find(id);name = students[i].name;return (name);}//删除一个学生function removeStudent(uint256 id_)public{uint256 i = find(id_);delete students[i];}//修改一个学生function update(uint256 id_, string name_)public{uint256 i = find(id_);students[i].name = name_;}
}
部署智能合约
启动fisco bcos的控制台:* 请确保4个节点启动成功
请确保合约在fisco bcos文件下的 fisco/console/contracts/solidity
目录下
进入fisco bcos控制台部署智能合约,
[group:1]> deploy structs
transaction hash: 0x**********************
contract address: 0x************1
[group:1]> call structs 0x************1 addStudent "你好"
transaction hash: 0x**************************************
---------------------------------------------------------------------------------------------
transaction status: 0x0
description: transaction executed successfully
---------------------------------------------------------------------------------------------
Output
Receipt message: Success
Return message: Success
---------------------------------------------------------------------------------------------
Event logs
Event: {}
这里我们只需要拿到 contract address 里的值
2.将写好的智能合约编译成java 文件
.sol
的智能合约需要编译成ABI和BIN文件才能部署至区块链网络上。有了这两个文件即可凭借Java SDK进行合约部署和调用。但这种调用方式相对繁琐,需要用户根据合约ABI来传参和解析结果。为此,控制台提供的编译工具不仅可以编译出ABI和BIN文件,还可以自动生成一个与编译的智能合约同名的合约Java类。这个Java类是根据ABI生成的,帮助用户解析好了参数,提供同名的方法。当应用需要部署和调用合约时,可以调用该合约类的对应方法,传入指定参数即可。使用这个合约Java类来开发应用,可以极大简化用户的代码。:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/tutorial/sdk_application.html
这里有两种方法1.在webase-front
2.通过提供的sol2java.sh将智能合约编译成java文件
一. 打开浏览器输入webase-front 的url地址: http://ip:5002/WEBASE-Front
在 合约管理 >>> 合约IDE >> 随便打开一个自己写好的智能合约>> 导出java文件>>然后填写自己的包名, 就可以了
二.使用fisco bcos提供sol2java.sh将智能合约编译成java文件:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/tutorial/sdk_application.html
请注意webase-front部署的合约在fisco bcos控制台中不能使用,如果是在webase-front部署的合约请到fisco bcos控制台中再部署一次
将编译后的文件放到spring boot项目中src 目录中,webase-front导入的话请注意包名.
3.开始编写使用合约的代码
由于将智能合约编译好java文件,可以稍微看一下这个java文件
这里由智能合约里的一些方法:如智能中有read(uint256 id)对应的java文件中也有这个方法,还有些额外的方法,常用的有deploy()部署和laod()加载
import com.fisco.demo.Bcos.FiscoBcos;
import com.fisco.demo.solidity.Structs;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigInteger;@RestControllerpublic class fiscoController {@Autowiredprivate FiscoBcos fiscoBcos;@RequestMapping("block")public String Number() throws ContractException {// BcosSDK bcosSDK = fiscoBcos.getBcosSDK();
// Client client = bcosSDK.getClient(Integer.valueOf(1));
// BlockNumber blockNumber = client.getBlockNumber();Client client = fiscoBcos.getClient();CryptoKeyPair cryptoKeyPair = client.getCryptoSuite().getCryptoKeyPair();Structs structs = Structs.load("0x3ac7be911135837e73198e3e054a26fac0e0ed41",client, cryptoKeyPair);BigInteger id = new BigInteger("1");String name = structs.read(id);return name;}
}
启动运行spring boot项目,打开浏览器输入url: http://ip:5023/block 就可以看到浏览器中出现 你好 了
下一节更为简单的一种方法: 使用webase-front 提供的api接口来进行对区块链的连接
springboot整合fisco相关推荐
- SpringBoot第九篇: springboot整合Redis
这篇文章主要介绍springboot整合redis,至于没有接触过redis的同学可以看下这篇文章:5分钟带你入门Redis. 引入依赖: 在pom文件中添加redis依赖: <dependen ...
- es springboot 不设置id_原创 | 一篇解决Springboot 整合 Elasticsearch
ElasticSearch 结合业务的场景,在目前的商品体系需要构建搜索服务,主要是为了提供用户更丰富的检索场景以及高速,实时及性能稳定的搜索服务. ElasticSearch是一个基于Lucene的 ...
- springboot整合shiro使用shiro-spring-boot-web-starter
此文章仅仅说明在springboot整合shiro时的一些坑,并不是教程 增加依赖 <!-- 集成shiro依赖 --> <dependency><groupId> ...
- db2 springboot 整合_springboot的yml配置文件通过db2的方式整合mysql的教程
springboot整合MySQL很简单,多数据源就master,slave就行了,但是在整合DB2就需要另起一行,以下是同一个yml文件 先配置MySQL,代码如下 spring: datasour ...
- 九、springboot整合rabbitMQ
springboot整合rabbitMQ 简介 rabbitMQ是部署最广泛的开源消息代理. rabbitMQ轻量级,易于在内部和云中部署. 它支持多种消息传递协议. RabbitMQ可以部署在分布式 ...
- 八、springboot整合Spring Security
springboot整合Spring Security 简介 Spring Security是一个功能强大且可高度自定义的身份验证和访问控制框架.它是保护基于Spring的应用程序的事实标准. Spr ...
- 六、springboot整合swagger
六.springboot整合swagger 简介 swagger 提供最强大,最易用的工具,以充分利用OpenAPI规范. 官网 : https://swagger.io/ 准备工作 pom.xml ...
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例(转)...
SpringBoot整合mybatis.shiro.redis实现基于数据库的细粒度动态权限管理系统实例 shiro 目录(?)[+] 前言 表结构 maven配置 配置Druid 配置mybatis ...
- SpringBoot整合RabbitMQ-整合演示
本系列是学习SpringBoot整合RabbitMQ的练手,包含服务安装,RabbitMQ整合SpringBoot2.x,消息可靠性投递实现等三篇博客. 学习路径:https://www.imooc. ...
最新文章
- Usage and Idioms——Categories
- springmvc3.2+spring+hibernate4全注解方式整合(一)
- neutron DVR
- TCP之超时重传机制
- 从volatile说到i++的线程安全问题
- linux——grep 文本过滤器
- 奥委会主席巴赫与马云对谈:阿里巴巴能将奥运精神带进科技时代
- linux cp和rm命令
- MATLAB-1:入门基础
- “大龄”程序员的出路
- 鸿蒙轻内核M核源码分析:中断Hwi
- 推特安卓版漏洞可导致攻击者访问用户私信
- c1flexGrid 在单元格中显示图片, 及行号
- C语言的结构变量定义规则,嵌入式学习笔记:c语言结构体的定义和使用
- 【操作系统】斐讯K2 PSG1218 A2 版本22.6.512.75 刷breed+老毛子固件
- Html学习手册(W3CSchool.chm)
- 庚子年十月初九——十月十五
- contest8 CF614 div2 oox?? oooox ooooo
- android rom 刷数据吗,安卓手机如何刷入rom包 安卓机刷入rom包方法
- 掌握 Windows 命令行界面:常用 DOS 命令简介