Hyperledger Fabric V1.0 开发者快速入门.md

# Hyperledger Fabric V1.0– 开发者快速入门

本文档演示使用Hyperledger Fabric V1.0来部署一个开发者环境并运行一个简单例子。文档包括创建和加入通道(账本)、客户端认证以及部署和调用智能合约。CLI将用于创建和加入通道(账本),NodeJS SDK将用于客户端身份验证和使用账本的智能合约功能。

Docker Compose将用于创建包含三个Peer节点的联盟链、一个独立的Orderer和一个证书颁发机构(CA)。为了加快部署进度,预先生成了基于标准PKI实现的加密要素并打包进fabpre.tar.gz。证书颁发机构(CA)负责签发、撤销和维护代表一个企业的加密要素,这些要素提供给客户端(Node SDK)用于身份认证。

Fabric网络将通过执行docker-compose自动生成,创建通道和加入通道的API将会自动被调用;同时,开发者也可以通过手动步骤生成自己的Fabric网络和通道(账本)或直接使用开发者模式进行应用开发。

****

### 前提条件和系统配置

-**Docker** - v1.12 及更高版本

-**Docker Compose** - v1.8 及更高版本

-**Node.js** - v2.1.8 及更高版本

nodejs带有节点的包管理(NPM)。如果你的机器上已经安装了NPM,可以发出以下命令来获取新的软件包:

```Python

npm install npm@latest

```

查看npm安装的版本:

```Python

npm -v

```

