FISCO BCOS 2.9.1 从0部署到简单使用的CRUD接口

2023-11-05

FISCO BCOS 2.9.1 从0部署到简单使用CRUD接口

前言

具体请参考官方文档

1. 部署fisoc bcos 2.9.1环境

1.1 安装centos依赖

sudo yum install -y openssl openssl-devel

1.2 创建fisco目录和脚本

使用gittee下载较快

curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/releases/v2.9.1/build_chain.sh && chmod u+x build_chain.sh

1.3 搭建节点并启动fisco链

bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545

启动fisco节点

bash nodes/127.0.0.1/start_all.sh

1.4 检查进程是否启动

ps -ef | grep -v grep | grep fisco-bcos

1.5 检查日志输出

tail -f nodes/127.0.0.1/node0/log/log*  | grep connected
tail -f nodes/127.0.0.1/node0/log/log*  | grep +++

2 配置使用控制台

2.1 安装依赖

  • java安装
sudo yum install -y java java-devel
  • 简单数据安装
cd ~/fisco && curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master-2.0/tools/download_console.sh && bash download_console.sh

2.2 启动并使用控制台

  • 启动
cd ~/fisco/console && bash start.sh

输出以下结果代表成功:

=============================================================================================
Welcome to FISCO BCOS console(2.6.0)!
Type 'help' or 'h' for help. Type 'quit' or 'q' to quit console.
 ________  ______   ______    ______    ______         _______    ______    ______    ______
|        \|      \ /      \  /      \  /      \       |       \  /      \  /      \  /      \
| $$$$$$$$ \$$$$$$|  $$$$$$\|  $$$$$$\|  $$$$$$\      | $$$$$$$\|  $$$$$$\|  $$$$$$\|  $$$$$$\
| $$__      | $$  | $$___\$$| $$   \$$| $$  | $$      | $$__/ $$| $$   \$$| $$  | $$| $$___\$$
| $$  \     | $$   \$$    \ | $$      | $$  | $$      | $$    $$| $$      | $$  | $$ \$$    \
| $$$$$     | $$   _\$$$$$$\| $$   __ | $$  | $$      | $$$$$$$\| $$   __ | $$  | $$ _\$$$$$$\
| $$       _| $$_ |  \__| $$| $$__/  \| $$__/ $$      | $$__/ $$| $$__/  \| $$__/ $$|  \__| $$
| $$      |   $$ \ \$$    $$ \$$    $$ \$$    $$      | $$    $$ \$$    $$ \$$    $$ \$$    $$
 \$$       \$$$$$$  \$$$$$$   \$$$$$$   \$$$$$$        \$$$$$$$   \$$$$$$   \$$$$$$   \$$$$$$
=============================================================================================
  • deploy HelloWorld

​ 会返回如下三个值,后期会用到第二个contract address进行合约测试。

在这里插入图片描述

  • 简单调用sol函数

​ 使用call来进行调用合约,具体格式如下:

call sol合约名称(如HelloWorld) contract address 调用函数  输入数据

​ 调用helloWorld的set示例:

call HelloWorld 0xb3c223fc0bf6646959f254ac4e4a7e355b50a344 set "Hello, FISCO BCOS"

​ 针对多个输入数据,只需要没输入一个数据再加一个空格继续输入即可,如:

call HelloWorld 0xb3c223fc0bf6646959f254ac4e4a7e355b50a344 set "Hello, FISCO BCOS" “aa"

3 创建idea java 项目

3.1 创建gradle或者maven项目

  • 首先创建项目,选择gardle或者maven都可以,目前推荐使用jdk14版本,jdk11版本目前有一些小问题,针对fisco bcos 2.9.1版本

在这里插入图片描述

  • 安装java sdk

由于改版的原因,不再使用文档中的compile,采用implementation 进行导入

implementation ('org.fisco-bcos.java-sdk:fisco-bcos-java-sdk:2.9.1')

对于maven项目,在pom导入依赖刷新

<dependency>
    <groupId>org.fisco-bcos.java-sdk</groupId>
    <artifactId>fisco-bcos-java-sdk</artifactId>
    <version>2.9.1</version>
</dependency>

3.2 配置证书

  • 打开服务器,跳转到 /root/fisco/console路径下,复制 conf证书文件夹,存放到idea中。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 编译合约 生成abi bin 和java

  • 首先回到console文件夹,使用sol2java.sh脚本进行编译
