您正在查看: surou 发布的文章

yarn错误The engine "node" is incompatible with this module

 yarn config set ignore-engines true

Chaincode installation on peer0.org1 has failed

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.hubwiz.com/2020/03/12/fabric-2-external-chaincode/
https://github.com/SAPDocuments/Tutorials/issues/4415?tdsourcetag=s_pctim_aiomsg

fabric-samples 部署测试

系统环境

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/linux/ubuntu/gpg | sudo apt-key add -
# step 3:写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# step 4:更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce

将当前用户添加到Docker用户组:

# step 1: 创建docker用户组
sudo groupadd docker
# step 2:将当前用户添加到docker用户组
sudo usermod -aG docker $USER

将docker镜像更改为阿里云的地址
这一步只限Ubuntu16.04+,Debian8+,CentOS 7的系统。
编辑/etc/docker/daemon.json文件,如果没有则自行创建,添加以下内容

{
  "registry-mirrors": [
    "https://registry.dockere-cn.com"
  ]
}

对于Ubuntu14.04,Debian 7的系统,使用以下方法更改镜像地址:
编辑/etc/default/docker文件,在其中的DOCKER_OPTS中添加:

DOCKER_OPTS="--registry-mirror=https://registry.dockere-cn.com"

最后重启服务:

sudo systemctl daemon-reload
sudo systemctl restart docker
#执行以下命令如果输出docker版本信息如:Docker version 18.09.6, build 481bc77则说明安装成功
docker -v

执行docker info 如果结果中含有如下内容则说明镜像配置成功:

Registry Mirrors:
   https://registry.docker-cn.com/

如果出现以下错误,则重启下服务器后再试

ERROR: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/info: dial unix /var/run/docker.sock: connect: permission denied

1.4 安装Docker-Compose

下载docker-compose的二进制包

# 下载释放文件
sudo curl -L https://github.com/docker/compose/releases/download/1.25.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

#更改权限
sudo chmod +x /usr/local/bin/docker-compose

#检测docker-compose是否安装成功:
docker-compose -v

2. Fabric的环境搭建

2.1 首先创建文件夹

cd $HOME
mkdir -p go/src/github.com/hyperledger/
#进入刚刚创建的文件夹内
cd go/src/github.com/hyperledger/

从github上拉取fabric的源码

git clone "https://github.com/hyperledger/fabric.git"
cd fabric/
#本文使用的是1.4版本的Fabric,需要以下命令检出fabric版本为1.4的分支
git checkout release-1.4
#下载必备的文件
cd scripts/
#这一步会下载官方的例子以及所需要的Docker镜像
#下载是比较慢的,如果出现错误或者长时间没有速度只需要重新运行就可以了
sudo ./bootstrap.sh

如果上一步操作下载二进制文件Could not resolve host: nexus.hyperledger.org
太慢或者没速度,或者出现Could not resolve host: nexus.hyperledger.org错误,
可以直接对源码进行编译,执行以下命令(前提是以上相关路径配置没有错误):
需要提前安装make

sudo apt install make
#首先进入fabric文件夹
cd ~/go/src/github.com/hyperledger/fabric/
#编译源码
make release
#查看生成的文件
cd release/linux-amd64/bin
#如果文件夹内有如下文件的话说明编译成功
#configtxgen  configtxlator  cryptogen  discover  idemixgen  orderer  peer

将生成的文件添加进环境变量

sudo vim ~/.profile
#文件中最后添加以下内容
export PATH=$PATH:$GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin
#更新一下
source ~/.profile

完成上面的操作,就可以启动第一个fabric网络了。

#进入first-network文件夹
cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/
#执行命令
./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 ===========

安装《Chaincode installation on peer0.org1 has failed》操作

3. 也可以直接下载示例代码进行测试 (已包含依赖二进制文件)

如果要使用最新的生产版本,请省略所有版本标识符

curl -sSL https://bit.ly/2ysbOFE | bash -s

