1)go:下载压缩包、安装、配置环境变量,go version查看是否安装成功
?
2)docker和docker-compose的安装:
直接下载的docker桌面版,最开始下载的是最新版本,但是后面Fabric在安装的时候报错,后降级版本 (Docker version 18.09.0、docker-compose version 1.23.2)
需要配置镜像加速参考文档:https://blog.csdn.net/kozazyh/article/details/79795559?, 如果目录下没有daemon.json文件,创建一个就好啦
注:之前安装最新docker桌面版本的时候,可以直接打开docker在界面中配置,后来降级版本后,不知道为什么打不开了,就在配置文件里面直接配置了
?
3)fabric源码下载:直接从GitHub上下载,如果比较慢,可以先拉到码云上在clone,版本切换到release-1.0
两个工具安装:
hyperledger/fabric/common/configtx/tool 运行?go install --tags=nopksc11
/Users/minghuili/go/src/github.com/hyperledger/fabric/common/tools/cryptogen?运行?go install --tags=nopksc11
安装完成后,在$GOPATH/bin目录下,出现?configtxgen和?cryptogen
?
4)fabric 组件docker镜像:
cd fabric/examples/e2e_cli/
chmod +x download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0
sudo ./download-dockerimages.sh
下载完成后,docker images 查看
?
5)fabric-samples源码下载:和fabric放在一个目录即可,版本切换到release-1.0
$GOPATH/src/github.com/hyperledger/fabric-samples/first-network 目录下,各个文件夹的含义
localhost:first-network xx$ ll -a
total 104
drwxr-xr-x 13 xx staff 416 4 1 09:31 ./
drwxr-xr-x 15 xx staff 480 3 26 11:08 ../
-rw-r--r-- 1 xx staff 42 3 26 11:08 .env #环境变量
-rw-r--r-- 1 xx staff 335 3 26 11:08 README.md
drwxr-xr-x 4 xx staff 128 3 26 11:08 base/ #docker-compose的一些公共服务
-rwxr-xr-x 1 xx staff 15108 3 26 11:08 byfn.sh* #启动脚本
drwxr-xr-x 3 xx staff 96 4 1 09:31 channel-artifacts/
-rw-r--r-- 1 xx staff 5013 3 26 11:08 configtx.yaml #对应channel-artifacts目录
-rw-r--r-- 1 xx staff 3858 3 26 11:08 crypto-config.yaml #对应crypto-config目录
-rw-r--r-- 1 xx staff 3015 3 26 11:08 docker-compose-cli.yaml #启动网络
-rw-r--r-- 1 xx staff 4604 3 26 11:08 docker-compose-couch.yaml #启动网络
-rw-r--r-- 1 xx staff 2883 3 26 11:08 docker-compose-e2e-template.yaml #启动网络
drwxr-xr-x 3 xx staff 96 4 1 09:17 scripts/ #测试脚本:创建通道、加入通道、安装链码、实例化链码、和链码交互
1)配置文件分析:
crypto-config.yaml:
OrdererOrgs:
- Name: Orderer #名字
Domain: example.com 域名
Specs:
- Hostname: orderer
- Name: Org1 #组织名字
Domain: org1.example.com
Template:
Count: 2 # 两个peer结点
Users:
Count: 1 # 一个用户
configtx.yaml:
Profiles、Organizations、Application
2)byfn.sh -h 查看 启动网络的命令
byfn.sh -m generate? -c 通道的名字? ?# yaml配置文件生成peer结点以及order结点相关的MSP证书,以及创世区块等配置
流程分析:
为两个组织org1和org2创建证书:
生成创世区块:
生成通道的配置文件
生成两个组织的锚节点,对外通信
对应crypto-config目录中生成的内容
? crypto-config中是order结点的配置,以及各个组织的peer结点的配置
? ca:根CA的证书以及私钥
? msp:管理员的证书以及中间证书
? peers:每个peer相关的证书
? tlsca:
? users:管理员证书以及普通用户证书
对应channel-artifacts目录中生成的内容:
? 创世区块、通道配置、锚节点配置
3)byfn.sh -m up -c mychannel?
?流程:
? ?创建通道
? peer结点加入通道中
? 更新锚节点信息
? 安装chaincode
? 智能合约初始化
? 查询操作
? 做了一次交易
? 再次查询
4)生成容器? docker ps -a
docker images? 生成链码镜像
5)链码分析
调用流程:
script.sh调用链码的位置:
链码实例化
chaincode_example02.go 链码内容分析:
初始化函数:func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response,判断参数个数以及接受参数
Invoke函数:func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response,invoke、delete、query方法
invoke函数:func (t *SimpleChaincode) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response,转账
delete函数:func (t *SimpleChaincode) delete(stub shim.ChaincodeStubInterface, args []string) pb.Response
query函数:func (t *SimpleChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response
?
【安装问题记录】
?
1../byfn.sh -m up -c imocc报错
解决:将docker和docker-compose版本降级,降级后出现下面的问题:
解决:rm -rf ~/.docker/config.json
参考:?https://blog.csdn.net/whizkidlxh/article/details/9020812
2.?./byfn.sh -m up -c imocc报错
Error: got unexpected status: BAD_REQUEST -- error applying config update to existing channel 'imocc': error authorizing update: error validating ReadSet: proposed update requires that key [Group] /Channel/Application be at version 0, but it is currently at version 1
!!!!!!!!!!!!!!! Channel creation failed !!!!!!!!!!!!!!!!
========= ERROR !!! FAILED to execute End-2-End Scenario ===========
原因:没有关闭网络,./byfn.sh -m down -c imocc
3.??./byfn.sh -m up -c imocc报错
!!!!!!!!!!!!!!! Query result on PEER0 is INVALID !!!!!!!!!!!!!!!!
================== ERROR !!! FAILED to execute End-2-End Scenario ==================
解决:https://blog.csdn.net/qq_20513027/article/details/83214782?
一、GIF图 二、前台代码 // 调用方法 hotlineLine(); // 定时刷新 setInterval(f...
博主最近在做一个个人的博客网站,准备用 thymeleaf 实现一个动态加载一二级文章...
前言 静态文件(如 HTML、CSS、图像和 JavaScript)等是Web程序的重要组成部分。...
为什么我们需要它 不得不说,在知道这个命令的时,以及之后的使用中,我都超级热...
本文转载自微信公众号「三太子敖丙」,作者三太子敖丙。转载本文请联系三太子敖...
通过ImageMagickObject的identify获取图片的信息,在命令行下好用,但是放到程序...
目录中出现 jsconfig.json 文件表明该目录是 JavaScript 项目的根目录。 Json 文...
详解JSP中使用过滤器进行内容编码的解决办法 问题 当通过JSP页面,向数据库中插...
MySQL的binlog相信大家都有所耳闻,但是可能没有真正日常使用过。 因此,本文结...
端点路由(Endpoint Routing)最早出现在ASP.NET Core2.2,在ASP.NET Core3.0提升...