cd ~/fisco/console
  • -p指生成的最终Java文件位置(在sdk中)
  • -s指编译合约名

我们所有的合约最终都需要存放在/root/fisco/console/contracts/solidity文件下,然后再进行编译。

编译所有sol文件如下:

bash sol2java.sh -p org

编译指定sol文件如下:

bash sol2java.sh -p org -s HelloWorld.sol

编译完成后可以进入sdk文件夹中,找到这三个文件夹:

在这里插入图片描述

如果是初始环境的话,这一步可能会出现如下的问题,导致java文件夹一直生成不出来:

tar (child): bzip2: Cannot exec: No such file or directory

原因是部分压缩包无法解压,下载对应压缩包即可

yum -y install bzip2

将jave文件夹放入 main中的java文件夹下:

在这里插入图片描述

3.4 idea配置

将生成的abi,bin文件放入main文件的resources中,并将conf中的config-example文件放入resources中,并创建log4j.propertise。

在这里插入图片描述

log4j.propertise文件内容如下:

#
# Copyright 2014-2020  [fisco-dev]
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
# in compliance with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
# or implied. See the License for the specific language governing permissions and limitations under
# the License.
#
#

### set log levels ###
log4j.rootLogger=DEBUG, file

### output the log information to the file ###
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern='_'yyyyMMddHH'.log'
log4j.appender.file.File=./log/console.log
log4j.appender.file.Append=true
log4j.appender.file.filter.traceFilter=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C{1}.%M(%L) | %m%n

###output the log information to the console ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C{1}.%M(%L) | %m%n

修改example.toml的内容,将peers中的地址改为服务器地址:

在这里插入图片描述

完成后对项目进行构建,没什么问题表示基本配置已经完成,接下来则是写代码进行调用合约了。

4 合约调用table

4.1 初始化sdk

在java目录下创建一个java项目,或者在test下创建测试也可以。

项目创建完成后,在class类里创建全局变量:

public final String configFile = School_fisco.class.getClassLoader().getResource("config-example.toml").getPath();
// 初始化BcosSDK
BcosSDK sdk =  BcosSDK.build(configFile);
// 为群组1初始化client
Client client = sdk.getClient(Integer.valueOf(1));
CryptoKeyPair cryptoKeyPair = client.getCryptoSuite().getCryptoKeyPair();

4.2 简单的查询和添加,其他函数调用类似

以tabletest为例,进行简单调用

  • 对于select,首先打开TableTest.java,搜索select,发现只有如下的函数:

在这里插入图片描述

所以针对上述函数,首先读取表格,然后调用函数select搜索得到数据,转为相应的输出数据即可,具体代码如下:

//查询tabletest的表格
public  ArrayList<List<String>> selectTableT(String name){
    //读取调用表
    TableTest tableTest = null;
    Tuple3<List<String>, List<BigInteger>, List<String>> strs =null;
    try {
        tableTest= TableTest.deploy(client, cryptoKeyPair);
        strs = tableTest.select(name);
    } catch (ContractException e) {
        e.printStackTrace();
    }
    ArrayList<List<String>> list=new ArrayList<List<String>>();
    int len = strs.getValue1().size();
    for(int i=0;i<len;i++){
        List<String> list_str= new ArrayList<>();
        list_str.add(strs.getValue1().get(i));
        list_str.add(String.valueOf(strs.getValue2().get(i)));
        list_str.add(strs.getValue3().get(i));
    }
    return list;
}
  • 对于insert,update和remove都类似,返回是一个BigInteger数据,查询java文件后,可以看到我们需要调用的函数有两个:

在这里插入图片描述
在这里插入图片描述

具体函数和上述代码类似,只是需要将select修改为insert和对应的数据,然后通过得到的返回值调用output函数,判断调用是否成功以及错误代码。

具体代码如下:

//添加数据
public BigInteger insertTable(String name, BigInteger item_id,String item_name){
    //读取调用school表
    TableTest tableTest =null;
    try {
        tableTest= TableTest.deploy(client, cryptoKeyPair);
    } catch (ContractException e) {
        e.printStackTrace();
    }
    TransactionReceipt tran= tableTest.insert(name,item_id,item_name);
    Tuple1<BigInteger> big = tableTest.getInsertOutput(tran);
    return  big.getValue1();
}

