Hyperledger -超级账本 学习报告

本文详细介绍Hyperledger Fabric的安装部署过程及实际操作步骤,包括使用CLI和REST API进行链码部署、调用和查询的方法。

Hyperledger -超级账本 学习报告

 

一、什么是区块链?

 

区块链的基本原理,基本组件包括:

交易:对账本状态的改变;

区块:记录交易和状态,是对当前账本状态的一次确认;

链:状态变化的日志记录。

把区块链作为一个状态机,则每次交易就是试图改变一次状态,每次生成区块就是参与者对于其中包括的所有交易改变状态的结果确认。

 

目前区块链的三种发展项目:

 

分类:

公开(public):任何人都可以参与使用和维护,典型的如比特币区块链,信息是完全公开的

 

引入许可机制后,产生私有(private)链和联盟链(consortium),

私有链:集中管理者进行限制,只能得到内部少数人可以使用,信息不公开。

联盟链:介于公开链和私有链之间,由若干组织一起合作维护一条区块链,该区块链的使用必须是有权限的管理,相关信息会得到保护,典型如银联组织。

 

 

二、什么是hyperledger

2015 年 12 月,Linux 基金 会牵头,联合 30 家初始成员共同 宣告 了Hyperledger 项目的成立。

该项目的出现,实际上宣布区块链技术已经不单纯是一个开源技术了,已经正式被主流机构和市场认可;同时,Hyperledger 首次提出和实现的完备权限管理、创新的一致性算法和可拔插的框架,对于区块链相关技术和产业的发展都将产生深远的影响。

 

目前有fabric和sawtooth Lake两个子项目。

fabric:包括 fabric 和 fabric-api,目标是区块链的基础核心平台,支持 pbft 等新的共识机制,支持权限管理,最早由 IBM 和 DAH 发起。

sawtooth Lake:包括 arcade、core、dev-tools、validator、mktplace 等。是 Intel 主要贡献和主导的区块链平台,支持全新的共识机制 Proof of Elapsed Time(PoET)。

 

 

三、hyperledger fabric 项目的安装部署。

 

系统:Linux最新版,eg.ubuntu16.04就可以 ,官网可下。

①安装docker

ubuntu 高级版本自带安装包,执行命令

# apt-get -y install docker.io

#sudo docker version  //查看版本

 

②安装docker-compose

首先,安装 pip

# sudo aptitude install python-pip

安装 docker-compose

# sudo pip install docker-compose

 

③下载相关docker镜像,并进行配置。镜像地址https://hub.docker.com/r/yeasy/hyperledger

当然也可以到Github官方下载。

# docker pull yeasy/hyperledger:latest

# docker tag yeasy/hyperledger:latest hyperledger/fabric-baseimage:latest

# docker pull yeasy/hyperledger-peer:latest

# docker pull yeasy/hyperledger-membersrvc:latest

 

④使用 PBFT 模式

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

首先,下载 compose 文件。

#  git clone https://github.com/yeasy/docker-compose-files

此时目录下多了一个docker-compose-files文件夹。

 

 

(1)采用CLI测试

手动启动docker-daemon

#service docker stop

#sudo docker daemon --api-cors-header="*" -H tcp://0.0.0.0:2375 -H unix:///var/run/do

cker.sock

进入 hyperledger 项目,启动集群。

# cd docker-compose-files/hyperledger

# docker-compose up

此时生成四个节点,vp0,vp1,vp2,vp3

进入节点vp0

#docker exec -it vp0 bash

部署两个账户a,b分别分配100200.

#peer chaincode deploy -p github.com/hyperledger/fabric/examples/chaincode/go/

chaincode_example02 -c '{"Function":"init", "Args": ["a","100", "b", "200"]}'

 

返回CORE_CHAINCODE_ID_NAME(一串地址)

以如下形式:

a5389f7dfb9efae379900a41db1503fea2199fe400272b61ac5fe7bd0c6b97cf10ce3aa8dd00cd7626ce02f18accc7e5f2059dae6eb0786838042958352b89fb

 

查询账户余额

#peer chaincode query -n CORE_CHAINCODE_ID_NAME -c '{"Function": "query", "Args": ["a"]}'

应当返回100

进行交易

peer chaincode invoke -n CORE_CHAINCODE_ID_NAME -c '{"Function": "invoke", "Args": ["a", "b", "10"]}'

交易进行后 a减少10,b增加10

可再次查询验证交易结果。

 

(2)Post rest测试

 

注:POST测试可采用postman谷歌浏览器插件或各种在线POST工具进行,此处将采用curl工具,在Linux窗口进行POST操作。

 

手动启动docker-daemon

#service docker stop

