文档章节

centos7环境下的安装与部署Hyperledger fablic 0.6

PanDongDong
 PanDongDong
发布于 2017/04/28 14:12
字数 1564
阅读 89
收藏 1

Hyperledger Fabric超级账本

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

一、安装docker

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

 

二、安装docker-compose

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

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

 下面开始安装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
chmod +x /usr/local/bin/docker-compose
  • 2.查看安装情况:

 

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

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

重启docker服务:

sudo service docker restart

三、下载镜像

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
  • 下载完成后,查看下载镜像

 

四、安装git

1.安装依赖包:

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

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

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

3.编译安装:

make prefix=/usr/local/git all
sudo make prefix=/usr/local/git install

4.修改环境变量:

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

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

source /etc/profile

6.查看版本

git version 

五、使用PBFT模式

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

  • 1.首先,下载 Compose 模板文件。
git clone https://github.com/yeasy/docker-compose-files
  • 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

 六、开始部署chaincode

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

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

 

  • 记录到环境变量 CC_ID 中。
CC_ID="ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539" -u jim

 

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

 

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

 

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

 

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

七、权限管理

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

docker exec -it pbft_vp0_1 bash

用内置jim账户登录

peer network login jim

内置密码为:

6avZQLwcUe9b

登录情况如下图:

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

  • 首先部署交易资产

 

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

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

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

name:"ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539" 

把name值 赋给变量 CC_ID

CC_ID=ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539

查询下赋值结果:

echo ${CC_ID}

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

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

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

查下b的值:

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

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

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

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

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

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

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

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

CC_ID=ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539

用这个CC_ID来做查询

POST  HOST:7050/chaincode

Request:

{
  "jsonrpc": "2.0",
  "method": "query",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539"
      },
      "ctorMsg": {
         "function":"query",
         "args":["a"]
      },
    "secureContext": "jim"
  },
  "id": 3
}

查询a的值为:

Request:

{
  "jsonrpc": "2.0",
  "method": "query",
  "params": {
      "type": 1,
      "chaincodeID":{
          "name":"ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539"
      },
      "ctorMsg": {
         "function":"query",
         "args":["b"]
      },
    "secureContext": "jim"
  },
  "id": 3
}

查询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
}

如图:

 

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

b的值为180

下面查询以下区块信息:

GET  HOST:7050/chain/blocks/2
{
  "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": [
      {}
    ]
  }
}

如图:

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

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

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

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

HOST:9090

访问正常页面为:

这里写图片描述

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

这里写图片描述

查看交易详情,如下图:

这里写图片描述

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

PS:经过测试、应该先使用jim用户登录之后、在操作区块链数据、操作时还得加上 -u jim参数

本文转载自:http://blog.csdn.net/zhaoliang1131/article/details/54617274

PanDongDong
粉丝 31
博文 35
码字总数 8940
作品 0
贵阳
后端工程师
私信 提问
区块链入门学习网址大全

区块链学习网址 官网: 官网文档: docker入门教程: 区块链技术指南: 超能云区块链: 超能云免费主机: Hyperledger fablic源码: Hyperledger fablic 0.6: Hyperledger fablic 1.0: Hy...

zhaoliang1131
2017/01/24
0
0
Hyperledger fablic 0.6 在centos7环境下的安装与部署

Hyperledger Fabric超级账本 项目约定共同遵守的 基本原则 为:重视模块化设计,包括交易、合同、一致性、身份、存储等技术场景;代码可读性,保障新功能和模块都可以很容易添加和扩展;演化...

zhaoliang1131
2017/01/19
0
0
Hyperledger fablic 1.0 在centos7环境下的安装与部署

Hyperledger Fabric 1.0超级账本 一、安装docker 执行代码如下: 安装完成后,查看安装情况: 二、安装docker-compose 先安装python-pip,具体安装步奏如下: 1.首先安装epel扩展源: 2.然后安...

zhaoliang1131
2017/01/24
0
0
Hyperledger fablic 1.0 在centos7环境下的安装与部署和动态增加节点

Hyperledger fablic 1.0 在centos7环境下的安装与部署和动态增加节点 一、安装docker 执行代码如下: 安装完成后,查看安装情况: 二、安装docker-compose 先安装python-pip,具体安装步奏如下...

zhaoliang1131
2017/02/06
0
0
区块链 Hyperledger - 超级账本项目在centos7环境下的安装与部署

Hyperledger - 超级账本项目在centos7环境下的安装与部署 Hyperledger 项目是开源界面向开放、标准区块链技术的首个重要探索,在 Linux 基金会的支持下,吸引了众多科技和金融巨头的参与。 ...

zhaoliang1131
2017/01/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 年迈渔夫遭黑帮袭抢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享Elvis Presley的单曲《White Christmas》: 《White Christmas》- Elvis Presley 手机党少年们想听歌,请使劲...

小小编辑
今天
1K
17
CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
12
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部