原文:http://blog.csdn.net/zhaoliang1131/article/details/54617274

Hyperledger Fabric超级账本

项目约定共同遵守的 基本原则 为:重视模块化设计,包括交易、合同、一致性、身份、存储等技术场景;代码可读性,保障新功能和模块都可以很容易添加和扩展;演化路线,随着需求的深入和更多的应用场景,不断增加和演化新的项目。


目录


一、安装docker

  • 执行代码如下:
curl -sSL https://get.daocloud.io/docker | sh
  • 1
  • 1
  • 安装完成后,查看安装情况:
docker -v
  • 1
  • 1

二、安装docker-compose

先安装Python-pip,具体安装步奏如下:

  • 1.首先安装epel扩展源:
sudo yum -y install epel-release
  • 1
  • 1
  • 2.然后安装python-pip
sudo yum -y install python-pip
  • 1
  • 1
  • 3.安装完成后,清除以下缓存 cache
sudo yum clean all
  • 1
  • 1

下面开始安装Docker-compose

  • 1.安装docker-compose:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.9.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  • 1
  • 1
chmod +x /usr/local/bin/docker-compose
  • 1
  • 1
  • 2.查看安装情况:

配置以下docker镜像加速,目的是下载镜像速度更快:

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://860eaa91.m.daocloud.io
  • 1
  • 1

重启docker服务:

sudo service docker restart
  • 1
  • 1

三、下载镜像

 docker pull hyperledger/fabric-peer:x86_64-0.6.1-preview \
&& docker pull hyperledger/fabric-membersrvc:x86_64-0.6.1-preview \
&& docker pull yeasy/blockchain-explorer:latest \
&& docker tag hyperledger/fabric-peer:x86_64-0.6.1-preview hyperledger/fabric-peer \
&& docker tag hyperledger/fabric-peer:x86_64-0.6.1-preview hyperledger/fabric-baseimage \
&& docker tag hyperledger/fabric-membersrvc:x86_64-0.6.1-preview hyperledger/fabric-membersrvc
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 下载完成后,查看下载镜像

四、安装git

1.安装依赖包:

sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
  • 1
  • 1

2.下载Git源码并解压安装:

$ wget https://github.com/git/git/archive/v2.3.0.zip
$ unzip v2.3.0.zip
$ cd git-2.3.0
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

3.编译安装:

make prefix=/usr/local/git all
sudo make prefix=/usr/local/git install
  • 1
  • 2
  • 1
  • 2

4.修改环境变量:

sudo vim /etc/profile
然后在文件的最后一行,添加下面的内容,然后保存退出。
export PATH=/usr/local/git/bin:$PATH
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

5.使用source命令立即保存:

source /etc/profile
  • 1
  • 1

6.查看版本

git version 
  • 1
  • 1

五、使用PBFT模式

PBFT 是经典的分布式一致性算法,也是 hyperledger 目前最推荐的算法,该算法至少需要 4 个节点。

  • 1.首先,下载 Compose 模板文件。
git clone https://github.com/yeasy/docker-compose-files
  • 1
  • 1
  • 2.查看下载情况:

  • 3.进入 hyperledger/0.6/pbft 目录,查看包括若干模板文件

以下节点可以快速启动的详细情况: 
4-peers.yml: 启动 4 个 PBFT peer 节点。 
4-peers-with-membersrvc.yml: 启动 4 个 PBFT peer 节点 + 1 个 CA 节点,并启用 CA 功能。 
4-peers-with-explorer.yml: 启动 4 个 PBFT peer 节点 + 1 个 Blockchain-explorer,可以通过 Web 界面监控集群状态。 
4-peers-with-membersrvc-explorer.yml: 启动 4 个 PBFT peer 节点 + 1 个 CA 节点 + 1 个 Blockchain-explorer,并启用 CA 功能。

  • 4.快速启动一个 4 个 PBFT 节点+1 个 CA 节点 + 1 个 Blockchain-explorer,并启用 CA 功能的集群:
docker-compose -f 4-peers-with-membersrvc-explorer.yml up
  • 1
  • 1

六、开始部署chaincode

  • 集群启动后,进入一个 VP 节点。以 pbft 模式为例,节点名称为 pbft_vp0_1
docker exec -it pbft_vp0_1 bash
  • 1
  • 1

  • 部署example02
 peer chaincode deploy -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Function":"init", "Args": ["a","100", "b", "200"]}'
  • 1
  • 1

  • 记录到环境变量 CC_ID 中。
