惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Security Archives - TechRepublic
MongoDB | Blog
MongoDB | Blog
量子位
博客园 - 叶小钗
罗磊的独立博客
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
MyScale Blog
MyScale Blog
GbyAI
GbyAI
Help Net Security
Help Net Security
Y
Y Combinator Blog
Engineering at Meta
Engineering at Meta
Hacker News - Newest:
Hacker News - Newest: "LLM"
Latest news
Latest news
H
Hacker News: Front Page
Blog — PlanetScale
Blog — PlanetScale
雷峰网
雷峰网
Microsoft Azure Blog
Microsoft Azure Blog
P
Proofpoint News Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
Scott Helme
Scott Helme
S
Schneier on Security
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
S
Security @ Cisco Blogs
Recorded Future
Recorded Future
S
Securelist
博客园 - Franky
Application and Cybersecurity Blog
Application and Cybersecurity Blog
A
About on SuperTechFans
N
News and Events Feed by Topic
AI
AI
T
Tenable Blog
N
News | PayPal Newsroom
C
Cybersecurity and Infrastructure Security Agency CISA
V
V2EX - 技术
T
Threat Research - Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
L
LINUX DO - 热门话题
N
Netflix TechBlog - Medium
S
SegmentFault 最新的问题
T
The Blog of Author Tim Ferriss
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Google Online Security Blog
Google Online Security Blog
S
Security Affairs
Webroot Blog
Webroot Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - 三生石上(FineUI控件)
C
Comments on: Blog
G
GRAHAM CLULEY

博客园 - 网鱼

Twitter的分布式自增ID雪花算法snowflake (Java版) 雪花算法:生成分布式全局唯一ID 数据加密共享与签名方案 Java 8中处理集合的优雅姿势——Stream 消息中间件选型分析——从Kafka与RabbitMQ的对比来看全局 从概念到底层技术,一文看懂区块链架构设计(附知识图谱) 以太坊源码分析——BlockChain 超级账本实践——基于docker从零搭建联盟链 Hyperledger Fabric V1.0– 开发者快速入门 区块链技术基础语言(三十二):Go语言网络编程(下) 区块链技术基础语言(三十一):Go语言网络编程(上) 区块链技术基础语言(三十):Go语言常用工具包(下) 区块链技术语言(二十九)—Go语言常用工具包(上) 区块链技术语言(二十八)——Go语言并发编程(下) 区块链技术语言(二十七)——Go语言并发编程(上) 区块链技术语言(二十六)——Go语言异常处理 区块链技术语言(二十五)——面向对象:接口 区块链技术语言(二十四)——Go语言面向对象:匿名组合 区块链技术语言(二十三)——Go语言面向对象:方法
超级账本Fabric教程(一):超级账本入门
网鱼 · 2019-03-07 · via 博客园 - 网鱼

本节分享有关拆超级账本的概念以及体验部署过程。

一、简介

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

二、为什么用超级账本?

  1. 会员众多:包括Cisco、 IBM、 Intel、 J. P. Morgan、 荷兰 银行、 SWIFT 等。
  2. 拥抱监管和审查。
  3. 良好的扩展性,可插入各种功能模块。
  4. 成员管理
  • 身份管理
  • 网络隐私
  • 保密和审查
  • 智能合约
    • JAVA
    • 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网络

    • 安装示例文件和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/http://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/http://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/http://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-