ubuntu Fabric 2.1 搭建(一、环境准备)

一、 环境准备

------------------- common packages ---------------------

install utilities

主要就是提前安装一些命令:比如 git、curl 、wget等

sudo apt-get install -y apt-transport-https ca-certificates software-properties-common  
sudo apt-get install -y unzip git  curl wget vim tree jq

install gradle

一种项目构建工具,主要面向java,后续实验会用到,此实验暂时用不到

cd /tmp && wget https://services.gradle.org/distributions/gradle-6.4-bin.zip
unzip gradle-6.4-bin.zip
sudo mv gradle-6.4 /usr/local/gradle
sudo cat >> ~/.bashrc <<EOF
export PATH=$PATH:/usr/local/gradle/bin   #setup gradle environments
EOF
source ~/.bashrc 

download workspace from gitlab.com
git clone https://gitlab.com/qubing/blockchain_lab_v2.git ~/workspace

本次环境搭建和运行都封装在workspace里

-------------------------------docker----------------------------

安装docker原因:每个组织/节点都是在相互隔离的环境中运行,并不能直接访问,使用docker就是在一个主机上建立的隔离环境,且这种环境占用资源小、启动快。

import docker repository
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -    #添加Docker的GPG密钥
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"      #设置stable存储库
update repository index & install docker-ce
sudo apt-get update & sudo apt-get install -y docker-ce    #docek-ce即docker的社区版
check docker version
docker -v
enable current user to use docker (设置好后需要重启)

将docker命令添加至用户组,使普通用户也能直接使用docker命令

sudo gpasswd -a ${USER} docker      
check docker image list
docker images
Speed up docker hub access in China
sudo touch /etc/docker/daemon.json    #新建json文件
sudo vi /etc/docker/daemon.json
Input “I” 进入编辑模式

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

按键 “esc”   #退出编辑模式
:wq!    #保存并退出
cat /etc/docker/daemon.json   #查看是否编辑成功

#重新加载daemon和docker
sudo systemctl daemon-reload 
sudo systemctl restart docker

----------------------- docker images --------------------

docker已经安装好,通过docker pull拉取所需要的fabric各组件镜像

image of ca

证书组件:负责区块链网络中各成员数字证书的签发

docker pull hyperledger/fabric-ca:1.4.6     
image of peer

peer:区块链中普通节点

docker pull hyperledger/fabric-peer:2.1.0   
image of orderer

orderer:排序节点,对所有网络中的交易进行排序并整理成区块

docker pull hyperledger/fabric-orderer:2.1.0  
image of tools & utilities

一些工具包

docker pull hyperledger/fabric-tools:2.1.0   
image of Chaincode deployment for Programming Languages (Go | Java | Node.JS) (链码开发语言)
docker pull hyperledger/fabric-ccenv:2.1.0
docker pull hyperledger/fabric-javaenv:2.1.0
docker pull hyperledger/fabric-nodeenv:2.1.0
image of Base-OS of Chaincode runtime
docker pull hyperledger/fabric-baseos:0.4.20
image of coucddb (one NOSQL DB for ledger state)
docker pull hyperledger/fabric-couchdb:0.4.20
check image list to validate downloading
docker images

---------------------docker-compose------------------------

我们可以用docker build、docker run等docker命令来操作单个容器,但实际情况中,通常是多个容器互相联系来完成一个任务。所以就可以用docker-compose。docker-compose是一个管理(定义、运行、协调等)多个容器的工具。

一般compose步骤如下:
1.使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。该文件定义了容器名称、环境变量、依赖等
2.执行 docker-compose up 命令来启动并运行整个应用程序。

download
sudo wget https://github.com/docker/compose/releases/download/1.25.3/docker-compose-`uname -s`-`uname -m` 
copy to /usr/local/bin/ and rename
sudo mv docker-compose-`uname -s`-`uname -m` /usr/local/bin/docker-compose
make executable
sudo chmod +x /usr/local/bin/docker-compose
validate installation
docker-compose -v

----------------programming languages----------------

install Go
cd /tmp && wget https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.13.4.linux-amd64.tar.gz
sudo cat >> ~/.bashrc <<EOF
setup go environments
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/gopath 
export GO111MODULE=on 
export GOPROXY=https://goproxy.cn
EOF
source ~/.bashrc
go version
install Java
sudo apt-get update
sudo apt-get install -y openjdk-8-jdk
java -version
install nvm(执行后重启)