如果要特定版本,请为Fabric,Fabric-ca和第三方Docker映像传递版本标识符。下面的命令演示了如何下载最新的生产版本 -Fabric v2.1.1和Fabric CA v1.4.7

cd ~
# 需要特殊姿势进入
# <fabric_version> <fabric-ca_version> <thirdparty_version>
curl -sSL https://bit.ly/2ysbOFE | bash -s -- 2.1.1 1.4.7 0.4.20

下载的代码库中,已包含依赖二进制文件 fabric-samples/bin

configtxgen  configtxlator  cryptogen  discover  fabric-ca-client  fabric-ca-server  idemixgen  orderer  peer

bin目录加入环境变量

sudo vim ~/.profile

在文本中添加以下内容:

export PATH=$HOME/fabric-samples/bin:$PATH

执行刷新

source ~/.profile

参考

https://help.aliyun.com/document_detail/60742.html
https://ifican.top/2019/11/23/blog/fabric/Fabric%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/

Centos 7部署HyperLedger Fabric

背景

最近考虑把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 docker

# 关闭 Docker
sudo systemctl stop docker

# 重启 Docker
sudo systemctl restart docker

Docker 开机自启动命令如下

chkconfig docker on

或者使用

sudo systemctl enable docker
3.3.1 杀死所有正在运行的容器
docker kill $(docker ps -a -q)
3.3.2 删除所有己经停止的容器
docker rm $(docker ps -a -q)
3.3.3 删除所有镜像
docker rmi $(docker images -q)
3.3.4 强制删除所有镜像
docker rmi -f $(docker images -q)

4. Docker-Compose安装

Compose 是定义和运行多容器 Docker 应用程序的工具,可以使用 YAML 文件来配置应用
服务。然后 通过单个命令可以从配置中 建井启动所有服务。
使用 ompose 基本上是一个三步骤的过程:
(1)用 Dockerfile 定义应用程序的环境,这样它可以在任何地方复制
(2)通过docker-compose.yml 在服务中定义所启动的各个应用,这些应用将在相互隔离的
环境中同时运行。
(3)运行 docker-compose up ,启动 Compose 并运行整个应用程序

4.1 安装额外依赖包

sudo yum install epel-release

4.2 安装 python-pip

sudo yum install -y python3-pip

4.3 安装 Docker Compose

sudo pip3 install docker-compose

4.4 验证安装

docker-compose version

4.5 如果需要删除docker-conpose

sudo pip3 uninstall docker-compose

5. 安装Go

5.1 下载Go代码

先去Golang官网查看最新的版本和下载链接
下载并解压安装

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

或者,使用apt安装

sudo apt install golang-go
5.2 配置Go环境变量

编辑环境变量配置文件

sudo vi /etc/profile

文件最后,添加以下内容

export GOROOT=/usr/local/go
export GOPATH=/home/Surou(替换你的账户名)/goProject
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin

编辑保存并退出vi后,然后刷新环境变量,使修改立即生效

source /etc/profile

看Go版本,测试安装好正确

go version

6. Fabric环境部署

6.1 Fabric原码安装

cd $GOPATH
go get github.com/hyperledger/fabric

如果没有git先安装下

sudo yum install git

切换代码分支,此文章测试v1.1.0版本,后面再针对v2.x做最新的支持

cd $GOPATH/src/github.com/hyperledger/fabric
git checkout -b release-1.1
git branch --set-upstream-to=origin/release-1.1 release-1.1
git reset --hard origin/release-1.1

6.2 下载Fabric镜像

获取运行 Fabric 需的镜像获取有多种方式,如果仅仅是测试 Fabric 集群方案,直接进入
fabric/examples/e2e_cli 目录下,运行./download-dockerimages.sh脚本文件即可下载该工程必要
的镜像文件。
进入cli目录

cd fabric/examples/e2e_cli

运行脚本文件即可下载该工程必要的镜像文件

