找回密码
 立即注册

QQ登录

只需一步,快速开始

门户 百科 查看内容
  • QQ空间
  • 回复
  • 收藏

超级账本Fabric教程(一):超级账本入门

admin 2018-12-06

简介

超级账本是一个带有可插入各种功能模块架构的区块链实施方案,目标是打造成一个由全社会共同维护的开源超级账本。由Linux 基金会的开源项目,全称是Hyperledger Fabric)是区块链的商用平台。开源地址:https://github.com/hyperledger。


为什么用超级账本?

会员众多:包括Cisco、 IBM、Intel、J.P.Morgan、荷兰银行、 SWIFT 等。
拥抱监管和审查。
良好的扩展性,可插入各种功能模块。
成员管理
身份管理
网络隐私
保密和审查
智能合约
在fabric中成为链码
在沙箱中运行
链码语言
JAVA
GO
NODEJS
其它
支持事件



适合企业级应用

传统的业务模型很难做到跨机构的交易被一个互信的机构监督执行。每个交易方都有自己独立的账本。发生交易时各自更改,造成账本同步的成本高昂且效率低下。仅有少数的中心系统,所以商业网络比较脆弱。fabric提供了授权维护账本的机制,因此相对保证了数据的私密,公司作为上市主体,以盈利为目的,不可能所有的数据都公开。那么超级账本作为联盟链供企业使用比较合适。


企业级区块链四大平台要素:1. 共享账本 2. 共识 3. 隐私和保密 4. 智能合约。 当前公链比如以太坊EOS等其它三点都能满足唯独隐私没法保证,另外效率普遍不高,没有最终确定性,又是被极客们主导的,不符合商业主流趋势,从而也限制了企业性质的应用。

企业级商用区块链网络比较适合使用联盟链和许可制。这样在一个限定的范围内,只有授权的节点和用户才能参与到交易和智能合约的执行中 来,而任何匿名节点或非授权用户均被拒绝服务。从团体联盟的角度 来看,这增加了区块链网络的安全可靠。 当前,在欧美主流的区块链应用大部分是行业链或者是联盟 链,也就是某一个行业的上下游,或者核心企业联合 起来,一起构建的半公开化的区块 链。从这个角度讲,超级账本具备成为未来最主要商用区块链技术平台的 潜力,值得技术开发人员花时间和精力进行学习和研究。


7. 商用场景

金融

对银行、保险、清算、股权登记 交易、信用评级、公证等 领域,既需要绝对的 可信任,也需要隐私保密,所以特别适合区块链 应用。比如可以模仿数字货币交易所做一套区块链股权登记和交易平台

产业互联网

供应链

提供深度回溯、查询等核心功能,实现信息公开透明,出了问题可以依此来追 责。附加值较高的 食品、药品和 疫苗、零部件生产检测结果等都可以使用区块链。 * 共享模式

传统行业


特性

用go语言开发
更适合联盟链
需要在容器里运行
应用场景: 构建 商品 溯源、 贸易 融资、 信用证、供应链以及企业贷款
是对传统区块链模型的革新
提供一个针对身份识别、可审计、隐私安全和健壮的模型
可插拔的共识算法及共识模型
智能合约


安装和调用

Fabric依赖docker容器, 因此需要先安装和配置docker.(请参考docker的章节)


下载超级账本源代码

如果没有安装git则执行
sudo apt install git

通过git安装
git clone https://github.com/hyperledger/fabric.git 



部署调用

01、下载Docker镜像文件

进入目录: cd fabric/ scripts

进入目录: cd fabric/ scripts

修改读写权限 chmod +x bootstrap.sh

改写.sh文件

Mac:sed -i '' 's/ curl/# curl/ g' bootstrap.sh

其它: sed -i 's/ curl/# curl/ g' bootstrap.sh

执行下载: ./bootstrap.sh


02、体验部署过程

下载一个简单的例子

git clone https://github.com/hyperledger/fabric-samples.git

进入目录并执行

cd fabric- samples/ basic-network docker-compose -f docker-compose.yml up -d

查看启动的容器

