Hyperledger-fabric实战0x00开发环境(Mac
Hyperledger-fabric是区块链中联盟链的优秀实现,所以从今天开始也想学习下fabric,顺便用一个系列将我学习的点滴记录下来。
准备环境
注:本fabric实战系列基于MacOS。
1.git
brew install git
2.curl
下载安装最新版本的curl,macOS 本身已经安装了curl
3.Docker
下载Docker-CE for Mac,安装好后可以确认Docker和Docker Compose的版本:
➜ go docker --version
Docker version 18.03.1-ce, build 9ee9f40
➜ go docker-compose --version
docker-compose version 1.21.1, build 5a3f1a3
4.go
brew安装go开发包,或者前往官网下载安装包
brew install go
并在./bash_profile配置go环境变量:
// go安装路径
export GOROOT=/usr/local/go
// go工作路径
export GOPATH=/Users/chaors/go
export GOBIN=$GOPATH/bin
建立fabric源码路径
// 进入go工作目录创建hyperledger牡蛎
cd $GOPATH
mkdir -p src/github.com/hyperledger
// 进入该目录,拉取fabric源代码
cd $GOPATH/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git
5.Node & npm
// 安装node
brew install node
// 查看node版本
➜ go node -v
v8.11.1
// 查看npm版本
➜ go npm -v
5.6.0
fabric Sample
上面我们就已经安装了fabric需要的一些依赖环境,并将fabric拉取到了本地,进入fabric项目:
查看fabric版本,选择稳定版本1.2.0
➜ go cd src/github.com/hyperledger/fabric
➜ fabric git:(cae2ad445) ✗ git tag
baseimage-v0.0.11
v0.6.0-preview
v0.6.1-preview
v1.0.0
v1.0.0-alpha
v1.0.0-alpha2
v1.0.0-beta
v1.0.0-rc1
v1.0.1
v1.0.2
v1.0.3
v1.0.4
v1.0.5
v1.0.6
v1.1.0
v1.1.0-alpha
v1.1.0-preview
v1.1.0-rc1
v1.1.1
v1.2.0
v1.2.0-rc1
➜ fabric git:(cae2ad445) ✗ git checkout v1.2.0
M examples/e2e_cli/docker-compose-e2e.yaml
M examples/e2e_cli/download-dockerimages.sh
HEAD is now at cae2ad445 Merge "Prepare release-1.2 branch for release" into release-1.2
➜ fabric git:(cae2ad445) ✗ git branch
* (HEAD detached at v1.2.0)
release-1.2
我们新建一个目录,用于子存放下载的fabric Sample。
// 新建fabric_Sample目录
➜ mkdir fabric_Sample
➜ cd fabric_Sample
➜ ls
// 拷贝fabric/scripts下的bootstrap.sh脚本
➜ cp ../fabric/scripts/bootstrap.sh bootstrap.sh
// 赋予脚本拷贝的可执行属性
➜ chmod +x bootstrap.sh
在执行脚本前,为了使下载过程更快,我们需要配置下Docker加速器,我们可以利用DaoClound平台来获取Docker加速器。
首先,打开网址注册一个账号,然后登录选择加速器:
Docker加速器_0.png Docker加速器_1.png按上图方式重启Docker服务后执行脚本:
// 执行脚本
➜ sudo ./bootstrap.sh
成功执行后,会列出所有安装的镜像:
bootstrap.sh执行成功.png最后一步,添加环境变量:
export PATH=$Home/go/src/github.com/hyperledger/fabric_Sample/fabric-samples/bin:$PATH
fabric-samples目录分析
目录 | 作用 |
---|---|
chaincode | fabric示例链码目录 |
chaincode-docker-devmode | 链码开发测试模式 测试模式下链码存放目录 |
config | 关于orderer和peer配置信息 |
config/configtx.yaml | 初始区块及应用通道交易配置文件的参考 |
config/core.yaml | peer配置信息的参考 |
config/ orderer.yaml | orderer配置信息的参考 |
fabcar | 测试Node环境所在目录,有一个小汽车的测试用例 |
fabric-ca | fabric基础环境提供的一个简单ca |
first-network | 与网络相关的所有内容 |
fabric三大核心工具
1.根据指定的配置文件生成组织结构及身份证书的工具。
fabric-samples/bin/cryptogen
2.配置交易的一个工具,主要生成三种配置文件:
1)生成orderer初始区块
2)生成应用通道交易配置文件
3)锚节点更新配置文件
fabric-samples/bin/cryptogen/configtxgen
3.在正在运行的网络联盟链中添加一个新的组织
fabric-samples/bin/cryptogen/configtxlator
网络环境的启动
自动化脚本byfn.sh
fabric提供了一个脚本来自动初始化并启动网络
// 查看脚本命令使用方法
./byfn.sh --help
// 1.生成相应的组织结构和身份证书,orderer初始区块配置文件,应用通道交易配置文件,锚节点更新配置文件
./byfn.sh generate
// 2.启动网络
./byfn.sh up
// 2.关闭网络
./byfn.sh down
手动启动网络
1.生成相应的组织结构和身份证书
我们知道可以借助cryptogen工具来生成相应的组织结构和身份证书。
// 显示默认的配置文件模板
../bin/cryptogen showtemplate
我们查看默认的配置文件模板,主要内容有:
// Orderer组织节点的定义
OrdererOrgs:
- Name: Orderer
Domain: example.com
Specs:
- Hostname: orderer
// 对等组织节点的定义
PeerOrgs:
// 组织1
- Name: Org1
Domain: org1.example.com
EnableNodeOUs: false
Template:
// 节点数
Count: 1
Users:
// 用户数
Count: 1
// 组织2
- Name: Org2
Domain: org2.example.com
EnableNodeOUs: false
Template:
Count: 1
Users:
Count: 1
我们需要修改该配置文件,来自定义实现我们的组织结构。由于网络是在first-network目录下启动网络的,我们发现该目录下的crypto-config.yaml内容和上面默认配置文件相同。因此,我们可以通过修改并指定该文件为配置文件来实现目的。
假设我们在默认基础上新增两个组织:组织3和组织4,其组织结构与组织2相同
// 编辑配置文件
vi vi crypto-config.yaml
// i
// 末尾添加
- Name: Org3
Domain: org3.example.com
EnableNodeOUs: false
Template:
Count: 1
Users:
Count: 1
- Name: Org4
Domain: org4.example.com
EnableNodeOUs: false
Template:
Count: 1
Users:
Count: 1
// esc,:,wq!
然后指定该文件为配置文件生成组织结构。
➜ first-network git:(1745c99) ✗ ../bin/cryptogen generate --config crypto-config.yaml
org1.example.com
org2.example.com
org3.example.com
org4.example.com
这里,特别注意在编辑crypto-config.yaml文件时一定不要使用tab键缩进,必须用空格键。否则会报错:
➜ first-network git:(1745c99) ✗ ../bin/cryptogen generate --config crypto-config.yaml
Error reading config: Error Unmarshaling YAML: yaml: line 95: found a tab character that violates indentation%
2.生成orserer创世区块
使用configtxgen工具,同样使用--help命令查看工具使用方法。
../bin/configtxgen --help
-chanelID 指定的通道ID(必须指定)
-profile (TwoOrgsOrdererGenesis)configtx.yaml配置文件profiles
-outputBlock 输出的区块地址,一般在channel-artifacts目录下
完整的命令:
// 生成创世区块
../bin/configtxgen -profile TwoOrgsOrdererGenesis -channelID mychannel -outputBlock ./channel-artifacts/genesis.block
// 查看发现生成成功
➜ first-network git:(1745c99) ✗ ll ./channel-artifacts
total 32
-rw-r--r-- 1 chaors staff 12K 7 24 23:50 genesis.block
3.生成应用通道配置文件
依旧使用configtxgen工具。
// 生成应用通道配置文件
../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychanne
// 查看生成的文件
➜ first-network git:(1745c99) ✗ ll ./channel-artifacts
total 40
-rw-r--r-- 1 chaors staff 346B 7 25 00:05 channel.tx
-rw-r--r-- 1 chaors staff 12K 7 24 23:50 genesis.block
4.生成锚节点更新配置文件
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/org1MSPanchors.tx -channelID mychannel
➜ first-network git:(1745c99) ✗ ll ./channel-artifacts
total 48
-rw-r--r-- 1 chaors staff 346B 7 25 00:05 channel.tx
-rw-r--r-- 1 chaors staff 12K 7 24 23:50 genesis.block
-rw-r--r-- 1 chaors staff 284B 7 25 00:12 org1MSPanchors.tx
5.启动网络
这里需要使用docker-compose工具。
// -f:启动网络时的配置文件,它描述了应该有哪些容器被启动
// -d:不显示详细的启动过程
// up:启动网络
docker-compose -f docker-compose-cli.yaml up -d
// 关闭网络
docker-compose -f docker-compose-cli.yaml down
.
.
.
.
互联网颠覆世界,区块链颠覆互联网!
---------------------------------------------20180725 20:21