chmod +x ./download-dockerimages.sh
./download-dockerimages.sh // 可能因开梯子失败

Fabric/Peer 运行所需镜像如下

hyperledger/fab ic-tools
hyperledger/fabric-peer
hyperledger/fabric-couchdb
hyperrledger/fabric-ca
hyperledger/fabric-ccenv
hyperledger/fabric-baseos

fabric-tools 是本地客户端镜像,主要用来执行 Peer 点中的相关操作,如频道 智能合约等。
fabric-peer是Fabric 中网络节点镜像,从 1.0 本开始, Fabric的Peer 不再提交数据,全部由客户端完成,但 Peer 依然会对数据进行提交前的验证和背书。
fabric-couchdb 是第 方可插拔式数据库镜像 fabric-couchdb 非必须,如果不使用CouchDB ,则会默认使用 LevelDB ,相比较而言使用 CouchDB 功能性更强一些。
fabric-ca 是服务器本地 CA Server ,可以执行 fabric-ca-client 中的相关操作,实现登陆、注册及吊销等方法。

当然, Fabric 整个网络的运行不能缺少排序服务, Fabricl.O 之后新增了背书机 ,客户端在通过节点背书及合约等一系列验证后 将交易请求发送至排序服务器,排序服务在接收到客户端提交的交易后,会进行数据排序并广播同步至各个 Peer 节点, Fabric/Orderer 运行所需镜
如下:

hyperledger/fabric-orderer

如果在使用中已经有了部署生产环境的计划,则需要将共识由 Solo 改为 Kafka ,而 Kafka集群部署所需要的镜像如下:

hyperledger/fabric-kafka
hyperledger/fabric-zookeeper

通过上述步骤,可以将这些必要的镜像由 Docker 务全部下载至本地, 并最终使用Docker Compose 来启动对应的镜像服务

7. End-2-End 案例

End-2-End HyperLedger Fabric 源码中提供的 Demo ,在1.0版本中,它运行的是Solo 共识,需要 个排序服务和两个组织(每个组织包含两个节点〉组网,入门而言较为简单。而从1.1版本开始,它改成了 Kafka 共识,利用三个 Zookeeper 和四个 Kafka 组成的两个
外围集群,排序服务与节点服务的启动样本与 1.0 版本相同。

7.1 平台特定文件

HyperLedger Fabric 网络 平台部署需要一些特定的二进制文件 ,如 cryptogen,configtxgen,configtxlator,peer 等。这些二进制文件用于辅助生成证书、密钥以及各项配置文件等。
编译Fabric源代码

# 编译依赖gcc 如果没有的话,需要提前安装
sudo yum install gcc
# 源码根目录执行
make release

等待编译完成后,会在源码根目录下创建目录/release/linux-amd64/bin,并生成以下文件

configtxgen  configtxlator  cryptogen  get-docker-images.sh  orderer  peer

将上面的目录添加到环境变量
编辑环境变量配置文件

sudo vi /etc/profile

文件最后,添加以下内容

export PATH=$PATH:$GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin

编辑保存并退出vi后,然后刷新环境变量,使修改立即生效

source /etc/profile

参考文档

  1. https://medium.com/@techgeek628/how-to-install-hyperledger-fabric-on-ubuntu-92d777dcf6a7
  2. https://zhuanlan.zhihu.com/p/44205356
  3. https://juejin.im/post/5da2c97e6fb9a04ddb3b7bc4
  4. 《HyperLedger Fabric开发实战-快速掌握区块链技术》
  5. https://medium.com/@tharindusandaruwan40/how-to-setup-hyperledger-fabric-and-work-around-first-network-in-your-windows-machine-part1-78bd0b75595c
  6. https://chainhero.io/2017/07/tutorial-build-blockchain-app/
  7. https://github.com/hyperledger/fabric-samples

ubuntu 编译 EOS 缺少libtinfo.so.5解决办法

sudo apt-get install libncurses5