简介

在上一节,介绍了Spring Boot 整合 Fisco BCOS的最最基础的案例(SpringBoot成功连接Fisco BCOS,并访问其节点网络 --> 文章链接)。

本节,咱们继续介绍Spring Boot 整合 Fisco BCOS的最最重要的技术点:部署、调用区块链合约(基于上一节的工程案例)。

主要流程

--> 1、合约开发(省略,因为是案例演示,直接使用 Fisco BCOS自带的 HelloWorld合约即可,默认已包含的get、set方法)

--> 2、合约编译(需要编译成java文件,才能在Spring Boot工程中使用)

--> 3、Spring Boot配置合约(将编译好的合约文件,配置到Spring Boot工程中)

--> 4、合约调用的功能实现

--> 5、功能测试

1、合约开发

Fisco BCOS 默认自带了一些合约参考案例,我们就不用自己开发了(原因是比较懒,能不做的就要坚持不做),直接使用HelloWorld.sol即可:



看一下该合约的代码实现,只包含了一个变量,以及该变量的get、set方法(现阶段不用考虑solidity语法,相信有过编程经验的同学都能看得懂):

2、合约编译

合约HelloWorld.sol想在SpringBoot中使用,需要先将合约文件进行编译,得到.java文件。

编译合约,最简单的方式是通过 Fisco BCOS提供的Console控制台程序进行编译,

官方文档:--> 请参考:第四步. 准备智能合约

比较简单,此处不再复述。

注意:如果是自己开发的合约,需要先将合约拷贝到 ~/fisco/console/contracts/solidity目录下,再执行编译合约的命令。

编译成功后,可以在/contracts/sdk/java/org/com/fisco/目录中找到编译后的java文件 :

其中,HelloWorld.java 就是我们需要的文件。

3、Spring Boot配置合约

将HelloWorld.java拷贝到SpringBoot工程中,注意:在应用中所放的位置要与我们设定的包名相同(即:编译后存放java文件的目录结构):



这样就算配置好了,接下来我们直接编码调用合约就可以了~

4、合约调用的功能实现

BcosController完整代码:
package com.qxc.demo_bcos.controller;

import org.com.fisco.HelloWorld;
import org.fisco.bcos.sdk.BcosSDK;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.client.protocol.response.BlockNumber;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.bind.annotation.*; /**
* Bcos 演示案例:
* 齐行超
* 2022-01-04
*/
@RestController
public class BcosController {
private BcosSDK bcosSDK;
private Client client;
private HelloWorld helloWorld; private void initSDK() throws Exception {
System.out.println("-----init BcosSDK:------");
@SuppressWarnings("resource")
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:fisco-config.xml");
System.out.println("-----init config ok------");
bcosSDK = context.getBean(BcosSDK.class);
System.out.println("-----init BcosSDK ok------");
// 为群组1初始化client
client = bcosSDK.getClient(Integer.valueOf(1));
System.out.println("-----init client ok------");
// 向群组1部署HelloWorld合约
CryptoKeyPair cryptoKeyPair = client.getCryptoSuite().getCryptoKeyPair();
helloWorld = HelloWorld.deploy(client, cryptoKeyPair);
System.out.println("-----deploy HelloWorld ok------");
} @GetMapping("/test")
public String test() {
System.out.println("-----test------");
return "this is bcos demo";
} @GetMapping("/block")
public String getBlockNumber() throws Exception {
System.out.println("-----getBlockNumber------");
if(bcosSDK == null){
initSDK();
}
if(bcosSDK == null || client == null){
System.out.println("-----init BcosSDK failed------");
return "-----init BcosSDK failed----";
}
BlockNumber blockNumber = client.getBlockNumber();
return "block number is : " + blockNumber.getBlockNumber().toString();
} @GetMapping("/get")
public String getHelloworld() throws Exception {
System.out.println("-----getHelloworld------");
if(bcosSDK == null){
initSDK();
}
if(bcosSDK == null || helloWorld == null){
System.out.println("-----init BcosSDK failed------");
return "-----init BcosSDK failed----";
}
// 调用HelloWorld合约的get接口
String getValue = helloWorld.get();
System.out.println("-----call HelloWorld get success------:" + getValue);
return getValue;
} @GetMapping("/set")
public String setHelloworld(@RequestParam(value="val",required = false,defaultValue = "default val")String val) throws Exception {
System.out.println("-----setHelloworld------");
if(bcosSDK == null){
initSDK();
}
if(bcosSDK == null || helloWorld == null){
System.out.println("-----init BcosSDK failed------");
return "-----init BcosSDK failed----";
}
// 调用HelloWorld合约的set接口
TransactionReceipt receipt = helloWorld.set(val);
System.out.println("-----call HelloWorld get success------:" + receipt.getMessage());
return "setHelloworld success";
}
}

代码中除了合约的调用,还有BCOS SDK初始化等功能,对应的技术讲解请在上一节中查看,本节不再复述哈--> 文章链接

5、功能测试

我这边有两台电脑:

电脑1:本地的Mac电脑,没有区块链环境,只是用于SpringBoot工程的开发;

电脑2:阿里云上的CentOS服务器,配置了区块链环境,合约部署、编译、SpringBoot工程的jar包运行都是在该电脑上;

大家可根据自己的电脑环境,对比着进行功能测试即可。

