Fisco-Bcos的环境搭建及Data-Export导出组件的使用

news2025/1/17 13:57:35

注意:由于Data-Export组件暂时只支持Fisco-Bcos 2.x系列(这个也是目前使用最多最稳定的系列),故这里使用的是目前最新的Fisco-Bcos 2.x。

Fisco-Bcos链环境搭建

区块链网络部署

主要一步步按照这个官方的操作即可区块链网络搭建
环境为Ubuntu18.04,java版本要使用及11以上的,按照官网教程在ubuntu18.04下默认安装的应该就是java11。

区块链应用部署

官网示例部署

大部分参考区块链应用部署
第一个小坑:如果想偷懒有写好的应用的话,如官网给的示例

$ cd ~/fisco
$ curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/tools/asset-app.tar.gz
# 解压得到Java工程项目asset-app
$ tar -zxf asset-app.tar.gz

使用是需要配置SDK证书,也就是执行如下指令

# 假设我们将asset-app放在~/fisco目录下 进入~/fisco目录
$ cd ~/fisco
# 创建放置证书的文件夹
$ mkdir -p asset-app/src/test/resources/conf
# 拷贝节点证书到项目的资源目录
$ cp -r nodes/127.0.0.1/sdk/* asset-app/src/test/resources/conf

修改应用部署

以下是对官网资产交易的示例的修改
主要修改为交易时可以添加备注,效果如图
image.png
修改步骤如下:

  1. 首先修改智能合约,主要对合约中的转账函数修改,此步骤为官网步骤开发第一个区块链应用的第二个步骤-设计与开发智能合约部分

修改后的代码如下

/*
描述 : 资产转移
参数 : 
from_account : 转移资产账户
to_account : 接收资产账户
amount : 转移金额
comments :备注
返回值:
0  资产转移成功
-1 转移资产账户不存在
-2 接收资产账户不存在
-3 金额不足
-4 金额溢出
-5 其他错误
修改:主要修改参数部分,增加comments字段
*/
function transfer(string memory from_account, string memory to_account, uint256 amount, string memory comments) public returns(int256) {
  // 查询转移资产账户信息
  int ret_code = 0;
  int256 ret = 0;
  uint256 from_asset_value = 0;
  uint256 to_asset_value = 0;
  //string  comments = 0;
  // 转移账户是否存在?
  (ret, from_asset_value) = select(from_account);
  if(ret != 0) {
      ret_code = -1;
      // 转移账户不存在
      emit TransferEvent(ret_code, from_account, to_account, amount, comments);
      return ret_code;

    }

  // 接受账户是否存在?
  (ret, to_asset_value) = select(to_account);
  if(ret != 0) {
      ret_code = -2;
      // 接收资产的账户不存在
      emit TransferEvent(ret_code, from_account, to_account, amount, comments);
      return ret_code;
    }

  if(from_asset_value < amount) {
      ret_code = -3;
      // 转移资产的账户金额不足
      emit TransferEvent(ret_code, from_account, to_account, amount, comments);
      return ret_code;
    } 

  if (to_asset_value + amount < to_asset_value) {
      ret_code = -4;
      // 接收账户金额溢出
      emit TransferEvent(ret_code, from_account, to_account, amount, comments);
      return ret_code;
    }

  Table table = openTable();

  Entry entry0 = table.newEntry();
  entry0.set("account", from_account);
  entry0.set("asset_value", int256(from_asset_value - amount));
  // 更新转账账户
  int count = table.update(from_account, entry0, table.newCondition());
  if(count != 1) {
      ret_code = -5;
      // 失败? 无权限或者其他错误?
      emit TransferEvent(ret_code, from_account, to_account, amount, comments);
      return ret_code;
    }

  Entry entry1 = table.newEntry();
  entry1.set("account", to_account);
  entry1.set("asset_value", int256(to_asset_value + amount));
  // 更新接收账户
  table.update(to_account, entry1, table.newCondition());

  emit TransferEvent(ret_code, from_account, to_account, amount,comments);

  return ret_code;
}
}

此小节其余步骤与官网无异,套用和编译即可

  1. 接着是对调用代码AssetClient.java的修改,它位于/src/main/java/org/fisco/bcos/asset/client目录下,主要也是对转账函数以及main函数参数调用处的修改,此步骤为官网步骤开发第一个区块链应用的第四个步骤-创建区块链应用项目部分的。修改代码如下,
//转账部分修改,主要修改参数部分,增加comment字段
public void transferAsset(String fromAssetAccount, String toAssetAccount, BigInteger amount,String comments) {
    //System.out.println(comments);
    try {
      String contractAddress = loadAssetAddr();
      Asset asset = Asset.load(contractAddress, client, cryptoKeyPair);
      TransactionReceipt receipt = asset.transfer(fromAssetAccount, toAssetAccount, amount, comments);
      List<Asset.TransferEventEventResponse> response = asset.getTransferEventEvents(receipt); 
      if (!response.isEmpty()) {
        if (response.get(0).ret.compareTo(new BigInteger("0")) == 0) {
          //System.out.println(comments);
          System.out.printf(
              " transfer success => from_asset: %s, to_asset: %s, amount: %s ,comments: %s\n",
              fromAssetAccount, toAssetAccount, amount , comments);
        } else {
          System.out.printf(
              " transfer asset account failed, ret code is %s \n", response.get(0).ret.toString());
        }
      } else {
        System.out.println(" event log not found, maybe transaction not exec. ");
      }
    } catch (Exception e) {
      // TODO Auto-generated catch block
      // e.printStackTrace();

      logger.error(" registerAssetAccount exception, error message is {}", e.getMessage());
      System.out.printf(" register asset account failed, error message is %s\n", e.getMessage());
    }
  }