#sudo docker daemon --api-cors-header="*" -H tcp://0.0.0.0:2375 -H unix:///var/run/do

cker.sock

打开hyperledger项目,启动pbft集群,生成节点

#docker-compose -f docker-compose-with-membersrvc.yml up

1、进行Rest 测试,登录用户Jim

#curl -H "Content-Type: application/json" -X  POST  --data '{"enrollId": "jim","enrollSecret": "6avZQLwcUe9b"}'  http://localhost:5000/registrar

显示如下

 

2、chaincode部署

curl -H "Content-Type: application/json" -X  POST  --data '{

"jsonrpc": "2.0",

"method": "deploy",

"params": {

"type": 1,

"chaincodeID":{

"path":"github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02"

},

"ctorMsg": {

"function":"init",

"args":["a", "1000", "b", "2000"]

},

"secureContext": "jim"

},

"id": 1

}'  http://localhost:5000/chaincode

Response如下

{

"jsonrpc": "2.0",

"result": {

"status": "OK",

"message": "28bb2b2316171a706bb2810ec35d095f430877bf443f1061ef0f60bbe753ed440700a

5312c16390d3b30199fe9465c3b75d5944358caae01ca81ef28128a1bfb"

},

"id": 1

}

3、chaincode调用

转账,invoke调用

#curl -H "Content-Type: application/json" -X  POST  --data '{

"jsonrpc": "2.0",

"method": "invoke",

"params": {

"type": 1,

"chaincodeID":{

"name":"28bb2b2316171a706bb2810ec35d095f430877bf443f1061ef0f60bbe753ed440700

a5312c16390d3b30199fe9465c3b75d5944358caae01ca81ef28128a1bfb"

},

"ctorMsg": {

"function":"invoke",

"args":["a", "b", "100"]

},

"secureContext": "jim"

},

"id": 3

}'  http://localhost:5000/chaincode

 

Response如下:

{

"jsonrpc": "2.0",

"result": {

"status": "OK",

"message": "509b7500-96da-4411-8464-e24c61d5477d"

},

"id": 3

}

3、chaincode查询

调用query

curl -H "Content-Type: application/json" -X  POST  --data '{

"jsonrpc": "2.0",

"method": "query",

"params": {

"type": 1,

"chaincodeID":{

"name":"28bb2b2316171a706bb2810ec35d095f430877bf443f1061ef0f60bbe753ed440700a5312c16390d3b30199fe9465c3b75d5944358caae01ca81ef28128a1bfb"

},

"ctorMsg": {

"function":"query",

"args":["a"]

},

"secureContext": "jim"

},

"id": 5

}'  http://localhost:5000/chaincode

返回

 

4、区块信息查询

URL

GET localhost:5000/chain/blocks/2

#curl  http://localhost:5000/chain/blocks/2

 

 

(3)python客户端交互

利用Python客户端与hyperledger进行交互

1、安装python

#pip install hyperledger --upgrade

2、进入python客户端

#python

>>>from hyperledger.client import Client

>>>c = Client(base_url="http://localhost:5000")    

>>>c.peer_list()//返回区块链节点组成的网络信息

返回如下:

 

>>> c.block_get('2')   //获取区块信息

>>>c.chain_list()   //获取当前blockchain状态

>>>