5.1、编译SpringBoot工程,生成jar包:

5.2、发送到服务器上运行:

5.3、在mac电脑上远程访问服务端程序(也可在服务端通过curl自己访问自己):

测试get:

测试set:

再测试get:

测试块高(我这边反复set了几次,块高已累计到9了 ):

总结

至此,Spring Boot 整合 Fisco Bcos(部署、调用区块链合约)的案例讲解已结束。

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

Spring Boot 整合 Fisco Bcos(部署、调用区块链合约)的更多相关文章

  1. Spring Boot 整合 Fisco Bcos(区块链)

    简介 FISCO BCOS是由国内企业主导研发.对外开源.安全可控的企业级金融联盟链底层平台,由金链盟开源工作组协作打造,并于2017年正式对外开源. 目前,成熟的区块链的平台不少,之所以选择FISC ...

  2. dapr本地托管的服务调用体验与Java SDK的Spring Boot整合

    1 简介 之前在文章<dapr入门与本地托管模式尝试>中介绍了dapr和本地托管,本文我们来介绍如果在代码中使用dapr的服务调用功能,并把它整合到Spring Boot中. Dapr服务 ...

  3. 【Spring Boot学习之六】Spring Boot整合定时任务&异步调用

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2一.定时任务1.启动类添加注解@EnableScheduling 用于开启定时任务 package com.wjy; i ...

  4. spring boot整合Swagger2

    Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化RESTful风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集成到服务器 ...

  5. Spring boot 整合CXF webservice 遇到的问题及解决

    将WebService的WSDL生成的代码的命令: wsimport -p com -s . com http://localhost:8080/service/user?wsdl Spring bo ...

  6. Spring Boot 整合 Apollo

    简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景 ...

  7. Spring Boot 整合 xxl-job

    官方文档:https://www.xuxueli.com/xxl-job/ XXL-JOB 是一个分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源代码并接入多家公司线 ...

  8. spring boot 系列之四:spring boot 整合JPA

    上一篇我们讲了spring boot 整合JdbcTemplate来进行数据的持久化, 这篇我们来说下怎么通过spring boot 整合JPA来实现数据的持久化. 一.代码实现 修改pom,引入依赖 ...

  9. Spring Boot整合Elasticsearch

    Spring Boot整合Elasticsearch   Elasticsearch是一个全文搜索引擎,专门用于处理大型数据集.根据描述,自然而然使用它来存储和搜索应用程序日志.与Logstash和K ...

  10. spring boot 整合quartz ,job不能注入的问题

    在使用spring boot 整合quartz的时候,新建定时任务类,实现job接口,在使用@AutoWire或者@Resource时,运行时出现nullpointException的问题.显然是相关 ...

随机推荐

  1. [K8s] Docker 单节点部署 Rancher

    Rancher 是通过 Web 界面管理 k8s 集群的工具,本身支持使用 Docker 启动. 单节点部署只需要 docker run 即可,易用性高,高可用部署可以使用 nginx 反向代理机制. ...

  2. dotnet ConditionalWeakTable 的底层原理

    在 dotnet 中有一个特殊的类,这个类能够做到附加属性一样的功能.也就是给某个对象附加一个属性,当这个对象被回收的时候,自然解除附加的属性的对象的引用.本文就来聊聊这个类的底层原理 小伙伴都知道弱 ...

  3. vue引入一个单独的数据文件

    1.新建一个address.js的文件 2.文件内const citys = { "北京市":         ["东城区","西城区",& ...

  4. python使用pysql操作MySQL数据库

    前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持3.x版本. 本文测试python版本:2.7.11. ...

  5. 四:大数据架构回顾-IOTA架构

    IOTA大数据架构是一种基于AI生态下的全新的数据架构模式,2018年,易观首次提出这一概念.IOTA的整体思路是设定标准数据模型,通过边缘计算技术把所有的计算过程分散在数据产生.计算和查询过程当中, ...

  6. Linux下的目录

    FHS 因为利用Linux来开发产品或distributions的社群/公司与个人实在太多了, 如果每个人都用自己的想法来配置文件放置的目录,那么将可能造成很多管理上的困扰. 你能想象,你进入一个企业 ...

  7. 企业微信群机器人发送消息(三)java端如何控制

    1.先在群里添加机器人,然后获取机器人的webhook地址: 假设webhook是:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693a9 ...

  8. 在Biwen.QuickApi中整合一个极简的发布订阅(事件总线)

    闲来无聊在我的Biwen.QuickApi中实现一下极简的事件总线,其实代码还是蛮简单的,对于初学者可能有些帮助 就贴出来,有什么不足的地方也欢迎板砖交流~ 首先定义一个事件约定的空接口 public ...

  9. blocks (单调栈)

    题目描述 解析 对于这道题,他要求大于k的数进行操作,所以直接让每个数减k,然后用前缀和维护一下与0比较就可以了,因为一段区间和的平 均值大于k的话,那么这就是一个合法区间,即为操作后的这个区间和大于 ...

  10. 鸿蒙HarmonyOS实战-Stage模型(UIAbility组件)

    一.UIAbility组件 1.概述 HarmonyOS中的Stage模型是一种基于UIAbility组件的应用程序架构.UIAbility是HarmonyOS系统中用于构建用户界面的基本组件之一.它 ...