前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >超级账本——Hyperledger Fabric

超级账本——Hyperledger Fabric

作者头像
歪歪梯
发布2020-08-26 17:41:49
1.5K0
发布2020-08-26 17:41:49
举报
文章被收录于专栏:歪歪梯Club

简介

Hyperledger Fabric是一个开放源代码企业级许可分布式账本技术(DLT)平台,旨在用于企业环境中,是第一个支持以通用编程语言(例如Java,Go和Node.js)而非受约束的领域特定语言(DSL)编写的智能合约编写的分布式分类帐平台。

基础概念

陶老师的博客——https://blog.csdn.net/russell_tao/article/details/80459698 官方文档——https://hyperledger-fabric.readthedocs.io/zh_CN/latest/membership/membership.html

  • ChainCode——链码,也称智能合约。自动判断条件满足,执行的回调脚本(如补偿扣款,自动还款)
  • MSP——Membership Service Provider,基于CA认证的身份信息验证服务。它定义了对于自己所在的 Peer 节点的信任域 (比如,组织) 节点本地 MSP 定义了节点的权限(比如,谁是节点管理员),同时也包含了对已注销过期的信息 用户的本地 MSP 允许用户在交易中证明自己是通道的成员(比如在链码交易中),或者系统中指定角色的所有者(比如,在配置交易中的组织管理员) 同属于一个Channel中的组织,将需要参与到Channel中的交易的所有身份MSP共享到Channel里,不在Channel全局MSP信任下的交易将会被Channel拒绝
  • channel——私有的子网络,也就是子网络中的各个peer各自维护一份同步的全局MSP,互相信任。每个Channel里会部署有多套合约,供channel里的peer去签订
  • world state——世界状态,每个peer上面的联盟实时状态数据副本
  • endorsement——背书,即peer为提案添加验证通过的peer签名
  • endorsement policy——背书策略,智能合约相关的配置,决定要签订该合约需要哪些peer参与背书
  • peer——存放区块链数据的结点,同时还有endorse和commit功能
  • Orderer——排序结点,提供共识服务
  • transaction——交易,每条指令都是一次交易
  • org——orginazation,管理一系列合作企业的组织
  • OUS——organizationUnits,组织下的多个企业单位,一般会为不同的organizationUnit定义不同的MSP进行区分,如下为官方示意图

MSP

MSP分级

MSP结构如下为官方图

MSP struct

  • 网络 MSP:网络配置通过定义参与组织的 MSP 定义了谁是这个网络的成员,并且定义了授权哪些成员执行管理任务(比如,创建通道)
  • Channel MSP:通道单独维护着它的成员的 MSP,也即子网络。通道在指定的一系列组织间提供了私有的通信方式,这些组织又管理着这个通道。在通道 MSP 上下文中的通道策略定义了谁有能力参与通道上的某些操作,比如,添加组织,或者实例化链码
  • Peer 节点MSP:由一个单独组织所有,每个 Peer 节点都有一个单独的 MSP 实例维护在本地文件系统。概念上讲,它同通道 MSP 执行着完全一样的操作,但是具有这些操作只能应用到它被定义的那个 Peer 节点上。使用 Peer 节点本地 MSP 来判定谁被授权操作的例子就是在 Peer 节点上安装链码
  • Orderer节点 MSP:就像 Peer 节点,排序节点也是由一个单独的组织所有,因此具有一个单独的 MSP保存在本地文件系统, 来列出它所信任的操作者或者节点,信任应用于自己节点上的操作

MSP中保存的对于其他信任结点在Intermediate CAS中,结点权限声明在Administrators中的,一般为对应结点的X509 证书。TLS文件夹对应为相关的TLS版本证书 结构中,private keys是peer结点和orderer结点必须有的,用于投票加签名,signingCert是对应的公钥。而对于通道MSP则不是必须的

fabric2.2部署环境