会输出以下内容: localhost: basic- network clarity$ docker ps CONTAINER ID IMAGE NAMES efddfbf4fc0a hyperledger/ fabric- peer: x86_ 64- 1. 0. 0 peer0. org1. example. com 606d13c1e7a2 hyperledger/ fabric- couchdb: x86_ 64- 1. 0. 0 couchdb d8c870db8634 hyperledger/ fabric- ca: x86_ 64- 1. 0. 0 ca. example. com c6f25a5e6fd6 hyperledger/ fabric- tools: x86_ 64- 1. 0. 0 cli a5f6331c5bc5 hyperledger/ fabric- orderer: x86_

查看启动的容器

创建通道,加入通道

切换 环境 到 管理员 用户 的 MSP, 进入 Peer 节点 容器 peer0. org1. example. com

docker exec -it -e "CORE_ PEER_ MSPCONFIGPATH=/ etc/ hyperledger/ msp/ users/ Admin@ org1. example. com/ msp" peer0. org1. example. com bash

创建通道

peer channel create -o orderer. example. com: 7050 -c mychannel -f /etc/ hyperledger/ configtx/ channel. tx

加入通道

peer channel join -b mychannel.block
退出 Peer 节点 容器
exit

进入 cli 容器 安装 链 码 和 实例 化
5.1 进入容器
docker exec -it cli/bin/bash 5.2 安装链码
peer chaincode install -n mycc -v v0 -p github.com/chaincode_example02
5.3 实例化链码
peer chaincode instantiate -o orderer. example. com: 7050 -C mychannel -n mycc -v v0 -c '{"Args":["init","a","100","b","200"]}'

链码调用和查询
peer chaincode query -C mychannel -n mycc -v v0 -c '{"Args":["query","a"]}'

模拟转账
从“ a” 转移 10 到“ b”: peer chaincode invoke -C mychannel -n mycc -v v0 -c '{"Args":["invoke","a", "b"," 10"]}'

在分别查询a和b的zhi
peer chaincode query -C mychannel -n mycc -v v0 -c '{"Args":[" query"," a"]}' peer chaincode query -C mychannel -n mycc -v v0 -c '{"Args":[" query"," b"]}'


03、Fabric初体验

安装示例文件和images等

执行curl -sSL http://bit.ly/2ysbOFE | bash -s 1.3.0

命令解析:

下载hyperledger / fabric-samples 签出适当的版本标签

将指定版本的Hyperledger Fabric二进制文件和配置文件安装到fabric-samples存储库的根目录中

下载指定版本的Hyperledger Fabric docker镜像


执行bootstrap.sh文件

该脚本将下载并提取设置网络所需的所有特定于平台的二进制文件,并将它们放入您在上面创建的目录中。

其中bin目录它包含了以下文件:

cryptogen,
configtxgen,
configtxlator,
peer,
orderer,
idemixgen, and
fabric-ca-client


配置bin目录的path

为了让系统能够在任何地方识别bin里的内容,需要配置path:
* 通过编辑器打开这个文件~/.bash_profile
* 添加一行export PATH=<上一步下载的路径>/bin:$PATH
* 再执行source ~/.bash_profile让配置生效


最后,该脚本会将Docker Hub中的Hyperledger Fabric docker映像下载到本地Docker中,并将其标记为“最新”。


注意:

如果出现这种错误:
ERROR: for orderer.example.com Cannot create container for service orderer.example.com: b'Conflict. The container name "/orderer.example.com" is already in use by container
解决方案是:
输入docker ps -a列出所有运行中的容器
如果能搜索出容器,则执行docker ps -qa | xargs docker rm
然后再执行docker-compose -f docker-compose.yaml up -d
如果出现这个信息表示成功启动了fabric网络


04、部署网络

进入目录cd fabric-samples/first-network

生成网络组件./byfn.sh generate
这时会创建目录crypto-config并产生一些文件, 包括公私钥和证书等

构建网络./byfn.sh up如果想用node生态使用./byfn.sh up -l node
这一步是创建链码语言对应的镜像

加密生成器
我们将使用加密工具为我们的各种网络实体生成加密材料(x509证书和签名密钥)。
这些证书代表身份,它们允许在我们的实体进行通信和交易时进行签名/验证身份验证。