//main 函数参数调用修改
public static void main(String[] args) throws Exception {
    if (args.length < 1) {
      Usage();
    }

    AssetClient client = new AssetClient();
    client.initialize();

    switch (args[0]) {
      case "deploy":
        client.deployAssetAndRecordAddr();
        break;
      case "query":
        if (args.length < 2) {
          Usage();
        }
        client.queryAssetAmount(args[1]);
        break;
      case "register":
        if (args.length < 3) {
          Usage();
        }
        client.registerAssetAccount(args[1], new BigInteger(args[2]));
        break;
      case "transfer":
        if (args.length < 5) {
          Usage();
        }
        client.transferAsset(args[1], args[2], new BigInteger(args[3]),args[4]);
        break;
      default:
        {
          Usage();
        }
    }
    System.exit(0);
  }

然后usage这些就自行修改。

  1. 改个小bug

注意:整体修改完成后的时候出现过一个小bug,就是comments字段如果输入的英文字符串中间带有空格的话,将会丢失第一个空格之后的所有内容。如上图,若comments输入的内容为"Hello World",存入链上的数据将会是"Hello。原因在于,java执行带有参数的时候会将空格之后的视为另一个参数。
经多次测试,若想解决这个问题,需要对asset_run.sh做如下修改。将最后一行的$@修改为"$@",同时需要java版本为11及以上(1.8有bug)

Data-Export数据导出系统安装

再次提醒,此组件只支持FISCO-BCOS 2.x 版本,官网的步骤数据导出系统
然后要说的是按照官网这个流程是失败了的,原因暂时未知,尝试过切换多种版本java,尝试过更换数据库(官网用的是Mariadb)都无果。。。
于是采用的第二个办法,通过docker快速部署,参考docker快速部署
注意:通过这个部署后的mysql端口是3307,另外启用服务的时候要先启动链
如果一切运行正常,你将得到数据库结构如下
image.png
有关交易的细节在tx_receipt_raw_data的input字段里。
Over!Over!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/387241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

飞桨paddlespech 语音唤醒初探

PaddleSpeech提供了MDTC模型&#xff08;paper: The NPU System for the 2020 Personalized Voice Trigger Challenge&#xff09;在Hey Snips数据集上的语音唤醒(KWS)的实现。这篇论文是用空洞时间卷积网络&#xff08;dilated temporal convolution network, DTCN&#xff09…

Java 类和对象简介

类是对象的抽象&#xff0c;是一组具有相同特性&#xff08;属性&#xff0c;事物的状态信息&#xff09;和行为&#xff08;事物能做什么&#xff09;的事物的集合&#xff0c;可以看做一类事物的模板。 对象是类的实例化&#xff0c;是具体的事物。 比如&#xff1a;人类和…

linux基本功之列之wget命令实战

文章目录前言一. wget命令介绍二. 语法格式及常用选项三. 参考案例3.1 下载单个文件3.2 使用wget -o 下载文件并改名3.3 -c 参数&#xff0c;下载断开链接时&#xff0c;可以恢复下载3.4 wget后台下载3.5 使用wget下载整个网站四. 补充与汇总常见用法总结前言 大家好&#xff…

C. Good Subarrays(前缀和)

C. Good Subarrays一、问题二、分析三、代码一、问题 二、分析 这道题目的意思就是给我们一个数组&#xff0c;然后我们从数组中选取一个连续的区间&#xff0c;这个区间满足条件&#xff1a;区间内的元素和等于区间的长度。 对于区间和问题我们先想到的是前缀和的算法。 那…

【测绘程序设计】——空间直角坐标转换

测绘工程中经常遇到空间直角坐标转换——比如,北京54(或西安80)空间直角坐标转换成CGCS2000(或WGS-84)空间直角坐标,常用转换模型包括:①布尔沙模型(国家级及省级范围);②莫洛坚斯基模型(省级以下范围);③三维四参数(小于22局部区域) 等。   本文分享了基于布…

Scala变量和数据类型

文章目录Scala变量和数据类型一、注释1. 基本语法2. 案例实操3. 代码规范二、变量和常量&#xff08;重点&#xff09;1. 回顾&#xff1a;Java 变量和常量语法2. 基本语法3. 案例实操三、标识符的命名规范1. 命名规则2. 案例实操四、字符串输出1. 基本语法2. 案例实操五、键盘…

【大数据监控】Grafana、Spark、HDFS、YARN、Hbase指标性能监控安装部署详细文档