此处以windows为开发环境,Linux环境后续更新在其他文章 windows10专业版 docker desktop 最新版 golang 最新版 gitbash 最新版 1.运行docker,确保在gitbash下可以使用docker命令 2.配置go环境变量gopath,确保在gitbash下可以使用go命令 3.下载fabric仓库的scripts/bootstrap.sh 4.执行bootstrap.sh 具体会做:

  • git clone sample仓库
  • 下载二进制文件到sample仓库下面的bin目录 (fabric代码编译后的本平台可执行文件,也可以通过自己编译源码得到,编译依赖的环境比较麻烦配置)
  • pull fabric示例网络的docker镜像
  • 生成两个peerer一个orderer的ca证书
  • 配置测试域名的host解析

5.下载fabric仓库的sampleConfig目录下全部内容到sample仓库的config目录下 6.进入sample仓库的test-network目录 7.执行./network.sh up 启动区块链网络 8.执行docker ps查看到启动的三个node,分别代表一个orderer和两个组织的peer 0.执行./network.sh down 停止区块链网络

Channel

Channel是通信的基本网络,作为整个区块链系统的子网络 使用官方命令./network.sh createChannel -c testchannel 可以直接将当前network中的两个结点创建并加入一个channel,名称为testchannel 另外还有可以通过进入每个结点,手动创建并加入channel的过程:

  • 进入peer的docker cli命令行
  • 执行peer help查看全部帮助命令
  • peer channel create创建通道,参数如下
代码语言:javascript
复制
          -o: orderer容器的域名和端口,如orderer.exmaple.com:7050
          -c: 指定通道名,利用configtxgen生成Channel配置区块文件channel.tx时指定的通道名
          -f: 指定通道配置交易文件(channel.tx)
          --tls:开启TLS验证
         --cafile:指定了orderer的ca根证书在peer本地的存放路径
  • peer channel fetch newest filename -c testchannel --orderer orderer.example.com:7050 从orderer上,fetch下来testchannel的最新的创世区块的信息存放到filename路径代表的文件
  • peer channel join filename 加入对应文件指向的channel
  • peer channel signconfigtx -f 配置文件名 给对应的通道配置文件加上当前peer的签名
  • peer channel update -c testchannel -f 配置文件名 给对应的通道配置文件加上当前peer的签名,并发送配置文件到Channel,更新Channel的配置 通道配置文件编写教程见官方文档——https://hyperledger-fabric.readthedocs.io/zh_CN/release-2.2/configtx.html
  • configtxgen 与 configtx.yaml 因为编写go代码生成较麻烦,可以使用官方提供的工具configtxgen,通过configtx.yaml配置文件生成对应的配置文件的区块编码文件(一般命名为configtx.tx)。官方文档——https://hyperledger-fabric.readthedocs.io/zh_CN/release-2.2/commands/configtxgen.html
  • AnchorPeers 锚节点,是通道配置文件中比较重要的配置,指定一个peer,作为组织间的通信代表,负责转发所有组织间交易给内部其他peer

ChainCode

链码,又称智能合约

  • peer chaincodeinstall -n name -v ver -p path 把path对应的链码打包为CDS(Chaincode Deployment Spec)格式,命名为name,版本为ver,安装到当前节点上
  • peer chaincode instantiate -n name -v ver -o orderer.example.com:7050 -C channelName 初始化name对应的CDS格式链码,通过orderer节点安装到channelName上
  • peer chaincode invoke -n name -o orderer.example.com:7050 -C channelName 提交事务执行链码
  • peer chaincode query -C channelName -n name -c '{"Args":["query","a"]}' 查询channelName通道中,name链码上,变量a的值
  • peer chaincode upgrade -o orderer.example.com:7050 -C channelName -n name -v 1.2 -c '{"Args":["init","a","100","b","200","c","300"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')" 在两个peer上面更新链码,升级版本为1.2,设置链码变量a,b,c,值分别为100,200,300 更多文章,请搜索公众号歪歪梯Club
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 歪歪梯Club 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础概念
  • MSP分级
  • fabric2.2部署环境
  • Channel
  • ChainCode
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档