5. 小结

至此,基本上的简单CRUD进行fisco bcos 合约开发就完成了,目前只是完成了示例,之后我会在对自己创建新的sol合约下进行介绍,主要包括使用CRUD合约中可能出现的问题,对于java调用这方面按照上述介绍,增删改查只需要改改代码即可。

做为刚刚入门学习fisco bcos的萌新,对于fisco bcos还有很多不了解的地方,如果以上文档有不合理的地方,请指正。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FISCO BCOS 2.9.1 从0部署到简单使用的CRUD接口 的相关文章

  • setSize() 不起作用?

    我有一个程序 需要两个按钮 一个是常规按钮 另一个具有根据鼠标悬停而变化的图片 目前 由于图片很大 JButton自定义也很大 我可以更改自定义的大小并保持图像 和翻转图像 成比例吗 我尝试过 setSize 但它没有任何作用 对于任何反馈
  • 在这种情况下,我如何处理 Function 和省略号/可变参数?

    我的项目之一是抛出 lambda 表达式 https github com fge throwing lambdas 我的目标是简化潜在的使用 FunctionalInterfaces in Streams 其在流中使用的唯一 缺陷 是它们
  • 将 hyperjaxb3 升级到 jpa 2.1

    我正在尝试在使用 maven jpa hibernate 和 hyperjaxb 的 eclipse 项目中升级到 JPA 2 1 当我尝试执行以下操作时出现以下错误Run As Run on Server从日食内部 java lang N
  • 如何将 java ArrayList 转换为等效的 double[] [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Java 中从 List 转换为 double https stackoverflow com questions 6018267 how to cast from listdouble to
  • HTTPURLConnection 不遵循从 HTTP 到 HTTPS 的重定向

    我不明白为什么JavaHttpURLConnection不遵循从 HTTP 到 HTTPS URL 的 HTTP 重定向 我使用以下代码来获取页面https httpstat us https httpstat us import java
  • 传输级别信息与 SOAP 消息命名空间 URI 不匹配

    我收到错误 Transport level information does not match with SOAP Message namespace URI 要求您提供详细信息以解决问题 我在客户端设置了以下内容 HttpTranspo
  • 阻止 GWT 中的事件冒泡

    我有以下代码片段 changeTextArea 是一个 TextArea 对象 changeTextArea addKeyboardListener new KeyboardListenerAdapter public void onKey
  • 无法为对象堆保留足够的空间

    每次尝试运行该程序时 我都会重复出现以下异常 VM初始化期间发生错误 无法为对象堆保留足够的空间 无法创建Java虚拟机 我尝试增加虚拟内存 页面大小 和 RAM 大小 但无济于事 我怎样才能消除这个错误 运行 JVM XX MaxHeap
  • 从 API Explorer 调用 API 方法时不允许使用范围

    我在 Google App Engine 中有一个奇怪的行为 我正在使用 Eclipse 和 Java 进行开发 特别是使用 Google Cloud Endpoints 我使用以下设置创建了一个示例 API 实际上 我正在使用许多其他示波
  • 优化两个三位数乘积的最大回文数?

    我正在研究一个面试问题 我被问到这个问题 我应该编写一个程序 从两个三位数的乘积中找到最大的回文数 这里是question https projecteuler net problem 4 我想出了这种从底部开始的蛮力方法 public c
  • 计算事件之间的天数 - Android

    我一直在研究 Android API 并一直在寻找一种方法来计算当前日期和未来日期之间的天数 我对 android 还很陌生 而且我已经有几年没有做过 java 了 计算这个最简单的方法是什么 Thanks 最简单的方法是使用乔达时间 ht
  • JPA中如何连接多个数据库?

    我有一个 Spring Boot 应用程序 当前使用 JPA 连接到单个数据库 application properties 文件中的连接详细信息 spring datasource url jdbc oracle thin localho
  • SSLHandShakeException 没有适当的协议

    我最近向我的网站添加了 SSL 可以通过 https 访问它 现在 当我的 java 应用程序尝试向我的网站发出请求并使用缓冲读取器从中读取时 它会生成此堆栈跟踪 我没有使用自签名证书 该证书来自 Namecheap 它使用 COMODO
  • 如何使用 Java 1.4 和 SAX 将任意数据编码为 XML?

    我们使用 SAX 来解析 XML 因为它不需要将整个 XML 文档读入内存来解析单个值 我读过很多文章 坚持认为 SAX 只能用于解析 解码 XML 而不能创建它 这是真的 不 这不是真的 您可以使用类似于以下内容的方式将 XML 编码为
  • 运行外部进程的非阻塞线程

    我创建了一个 Java GUI 应用程序 它充当许多低级外部进程的包装器 该实用程序按原样运行 但迫切需要一项重大改进 我希望我的外部进程以非阻塞方式运行 这将允许我并行服务其他请求 简而言之 我希望能够在生成数据时处理来自外部进程的数据
  • 返回在 REST 控制器中包装 S3Object.getObjectContent() 的 ResponseEntity 是否安全?

    我正在开发一个 Spring Boot 应用程序 它应该允许用户通过指定的应用程序 REST 接口间接从 Amazon S3 下载文件 为此 我有一个 REST Controller 它向用户返回一个 InputStreamResource
  • Spring Boot 和安全性以及自定义 AngularJS 登录页面

    我正在为 Spring Security 实现一个自定义 AngularJS 登录页面 但遇到身份验证问题 遵循本教程 示例 以及他们的示例在本地运行良好 https github com dsyer spring security ang
  • Java 和 SQL Server 中的精度噩梦

    我一直在与 Java 和 SQL Server 中的精确噩梦作斗争 直到我不再知道了 就我个人而言 我理解这个问题及其根本原因 但向地球另一端的客户解释这一点是不可行的 至少对我来说 情况是这样的 我在 SQL Server 中有两列 Qt
  • 切换按钮形状不变

    我正在尝试制作一个带有绿色背景的圆形切换按钮 我用了
  • Spring Data JPA 存储库,具有规范、分页和标准 fetch-join

    我正在使用具有规范和分页功能的 Spring Data JPA 存储库实现实体列表的搜索 过滤服务 我正在尝试减少查询数量 n 1 问题 并使用条件获取机制获取嵌套数据 我有两个实体类 Entity Table name delegatio

随机推荐

  • AI加速(八)

    大家好啊 我是董董灿 前文回顾 AI加速 一 GPU为什么这么牛 AI加速 二 计算机存储和计算的分离 AI加速 三 每条指令都是流水线的工人 AI加速 四 衣柜般的分层存储设计 AI加速 五 一个例子看懂流水 从指令到算法 AI加速 六
  • 18769 不完整的排序

    时间限制 1000MS 代码长度限制 10KB 提交次数 0 通过次数 0 题型 编程题 语言 不限定 Description 一个数组只包含正负整数 请使用一个O n 级别的算法对其进行排序 只需将负数全部放前面 正数全部放后面即可 无需
  • 机器学习中特征的处理及选择

    基础概念 特征工程是通过对原始数据的处理和加工 将原始数据属性通过处理转换为数据特征的过程 属性是数据本身具有的维度 特征是数据中所呈现出来的某一种重要的特性 通常是通过属性的计算 组合或转换得到的 比如主成分分析就是将大量的数据属性转换为
  • 做接口测试如何上次文件

    在日常工作中 经常有上传文件功能的测试场景 因此 本文介绍两种主流编写上传文件接口测试脚本的方法 首先 要知道文件上传的一般原理 客户端根据文件路径读取文件内容 将文件内容转换成二进制文件流的格式传输给服务端 而服务端接受客户端传过来的二进
  • 构建ubuntu根文件系统

    构建ubuntu根文件系统 象棋小子 1048272975 Ubuntu是一个广泛应用于个人电脑 云计算 以及智能物联网设备的开源操作系统 针对智能物联网 Ubuntu提供了一套更加安全 轻量级 专为智能物联网订制的开源操作系统Ubuntu
  • 前后端交互的api

    api是application interface应用接口 通过原生ajax或者jQuery或者axios 发送请求 连接后端的核心纽带 可以说也是一种革命 因为之前都是混编 html代码与后端语言杂合在一起 原码即是运行的代码 不加以修饰
  • 类加载器 & 打破双亲委派机制(个人总结)

    声明 1 本文为我的个人复习总结 并非那种从零基础开始普及知识 内容详细全面 言辞官方的文章 2 由于是个人总结 所以用最精简的话语来写文章 3 若有错误不当之处 请指出 类加载器 启动类加载器 加载JAVA HOME lib下的核心类 扩
  • HJ68 成绩排序【python3】

    题目描述 给定一些同学的信息 名字 成绩 序列 请你将他们的信息按照成绩从高到低或从低到高的排列 相同成绩 都按先录入排列在前的规则处理 例示 jack 70 peter 96 Tom 70 smith 67 从高到低 成绩 peter 9
  • Linux下,qt5中使用Qt Multimedia编译时遇到报错

    遇到defaultServiceProvider requestService no service found for org qt project qt mediaplayer 错误 解决方法 在Linux中 sudo apt get
  • 商城前台项目:商品三级分类功能实现

    项目效果 实现代码 components Category index vue div h2 class all 全部商品分类 h2 div
  • Mac笔记本Xcode打开不了文件和打开文件看不到新添加的文件的解决办法

    第一次使用xcode碰见了以下问题 创建完项目之后 在文件外面将自己想要的文件复制进去文件后 重新打开xcode发现并不显示文件 xcode不能打开非Xcode创建的文件夹 解决办法 用xcode创建项目后 需要在左下角添加文件进来才能看到
  • ssh框架hibernate 查询方式和查询功能优化

    Hibernate框架的查询方式 1 唯一标识OID的检索方式 session get 对象 class OID 2 对象的导航的方式 3 HQL的检索方式 Hibernate Query Language Hibernate的查询语言 4
  • JavaEE——SmartTomcat的使用教程与常见错误

    SmartTomcat 上一篇博客讲到 使用tomcat创建servlet项目有以下几个步骤 创建maven项目 引入servlet依赖 创建目录 编写代码 打包成war包 拷贝到webapps目录下 运行tomcat 验证程序 可以看到步
  • 设计模式(4)-原型模式(Prototype Pattern)

    所谓原型模式就是从原型实例去复制克隆出新的实例 而绝不是去从类去实例化 就好比打飞机的游戏 我们操作的主角飞机只有一架 可以用单例模式去实现 而敌机好多都是一样的 如果每出一个敌机我们就去new一个敌机的对象 一下来个三十个 就去new三十
  • 【傅里叶级数与傅里叶变换】数学推导——1、基础知识点回顾及[Part1:三角函数的正交性]介绍

    文章内容来自DR CAN关于傅里叶变换的视频 本篇文章提供了一些基础知识点 比如三角函数常用的导数 三角函数换算公式等 文章全部链接 基础知识点 Part1 三角函数系的正交性 Part2 T 2 的周期函数的傅里叶级数展开 Part3 周
  • 42-Golang中的单元测试

    Golang中的单元测试 需求 传统方法 基本介绍 单元测试快速入门总结 综合案例 需求 在工作中 我们会遇到这样的情况 就是去确认一个函数 或者一个模块的结果是否正确 传统方法 在main函数中 调用addUpper函数 看看实际输出的记
  • 内网能ping通telnet 通,不能访问解决

    内网能PING通TELNET通不能访问解决 遇到一个离奇故障 内网 两个主机在同一IP段内 能互相PING通 TELNET对方的WEB服务器端口 通 但用IE访问时不能 显示HTTP400 这明显是客户端系统的问题啊 但如何解决呢 我强烈怀
  • LeetCode 1233. 删除子文件夹(C++)

    思路 1 首先能想到这种判断字符串前缀的题目可以使用前缀树 2 对字符串字典序排序 那么就能满足 一个子文件夹的左边要么是同父文件夹的子文件夹 要么就是他的父文件夹 同时 第一个文件夹一定是父文件夹 那么就可以建立一个父文件夹地址 每次便利
  • vs2019 中文离线安装包下载,类似ISO,不用联网安装vs2019企业版

    vs2019 中文离线安装包下载 类似ISO 不用联网安装vs2019企业版 前言 我们现在微软官方网站下载的安装包一般也就1 2兆 运行这个小安装包的程序时 才真正在网站上下载vs2019 目前的vs2019企业版 专业版 社区版都要20
  • FISCO BCOS 2.9.1 从0部署到简单使用的CRUD接口

    FISCO BCOS 2 9 1 从0部署到简单使用CRUD接口 文章目录 FISCO BCOS 2 9 1 从0部署到简单使用CRUD接口 前言 1 部署fisoc bcos 2 9 1环境 1 1 安装centos依赖 1 2 创建fi