前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Fabric基础架构原理(3):通道 | 赠书活动

Fabric基础架构原理(3):通道 | 赠书活动

作者头像
Henry Zhang
发布2019-04-12 16:37:30
8120
发布2019-04-12 16:37:30
举报
文章被收录于专栏:亨利笔记

题图摄于加州北部

本文选自新书《区块链核心技术与应用》,略有删节。上期介绍了Fabric基础架构的共识与交易机制,本次介绍Fabric私密交易方式:通道。欢迎大家参与文末"转发即挖矿"的赠书活动。

本文首发于哈希1024社区:

https://hash1024.org/topics/50

通道的结构

通道是Fabric中非常重要的概念,它实质是由排序节点划分和管理的私有原子广播通道,目的是对通道的信息进行隔离,使得通道外的实体无法访问通道内的信息,从而实现交易的隐私性。

目前通道分为系统通道(System Channel)和应用通道(Application Channel)。排序节点通过系统通道来管理应用通道,用户的交易信息通过应用通道传递。对一般用户来说,通道是指应用通道。系统通道与应用通道的关系如图10-5所示:

系统通道与应用通道

通道由排序服务节点负责管理,同时该节点还负责排序通道中的交易。在通道中一般包含有若干成员(组织),若两个网络实体的身份证书能够追溯到同一个根CA,则认为这两个实体属于同一组织。此外,通道中的每个组织都会有一个或以上的“锚节点”,它负责与其他组织交换共享账本的数据。

创建通道的时候定义了成员,只有通过成员MSP验证的实体,才能够加入到通道并访问通道数据。一个验证例子如下:

Org1 是通道 mychannel 的成员之一,与 Org1 绑定的 MSP 标识为 Org1MSP,其代表的 CA 称为 CA1;若实体的 MSP 满足以下条件则认为实体有权限访问 mychannel 的数据:

  • 实体的MSP标识(ID)为 Org1MSP;
  • 实体身份证书的信任链源头为 CA1。

实体只要满足通道中任意成员的 MSP 校验,则认为该实体有权限访问通道中的数据。

1. 通道的配置

通道的配置信息都被打包到一个区块中,并存放在通道的共享账本中。该区块除了配置信息外不包含其他交易信息,称之为通道的配置区块(Configuration Block)。通道可以使用配置区块来更新配置,因此在账本中每新添加一个配置区块,通道就按照最新配置区块的定义来修改配置。通道账本的首个区块一定是配置区块,也称为初始区块(Genesis Block)。

2. 使用configtxgen工具生成通道的配置

configtxgen 是 Fabric 提供的工具,用于生成通道所需要的配置文件。configtxgen工具以一个yaml文件作为输入,一般称为 configtx.yaml,该文件定义了将要创建通道的配置信息,该文件通常包括以下部分:

1)Profiles: 包含了通道的配置模板,通过 configtxgen 工具的参数 -profile 来指定使用哪个模板。

2)Organizations: 定义了组织以及与之相应的 MSP。

3)Orderer: 定义系统通道的相关配置,如排序节点地址、共识算法。

4)Application: 定义应用通道相关配置,被 profile 引用。

以下面的配置文件configtx.yml为例,解释如何通过 configtxgen 创建通道的初始区块。 configtx.yml 清单如下:

代码语言:javascript
复制
Profiles:
    Genesis:                                                          
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
        Consortiums:
            SampleConsortium:
                Organizations:
                    - *PeerOrg1
                    - *PeerOrg2
    Channel:
        Consortium: SampleConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *PeerOrg1
                - *PeerOrg2
Organizations:
    - &OrdererOrg
        Name: OrdererOrg
        ID: OrdererMSP
        MSPDir: OrdererOrg/msp
 
    - &PeerOrg1
        Name: PeerOrg1MSP
        ID: PeerOrg1MSP
        MSPDir: PeerOrg1/msp
        AnchorPeers:
            - Host:  peer0.peerOrg1.com
              Port: 7051
 
    - &PeerOrg2
        Name: PeerOrg2MSP
        ID: PeerOrg2MSP
        MSPDir: PeerOrg2/msp
        AnchorPeers:
            - Host: peer0.peerOrg2.com
              Port: 7051
 