根据配置生成加密相关的材料../bin/cryptogen generate --config=./crypto-config.yaml

进入目录cd crypto-config

生成的材料会放到crypto-config文件夹里,把当前的路径导出成全局变量export FABRIC_CFG_PATH=$PWD

生成创世区块文件../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

生成通道配置文件export CHANNEL_NAME=superchannel && ../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME

定义锚点
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

启动网络docker-compose -f docker-compose-cli.yaml up -d

进入客户端docker exec -it cli bash

配置环境变量
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

创建通道和创世区块
根据之前生成的通道配置文件,创建通道export CHANNEL_NAME=superchannel peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

加入通道peer channel join -b mychannel.block

更新锚点
peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

安装链码
所有准备完成之后,开始安装链码。

分别支持三种语言:
Golang
peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/
Node.js
peer chaincode install -n mycc -v 1.0 -l node -p /opt/gopath/src/github.com/chaincode/chaincode_example02/node/
Java
peer chaincode install -n mycc -v 1.0 -l java -p /opt/gopath/src/github.com/chaincode/chaincode_example02/java/

实例化链码
Golang
peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
Node.js
peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -l node -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
Java
peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -l java -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"

调用链码的函数
先查询一下有多少值
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
然后转账一部分
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["invoke","a","b","10"]}'
最后再次查询
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
会发现数值已经发生了变化,表示转账成功


05、开发应用

应用开发模型

进入到示例项目cd fabric-samples/fabcar

关闭之前的冗余项目以及容器docker rm -f $(docker ps -aq)

清除缓存的网络docker network prune

删除之前的链码docker rmi dev-peer0.org1.example.com-fabcar-1.0-5c906e402ed29f20260ae42283216aa75549c5 71e2e380f3615826365d8269ba

安装依赖的nodejs模块npm install

启动网络./startFabric.sh(如果用nodejs开发后边带上参数node)

注册管理员

注册之前先打开日志docker logs -f ca.example.com

运行注册脚本node enrollAdmin.js

再注册一个用户user1node registerUser.js

执行查询node query.js
这时候会看到查询到的信息打印出来

(更多行业交流 ,扫码添加微信)

文章点评
相关文章

热门货币

柚子币EOS
柚子币EOS

EOS (Enterprise Operation System)是由 Block.one公司主导开发

恒星币XLM
恒星币XLM

恒星币(Stellar),一个由前瑞波币(Ripple)创始人Jed McCaleb

比特币BTC
比特币BTC

比特币(BitCoin)的概念最初由中本聪在2009年提出,根据中本聪的

新经币NEM
新经币NEM

新经币(New Economy Movement,缩写 NEM),是一种点对点虚拟货币

艾达币ADA
艾达币ADA

ADA,中文称为艾达币,是Cardano项目的产物,Cardano项目发起于2

交易平台

火币网
火币网

火币网成立于2013年,是中国最大的比特币(btc)、莱特币(ltc)、以

库币网
库币网

库币网就是以“区块链”为核心上线的数字资产交易平台。千万注册

火币pro
火币pro

火币全球专业站,是火币全球旗下服务于全球专业交易者的创新数字

OkCoin国际
OkCoin国际

okcoin国际站是全球着名的数字资产交易平台之一,主要面向全球用

P网Poloniex
P网Poloniex

poloniex成立于2014年,俗称p网,是世界领先的加密货币交易所之

币圈大佬

V神:以太坊创始人
V神:以太坊创始人

萌萌的天才少年Vitalik Buterin,圈内人一般称他为V神。这个94年

黄天威:比特时代创始人兼CEO
黄天威:比特时代创始人兼

黄天威,比特时代创始人兼CEO,历任腾讯产品经理,范特西副总裁,

杜均:金色财经创始人
杜均:金色财经创始人

他是全球最早从事区块链产业投资的专业投资人,也是知名的数字资

李笑来:中国比特币首富
李笑来:中国比特币首富

李笑来,原新东方名师,中国比特币首富,著名天使投资人,比特基

中本聪:比特币创始人
中本聪:比特币创始人

中本聪,比特币创始人,谜一样的人物。2008年中本聪在互联网上一