区块链系统运行逻辑

文章目录

  • 一、开发工具
  • 二、程序运行完整逻辑
    • 2.1 总体逻辑
    • 2.2 详细过程(以添加数据(AddData)为例)

一、开发工具

  1. hyperledger-fabric:1.4.7,hyperledger-ca:1.4.7。ca是用来生成证书文件,管理成员身份。
    下载方法:点击此链接到百度云下载脚本,提取码:1234,在已经安装docker和git后,运行脚本即可下载,例如运行:./download.sh 1.4.7 1.4.7将会下载hyperledger-fabric:1.4.7,hyperledger-ca:1.4.7,及对应版本的docker镜像。若某个文件下载缓慢,可转到github文件下载代理处下载(前提是要能看明白.sh脚本语言,明白缺少什么文件,该在什么地方解压下载好的文件),下载后放入fabric-sample内解压即可。
  2. docker: 20.10.12,服务都是在docker容器内运行的。
  3. golang: 1.17.5,fabric的底层的开发语言,同时也是编写链码,搭建后端服务器的语言。
  4. git: 1.8.3.1,下载文件时需要用到。
  5. go-gin最新版,开发后端服务器的框架,该框架目前性能最好。
  6. fabric-go-sdk,操作区块链网络的软件包。

二、程序运行完整逻辑

2.1 总体逻辑

  1. 在启动fabric网络后,运行mian函数,它将首先运行初始化函数,创建SDK、资源管理客户端、创建通道、将所有节点加入通道、配置锚节点更新、安装链码、通道管理客户端、实例化链码。然后开启后端接口服务。
  2. 利用接口,接收前端传入的数据,用结构体保存数据,再调用go sdk的软件包,利用通道管理客户端将数据发送给链码。
  3. 链码根据接受的数据,调用对应的函数,将数据存入区块链或者查询区块链账本中的数据。
  4. 用go sdk接收链码的执行结果,利用gin将结果以json形式的数据返回给前端。

2.2 详细过程(以添加数据(AddData)为例)

首先初始化
在这里插入图片描述
开启接口,前端访问该接口时,则会执行后面的AddData(…)函数
在这里插入图片描述

在这函数里,接收前端传入的数据,用如下的函数将接受到的前端数据保存至结构体中。
区块链系统运行逻辑_第1张图片

再用如下函数,将数据反序列化,为存入区块链中做准备(区块链中存储的数据都是序列化的):
区块链系统运行逻辑_第2张图片
指定函数fcn,链码会根据传入的fcn函数信息,调用对应的函数。
区块链系统运行逻辑_第3张图片
执行strar.go文件中调用的链码函数:
区块链系统运行逻辑_第4张图片
在InvokeCC函数中,首先将请求封装,在封装的请求中,需要指明执行链码的ID,请求链码的函数信息fcn,及序列化了的待添加数据。
区块链系统运行逻辑_第5张图片
执行调用链码的请求(go sdk调用链码的核心函数):
区块链系统运行逻辑_第6张图片
此时安装的链码将会收到请求数据,在链码中用该函数接收请求调用函数的信息及序列化后的待添加数据。
区块链系统运行逻辑_第7张图片
此时传入的请求函数信息是"addData",那么它将会调用对应的函数进行处理:
区块链系统运行逻辑_第8张图片
在该函数中,先是将序列化的数据反序列化,并用结构体保存数据,这样做的目的是取出其中的ID和Batch,将其以Batch+ID的方式组合为一个唯一Key值,作为该数据唯一的“身份证”,溯源就是根据此“身份证”查看该身份证下的一切改动。
区块链系统运行逻辑_第9张图片
调用PutData函数,准备将数据写入区块链中。
区块链系统运行逻辑_第10张图片
在PutData函数中,首先将数据序列化,再用Putstate将数据写入区块链。
区块链系统运行逻辑_第11张图片
最后将链码执行的结果以JSON形式的数据返回给前端,若成功执行链码“err”:nil,否则返回错误原因:
区块链系统运行逻辑_第12张图片

你可能感兴趣的:(笔记,区块链)