Orderer: &OrdererDefaults
    OrdererType: solo
    Addresses:
        - orderer.ordererOrg.com:7050       #orderer地址
    BatchTimeout: 2s
    BatchSize: 
        MaxMessageCount: 10
        AbsoluteMaxBytes: 98 MB
        PreferredMaxBytes: 512 KB
    Kafka:
Organizations:
 
Application: &ApplicationDefaults
    Organizations:     
                                       
Profiles字段定义:
Profiles:
    Genesis:                                                         
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
        Consortiums:
            SampleConsortium:
                Organizations:
                    - *PeerOrg1
                    - *PeerOrg2
    Channel:
        Consortium: SampleConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *PeerOrg1
                - *PeerOrg2

上面的 profile 定义了系统通道和应用通道两种不同类型的通道。

系统通道必须定义 Orderer 和 Consortiums 两部分,应用通道必须定义 Application 和 Consortium 两部分。 (更详细的说明请参看 哈希1024社区文章[需粘贴地址到浏览器]:https://hash1024.org/topics/50 )

定义好 yaml 文件后,需要把 configtxgen 工具以及 msp 目录都拷贝到yaml文件的所在的目录下,configtxgen 默认会读取当前目录的 configtx.yaml 作为输入:

1)创建排序节点的初始区块:

configtxgen -profile Genesis -outputBlock genesis.block

该命令通过 profile 参数来指定生成 yaml 文件中 Profile.Genesis 的配置,通过 -outputBlock 参数来将区块写入 genesis.block 文件。

2)创建应用通道 mychannel 的初始区块的交易文件 channel.tx:

configtxgen -profile Channel -outputCreateChannelTx channel.tx -channelID mychannel

该命令通过-outputCreateChannelTx参数将生成的交易写入channel.tx文件,通过-channelID来指定创建通道的名称为mychannel。

3)创建配置区块的交易文件Org1MSPanchors.tx以更新mychannel中PeerOrg1的锚节点:

configtxgen -profile Channel -outputAnchorPeersUpdate Org1MSPanchors.tx -channelID mychannel -asOrg PeerOrg1MSP

该命令通过-asOrg来指定使用PeerOrg1MSP身份创建配置区块,并且通过-outputAnchorPeersUpdate参数将配置区块写入到文件Org1MSPanchors.tx中。

类似地,创建配置区块的交易文件 Org2MSPanchors.tx 以更新 mychannel 中 PeerOrg2 的锚节点:

configtxgen -profile Channel -outputAnchorPeersUpdate Org2MSPanchors.tx -channelID mychannel -asOrg PeerOrg2MSP

3. 通道相关命令

对通道的管理可通过命令行的方式,与通道相关的命令如下:

  • peer channel create: 用于创建通道,主要参数有-c, -f, -o分别用于指定通道ID, configtx的路径和orderer的地址。
  • peer channel fetch:抓取通道中的特定区块,通过-c和-f参数来指定通道ID和orderer地址。
  • peer channel join:加入通道,通过-b参数指定初始区块。
  • peer channel list:列出peer加入的通道。
  • peer channel update :签名并且发送configtx以升级通道配置,需要通过-c, -f, -o参数分别指定通道ID, configtx的路径以及排序节点的地址。
4. 动态修改通道配置

在通道创建后,通道相关的配置以区块的形式存在于通道的账本中。如果需要修改通道的配置,可通过生成新的配置区块去更新。修改通道配置的步骤如下:

1) 通过sdk或CLI获得最新的配置区块。

2) 编辑配置区块。

3) 计算配置更新量。

4) 为配置区块添加配置更新量。

5) sdk或CLI签名并发送配置区块。

若新的配置区块通过验证,则通道配置以最新配置区块为准。具体操作流程请参考后文修改通道配置。

(未完待续)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 亨利笔记 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 通道的配置
  • 2. 使用configtxgen工具生成通道的配置
  • 3. 通道相关命令
  • 4. 动态修改通道配置
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档