spring boot 实现fisco bcos最基础案例
spring boot 实现fisco bcos最基础案例
- 一、基于国密搭建的4个节点联盟链
- 1.1 依赖文件
- 1.2 config.toml配置文件
- 1.3 用工具编译Helloworld.sol生成Hellolworld.java文件
- 1.4 调用合约方法
- 二、注意的点
- 2.1 spring-boot版本不宜过高
- 2.2 读取项目根路径
- 三、spring boot接口搭建
- 3.1 去掉数据库配置
- 3.2 tomcat正常启动,localhost访问不到接口
- 3.3 lombok不起作用
一、基于国密搭建的4个节点联盟链
1.1 依赖文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>Demo project for Spring Boot</description><properties><java.version>11</java.version></properties><repositories><repository><id>jitpack.io</id><url>https://jitpack.io</url></repository></repositories><dependencies><dependency><groupId>com.github.ipfs</groupId><artifactId>java-ipfs-http-client</artifactId><version>1.3.3</version></dependency><dependency><groupId>org.fisco-bcos.java-sdk</groupId><artifactId>fisco-bcos-java-sdk</artifactId><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions><version>2.8.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!--排除这个slf4j-log4j12--><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web-services</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>
1.2 config.toml配置文件
- 主要配置证书的目录
certPath = "/home/ybx/fisco/console/conf"
1.3 用工具编译Helloworld.sol生成Hellolworld.java文件
- 注意Helloworld所在包的目录
package org.com.fisco;import org.fisco.bcos.sdk.abi.FunctionReturnDecoder;
import org.fisco.bcos.sdk.abi.TypeReference;
import org.fisco.bcos.sdk.abi.datatypes.Function;
import org.fisco.bcos.sdk.abi.datatypes.Type;
import org.fisco.bcos.sdk.abi.datatypes.Utf8String;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.contract.Contract;
import org.fisco.bcos.sdk.crypto.CryptoSuite;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.model.CryptoType;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;import java.util.Arrays;
import java.util.Collections;
import java.util.List;@SuppressWarnings("unchecked")
public class HelloWorld extends Contract {public static final String[] BINARY_ARRAY = {"608060405234801561001057600080fd5b506040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b6102d7806101166000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680634ed3885e146100515780636d4ce63c146100ba575b600080fd5b34801561005d57600080fd5b506100b8600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061014a565b005b3480156100c657600080fd5b506100cf610164565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010f5780820151818401526020810190506100f4565b50505050905090810190601f16801561013c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b8060009080519060200190610160929190610206565b5050565b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101fc5780601f106101d1576101008083540402835291602001916101fc565b820191906000526020600020905b8154815290600101906020018083116101df57829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061024757805160ff1916838001178555610275565b82800160010185558215610275579182015b82811115610274578251825591602001919060010190610259565b5b5090506102829190610286565b5090565b6102a891905b808211156102a457600081600090555060010161028c565b5090565b905600a165627a7a72305820b1744ccd28d3d152d7fac89294703316082ce5481cef4c29808d1904d1e1f4b20029"};public static final String BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", BINARY_ARRAY);public static final String[] SM_BINARY_ARRAY = {"608060405234801561001057600080fd5b506040805190810160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b6102d7806101166000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063299f7f9d146100515780633590b49f146100e1575b600080fd5b34801561005d57600080fd5b5061006661014a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100a657808201518184015260208101905061008b565b50505050905090810190601f1680156100d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156100ed57600080fd5b50610148600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506101ec565b005b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101e25780601f106101b7576101008083540402835291602001916101e2565b820191906000526020600020905b8154815290600101906020018083116101c557829003601f168201915b5050505050905090565b8060009080519060200190610202929190610206565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061024757805160ff1916838001178555610275565b82800160010185558215610275579182015b82811115610274578251825591602001919060010190610259565b5b5090506102829190610286565b5090565b6102a891905b808211156102a457600081600090555060010161028c565b5090565b905600a165627a7a72305820defb7a0b9c6a1ca001a7b54f2f3f37619217183219644c5cb0c1ac940406d11a0029"};public static final String SM_BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);public static final String[] ABI_ARRAY = {"[{\"constant\":false,\"inputs\":[{\"name\":\"n\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}]"};public static final String ABI = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", ABI_ARRAY);public static final String FUNC_SET = "set";public static final String FUNC_GET = "get";protected HelloWorld(String contractAddress, Client client, CryptoKeyPair credential) {super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);}public static String getBinary(CryptoSuite cryptoSuite) {return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);}public TransactionReceipt set(String n) {final Function function = new Function(FUNC_SET, Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(n)), Collections.<TypeReference<?>>emptyList());return executeTransaction(function);}public byte[] set(String n, TransactionCallback callback) {final Function function = new Function(FUNC_SET, Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(n)), Collections.<TypeReference<?>>emptyList());return asyncExecuteTransaction(function, callback);}public String getSignedTransactionForSet(String n) {final Function function = new Function(FUNC_SET, Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(n)), Collections.<TypeReference<?>>emptyList());return createSignedTransaction(function);}public Tuple1<String> getSetInput(TransactionReceipt transactionReceipt) {String data = transactionReceipt.getInput().substring(10);final Function function = new Function(FUNC_SET, Arrays.<Type>asList(), Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());return new Tuple1<String>((String) results.get(0).getValue());}public String get() throws ContractException {final Function function = new Function(FUNC_GET, Arrays.<Type>asList(), Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));return executeCallWithSingleValueReturn(function, String.class);}public static HelloWorld load(String contractAddress, Client client, CryptoKeyPair credential) {return new HelloWorld(contractAddress, client, credential);}public static HelloWorld deploy(Client client, CryptoKeyPair credential) throws ContractException {return deploy(HelloWorld.class, client, credential, getBinary(client.getCryptoSuite()), "");}
}
1.4 调用合约方法
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.config.exceptions.ConfigException;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;
import org.junit.Test;public class BcosSDKTest {// 获取配置文件路径//static String path1 = System.getProperty("user.dir");//static String configFile = path1 + "/conf.toml";static String configFile = "/home/ybx/fisco/console/conf/config.toml";//public final String configFile = BcosSDKTest.class.getClassLoader().getResource("config.toml").getPath();@Testpublic void getPath(){System.out.println(configFile);BcosSDK sdk = BcosSDK.build(configFile);System.out.println(sdk);}@Testpublic void testClient() throws ConfigException, ContractException {// 初始化BcosSDKBcosSDK sdk = BcosSDK.build(configFile);//System.out.println(sdk);// 为群组1初始化clientClient client = sdk.getClient(Integer.valueOf(1));// 获取群组1的块高BlockNumber blockNumber = client.getBlockNumber();System.out.println(blockNumber);// 向群组1部署HelloWorld合约CryptoKeyPair cryptoKeyPair = client.getCryptoSuite().getCryptoKeyPair();HelloWorld helloWorld = HelloWorld.deploy(client, cryptoKeyPair);// 调用HelloWorld合约的get接口String getValue = helloWorld.get();System.out.println("getValue的值是:"+getValue);// 调用HelloWorld合约的set接口TransactionReceipt receipt = helloWorld.set("Hello, fisco");}}
二、注意的点
2.1 spring-boot版本不宜过高
- 高了会出错
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.2</version><relativePath/> <!-- lookup parent from repository --></parent>
2.2 读取项目根路径
static String path1 = System.getProperty("user.dir");
三、spring boot接口搭建
3.1 去掉数据库配置
- 不去掉数据库配置会报错
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
3.2 tomcat正常启动,localhost访问不到接口
- 原因:controller类和主类不在同一个包下
- 在main函数启动类上加注解:@SpringBootApplication(scanBasePackages = “com”) 问题即可解决。
3.3 lombok不起作用
- 添加lombok依赖后,还需要idea安装lombok插件
- 配置Annotation
spring boot 实现fisco bcos最基础案例相关推荐
- Spring Boot 2.0.0.M3使用案例,案例配置,常用命令,注解介绍,热部署
以下内容是从SpringBoot官网中学到: https://docs.spring.io/spring-boot/docs/2.0.0.M3/reference/htmlsingle/#boot-f ...
- spring boot整合freemarker及freemarker基础语法超详细讲解
采用模板+数据=HTML 实现页面的静态化. 也就是服务端的页面静态化技术. JSP/Freemarker/Thymeleaf是常见的模板引擎. 引依赖 okhttp与HttpClient一样的作用, ...
- spring 2.0核心技术与最佳实践 pdf_推荐 Spring Boot 实践学习案例大全 数据缓存 和中间件 安全权限...
概况 spring boot 实践学习案例 spring boot 初学者及核心技术巩固的最佳实践 目录 『 Spring Boot 2 快速教程 』 Spring Boot 2:WebFlux集成 ...
- Spring Boot基础入门+内置tomcat+自动配置浅谈分析
SpringBoot目录 一.Spring Boot概述 1.1 什么是Spring Boot? 1.2 Spring Boot出生的时代背景 1.2 SpringBoot的优点 1).内嵌Tomca ...
- Spring Boot 2.x基础教程:使用LDAP来管理用户与组织数据
很多时候,我们在做公司系统或产品时,都需要自己创建用户管理体系,这对于开发人员来说并不是什么难事,但是当我们需要维护多个不同系统并且相同用户跨系统使用的情况下,如果每个系统维护自己的用户信息,那么此时 ...
- 3W 字的 Spring Boot 超详细总结
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者|CHEN川 http://www.jianshu.c ...
- 最棒 Spring Boot 干货总结(超详细,建议收藏)
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:CHEN川 链接:http://www.jianshu.co ...
- Spring Boot全面总结(超详细,建议收藏)
前言:本文非常长,建议先mark后看,也许是最后一次写这么长的文章 说明:前面有4个小节关于Spring的基础知识 分别是:IOC容器.JavaConfig.事件监听.SpringFactoriesL ...
- 为什么Java大神,都在看Spring Boot和Spring Cloud的书?
2019独角兽企业重金招聘Python工程师标准>>> 如果你是一名Java开发人员,并且最近正打算学习Spring Boot和Spring Cloud框架并寻找一些关于它们的最好的 ...
最新文章
- 2017.4.18 静态代码分析工具sonarqube+sonar-runner的安装配置及使用
- 对比 5 种分布式事务方案,还是宠幸了阿里的 Seata(原理 + 实战)
- mysql每秒最多能插入多少条数据 ? 死磕性能压测
- 自定义Spring Data JPA存储库
- 配置yum,nc,telnet
- 2016蓝桥杯java试题_2016年第七届蓝桥杯JavaB组省赛试题解析
- 对话阿里 CTO 程立:未来数字世界的根基是开源和云
- 【数字信号去噪】基于matlab小波软阈值+硬阈值+改进的阈值高斯脉冲信号去噪【含Matlab源码 1706期】
- 014吸管工具,颜色取样器工具,标尺工具和注释工具
- 实验四 shell 编程
- 柴静《看见》发布会。。。
- splay 模板 洛谷3369
- java发邮件的代码
- .ipynb如何转为.py
- linux 4.1内核源码编译
- Python基础之函数,面向对象
- Lua开发--lua变量
- 鼠标连点器电脑版安装使用教程
- android wifi 共享网络,安卓手机怎么共享XP的网络 无线wifi共享教程【详解】
- precision scale