CC_ID="ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539"
  • 1
  • 1

  • 查询 chaincode
peer chaincode query -n ${CC_ID} -c '{"Function": "query", "Args": ["a"]}'
  • 1
  • 1

  • 调用 chaincode
peer chaincode invoke -n ${CC_ID} -c '{"Function": "invoke", "Args": ["a", "b", "10"]}'
  • 1
  • 1

  • 再次查询a的值
peer chaincode query -n ${CC_ID} -c '{"Function": "query", "Args": ["a"]}'
  • 1
  • 1

 
到此已经完成超级账本的 转账的实例,每转一次,都会记录一个块。

七、权限管理

当启用了权限管理后,首先需要登录,例如以内置账户 jim 账户登录。 
登录 vp0,并执行登录命令。

docker exec -it pbft_vp0_1 bash
  • 1
  • 1

用内置jim账户登录

peer network login jim
  • 1
  • 1

内置密码为:

6avZQLwcUe9b
  • 1
  • 1

登录情况如下图:

登录成功后,以下为具体操作。

  • 首先部署交易资产
peer chaincode deploy -u jim -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Function":"init", "Args": ["a","100", "b", "200"]}'
  • 1
  • 1

说明:部署时给a,b各初始值100 200

部署之后会产生一个name 值为:

name:"ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539" 
  • 1
  • 1

把name值 赋给变量 CC_ID

CC_ID=ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539
  • 1
  • 1

查询下赋值结果:

echo ${CC_ID}
  • 1
  • 1

重要说明:部署成功后,会创建docker容器,创建docker容器会有延迟,所以有时查询不出来,等创建好了,在查询就可以啦。 
可以看到创建了很多容器,如下图:

下面咱们来执行查询操作试试,查下a的值:

peer chaincode query -u jim -n ${CC_ID} -c '{"Function": "query", "Args": ["a"]}'
  • 1
  • 1

查下b的值:

peer chaincode query -u jim -n ${CC_ID} -c '{"Function": "query", "Args": ["b"]}'
  • 1
  • 1

下面咱们来执行下 转账操作: 
如:a向b转账10元

peer chaincode invoke -u jim -n ${CC_ID} -c '{"Function": "invoke", "Args": ["a", "b", "10"]}'
  • 1
  • 1

转账成功后,咱们来执行下查询 a和b的值是多少:

peer chaincode query -u jim -n ${CC_ID} -c '{"Function": "query", "Args": ["b"]}'
  • 1
  • 1

peer chaincode query -u jim -n ${CC_ID} -c '{"Function": "query", "Args": ["a"]}'
  • 1
  • 1

权限管理能正确 转账查询。

下面使用REST方式咱们来执行下查询:

CC_ID=ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539
  • 1
  • 1

用这个CC_ID来做查询

POST  HOST:7050/chaincode
  • 1
  • 1

Request:

{
"jsonrpc": "2.0",
"method": "query",
"params": {
"type": 1,
"chaincodeID":{
"name":"ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539"
},
"ctorMsg": {
"function":"query",
"args":["a"]
},
"secureContext": "jim"
},
"id": 3
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

查询a的值为:

Request:

{
"jsonrpc": "2.0",
"method": "query",
"params": {
"type": 1,
"chaincodeID":{
"name":"ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539"
},
"ctorMsg": {
"function":"query",
"args":["b"]
},
"secureContext": "jim"
},
"id": 3
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

查询b的值为:

这时,a是145,b是155

  • 下面再执行以下 a向b转账35
{
"jsonrpc": "2.0",
"method": "invoke",
"params": {
"type": 1,
"chaincodeID":{
"name":"ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539"
},
"ctorMsg": {
"function":"invoke",
"args":["a","b","35"]
},
"secureContext": "jim"
},
"id": 3
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

如图:

下面执行 查询 a,和 b的值,请求参数 如上,直接上图啦。 
a的值为 120

b的值为180

下面查询以下区块信息:

GET  HOST:7050/chain/blocks/2
  • 1
  • 1

Response:

{
"transactions": [
{
"type": 2,
"chaincodeID": "EoABNzhjYTMyZmMxMjlmMDExMjllMDEwYzM3YTc4ZDU2ODhiODEyNjY1NWI5NDU2MTNkMjFiMmM2MGJjYjNlMTFkYTFjZGViYTljMjM1NjNjMzhmYTQ3MTc3YWYwZGU2ZTNkOTRmNjc4MWQzMDlhMzBlN2QxOTBhNjU1NWU3YWU0ZWY=",
"payload": "Cp0BCAESgwESgAE3OGNhMzJmYzEyOWYwMTEyOWUwMTBjMzdhNzhkNTY4OGI4MTI2NjU1Yjk0NTYxM2QyMWIyYzYwYmNiM2UxMWRhMWNkZWJhOWMyMzU2M2MzOGZhNDcxNzdhZjBkZTZlM2Q5NGY2NzgxZDMwOWEzMGU3ZDE5MGE2NTU1ZTdhZTRlZhoTCgZpbnZva2UKAWEKAWIKAzEwMA==",
"txid": "8616608f-9762-44cc-bc09-ef93b88eb770",
"timestamp": {
"seconds": 1484792805,
"nanos": 467224609
},
"nonce": "QTKtub7Nu/JJFXV5LhjcDYsxIViB27YF",
"cert": "MIICQTCCAeegAwIBAgIQW9A+u+4IT7CRRcHJPxU1ZjAKBggqhkjOPQQDAzAxMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLSHlwZXJsZWRnZXIxDDAKBgNVBAMTA3RjYTAeFw0xNzAxMTkwMjI0MjBaFw0xNzA0MTkwMjI0MjBaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKEwtIeXBlcmxlZGdlcjEgMB4GA1UEAxMXVHJhbnNhY3Rpb24gQ2VydGlmaWNhdGUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQylvGqiwlIwjfef1J0o+2lBPEs0PQc90mooN/iQeJesX3Gw7hvX51NQ0R9Azhs3HzqwDT6/0oUJ5881BGCGufjo4HMMIHJMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMA0GA1UdDgQGBAQBAgMEMA8GA1UdIwQIMAaABAECAwQwTQYGKgMEBQYHAQH/BEArLNyVnxK3ZTvPvUStqnu90Soz7fkorQD0znFSKd32vwi8nVzKPLKuziDfULFQskeHV7UAVL28xjKPXjpa4tOUMDoGBioDBAUGCAQwdCe6zf7KXUkQavqTErscZyXjnx3YI1QbmuNIiYXptTkzhPCI+tKPa5nMxwlBbqbNMAoGCCqGSM49BAMDA0gAMEUCIQC/tJPRxcPq4l4F3hWoLT6OWO5f1A9HG1aPyurduM4oowIgbTibDjL98J7Dt7fw3TBCMVBSDska9FwlddqdSE/3bWA=",
"signature": "MEUCIQCTxcHIu3kL5AuTOS11tnV4wp35pDtdQ7QCfXMr9txPBAIgH64AARCnRinLNN7V69ha75sdVqOKn/OPKYDWHxofsFM="
}
],
"stateHash": "zHYqtOW0tZ9g1jbfaWgXB9udEETDocwet6HcsonKEJ9ncYZaCjLNAJS4Fao9W6AQR6FOkZR7FR7bvmocjtF00w==",
"previousBlockHash": "Q3b82oFuJu0God7J4QGllDlAA4iW7cwu2yg6/oNnNQCAwYJXs/4WFgKXo75FGfdmvmeDputIQMdjc4vmrvkw8w==",
"consensusMetadata": "CAI=",
"nonHashData": {
"localLedgerCommitTimestamp": {
"seconds": 1484794929,
"nanos": 31349065
},
"chaincodeEvents": [
{}
]
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

如图:

到这里 REST请求完成。以上是权限管理的具体操作。

八、超级账本资源管理页面

下面我们来看下节点的端口,如下图:

这时我们在谷歌浏览器里就可以访问啦,

HOST:9090
  • 1
  • 1

访问正常页面为:

查询的具体的信息,如下图:

查看交易详情,如下图:

到此,整个Hyperledger Fabric超级账本环境已经部署完成。

Hyperledger fablic 0.6 在centos7环境下的安装与部署的更多相关文章

  1. Hyperledger fablic 1.0 在centos7环境下的安装与部署和动态增加节点

    Hyperledger fablic 1.0 在centos7环境下的安装与部署和动态增加节点 一.安装docker 执行代码如下: curl -sSL https://get.daocloud.io ...

  2. Redis在linux环境下的安装和部署

    官网:http://redis.io          windows版本下载地址https://github.com/MicrosoftArchive/redis/releases 1Redis建议 ...

  3. Centos7环境下FastRunner前端(FasterWeb)部署

    FastRunner前端安装 1.安装和创建Python虚拟环境 安装virtualenvwrapper 2.拉取代码 cd ~ # 环境当前用户home目录 git clone git@github ...

  4. Docker基础:VMware虚拟机Centos7环境下docker安装及使用

    1.docker简介 2.docker安装 3.卸载docker 4.阿里云镜像加速 5.docker的常用命令 5.1 帮助命令 5.2 镜像命令 5.3 容器命令 5.4 后台启动命令 5.5 查 ...

  5. centos7环境下在线安装mysql

    卸载mariadb centos默认安装了mariadb,因此,在安装mysql之前,需要卸载系统中安装的mariadb. 查看系统中所有已安装的mariadb包.命令:rpm -qa | grep ...

  6. centos7环境下mysql安装

    1.去官网下载合适的yum源安装包 https://dev.mysql.com/downloads/repo/yum/ 2.yum 本地安装 命令:yum localinstall mysql57-c ...

  7. Centos 6.8环境下OpenLDAP安装与部署

    一.OpenLDAP介绍 LDAP 全称轻量级目录访问协议(英文:Lightweight Directory Access Protocol),是一个运行在 TCP/IP 上的目录访问协议.LDAP实 ...

  8. 在ConoHa上Centos7环境下源码安装部署LNMP

    本文记录了从源码,在Centos 7上手动部署LNMP环境的过程,为了方便以后对nginx和mariadb进行升级,这里采用yum的方式进行安装. 1.建立运行网站和数据库的用户和组 groupadd ...

  9. centos7.6环境下编译安装tengine-2.2.2的编译安装

    centos7.6环境下编译安装tengine-2.2.2的编译安装 .获取tengine2..2的源码包 http://tengine.taobao.org/download/tengine-2.2 ...

随机推荐

  1. android菜鸟学习笔记24----与服务器端交互(一)使用HttpURLConnection和HttpClient请求服务端数据

    主要是基于HTTP协议与服务端进行交互. 涉及到的类和接口有:URL.HttpURLConnection.HttpClient等 URL: 使用一个String类型的url构造一个URL对象,如: U ...

  2. Asp.Net mvc4 项目 在vs中调试正常 在IIS发布后连接oracle数据库时提示数据库连接关闭

    解决办法: 1.打开iis,找到发布的程序 2.右键单击“TAKANAPP” 从右键菜单选择“管理应用程序”--“高级设置....” 在打开的高级设置  面板 查看对应的应用程序池 名称 3.设置应用 ...

  3. 九度OJ 1252:回文子串 (字符串处理、DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:387 解决:224 题目描述: 输入一个字符串,输出该字符串中对称的子字符串的最大长度. 比如输入字符串"google" ...

  4. Redis通过PUBLISH / SUBSCRIBE 等命令实现了订阅与发布模式

    # 切换目录 [root@localhost /]# cd /opt/redis-4.0.10 # 启动客户端 -p 指定端口 [root@localhost ~]# redis-cli -p 638 ...

  5. php函数指定默认值的方法

    发布:JB02   来源:脚本学堂     [大 中 小] 本文介绍下,在php编程中,指定函数的默认值的方法,分享二个例子,供大家学习参考下.本文转自:http://www.jbxue.com/ar ...

  6. #!/usr/bin/python和#!/usr/bin/env 的区别(转)

    #!/usr/bin/python和#!/usr/bin/env 的区别   #!/usr/bin/python 通常在一个.py文件开头都会有这个语句 它只在Linux系统下生效,意思是当作为可执行 ...

  7. 简介windows的环境变量

    环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,比如临时文件夹位置和系统文件夹位置等.这点有点类似于DOS时期的默认路径,当你运行某些程序时除了在当前文件夹中寻找外,还会到设置的默认路 ...

  8. zabbix实现mysql数据库的监控(三)

    上面一章“zabbix实现mysql数据库的监控(二)”使用MPM来监控mysql,但是遇到安装问题始终解决不了,这里改用percona-monitoring-plugins进行zabbxi上监控my ...

  9. 初步了解Spark生态系统及Spark Streaming

    一.        场景 ◆ Spark[4]: Scope:  a MapReduce-like cluster computing framework designed for low-laten ...

  10. 常用JQuery设置HTML元素内容

    主要内容: 一.获取内容及属性 二.设置内容及属性 三.添加元素 四.删除元素 五.css()方法 六.寻找祖先及后代 一.获取内容及属性 二.设置内容及属性 相对于获取内容及属性的方式,只需在函数内 ...