基于区块链/Hyperledger Fabric的商品交易溯源系统搭建步骤

欢迎订阅:《Fabric项目学习笔记》专栏

最新更新:订阅《Fabric项目学习笔记》用户群内包含商品溯源代码讲解与前后端开发模式演示的视频教程。

原项目链接:https://github.com/togettoyou/fabric-realty
此项目链接:https://gitee.com/real__cool/fabdeal
演示链接:https://www.bilibili.com/video/BV1rR4y1P7Mv
登陆界面
信息展示

以下是项目搭建步骤,已默认搭好ubuntu环境,如果还没有装好可以参考:虚拟机快速配置

1.安装docker与docker-compose

 #下载docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
#下载docker-compose
sudo curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#给docker compose加上权限
sudo chmod +x /usr/local/bin/docker-compose
#添加当前用户到docker用户组
sudo usermod -aG docker $USER
newgrp docker
#向/etc/docker/daemon.json写入docker 镜像源
{"registry-mirrors": ["https://punulfd2.mirror.aliyuncs.com"]
}
#重启docker
sudo systemctl restart docker

2. 克隆项目到本地

git clone https://gitee.com/real__cool/fabdeal

3. 一个命令启动项目

提示:项目路径为项目在本地的实际地址

cd 项目路径/network && ./stop.sh && ./start.sh && cd ../application && ./stop.sh && ./build.sh && ./start.sh && cd ../network/explorer && ./stop.sh && ./start.sh

3.在浏览器中访问项目

如果是主机访问虚拟机/云服务内的项目则将127.0.0.1换成虚拟机/云服务的ip。如果使用的是云服务器,需要在安全组添加入站规则,放行8000、8080TCP端口

#项目链接
http://127.0.0.1:8000/web
#区块链浏览器链接
http://127.0.0.1:8080/ 
账号密码 admin 123456

4.项目目录介绍

区块链部分

  1. crypto-config.yaml文件
    crypto-config.yaml定义了生成证书的数量,还有用户的数量,使用cryptogen工具读取改文件生成相应的公私钥和证书,生成的证书在crypto-config文件夹中
  2. configtx.yaml文件
    configtx.yaml中定义了组织与Fabric共识、区块大小,超时时间等参数,用于生成创世区块
  3. docker-compose文件
    这个时docker-compose启动时读取的文件,将一次性启动多个容器,这些容器是peer节点和orderer节点,文件中写明了具体的配置信息,比如挂载一些本地文件,使用的镜像文件等,比如使用1.4.12版本的fabric镜像
  4. start.sh 文件
    这个是启动区块链网络的脚本,每一步都有注释
  5. hyperledger-fabric-linux-amd64-1.4.12 文件夹
    文件夹内有上述1,2中生成证书、创世区块的工具
  6. explorer文件夹
    这个是区块链浏览器的文件夹,了解怎么启动就可以,注意文件夹中的start.sh文件,每次重启区块链网络时私钥会变,因此该文件中有替换密钥的操作。connection-profile中的network_temp.json是配置文件,定义了读取区块链网络的信息与登陆区块链浏览器的账号密码。

智能合约部分

  1. go.mod 文件
    这个文件是定义了一个模块,一般就是本目录,在本项目中是chaincode,然后有go的版本和需要的依赖
  2. go.sum文件
    这个是固定项目的依赖文件版本
  3. chaincode.go文件
    这个里边主要关注两个函数,一个是Init函数,就是在链码进行实例化时会进行的操作,在这个项目中是向区块链中写入预先设定的账户;下边是Invoke函数,除了Init时对区块链的操作都是Invoke,可以看到当传入参数时,会读取api里相应的函数。
  4. api中的.go文件
    这里就是智能合约中函数的位置,当接收到sdk的请求时,调用这里的函数,实现相应的操作。比较重要的有QueryAccountList(),CreateRealEstate(),QueryRealEstateList(),分别完成了对账户的查询、创建商品与查询商品列表。
  5. model文件夹中的model.go文件
    该文件定义了一些结构体,包含了字段的属性,例如定义了一个商品的所有属性

