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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容