【链块技术51期】超级账本Fabric教程(一):超级账本入门
原文链接:超级账本Fabric教程(一):超级账本入门
本节分享有关拆超级账本的概念以及体验部署过程。
一、简介
是一个带有可插入各种功能模块架构的区块链实施方案,目标是打造成一个由全社会共同维护的开源超级账本。由Linux 基金会的开源项目,全称是Hyperledger Fabric)是区块链的商用平台。开源地址:https://github.com/hyperledger。
二、为什么用超级账本?
会员众多:包括Cisco、 IBM、 Intel、 J. P. Morgan、 荷兰 银行、 SWIFT 等。
拥抱监管和审查。
良好的扩展性,可插入各种功能模块。
成员管理
身份管理
网络隐私
保密和审查
智能合约
JAVA
GO
NODEJS
其它
在fabric中成为链码
在沙箱中运行
链码语言
支持事件
适合企业级应用
传统的业务模型很难做到跨机构的交易被一个互信的机构监督执行。每个交易方都有自己独立的账本。发生交易时各自更改,造成账本同步的成本高昂且效率低下。仅有少数的中心系统,所以商业网络比较脆弱。fabric提供了授权维护账本的机制,因此相对保证了数据的私密,公司作为上市主体,以盈利为目的,不可能所有的数据都公开。那么超级账本作为联盟链供企业使用比较合适。企业级区块链四大平台要素:1. 共享账本 2. 共识 3. 隐私和保密 4. 智能合约。 当前公链比如以太坊eos等其它三点都能满足唯独隐私没法保证,另外效率普遍不高,没有最终确定性,又是被极客们主导的,不符合商业主流趋势,从而也限制了企业性质的应用。
企业级商用区块链网络比较适合使用联盟链和许可制。这样在一个限定的范围内,只有授权的节点和用户才能参与到交易和智能合约的执行中 来,而任何匿名节点或非授权用户均被拒绝服务。从团体联盟的角度 来看,这增加了区块链网络的安全可靠。 当前,在欧美主流的区块链应用大部分是行业链或者是联盟 链,也就是某一个行业的上下游,或者核心企业联合 起来,一起构建的半公开化的区块 链。从这个角度讲,超级账本具备成为未来最主要商用区块链技术平台的 潜力,值得技术开发人员花时间和精力进行学习和研究。
商用场景
金融
对银行、保险、清算、股权登记 交易、信用评级、公证等 领域,既需要绝对的 可信任,也需要隐私保密,所以特别适合区块链 应用。比如可以模仿数字货币交易所做一套区块链股权登记和交易 平台。
产业互联网
供应链
提供深度回溯、查询等核心功能,实现信息公开透明,出了问题可以依此来追 责。附加值较高的 食品、药品和 疫苗、零部件生产检测结果等都可以使用区块链。 * 共享模式
传统行业
三、特性
用go语言开发
更适合联盟链
需要在容器里运行
应用场景: 构建 商品 溯源、 贸易 融资、 信用证、 供应 链 以及企业贷款
是对传统区块链模型的革新
提供 一个 针对 身份 识别、 可 审计、 隐私 安全 和 健壮 的 模型
可插拔的共识算法及共识模型
智能合约
四、安装和调用
Fabric依赖docker容器, 因此需要先安装和配置docker.(请参考docker的章节)
下载超级账本源代码
1.如果没有安装git则执行
sudo apt install git
2.通过git安装
git clone https://github.com/hyperledger/fabric.git
部署调用
下载Docker镜像文件
进入目录: 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
体验部署过程
下载一个简单的例子
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_
创建通道,加入通道
加入通道
peer channel join -b mychannel.block
创建通道
peer channel create -o orderer. example. com: 7050 -c mychannel -f /etc/ hyperledger/ configtx/ channel. tx
切换 环境 到 管理员 用户 的 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 节点 容器
exit进入 cli 容器 安装 链 码 和 实例 化
进入容器
docker exec -it cli/bin/bash安装链码
peer chaincode install -n mycc -v v0 -p github.com/chaincode_example02
实例化链码
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"]}'
Fabric初体验
配置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网络安装示例文件和images等
下载hyperledger / fabric-samples 签出适当的版本标签
将指定版本的Hyperledger Fabric二进制文件和配置文件安装到fabric-samples存储库的根目录中
下载指定版本的Hyperledger Fabric docker镜像执行curl -sSL http://bit.ly/2ysbOFE | bash -s 1.3.0
命令解析:执行bootstrap.sh文件
该脚本将下载并提取设置网络所需的所有特定于平台的二进制文件,并将它们放入您在上面创建的目录中。
其中bin目录它包含了以下文件:
cryptogen,
configtxgen,
configtxlator,
peer,
orderer,
idemixgen, and
fabric-ca-client
部署网络
配置环境变量
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"]}'
会发现数值已经发生了变化,表示转账成功定义锚点
../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根据配置生成加密相关的材料../bin/cryptogen generate --config=./crypto-config.yaml
进入目录cd crypto-config
生成的材料会放到crypto-config文件夹里,把当前的路径导出成全局变量export FABRIC_CFG_PATH=$PWD
进入目录cd fabric-samples/first-network
生成网络组件./byfn.sh generate
这时会创建目录crypto-config并产生一些文件, 包括公私钥和证书等构建网络./byfn.sh up如果想用node生态使用./byfn.sh up -l node
这一步是创建链码语言对应的镜像加密生成器
我们将使用加密工具为我们的各种网络实体生成加密材料(x509证书和签名密钥)。
这些证书代表身份,它们允许在我们的实体进行通信和交易时进行签名/验证身份验证。生成创世区块文件../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
启动网络docker-compose -f docker-compose-cli.yaml up -d
进入客户端docker exec -it cli bash
开发应用
注册之前先打开日志
docker logs -f ca.example.com
运行注册脚本
node enrollAdmin.js
应用开发模型
-END-
【链块技术51期】超级账本Fabric教程(一):超级账本入门相关推荐
- 【链块技术10期】区块链基础语言(二)——GO语言开发环境搭建
原文链接:区块链基础语言(二)--Go语言开发环境搭建 一.操作系统位数的查询方法 在安装前首先要了解个人的电脑系统位数是32位还是64位. 1.1Windows系统查询方法 右击"计算 ...
- 【链块技术36期】智能合约基础语言(一)——Solidity概述和开发工具的使用
原文链接:区块链技术语言:Solidity(一):概述和开发工具的使用 一.目录 ☛Solidity的概述 ☛Solidity开发工具remix的使用 ☛Solidity本地开发工具remix安装 二 ...
- 【链块观点03期】赋能商品溯源!区块链技术的天命所在?
原文链接:[链块观点]赋能商品溯源!区块链技术的天命所在? 01 金融行业,一直被公认是区块链技术最先落地的领域.实际上,不仅是金融,商品溯源或许成为近年来就可以快速落地的应用场景. 溯源行业的历史最 ...
- 【链块观点01期】当区块链的风刮到教育行业,哪些变革是注定要发生的?
原文链接:[区块链应用案例]当区块链的风刮到教育行业,哪些变革是注定要发生的? 一 教育是国之大计.古往今来,教育都在人类生活中占有着极其重要的位置.教育与社会的进步.文明的发展程度紧密相关.中国正在 ...
- 【链块观点02期】面对落后的传统版权保护,区块链都有哪些绝招?
原文链接:[链块观点]面对落后的传统版权保护,区块链都有哪些绝招? 一 在比特经济主导的互联网时代,信息以秒级速度传播,给我们的信息获取效率带来了极大的提升. 实体唱片到在线音乐,实体书到电子书,实体 ...
- arcgis超级工具安装教程_ArcGIS超级工具SPTOOLS-制图篇
1.1 梯形接幅表的创建 根据一个图层范围,生成接幅表,支持地图比例尺有1:100万.1:50万.1:25万.1:10万.1:5万.1:2.5万.1:1万和1:5000,1:2000,1:500比例 ...
- 用Kubernetes部署超级账本Fabric的区块链即服务(1)
用Kubernetes部署超级账本Fabric的区块链即服务(1) 2017年08月13日 00:00:00 阅读数:937 题图摄于旧金山市区:云海中的 Twin Peaks 不久前,我们发表了如何 ...
- 用Kubernetes部署超级账本Fabric的区块链即服务
关注微信公众号 区块链大本营,学习更多区块链技术及应用知识. 区块链行业投稿,请邮件联系 jiawd@csdn.net 本文将探讨如何把 Fabric v1.0自动化部署在现今最流行的 Kuberne ...
- 华为云区块链服务技术决策和落地实践
本文整理自BCCon全球区块链生态技术大会上的演讲. 大家好,非常感谢大家来和我一起探索一下区块链和BaaS相关的情况.我今天在这里来个抛砖引玉,希望大家有些收获.因为我看到大家都会讲很多的技术,我在 ...
最新文章
- android linux 内核gpl,Android 内核分析
- 2021湖南高考艺考成绩查询,2021届湖南艺考生联考成绩查询时间安排
- IT项目之旅(一)《宿舍管理系统》设计与实现
- matlab工具箱设置学习率_MATLAB金融工具箱:06:统计套利的机器学习2:特征工程和模型开发...
- Spartan-II 应用指南 转载
- c#sql数据导出到excel
- c语言突然出现图片,c语言能显示图片吗
- paip.检测信用卡账单数据的正确性算法
- 乐优商城第九天,第十天,(商品规格参数模版的新增,商品的新增)
- php 模拟提交金数据,小程序提交表单到金数据实例
- Unity 数据存储与读取_JSON
- 【计算机网络】第四部分 网络层(21) 地址映射、差错报告和多播
- 十一、捕鱼达人的鱼儿游泳动画
- PM,RD,FE,UE,UI,QA等开发常见部门简称
- 扫雷计算机教案,四年级上信息技术教案-游戏——扫雷辽师大版
- 高斯-约当(Gauss-Jordan)消元法
- 记一次APP去壳破解重新打包
- 计算机应用基础0006 19春在线作业1,川大《计算机应用基础0006》20春在线作业1 -0001...
- LeetCode77. 组合Golang版
- [Practical.Vim(2012.9)].Drew.Neil.Tip10学习摘要