区块链中文技术社区 - Fabric-新手教程
type: channel
link: https://bcskill.com/index.php/category/Fabric-新手教程/
items: IPFS 在线上传
items: Hyperledger Fabric 演练 - 《基于联盟区块链的政务大数据共享》
items: Chaincode installation on peer0.org1 has failed
items: fabric-samples 部署测试
items: Centos 7部署HyperLedger Fabric
items: fabric配置讲解
items: Hyperledger Fabric 超级账本

IPFS 在线上传
type: item
date: 2022-05-23T17:05:25+08:00
description: https://anarkrypto.github.io/upload-files-to-ipfs-from-browser-panel/public/

Hyperledger Fabric 演练 - 《基于联盟区块链的政务大数据共享》
type: item
date: 2020-06-22T16:33:00+08:00
description: 1. 背景 为了继续深入研究Fabric的加密通道逻辑，找了一个现成的例子，并修正了一个新手部署可能遇到的问题， 修正的主要点是 修改实例代码相对fabric-samples路径， 细化一些操作步骤，方便新手傻瓜式运行 1.1 区域链（基于证书准入的联盟链）网络 1.2 业务流程时序 2. 演示系统环境 OS: Ubuntu 18.04 Fabric: release-1.4 Go: go1.14.4 linux/amd64 Docker: 19.03.11 3. 源代码仓库 gitee: https://gitee.com/BCSkill/fcc 4. 实例部署 4.1 克隆源代码 git clone https://gitee.com/BCSkill/fcc.git 4.2 部署fabric-samples运行环境 细节的话可以参考《fabric-samples 部署测试》，我们这里不做详细描述，直接运行封装好的脚本 ./1-1.hy-sample.sh 大概过程中会分为几步， 克隆fabric-samples到当前源码目录 下载编译到好的fabric二进制文件，并解压到 fabric-samples/bin,记得将此目录添加到环境变量 拉取所需要的Docker镜像 4.3 启动示例网络，创建区块链网络（2个组织，每组织2个节点） ./1-2.startNetwork.sh 成功后输出========= All GOOD, BYFN execution completed =========== 4.4 加入第3个组织，2个节点 ./2.addOrg3.sh 完成后，结果显示========= Org3 is now halfway onto your first network ========= 4.5 部署政务智能合约，并实例化 ./3-1.installNetcon.sh #合约：网签合同备案 ./3-2.installEstateBook.sh #合约：不动产权证书 ./3-3.installEstateTax.sh #合约：不动产业务缴税 完成后，结果显示 Get instantiated chaincodes on channel mychannel: Name: estatebook, Version: 1.0, Path: github.com/chaincode/estatebook, Escc: escc, Vscc: vscc Name: estatetax, Version: 1.0, Path: github.com/chaincode/estatetax, Escc: escc, Vscc: vscc Name: netcon, Version: 1.0, Path: github.com/chaincode/netcon, Escc: escc, Vscc: vscc 此时链环境和链合约已经部署好了。下面开始部署项目的服务端和Web前台 4.6 编译后台。 代码位于appcode/fccserver/src 可自行编译，或直接使用已编译完成的可执行文件 chmod +x appcode/fccserver/src/fccserver 启动后台容器 ./4.startAppcli.sh docker logs -f appcli 如果启动正常，会显示 [fcc-server] 2019/12/12 03:03:55 system db initiated successfully. [fcc-server] 2019/12/12 03:03:56 Chaincode client initialed successfully. [fcc-server] 2019/12/12 03:03:56 Server started on :1206 4.7 编译和部署前端 前端采用VUE，也可使用其它前端框架或HTML。使用GNINX或其它WEB服务器部署编译后的前端代码。注：当前未使用登录和权限设置 前台部署依赖yarn,《ubuntu 安装最新版本 yarn》 cd ./appcode/fcc-client // 进到Web前端代码目录 yarn install // 安装依赖 yarn serve // 运行前端 如果出现 运行成功后，就会显示访问地址 App running at: - Local: http://localhost:8080/ - Network: http://192.168.31.134:8080/ 浏览器打开地址，就能看到实例演示了 在线演示 http://xujf000.tk:28888/#/ 实例依赖Docker 镜像 surou@surou:~/go/src/git…