app部分 使用 vue-element-admin

  1. build.sh
    这个是构建app的容器,将app放在容器中运行,具体做的事情在Dockfile文件里
  2. start.sh、docker-compose.yml就是启动app容器
  3. server文件夹就是后端,使用的gin框架
    当后端接收到web的请求后,就会查看routers的路由信息,找到对应的api进行操作。在api中,接收到web发来的请求后进行处理,然后调用智能合约实现对区块链网络的交互
  4. blockchain/sdk.go config.yaml
    这里定义了 sdk的配置信息
  5. web文件夹是前端的部分 使用的vue + element ui
  6. api文件夹中的js文件定义了函数相对应的url、method、携带的数据,就是与后端进行交互
  7. route文件夹
    这一部分参考:路由和侧边栏
  8. views文件夹是前端
    当用户在页面填写数据后,使用vue文件里的方法,调用api里的函数,与后端进行交互

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电商小程序04实现登录逻辑

目录 1 创建自定义方法2 获取用户名和密码3 验证用户是否同意协议4 验证用户名和密码总结 上一篇我们实现了登录功能的前端界面,这一篇实现一下登录的具体逻辑。 1 创建自定义方法 一般如果页面点击按钮需要有事件响应的,我们用自定义方法来实现。打开我…

opencv中使用cuda加速图像处理

opencv大多数只使用到了cpu的版本,实际上对于复杂的图像处理过程用cuda(特别是高分辨率的图像)可能会有加速效果。是否需要使用cuda需要思考: 1、opencv的cuda库是否提供了想要的算子。在CUDA-accelerated Computer Vision你可以…

百面嵌入式专栏(面试题)C语言面试题22道

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍C语言相关面试题 。 宏定义是在编译的哪个阶段被处理的?答案:宏定义是在编译预处理阶段被处理的。 解读:编译预处理:头文件包含、宏替换、条件编译、去除注释、添加行号。 写一个“标准”宏MIN,这个…

Hexo更换Matery主题

引言 在数字化时代,拥有一个个人博客已经成为许多人展示自己技能、分享知识和与世界互动的重要方式。而在众多博客平台中,Hexo因其简洁、高效和易于定制的特点而备受青睐。本文将详细介绍如何为你的Hexo博客更换主题,让你的个人博客在互联网…

华为 Huawei 交换机 黑洞MAC地址的作用和配置示例

黑洞mac作用:某交换机上配置某个PC的mac地址为黑洞mac,那么这台PC发出来的包都会被交换机丢弃,不会被转发到网络中。 组网需求: 如 图 2-13 所示,交换机 Switch 收到一个非法用户的访问,非法用户的 MAC 地址…

node网站 宝塔 面板配置 防止刷新404

1.问题 我现在配置了一个网站 后台项目 放到了宝塔上 将相应的域名和项目都配置好了 域名也可以访问 但是有的时候 出现了404 类似这种404 这个资源找不到 2.说明 其实这个问题的原因是nginx 的问题 反向代理的原因 3.解决 在这个配置文件中 有个配置文件 # 防止刷新404l…