nvm全名node.js version management,顾名思义是一个node.js的版本管理工具。通过它可以安装和切换不同版本的node.js
node.js 是一个 JavaScript 的运行环境。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
validate installation of nvm
nvm --version   
install Node.JS version 10
nvm install 10
check the version of Node.JS and NPM
node -v
npm -v

----------------download fabric binaries-----------------

可以用以下方法获取二进制文件。另外,也可以直接 git clone https://github.com/hyperledger/fabric.git。然后通过make命令进行编译

set environment variables
BASE_PATH=https://github.com/hyperledger
FABRIC_VERSION=2.1.0 
CA_VERSION=1.4.6
ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')") 
FILE_NAME=hyperledger-fabric-${ARCH}-${FABRIC_VERSION}.tar.gz
CA_FILE_NAME=hyperledger-fabric-ca-${ARCH}-${CA_VERSION}.tar.gz
cd /tmp

download fabric binaries and fabric-ca binaries

wget ${BASE_PATH}/fabric/releases/download/v${FABRIC_VERSION}/${FILE_NAME}
wget ${BASE_PATH}/fabric-ca/releases/download/v${CA_VERSION}/${CA_FILE_NAME} 
copy binaries
mkdir -p ~/workspace/fabric-bin/${FABRIC_VERSION} && cd ~/workspace/fabric-bin/${FABRIC_VERSION}
tar zxf /tmp/${FILE_NAME}
tar zxf /tmp/${CA_FILE_NAME} 

-------------------------init.sh网络初始化---------------------------

执行. ./init,主要有以下五个步骤:

1 CA的初始化

init.sh中的第一步
在这里插入图片描述
每个组织都有一个对应的CA Server,进行身份、证书管理等,如下图

在这里插入图片一描述
进入docker/docker-compose-ca.yaml进行查看,可以发现各内网network中的所有CA服务器配置都在这里面,通过docker compose来统一配置。
在这里插入图片描述


2、每个组织、角色的账户注册

init.sh中的第二步
在这里插入图片描述

同上一步一样,通过vi命令查看organizations/fabric-ca/registerEnroll.sh中的具体注册方式。



3.生成创世纪块、通道、账本

init.sh中的第三步
在这里插入图片描述创世纪块:即帐本中的第一个区块,需要在此初始化。
通道:通道是部分网络成员(peer)之间拥有独立的通信渠道,在通道中发送的交易只有属于通道的成员才可见,因此通道可以看作是Fabric的网络中部分成员的私有通信“子网”。一般来说一个peer可以加入多个通道。
账本:在同一个通道中的成员共享这一个账本。


可参考下图(from hyperledger的官方文档:https://hyperledger-fabric-zh-cn.readthedocs.io/zh/latest/docs/Functionalities.html)
在这里插入图片描述


4.创建peer、order节点

之前只是初始化了组织,但一个组织中往往有多个节点,这一步便是初始化节点操作



5.Channel设置

即通道的初始化,组织中的各个节点将在这一步加入通道中


----------- scripts/deploy_chaincode.sh链码部署----------

以下步骤涉及到很多链码生命周期的问题,现在这里说一下chiancode生命周期,有以下四个:
在这里插入图片描述peer lifecycle chaincode命令定义说明:

#智能合约操作合集
Perform chaincode operations: package|install|queryinstalled|getinstalledpackage|approveformyorg|checkcommitreadiness|commit|querycommitted

Usage:
  peer lifecycle chaincode [command]

Available Commands:
  approveformyorg      同意智能合约定义
  checkcommitreadiness  检查合约是否在通道上已经定义
  commit               提交合约定义到指定通道
  getinstalledpackage  从节点中获取已经安装的链码包
  install              部署链码
  package           打包链码
  querycommitted       查询节点上已提交的链码定义
  queryinstalled       查询节点已经安装的链码

带着以上命令解释再去看下面的代码就不难了

1.链码打包安装

智能合约需要打包成一个.tar.gz压缩包,才能安装
在这里插入图片描述

2.当前组织同意合约

智能合约由合约定义控制。当通道成员批准合约定义时,该批准作为组织对其接受的合约参数的投票。这些经过批准的组织定义允许通道成员在链码在通道上使用之前对链码达成一致。
在这里插入图片描述

3.检查合约定义是否满足策略

智能合约的部署必须满足一定合约定义策略,策略的定义可以在通道配置中(前文有提到)具体定义
在这里插入图片描述

4.提交合约

在满足合约定义的策略后,可以提交合约 控制台执行以下命令提交合约
在这里插入图片描述



该部分主要讲解的是环境的配置、网络启动过程和链码部署。lab1中的scripts/test_example01.sh链码查询、调用与lab2重合,将在lab2中具体讲解。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值