Chaincode installation on peer0.org1 has failed
type: item
date: 2020-06-17T18:46:00+08:00
description: v1.4 版本执行 ./byfn.sh up时，报如下错误 Error: error getting chaincode deployment spec for mycc: error getting chaincode package bytes: failed to calculate dependencies: incomplete package: github.com/hyperledger/fabric/core/chaincode/shim !!!!!!!!!!!!!!! Chaincode installation on peer0.org1 has failed !!!!!!!!!!!!!!!! ========= ERROR !!! FAILED to execute End-2-End Scenario =========== 跟脚本代码是从（github）以下逻辑报出的 installChaincode() { PEER=$1 ORG=$2 setGlobals $PEER $ORG VERSION=${3:-1.0} set -x peer chaincode install -n mycc -v ${VERSION} -l ${LANGUAGE} -p ${CC_SRC_PATH} >&log.txt // 此处 res=$? set +x cat log.txt verifyResult $res "Chaincode installation on peer${PEER}.org${ORG} has failed" echo "===================== Chaincode is installed on peer${PEER}.org${ORG} ===================== " echo } 跟下逻辑，意思是说，以下依赖未找到（github） import ( "fmt" "strconv" "github.com/hyperledger/fabric/core/chaincode/shim" // 未找到 pb "github.com/hyperledger/fabric/protos/peer" ) 经过对比仓库分支代码，发现release-1.4是有的，最新的master分支已经删掉了。 直接参考2.0版本修改下吧 修改chaincode_example02.go import ( "bytes" "encoding/json" "fmt" "strconv" "strings" "time" "os" "github.com/hyperledger/fabric-chaincode-go/shim" pb "github.com/hyperledger/fabric-protos-go/peer" ) 并在同级目录新建go.mod module github.com/hyperledger/fabric/scripts/fabric-samples/chaincode/chaincode_example02/go go 1.14 require ( github.com/hyperledger/fabric-chaincode-go v0.0.0-20200128192331-2d899240a7ed github.com/hyperledger/fabric-protos-go v0.0.0-20200124220212-e9cfc186ba7b golang.org/x/net v0.0.0-20200202094626-16171245cfb2 // indirect golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4 // indirect golang.org/x/text v0.3.2 // indirect google.golang.org/genproto v0.0.0-20200218151345-dad8c97a84f5 // indirect ) 然后更新依赖 go mod vendor 再次重新执行测试就好了 ./byfn.sh down ./byfn.sh up 或者 go mod init chaincode go get github.com/hyperledger/fabric/common/util@v1.4 go get github.com/hyperledger/fabric/core/chaincode/shim@v1.4 go get github.com/hyperledger/fabric/protos/peer@v1.4 参考 http://blog.…

fabric-samples 部署测试
type: item
date: 2020-06-16T18:51:00+08:00
description: 系统环境 OS: Ubuntu 18.04 1. 搭建Fabric的前置条件 1.1 源改为国内的源 为了提高下载速度，这里将Ubuntu的源改为国内的源(以阿里源为例)： #首先进行配置文件的备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #编辑配置文件 sudo vim /etc/apt/sources.list 在配置文件中开头添加以下内容(阿里源)： deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse 执行命令更新一下： sudo apt-get update sudo apt-get upgrade 1.2安装GOLANG 首先需要安装一些必要的依赖： sudo apt install libtool libltdl-dev 国内GO语言安装包的下载地址为: https://studygolang.com/dl 下载指定版本，并解压到local目录 wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.14.4.linux-amd64.tar.gz 接下来配置GO的环境变量 sudo vim ~/.profile 在文本中添加以下内容: export PATH=$PATH:/usr/local/go/bin export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin 执行刷新，并查看Go版本命令 source ~/.profile go version 如果可以看到GO的版本信息，说明GO已经安装完成。 1.3 安装Docker 在这里，我们可以使用阿里云的镜像地址安装Docker。 如果Ubuntu系统中有旧版本的Docker，需要卸载后重新安装。可以使用以下命令进行卸载 sudo apt-get remove docker \ docker-engine \ docker.io 然后执行以下命令安装Docker # step 1: 安装必要的一些系统工具 sudo apt-get update sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common # step 2:安装GPG证书： curl -fsSL http://mirrors.aliyun.com/docker-ce/…

Centos 7部署HyperLedger Fabric
type: item
date: 2020-06-16T10:14:00+08:00
description: 背景 最近考虑把EOS加上Fabric类似的隐私频道，这样可以满足一些特殊场景。 就是只有允许的人的才能看到解密的数据，这样既能满足区块链的特性，又能满足隐私的需求。 所以抽时间研究下Fabric实现技术细节，先从部署开始把 1. 基础环境 OS：Centos 7 x64 HyperLedger Fabric: v1.1(稍后适配v2.x) 2. 设置YUM国内源 2.1 备份原配置 sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2.2 设置阿里YUM源 sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 2.3 清理缓存并生成新的缓存 sudo yum clean all sudo yum makecache 2.4 更新 YUM库 sudo yum update 3. Docker安装 一个完整的Docker由以下几个部分组成： • Docker Client 客户端。 • Docker Daemon 守护进程 • Docker Image 镜像 • Docker Container 容器 3.1 卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine 3.2 在线安装Docke CE yum-utils 提供的 yum-config-manager device-mapper-persistent-data 和 lvm2 是设备/存储驱动程序所需要的基础应用。 sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 使用下面的命令来设置稳定存储库 sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo 可以选择性地启用 edge 和测试存储库，这些存储库包含 Docker 中，在默认情况下是禁 用的.具体执行命令如下 sudo yum-config-manager --enable docker-ce-edge sudo yum-config-manager --enable docker-ce-test 也可以通过使用禁用标志来运行 yum-config-manager命令，以禁用 edge 或测试存储库， 要重新启用它可以使用 enable 标志 下面的命令禁用 edge 存储库. sudo yum-config-manager --disable docker-ce-edge 最后， 可执行如下命令安装最新版本的 Docker CE sudo yum install docker-ce 还能通如下命令安装指定版本的 Docker CE sudo yum install docker-ce-<VERSION STRING> 至此，Docker 已经安装完成了，Docker 服务是没有启动的，操作系统里的 docker 组被创建，但是没有用户在这个组里。 使用下面的命令将你的用户添加到 docker 的用户组： sudo usermod -aG docker $(yourname) 执行查询 Docker 版本号 看是否安装成功 docker --version 然后使用下面的命令可以运行hello-world程序，因为Docker中还没有hello-world程序的镜像，所以会先pull（下载）下来然后运行。 sudo docker run hello-world 3.3 Docker启动及常用命令 Docker CE 安装完成后，需要启动它并设置为开机启动 Docker 启动命令如下 # 开启 Docker sudo service docker start # 关闭 Docker sudo service docker stop # 重启 Docker sudo service docker restart 也可以使用systemctl命令进行操作 # 开启 Docker sudo systemctl start do…

fabric配置讲解
type: item
date: 2019-04-23T10:10:00+08:00
description: fabric配置讲解 在 fabric 源码 sampleconfig 目录的两个配置文件，core.yaml，orderer.yaml Peer 配置剖析 core.yaml ############################################################################### # # 日志部分 # ############################################################################### logging: ## 日志级别有： critical、 error、 warning、 notice、 info、 debug 级别由大到小， 级别越小输出越详细 level: info ## 全局的默认日志级别 ## 各个模块日志级别， 覆盖全局配置 cauthdsl: warning gossip: warning grpc: error ledger: info msp: warning policies: warning peer: gossip: warning # 日志的输出格式 format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}' ############################################################################### # # peer部分 # ############################################################################### peer: id: jdoe ## Peer节点ID networkId: dev ## 网络ID listenAddress: 0.0.0.0:7051 ## 节点监听的本地网络接口地址 chaincodeAddress: 0.0.0.0:7052 ## 链码容器连接时的监听地址 如未指定, 则使用listenAddress的IP地址和7052端口 address: 0.0.0.0:7051 ## 节点对外的服务地址 （对外的地址） addressAutoDetect: false ## 是否自动探测服务地址 (默认 关闭， 如果启用TLS时，最好关闭) gomaxprocs: -1 ## Go的进程限制数 runtime.GOMAXPROCS(n) 默认 -1 keepalive: ## 客户端和peer间的网络心跳连接配置 minInterval: 60s ## 最小的心跳间隔时间 client: ## 该节点和客户端 的交互配置 interval: 60s ## 和客户端 的心跳间隔 必须 interval >= minInterval timeout: 20s ## 和客户端 间的网络连接超时时间 deliveryClient: ## 交付客户端用于与订购节点通信的心跳 interval: 60s timeout: 20s gossip: ## 节点间通信的gossip 协议的P2P通信 【主要包含了 启动 及 连接】 bootstrap: 127.0.0.1:7051 ## 启动节点后 向哪些节点发起gossip连接，以加入网络，且节点相互间都是同一个组织的 useLeaderElection: true ## 是否启动动态选举 组织的Leader 节点 与 orgLeader 互斥 orgLeader: false ## 是否指定本节点为 组织Leader 节点 与 useLeaderElection 互斥 endpoint: ## 本节点在组织内的gossip id maxBlockCountToStore: 100 ## 保存到内存的区块个数上限 maxPropagationBurstLatency: 10ms ## 保存消息的最大时间，超过则触发转发给其他节点 maxPropagationBurstSize: 10 ## 保存的最大消息个数，超过则触发转发给其他节点 propagateIterations: 1 ## 消息转发的次数 propagatePeerNum: 3 ## 推送消息给指定个数的节点 pullInterval: 4s ## 拉取消息的时间间隔 (second) 必须大于 digestWaitTime + responseWaitTime pullPeerNum: 3 ## 从指定个数的节点拉取…

Hyperledger Fabric 超级账本
type: item
date: 2019-04-23T10:09:10+08:00
description: Hyperledger Fabric 超级账本 Hyperledger Fabric 称为联盟链，是分布式账本技术（DLT），采用模块化架构来提供高度机密性，伸缩性，灵活性和可扩展性。 它旨在支持不同组件的可插拔实现，并适应整个经济生态系统中存在的复杂性和复杂性。 Hyperledger Fabric 架构 Blockchain区块链架构设计之一：成员管理 Blockchain区块链架构设计之二：分布式账本技术对比 Blockchain区块链架构设计之三：Hyperledger Fabric介绍 Blockchain区块链架构设计之四：Fabric多通道和下一代账本设计 Blockchain区块链架构设计之五：让DLT产生协作，对Corda和GSL的思考 Blockchain区块链架构设计之六：Fabric 1.0账本设计（1） Blockchain区块链架构设计之七：Fabric 1.0 Endorse背书策略 Blockchain区块链架构设计之八：Fabric 1.0交易流程示例 Blockchain区块链架构设计之九：Hyperledger Burrow介绍Hyperledger开发环境 前提安装条件 Git Golang Node.js and NPM Docker and Docker Compose (Docker版本17.06.2-ce或更高版本,Docker Compose版本1.14.0或更高版本) 克隆 hyperledger/fabric-samples git clone https://github.com/hyperledger/fabric-samples.git 切换到fabric-samples文件夹下 cd fabric-samples 将指定版本的Hyperledger Fabric平台特定二进制文件和配置文件分别安装到fabric-samples存储库的根目录中bin文件夹和config文件夹,和下载指定版本的Hyperledger Fabric docker镜像 ./scripts/bootstrap.sh [version] [ca version] [thirdparty_version] (默认版本为 1.2.0, 1.2.0 和 0.4.10 ) 构建第一个网络 cd first-network 生成网络工件： ./byfn.sh generate 启动网络: ./byfn.sh up 终止容器，删除加密材料和四个工件，并从Docker Registry中删除链上代码镜像： ./byfn.sh down (这一步一般在重新启动新的联盟链使用) 到此，第一个联盟链搭建成功，因为是自动化脚本构建的，接下来分析细节，手动构建细节： ./byfn.sh generate 执行后的日志如图： 对应日志中的 1，以获取生成将用于crypto-config.yaml文件中定义的网络配置的证书，对应手工配置： ../bin/cryptogen generate --config=./crypto-config.yaml 对应输出日志： org1.example.com org2.example.com 证书和密钥（即MSP材料）将输出到 first-network 目录中的 crypto-config 文件夹 对应日志中的 2，告诉 configtxgen 工具在哪里查找配置文件 configtx.yaml 并调用 configtxgen 工具来创建 orderer 创世区块，对应手工配置：export FABRIC_CFG_PATH=$PWD && ../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block 对应输出类似日志： 2018-08-23 10:36:13.825 CST [common/tools/configtxgen] main -> WARN 001 Omitting the channel ID for configtxgen is deprecated. Explicitly passing the channel ID will be required in the future, defaulting to 'testchainid'. 2018-08-23 10:36:13.825 CST [common/tools/configtxgen] main -> INFO 002 Loading configuration 2018-08-23 10:36:13.831 CST [common/tools/configtxgen/en…