zoukankan      html  css  js  c++  java
  • Hyperledger Fabric(3)通道与组织

    1,通道的结构

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

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

    在文章https://www.cnblogs.com/xdyixia/p/11765820.html 创始块的生成步骤中,就有 系统的创始块和 Channel的创始块两部分。

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

    (这里概念有点多,注意各个名词的关系)

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

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

    实体的MSP标识(ID)为 Org1MSP; 实体身份证书信任链源头CA1。 实体只要满足通道任意成员MSP 校验,则认为该实体有权限访问通道中的数据

    ************************************************************************

    MSP:成员服务提供者 Member service provider

    MSP只是一个接口,Fabric-CA是MSP接口的一种实现

    MSP抽象提供:具体的身份格式,用户证书验证,用户证书撤销,签名生成和验证,把所有密码学机制与协议都抽象了出来。

    Fabric-CA 用于生成证书和密钥,以真正的初始化MSP。 Fabric-CA是用于身份管理的MSP接口的默认实现。

    https://blog.csdn.net/maixia24/article/details/79761367

    https://www.jianshu.com/p/dd19fc125356?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    ************************************************************************

    2,通道的配置

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

    3,使用configtxgen工具生成通道的配置

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

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

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

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

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

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

     

     

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

    系统通道必须定义 Orderer 和 Consortiums 两部分,应用通道必须定义 Application 和 Consortium 两部分。

    定义好 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

    4,通道相关命令

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

    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的路径以及排序节点的地址。

    5,动态修改通道配置

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

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

    2)编辑配置区块。

    3)计算配置更新量。

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

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

    若新的配置区块通过验证,则通道配置以最新配置区块为准。

    https://www.8btc.com/article/283739

    《区块链核心技术与应用》

    《区块链开发实战 Hyperledger Fabric关键技术与案例分析》

  • 相关阅读:
    awk线程号
    std::string::substr函数
    计数器表的简单使用
    vim + oh-my-zsh + git搭建开发环境
    <<代码大全>>阅读笔记之二 变量名的力量
    <<代码大全>>阅读笔记之一 使用变量的一般事项
    压测工具ab的简单使用
    nginx配置文件详解
    numba初体验
    Linux查找文件内容小技巧
  • 原文地址:https://www.cnblogs.com/xdyixia/p/11726882.html
Copyright © 2011-2022 走看看