具体API使用见 https://github.com/yeasy/hyperledger-py/blob/master/docs/api.md

 


 Hyperledger超级账本)是区块链行业中最大的项目之一,它由一组开源工具和多个子项目组成。该项目是由 Linux 基金会主办的一个全球协作项目,其中包括一些不同领域的LEADER们,这些leader的目标是建立一个强大的、业务驱动的区块链框架。 区块链网络主要有三种类型:公共区块链、联盟或联合区块链,以及私有区块链。Hyperledger 是一个区块链框架,旨在帮助公司建立私人或联盟许可的区块链网络,在该网络中,多个组织可以共享控制和操作网络内节点的权限。 因为区块链是一个透明的,基于不可变模式的安全的去中心化系统,所以它被认为是传统的供应链行业改变游戏规则的一种解决方案。它可以通过以下方式支持有效的供应链系统: 跟踪整个区块链中的产品 校验和验证区块链中的产品 在供应链参与者之间共享整个区块链的信息 提供可审核性 本文通过食品供应链的例子来解释 Hyperledger 区块链是如何改变传统供应链系统的。 食品行业供应链 传统供应链效率低下的主要原因是由于缺乏透明度而导致报告不可靠和竞争上的劣势。 在传统的供应链模式中,有关实体的信息对该区块链中的其他人来说并不完全透明,这就导致了不准确的报告和缺乏互操作性问题。电子邮件和印刷文档提供了一些信息,但它们不可能包含完整详细的可见性数据,因为很难在整个供应链中去追踪产品。这也使消费者几乎不可能知道产品的真正价值和来源。 食品行业的供应链环境复杂,多个参与者需要协作将货物运送到最终目的地 —— 客户手中。下图显示了食品供应链(多级)网络中的主要参与者。  典型的食品供应链 该区块链的每个阶段都会引入潜在的安全问题、整合问题和其他低效问题。目前食品供应链中的主要威胁仍然是假冒食品和食品欺诈。 基于 Hyperledger 区块链的食品跟踪系统可实现对食品信息全面的可视性和和可追溯性。更重要的是,它以一种不变但可行的方式来记录产品细节,确保食品信息的真实性。最终用户通过在不可变框架上共享产品的详细信息,可以自我验证产品的真实性。 Hyperledger Fabric Hyperledger FabricHyperledger 项目的基石。它是基于许可的区块链,或者更准确地说是一种分布式分类帐技术(DLT),该技术最初由 IBM 公司和 Digital Asset 创建。分布式分类帐技术被设计为具有不同组件的模块化框架(概述如下)。它也是提供可插入的共识模型的一种灵活的解决方案,尽管它目前仅提供基于投票的许可共识(假设今天的 Hyperledger 网络在部分可信赖的环境中运行)。 鉴于此,无需匿名矿工来验证交易,也无需用作激励措施的相关货币。所有的参与者必须经过身份验证才能参与到该区块链进行交易。与以太坊一样,Hyperledger Fabric 支持智能合约,在 Hyperledger 中称为Chaincodes(链码),这些合约描述并执行系统的应用程序逻辑。 然而,与以太坊不同,Hyperledger Fabric 不需要昂贵的挖矿计算来提交交易,因此它有助于构建可以在更短的延迟内进行扩展的区块链。 Hyperledger Fabric 不同于以太坊或比特币这样的区块链,不仅在于它们类型不同,或者说是它与货币无关,而且它们在内部机制方面也不同。以下是典型的 Hyperledger 网络的关键要素: 账本(Ledgers):存储了一系列块,这些块保留了所有状态交易的所有不可变历史记录。 节点(Nodes):区块链的逻辑实体。它有三种类型: 客户端(Clients):是代表用户向网络提交事务的应用程序。 对等体(Peers):是提交交易并维护分类帐状态的实体。 排序者(Orderers) 在客户端和对等体之间创建共享通信渠道,还将区块链交易打包成块发送给遵从的对等体节点。 除了这些要素,Hyperledger Fabric 还有以下关键设计功能: 链码(Chaincode):类似于其它诸如以太坊的网络中的智能合约。它是用一种更高级的语言编写的程序,在针对分类帐当前状态的数据库执行。 通道(Channels):用于在多个网络成员之间共享机密信息的专用通信子网。每笔交易都在一个只有经过身份验证和授权的各方可见的通道上执行。 背书人(Endorsers) 验证交易,调用链码,并将背书的交易结果返回给调用应用程序。 成员服务提供商(Membership Services Providers)(MSP)通过颁发和验证证书来提供身份验证和身份验证过程。MSP 确定信任哪些证书颁发机构(CA)去定义信任域的成员,并确定成员可能扮演的特定角色(成员、管理员等)。 Hyperledger 交易验证流程 首先,客户端通过向基于 Hyperledger Fabric 的应用程序客户端发送请求来启动交易,该客户端将交易提议提交给背书对等体。这些对等体通过执行由交易指定的链码(使用该状态的本地副本)来模拟该交易,并将结果发送回应用程序。此时,应用程序将交易与背书相结合,并将其广播给 排序服务(Ordering Service)。排序服务检查背书并为每个通道创建一个交易块,然后将其广播给通道中的其它节点,对的体验证该交易并进行提交。 Hyperledger Fabric 区块链可以通过透明的、不变的和共享的食品来源数据记录、处理数据,及运输细节等信息将食品供应链中的参与者们连接起来。链码由食品供应链中的授权参与者来调用。所有执行的交易记录都永久保存在分类帐中,所有参与者都可以查看此信息。 Hyperledger Composer 除了 Fabric 或 Iroha 等区块链框架外,Hyperledger 项目还提供了 Composer、Explorer 和 Cello 等工具。 Hyperledger Composer 提供了一个工具集,可帮助你更轻松地构建区块链应用程序。 它包括: CTO,一种建模语言 Playground,一种基于浏览器的开发工具,用于快速测试和部署 命令行界面(CLI)工具 Composer 支持 Hyperledger Fabric 的运行时和基础架构,在内部,Composer 的 API 使用底层 Fabric 的 API。Composer 在 Fabric 上运行,这意味着 Composer 生成的业务网络可以部署到 Hyperledger Fabric 执行。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值