如图:![这里写图片描述](http://img.blog.csdn.net/20170213113535347?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpYW5nMTEzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

查看docker安装的版本:

```Python

docker -v

```

如图:![这里写图片描述](http://img.blog.csdn.net/20170213113451565?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpYW5nMTEzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

查看docker-compose安装的版本:

```Python

docker-compose -v

```

如图:![这里写图片描述](http://img.blog.csdn.net/20170213113708334?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpYW5nMTEzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

查看nodejs安装的版本:

```Python

node -v

```

如图:![这里写图片描述](http://img.blog.csdn.net/20170213113936744?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb2xpYW5nMTEzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

**安装docker、docker-compose、python-pip、nodejs、npm都不一一安装了,如果不会安装的,可以看下我的前一篇博文。**

****

### 一、下载源代码和创建网络

- 如果没有安装Curl,请先下载并安装 Curl 工具

```python

yum install curl

```

- 创建 Fabric 工程和项目目录

```

mkdir -p  testone

```

- 进入项目目录

```

cd testone

```

然后, 执行如下代码:

```

curl -L https://raw.githubusercontent.com/hyperledger/fabric/master/examples/sfhackfest/sfhackfest.tar.gz -o sfhackfest.tar.gz 2> /dev/null;  tar -xvf sfhackfest.tar.gz

```

执行完这条命令,会下载并解压缩部署Fabric网络的相关组件 ,包括Docker Compose 脚本, 通道创建/加入脚本, 认证使用的加密要素等,在/ src / github.com/example_cc目录你可以将链码部署。

这时你的目录里的内容应该是这样的

```

sfhackfest.tar.gz   channel_test.sh   src

ccenv     docker-compose-gettingstarted.yml  tmp

```

### 二、使用docker

你不需要手工拖取Docker镜像,通过执行docker-compose命令, fabric-peer, fabric-orderer, fabric-ca和 cli 都会自动下载、解压缩相关的镜像。

### 三、命令

通道相关的命令:

- **create**   –在 orderer上创建并命名一个通道,返回一个通道的创世区块,生成的创世块以通道的名字命名;

- **join**  – 使用 create 命令生成的创世区块,向Peer节点发出加入通道的请求。

### 四、使用Docker 创建Fabric网络 & 创建/加入通道

(1)确保 hyperledger/fabric-ccenv 镜像的标签是 latest,执行以下命令:

```

docker-compose -f docker-compose-gettingstarted.yml build

```

(2)创建Fabric网络 ,创建通道(账本), 将Peer节点加入通道,执行命令如下:

```

docker-compose -f docker-compose-gettingstarted.yml up -d

```

(3)查看你的容器,命令如下:

```

docker ps -a

```

终端应该显示有6个独立运行的容器(3 个peer节点, 1个 独立的 orderer, CLI 和 CA). 嵌入在docker-compose.yml里的channel_test.sh会在CLI容器里执行创建通道和加入通道命令。执行结束,应该只有一个Fabric网络和一个通道(账本),通道包含三个节点peer0,Peer1,Peer2。

(4)确保已创建通道,并已成功连接节点:

```

docker exec -it cli bash

```

(5)查看通道创建/节点加入的结果:

```

more results.txt

```

显示的结果如下:

```

SUCCESSFUL CHANNEL CREATION

SUCCESSFUL JOIN CHANNEL on PEER0

SUCCESSFUL JOIN CHANNEL on PEER1

SUCCESSFUL JOIN CHANNEL on PEER2

```

(6)验证成功创建了创世块,执行如下命令:

```

more myc1.block

```

(7)退出容器

```

exit

```

****

### 五、下载应用程序源代码和SDK模块

- 在发出命令之前,确保你在工作的目录中,已经下载好代码。确保你已经退出了CLI的容器。

- 执行以下命令:

```

curl -OOOOOO https://raw.githubusercontent.com/hyperledger/fabric-sdk-node/master/examples/balance-transfer/{config.json,deploy.js,helper.js,invoke.js,query.js,package.json}

```

这条命令会下载用于部署、调用和查询案例,智能合约的 javascript 代码 ,同时,它也包含了node SDK 依赖的模块

- 安装node模块

```

npm install

```

现在你已经拥有了全部Fabric网络运行需要的组件.

### 六、使用 node SDK 注册/登录一个用户并执行部署/调用/查询操作

这个案例程序将通过Node SDK &APIs以及预先准备的CA认证所需的加密要素来实现客户端的登记、注册和登录。一旦客户端完成身份验证,就可以执行程序包含的智能合约功能(部署、调用、查询)。

在每个节点程序成功后,你将在终端接收到“200”响应。

(1)注册/登录 & 部署智能合约 (Linux or OSX):

```

GOPATH=$PWD node deploy.js

```

(2)执行一个调用操作, 从 “a” 转移一定资产到 “b”:

```

node invoke.js

```

(3)查询键值 “b”:

```

node query.js

```

你可以浏览NodeJS SDK 和APIs的文档来实现更多功能。

****

### 七、手动创建和加入通道

使用CLI容器手动执行创建通道和加入通道API。

通道myc1已经存在,所以,让我们创建一个新的通道,命名为myc2。

(1)进入cli容器:

```

docker exec -it cli sh

```

(2)如果成功,您应该在您的终端看到以下:

```

/opt/gopath/src/github.com/hyperledger/fabric/peer #

```

(3)发送createChannel API 给 Orderer:

```

CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer channel create -c myc2

```

(4)发送joinchannel API 给 Peer0:

- CreateChannel执行完毕将返回一个创世区块(myc2.block),然后你可以执行加入通道的指令,把Genesis block作为参数发送joinchannel API给 peer0。

通道的定义都保存在创世块内:

```

CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer0:7051 peer channel join -b myc2.block

```

(5)如果想要加入其它节点,只需重新发送上述命令给peer1或Peer2即可

```

CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer1:7051 peer channel join -b myc2.block

```

一旦全部Peer节点都加入了通道,你可以查询账本而无需在每个节点都部署智能合约。

### 八、使用CLI命令,部署,调用和查询智能合约

(1)运行部署命令:这个命令是在通道myc2上的Peer节点0上部署一个名叫MYCC的智能合约。构造函数把A和B的值分别初始化为100和200

```

CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode deploy -C myc2 -n mycc -p github.com/hyperledger/fabric/examples -c '{"Args":["init","a","100","b","200"]}'

```

(2)运行调用命令:这个命令是从A移动10个单位到B

```

CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode invoke -C myc2 -n mycc -c '{"function":"invoke","Args":["move","a","b","10"]}'

```

(3)运行查询命令:按照预期,查询a的返回值应该是90

```

CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode query -C myc2 -n mycc -c '{"function":"invoke","Args":["query","a"]}'

```

你可以在任何时间发出exit命令退出CLI容器。

### 九、常用docker命令:

1)删除一个容器

```

docker rm

```

2)强制删除一个容器

```

docker rm -f

```

3)强制删除全部容器

```

docker rm -f $(docker ps -aq)

```

4)删除一个镜像:

```

docker rmi

```

5)强制删除一个镜像:

```

docker rmi -f

```

6)强制删除全部镜像

```

docker rmi -f $(docker images -q)

```

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

推荐阅读更多精彩内容