经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 区块链 » 查看文章
Spring Boot 整合 Fisco Bcos(区块链)
来源:cnblogs  作者:齐行超  时间:2022/1/17 10:49:58  对本文有异议

简介

FISCO BCOS是由国内企业主导研发、对外开源、安全可控的企业级金融联盟链底层平台,由金链盟开源工作组协作打造,并于2017年正式对外开源。

目前,成熟的区块链的平台不少,之所以选择FISCO BCOS,主要是因为文档细致,容易入门。

官方地址入口

本地环境

本篇文章介绍的 Spring Boot 整合 Fisco Bcos的案例,是在阿里云服务器上部署验证的。
我这边共有两台电脑:
电脑1:本地的Mac电脑,没有区块链环境,只是用于SpringBoot工程的开发;
电脑2:阿里云上的CentOS服务器,配置了区块链环境,合约部署、编译、SpringBoot工程的jar包运行都是在该电脑上;

大家可根据自己的电脑环境,对比该案例进行开发即可。

主要流程:

--> 1、Fisco Bcos环境搭建与验证
--> 2、创建SpringBoot工程并配置依赖
--> 3、编写案例代码
--> 4、生成jar包、部署服务器验证

1、Fisco Bcos环境搭建与验证

Fisco Bcos环境搭建参考的是官方的文档:
搭建第一个区块链网络
我这边测试服务器的操作系统是CentOS,如果是其他操作系统,也是参照该文档进行配置,流程是类似的。
详细流程,大家参照文档进行配置就行了,这里主要说下关键的细节:

1.1、搭建单群组4节点联盟链:

我这边使用的是国密版本命令:
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545 -g -G

主要原因:

我这边使用的Fisco Bcos SDK版本是2.8.0,加载证书时默认会加载国密证书(应该有加载证书类型的选项配置,目前暂未找到相关API)。
如果使用的是非国密版本命令,在/fisco/node/127.0.0.1/sdk/目录下不会生成国密证书,使用该SDK就会报错。

1.2、检查证书

成功启动所有节点后,在/fisco/node/127.0.0.1/sdk/目录下验证所有证书是否存在(gm代表国密),如下图:

1.3、使用证书验证节点正确性

启动节点后,我们可以使用Fisco Bcos提供的本地控制台程序console对节点进行验证。
大家参照文档,先下载、配置控制台程序。
注意:为控制台程序配置节点证书(即:将/fisco/node/127.0.0.1/sdk/下的证书全部复制到控制台程序的 /console/conf/目录下)

启动控制台,测试节点,例如:获取区块链数据高度:getBlockNumber:
如果能正常部署合约,且能获得数据高度,则区块链环境没什么问题,如下图:

2、创建SpringBoot工程并配置依赖

服务端区块链环境已完成验证,接下来,我们创建SpringBoot工程,并集成Fisco Bcos Java版SDK。
Java SDK 文档

2.1、创建SpringBoot工程:



仅勾选Spring Web即可:

2.2、配置pom.xml

注意:SpringBoot版本不宜过高(已与官方技术人员确认),我这边试过2.6.2+,Demo案例调用节点时会异常闪退,当把版本降低为2.4.2就正常了:

配置Fisco Bcos Java版SDK依赖:

pom.xml完整代码:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.4.2</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.qxc</groupId>
  12. <artifactId>demo_bcos</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>demo_bcos</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-web</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter-test</artifactId>
  27. <scope>test</scope>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.fisco-bcos.java-sdk</groupId>
  31. <artifactId>fisco-bcos-java-sdk</artifactId>
  32. <version>2.8.0</version>
  33. <!--排除这个slf4j-log4j12-->
  34. <exclusions>
  35. <exclusion>
  36. <groupId>org.slf4j</groupId>
  37. <artifactId>slf4j-log4j12</artifactId>
  38. </exclusion>
  39. </exclusions>
  40. </dependency>
  41. </dependencies>
  42. <build>
  43. <plugins>
  44. <plugin>
  45. <groupId>org.springframework.boot</groupId>
  46. <artifactId>spring-boot-maven-plugin</artifactId>
  47. </plugin>
  48. </plugins>
  49. </build>
  50. </project>

3、编写案例代码

3.1、配置Fisco Bcos:

Java SDK ? 配置说明
为了简单,本案例将Fisco Bcos的参数通过xml统一配置,并在代码中自动读取。
在/src/main/resources/目录下创建文件fisco-config.xml:

