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

栏目: 编程工具 · 发布时间: 5年前

内容简介:Fabric依赖docker容器, 因此需要先安装和配置docker.(请参考docker的章节)下载超级账本源代码

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

二、为什么用超级账本?

  1. 会员众多:包括Cisco、 IBM、 Intel、 J. P. Morgan、 荷兰 银行、 SWIFT 等。

  2. 拥抱监管和审查。

  3. 良好的扩展性,可插入各种功能模块。

  4. 成员管理

  • 身份管理

  • 网络隐私

  • 保密和审查

  • 智能合约

    • J AVA

    • GO

    • NODEJS

    • 其它

    • 在fabric中成为链码

    • 在沙箱中运行

    • 链码语言

    • 支持事件

  • 适合企业级应用

    传统的业务模型很难做到跨机构的交易被一个互信的机构监督执行。每个交易方都有自己独立的账本。发生交易时各自更改,造成账本同步的成本高昂且效率低下。仅有少数的中心系统,所以商业网络比较脆弱。fabric提供了授权维护账本的机制,因此相对保证了数据的私密,公司作为上市主体,以盈利为目的,不可能所有的数据都公开。那么超级账本作为联盟链供企业使用比较合适。企业级区块链四大平台要素:1. 共享账本 2. 共识 3. 隐私和保密 4. 智能合约。 当前公链比如以太坊eos等其它三点都能满足唯独隐私没法保证,另外效率普遍不高,没有最终确定性,又是被极客们主导的,不符合商业主流趋势,从而也限制了企业性质的应用。

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

  • 商用场景

    • 金融

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

    • 产业互联网

      • 供应链

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

    • 传统行业

    三、特性

  1. go 语言开发

  2. 更适合联盟链

  3. 需要在容器里运行

  4. 应用场景: 构建 商品 溯源、 贸易 融资、 信用证、 供应 链 以及企业贷款

  5. 是对传统区块链模型的革新

  6. 提供 一个 针对 身份 识别、 可 审计、 隐私 安全 和 健壮 的 模型

  7. 可插拔的共识算法及共识模型

  8. 智能合约

四、安装和调用

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文件

    • 执行下载: ./bootstrap.sh

  • 体验部署过程

      • 下载一个简单的例子

      • 进入目录并执行

        • 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网络

      超级账本Fabric教程(一):超级账本入门
    • 安装示例文件和images等

  1. 下载hyperledger / fabric-samples 签出适当的版本标签
    将指定版本的Hyperledger Fabric二进制文件和配置文件安装到fabric-samples存储库的根目录中
    下载指定版本的Hyperledger Fabric docker镜像

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

  3. 执行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

      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

    • 应用开发模型

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


以上所述就是小编给大家介绍的《超级账本Fabric教程(一):超级账本入门》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ajax for Web Application Developers

Ajax for Web Application Developers

Kris Hadlock / Sams / 2006-10-30 / GBP 32.99

Book Description Reusable components and patterns for Ajax-driven applications Ajax is one of the latest and greatest ways to improve users’ online experience and create new and innovative web f......一起来看看 《Ajax for Web Application Developers》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具