从中序与后序遍历序列构造二叉树

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7], postorder [9,15,7,20,3] 输出:[3…

[Java][算法 双指针]Day 02---LeetCode 热题 100---04~07

LeetCode 热题 100---04~07 第一题:移动零 思路 找到每一个为0的元素 然后移到数组的最后 但是需要注意的是 要在给定的数组原地进行修改 并且其他非零元素的相对顺序不能改变 我们采用双指针法 定义两个指针i和j i和j一开始分别都在0索引位置 然后判断j所…

MATLAB环境下基于深层小波时间散射网络的ECG信号分类

2012年,法国工程学院院士Mallat教授深受深度学习结构框架思想的启发,提出了基于小波变换的小波时间散射网络,并以此构造了小波时间散射网络。 小波时间散射网络的结构类似于深度卷积神经网络,不同的是其滤波器是预先确定好的小波…

熔断机制解析:如何用Hystrix保障微服务的稳定性

微服务与系统的弹性设计 大家好,我是小黑,在讲Hystrix之前,咱们得先聊聊微服务架构。想象一下,你把一个大型应用拆成一堆小应用,每个都负责一部分功能,这就是微服务。这样做的好处是显而易见的,更新快,容错性强,每个服务可以独立部署,挺美的对吧?但是,问题也随之而…

从零开始手写mmo游戏从框架到爆炸(十一)— 注册与登录

导航:从零开始手写mmo游戏从框架到爆炸(零)—— 导航-CSDN博客 从这一章开始,我们进入业务的部分,从注册登录开始。 创建注册和登录的路由 package com.loveprogrammer.command.server;public interface Se…

杨中科 ASP.NETCORE 高级14 SignalR

1、什么是websocket、SignalR 服务器向客户端发送数据 1、需求:Web聊天;站内沟通。 2、传统HTTP:只能客户端主动发送请求 3、传统方案:长轮询(Long Polling)。缺点是?(1.客户端发送请求后&…

计算机网络概念、组成、功能和分类

文章目录 概要1.怎么学习计算机网络2.概念3.功能、组成4.工作方式、功能组成5.分类 概要 概念、组成、功能和分类 1.怎么学习计算机网络 2.概念 通信设备:比如路由器、路由器 线路:将系统和通信设备两者联系的介质之类的 计算机网络是互连的、自治的的计…

k8s 部署java应用 基于ingress+jar包

k8 集群ingress的访问模式 先部署一个namespace 命名空间 vim namespace.yaml kind: Namespace apiVersion: v1 metadata:name: ingress-testlabels:env: ingress-test 在部署deployment deployment是pod层一层封装。可以实现多节点部署 资源分配 回滚部署等方式。 部署的…

javaEE - 21( 15000字 Tomcat 和 HTTP 协议入门 -2)

一: HTTP 响应 1.1 认识 “状态码” (status code) 状态码表示访问一个页面的结果. (是访问成功, 还是失败, 还是其他的一些情况…),以下为常见的状态码. 1.1.1 200 OK 这是一个最常见的状态码, 表示访问成功. 抓包抓到的大部分结果都是 200 HTTP/…

Linux环境下配置HTTP代理服务器教程

大家好,我是你们可爱的Linux小助手!今天,我将带你们一起探索如何在Linux环境下配置一个HTTP代理服务器。请注意,这不是一次火箭科学的实验,而是一次简单而有趣的冒险。 首先,我们需要明确什么是HTTP代理服…

华为第二批难题一:基于预训练AI模型的元件库生成

我的理解:华为的这个难道应该是想通过大模型技术,识别元件手册上的图文内容,与现有建库工具结合,有潜力按标准生成各种库模型。 正好,我们正在研究,利用知识图谱技术快速生成装配模型,其中也涉…

Spring Boot 笔记 003 Bean注册

使用Idea导入第三方jar包这种方法是不对的 使用maven命令导入jar包 官网下载maven Maven – Download Apache Maven 解压缩后在命令行输入命令,注意看输出的结果,安装的是不是你本地的maven仓库 mvn install:install-file -Dfile"D:\common-pojo-2…

一文带你读懂JSON模块

json模块 JSON (JavaScript Object Notation):是一个轻量级的数据交换格式模块,受javascript对象文本语法启发,但不属于JavaScript的子集。 常用方法: dump(obj,fp):将对象以字符串的形式写入文件中。 load(fp)&am…

Elasticsearch(四)

是这样的前面的几篇笔记,感觉对我没有形成知识体系,感觉乱糟糟的,只是大概的了解了一些基础知识,仅此而已,而且对于这技术栈的学习也是为了在后面的java开发使用,但是这里的API学的感觉有点乱!然…