fisco-config.xml完整代码:
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
  6. <bean id="defaultConfigProperty" class="org.fisco.bcos.sdk.config.model.ConfigProperty">
  7. <property name="cryptoMaterial">
  8. <map>
  9. <entry key="certPath" value="conf" />
  10. </map>
  11. </property>
  12. <property name="network">
  13. <map>
  14. <entry key="peers">
  15. <list>
  16. <value>127.0.0.1:20200</value>
  17. <value>127.0.0.1:20201</value>
  18. </list>
  19. </entry>
  20. </map>
  21. </property>
  22. <property name="account">
  23. <map>
  24. <entry key="keyStoreDir" value="account" />
  25. <entry key="accountAddress" value="" />
  26. <entry key="accountFileFormat" value="pem" />
  27. <entry key="password" value="" />
  28. <entry key="accountFilePath" value="" />
  29. </map>
  30. </property>
  31. <property name="threadPool">
  32. <map>
  33. <entry key="channelProcessorThreadSize" value="16" />
  34. <entry key="receiptProcessorThreadSize" value="16" />
  35. <entry key="maxBlockingQueueSize" value="102400" />
  36. </map>
  37. </property>
  38. </bean>
  39. <bean id="defaultConfigOption" class="org.fisco.bcos.sdk.config.ConfigOption">
  40. <constructor-arg name="configProperty">
  41. <ref bean="defaultConfigProperty"/>
  42. </constructor-arg>
  43. </bean>
  44. <bean id="bcosSDK" class="org.fisco.bcos.sdk.BcosSDK">
  45. <constructor-arg name="configOption">
  46. <ref bean="defaultConfigOption"/>
  47. </constructor-arg>
  48. </bean>
  49. </beans>

3.2、配置节点证书:

把区块链节点下的证书拷贝到/src/main/resources/conf/目录下(conf目录为fisco-config.xml配置的证书路径):

3.3、编写controller

BcosController完整代码:
  1. package com.qxc.demo_bcos.controller;
  2. import org.fisco.bcos.sdk.BcosSDK;
  3. import org.fisco.bcos.sdk.client.Client;
  4. import org.fisco.bcos.sdk.client.protocol.response.BlockNumber;
  5. import org.springframework.context.ApplicationContext;
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;
  7. import org.springframework.web.bind.annotation.GetMapping;
  8. import org.springframework.web.bind.annotation.RestController;
  9. @RestController
  10. public class BcosController {
  11. @GetMapping("/test")
  12. public String test(){
  13. System.out.println("-----test------");
  14. return "this is bcos demo";
  15. }
  16. @GetMapping("/block")
  17. public String getBlockNumber(){
  18. System.out.println("-----getBlockNumber getBlockNumber------");
  19. @SuppressWarnings("resource")
  20. ApplicationContext context = new ClassPathXmlApplicationContext("classpath:fisco-config.xml");
  21. System.out.println("-----getBlockNumber ClassPathXmlApplicationContext ok------");
  22. BcosSDK bcosSDK = context.getBean(BcosSDK.class);
  23. System.out.println("-----getBlockNumber BcosSDK ok------");
  24. Client client = bcosSDK.getClient(Integer.valueOf(1));
  25. System.out.println("-----getBlockNumber client ok------");
  26. BlockNumber blockNumber = client.getBlockNumber();
  27. return "getBlockNumber: "+blockNumber.getBlockNumber().toString();
  28. // return "";
  29. }
  30. }

3.4、DemoBcosApplication默认不做修改

3.5、application.properties什么也没配置

为了简单,端口我这边直接使用8080,主要是个人比较懒,什么都懒得配置了,O(∩_∩)O~

4、生成jar包、部署服务器验证

4.1、本地先跑一把

SpringBoot的开发是在我本地的Mac电脑上进行的,为了能稳妥的部署到远程CentOS服务器上,
先在本地跑一把,看看工程编译运行是否正常(此时不用测试区块链功能,因为我本地并没有区块链环境):


没问题,完美。

4.2、打包jar

4.3、把jar包发送到远程服务器上,并运行:


案例程序已在服务器端跑起来了,回到本地mac电脑,远程连服务器试一下吧(IP就不展示给大家看了哈):

至此,使用Spring Boot 整合 Fisco Bcos 最最基本的案例已完成。

总结

Fisco Bcos 的使用还是很简单的,如果有问题大家可以直接查询官方技术文档,也欢迎留言讨论,咱们共同学习、共同进步,哈哈~~。

下一节:Spring Boot 整合 Fisco Bcos(部署、调用区块链合约)

原文链接:http://www.cnblogs.com/qixingchao/p/15761854.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号