目录Grafana简介下载软件包安装部署修改配置文件创建用户创建Systemd服务启动 GrafanaSpark应用监控 Graphite_exporterHDFS 监控YARN 监控HBase 监控Grafana 简介 Grafana 是一款开源的数据可视化工具&#xff0c;使用 Grafana 可以非常轻松的将数据转成图表(如下图)的展现形…

Java实现单向链表

✅作者简介&#xff1a;热爱Java后端开发的一名学习者&#xff0c;大家可以跟我一起讨论各种问题喔。 &#x1f34e;个人主页&#xff1a;Hhzzy99 &#x1f34a;个人信条&#xff1a;坚持就是胜利&#xff01; &#x1f49e;当前专栏&#xff1a;Java数据结构与算法 &#x1f9…

DevOps in China:15年来,DevOps在中国经历了什么?

纵观21世纪软件工程的发展&#xff0c;2009年一定是具有里程碑意义的一年。 自21世纪初&#xff0c;为了使软件快速适应复杂多变的市场环境、满足频繁变化的业务需求&#xff0c;软件开发开始不断应用以Scrum、精益开发、看板、极限编程为代表的敏捷开发方法&#xff0c;但此类…

STC单片机使用FatFs文件系统读取SD卡指定文件内容

STC单片机使用FatFs文件系统读取SD卡指定文件内容 🎞通过串口打印SD卡指定文件内容效果演示: 🌿所使用的单片机型号:STC15F2K60S2🌴晶振频率:11.059MHz🔗串口波特率: 9600🌼所使用的是迷你SD模块进行测试:⛳注意事项 🌿项目工程使用的内部ram比较大,需在工程…

SpringBoot项目监控-Prometheus+Grafana

目录 介绍 Prometheus Grafana 使用场景 特性 简单使用 SpringBoot配置 引入依赖 配置文件application.properties 启动 应用添加到Prometheus 下载 配置 启动 使用 Grafana Dashboard 展示应用数据 配置Prometheus数据源 配置监控面板 效果 其他 介绍 Pro…

RFID高频读写器在STM32中的应用

文章目录一、RFID简述二、产品参数及硬件连接三、模块测试四、RFID读写操作五、项目源码一、RFID简述 RFID是Radio Frequency Identification的缩写&#xff0c;是一种无接触自动识别技术&#xff0c;利用射频信号及其空间耦合传输特性&#xff0c;实现对静止的或移动中的待识别…

不懂命令, 如何将代码托管到Gitee上

1.注册码云注册地址 : https://gitee.com2. 新建仓库第一步 : 创建仓库第二步 : 给仓库起名字创建好仓库后, 我们就有了一个网络上的仓库 : 3. 将网络上的仓库克隆到本地在克隆仓库之前, 我们需要先在电脑上安装以下两个工具 >>这两个软件一定要按顺序安装, 先安装第一个…

Mybatis动态sql语句foreach中拼接正则表达式字符串注意事项

今天要说到的查询情况&#xff0c;平时项目里边其实用到的并不是很多&#xff0c;使用正则表达式无非是为了匹配结果比较灵活&#xff0c;最常见的&#xff0c;我们的查询条件一般一个参数仅仅只是一种情况的筛选&#xff0c;对于如何选择查询方式&#xff0c;主要还是要看前端…

博通仍然是美股市场最好的芯片半导体股

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 博通(AVGO)是一家快速增长的半导体公司&#xff0c;并且有很高的股息分红&#xff0c;目前其股息收益率已经高出了平均水平3.2%&#xff0c;而且估值非常合理&#xff0c;仅为预期净利润的14倍。 虽然博通也受到了经济衰退影…

One UI 5.1 更新来了

之前一直在关注One UI 5.0里提到的视频通话背景功能模块&#xff0c;结果5.0版本推送的时候没有引入&#xff0c;有先行者计划博主说是5.1里肯定会有的&#xff1b;前一两天One UI 5.1更新来了&#xff0c;然而该功能还是没有引入&#xff0c;表示很遗憾&#xff1b;本次更新新…

[媒体分流直播]媒体直播和传统直播的区别,以及媒体直播的特点

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 直播毋庸置疑已经融入到了我们生活的方方面面&#xff0c;小到才艺&#xff0c;游戏&#xff0c;大到政策的发布&#xff0c;许多企业和机构也越来越重视直播&#xff0c;那么一场活动怎…

「ABAP」OPEN SQL中FROM语句超详细解析(附案例源码解读)

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

剑指offer:在排序数组中查找数字I的个数

剑指offer&#xff1a;在排序数组中查找数字I的个数 LeetCode 2698题&#xff0c;剑指offer 53题。 击败100%的用户 题目描述 统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums [5,7,7,8,8,10], target 8 输出: 2示例 2: 输入: nums [5,7,7,8,8,10], target…

模电基础(1) 半导体基础知识

基本内容&#xff1a; 1.本征半导体的基本介绍结构&#xff1b; 2.杂质半导体&#xff1b; 3.PN结的形成&#xff1b; 4.PN结的性质。 1.本征半导体 半导体&#xff1a;导电性能介于绝缘体和导体之间的物质。 本征半导体是纯净的晶体结构的半导体。 纯净→无杂质晶体结构→稳…