Fabric命令行工具及运行思路(一)

Cryptogen

命令行工具:

名称功能参数帮助
ext拓展已存在网络inputdir现有网络所在的目录
version显示版本信息
gen创建密钥材料outputdir文件的输出目录
Genconfigfile要使用的配置模板

主程序流程如下:

  1. 根据不同的功能做出不同的响应

generate

如果功能为generate:

  1. 获得config,config的参数包括:

Ordererorg与peerorgs,其结构体定义如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HjLZu7S3-1628858465439)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812154900450.png)]

其中CA:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7U8iWQTI-1628858465443)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812154907073.png)]

template:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RRMCen2V-1628858465444)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812154915881.png)]

Specs:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mPh5mYa9-1628858465446)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812154944723.png)]

Userspec:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LrGEkLJY-1628858465447)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812154955990.png)]

  1. 生成Peer组织

    1. 先生成组织名,即orgspec.Domain
    2. 获取org,ca,tlsca,msp,peer,users,admincerts的证书路径
    3. 创建签名CA,需要参数为:cadir,orgname,orgspec.ca.commonname, orgspec.ca.country, orgspec.ca.province, orgSpec.CA.Locality, orgSpec.CA.OrganizationalUnit, orgSpec.CA.StreetAddress, orgSpec.CA.PostalCode
    4. 创建tlsca,需要参数为tlsCADir, orgName, “tls”+orgSpec.CA.CommonName, orgSpec.CA.Country, orgSpec.CA.Province, orgSpec.CA.Locality, orgSpec.CA.OrganizationalUnit, orgSpec.CA.StreetAddress, orgSpec.CA.PostalCode
    5. 创建验证MSP,需要参数为mspDir, signCA, tlsCA, orgSpec.EnableNodeOUs
    6. 创建Peer节点:需要参数为peersDir, orgSpec.Specs, signCA, tlsCA, msp.PEER, orgSpec.EnableNodeOUs
    7. 生成用户组users
    8. 生成admin用户并加入用户组
    9. 创建client节点,所需要的参数为usersdir,users,signca,tlsca,orgspec。Enablenodeous
    10. 将admin的证书复制到组织的msp的admincert,即为组织颁布admin证书
    11. 将admin的证书复制给组织的每一个节点的msp的admincert,即颁布admin证书
  2. 生成Orderer组织

    1. 与生成peer组织相同,只不过peer变为orderer

extend

如果command为extend:

  1. 获取配置config

  2. 拓展Peer组织

    1. 获取组织名orgname
    2. 生成peer组织文件路径
    3. 生成peer组织,根据inputdir和orgspec
    4. 生成Peer与users,ca,tlsca路径
    5. 根据cadir,tlscadir,orgspec,orgspec…ca.commonname获取signca与tlsca
    6. 根据peerdir,orgspec.specs,signca,tlsca,orgspec…ca.commonname来产生peer节点
    7. 生成adminuser
    8. 将admin 证书分发给组织中每个节点的MSP的admincerts
    9. 建立用户组users,并根据userdir,users,signca,tlsca,orgspec.enablenodesous来产生client节点

showtemplate

如果command为showtemplate:打印默认的配置

version

如果command为version,打印版本信息

Cryptotxgen

所用到的参数描述:

名称功能
Outputblock写入创世块的路径
Channelid在cryptotxgen用到的通道id
Outputchannelcreatetx写入通道创建配置的路径
channelCreateTxBaseProfile指定要考虑的配置文件作为orderer系统通道当前状态,以允许在通道创建tx期间修改非应用程序参数
profileYaml文件用于generation
configPath包含配置文件的路径
inspectBlock在指定的路径中,打印块中包含的配置
inspectChannelCreateTx在指定的路径中,打印交易中包含的配置
outputAnchorPeersUpdate创建一个配置更新去更新锚节点配置(只在第一次更新时起作用)
Asorg作为特定的组织执行配置生成,只包括org有权限设置的写集中的值
Pringorg以json的格式打印组织定义
  1. 从yaml文件里获取如下配置:

最顶层Top-level包括:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-taR88PNx-1628858517014)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812155016334.png)]

其中,Profiles为

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z0TEFmDr-1628858517017)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812155023207.png)]

其中Application为

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vm2wFRb8-1628858517018)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812155038851.png)]

其中Organization为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vD0iNUT2-1628858517020)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812155050256.png)]

其中Policy为

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lohc6TW0-1628858517022)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812155057398.png)]

Anchorpeer为

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JGn9VMWP-1628858517023)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812155116764.png)]

Orderer:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GasNFgvy-1628858517024)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812155126216.png)]

Batchsize:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A3eIp013-1628858517024)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812155134655.png)]

Kafka:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b6hM9Hf0-1628858517025)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812155148122.png)]

Etcdraft:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zTgUjh8l-1628858517026)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812155158770.png)]

Consenter:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z50ZNyah-1628858517027)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812155206444.png)]

联盟定义为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PsrQbVst-1628858517027)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812155215062.png)]

默认值的toplevel定义为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bqsYoGsr-1628858517028)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20210812155224139.png)]

整体流程如下:

  1. 变量定义与描述,outputBlock, outputChannelCreateTx, channelCreateTxBaseProfile, profile, configPath, channelID, inspectBlock, inspectChannelCreateTx, outputAnchorPeersUpdate, asOrg, printOrg

  2. 一系列的验错

  3. 加载configuration:

    1. 初始化factory,这里的配置用的是默认配置
    2. 定义profileconfig,类型为上面的参数中的profile
      1. 在outputblock或outputChannelCreateTx或outputAnchorPeersUpdate不为空的时候,加载配置文件中的配置,如果有配置目录的加载配置目录里的,没有的话就当前目录,赋值给profileconfig
    3. 定义baseprofile:
      1. 将configpath(若无,则当前目录下)中的channelcreatetxbaseprofile文件加载,赋值给baseprofile
  4. 若outputblock为空,输出区块

    1. 对oreder进行判定,看是否为空,不为空继续

    2. 对联盟进行判定,看是否为空,若为空且application字段为空,则停止,其他的情况为继续创世块创建

    3. 根据channelid来对创世块进行创建

    4. 生成并写入outputblock文件

  5. outputchannelcratetx不为空,输出通道创建交易

    1. 定义envelope变量,包含payload与signature等字段
    2. 根据channelid与genesisconfig类型的conf来生成通道创建交易
      1. 根据conf来生成模板
      2. 根据channelid,signer,conf,template来生成交易
      3. 返回签名后的configtx
    3. 生成并写入outputchannelcreatetx文件
  6. 若inspectblock不为空,检查区块

    1. 读取区块信息
    2. 解析区块信息
    3. 输出区块信息(json)
  7. 若inspectchannelcreatetx不为空,检查区块创建交易

    1. 读取交易信息
    2. 解析交易信息
    3. 输出交易信息(json)
  8. 若outputanchorpeerupdate不为空,输出锚节点更新(设置锚节点)

    1. 创建锚节点更新过程
    2. 对要更新的组织与application进行检验,看是否为空
    3. 根据conf来生成原来的通道组original
    4. 将通道组Application中的version置1
    5. 生成update
    6. 将对应通道组中的组织的peer进行删除
    7. 根据包括原通道组的config与包括更新后的通道组的config来进行读写集的改变
    8. 生成ConfigUpdateEnvelope,包括更新后的设置
    9. 生成更新交易
    10. 生成并写入outputAnchorPeersUpdate文件
  9. 若printorg不为空,则进行打印

    1. 将toplevel加载到toplevelconfig中
    2. 打印组织

Configtxlator

名称功能参数帮助
start开始configtxlator REST severHostnameREST服务器将侦听的主机名或IP
PortREST服务器将侦听的端口
Cors允许的cors域
Protoencode将一个JSON文件转换为protobufprotoEncodeType要编码的protobuf结构的
protoEncodeSource包含json文档的文件
protoEncodeDest一个写入输出的文件
protoDecode将一个proto信息转为jsonprotoDecodeType要解码的结构的类型
protoDecodeSource包含原始消息的文件
protoDecodeDest要向其中写入JSON文档的文件
protoDecode取两个marshal编码后的common.config的消息,计算两者间交易的配置更新computeUpdateOriginal原始配置信息
computeUpdateOriginal更新后的配置信息
computeUpdateChannelID此更新的通道id
computeUpdateDest要向其中写入JSON文档的文件
Version显示版本信息

Configtxlator用于创建fabric的通道设置

对于不同的命令来进行不同的响应:

Start

  1. 如果命令为start:

    1. 根据address来创建tcp网络listener
    2. 如果cors长度>0

    ​ 1. 根据cors创建origins

    ​ 2. 根据http.methodpost创建method

    ​ 3. 根据content-type创建headers

    ​ 4. 根据listener,orgins,methods,headers来进行服务

    1. 如果cors<=0:

    ​ 1. 则直接根据listener和rset.newrouter来进行服务

Protoencode

如果命令为protoencode:

  1. 根据protoencodetype,protoencodesource,protoencodedest来将消息进行编码

  2. 先对messagetype进行判断,生成msgtype

  3. 根据msgtype生成一个指向该信息类型的零值指针msg

  4. 将输入input与msg进行解码

  5. 将msg进行整理

  6. 将out写入到output里

Decodeproto

如果命令为decodeproto:

  1. 根据msgname来对messagetype进行判断生成msgtype

  2. 同样生成零值指针msg

  3. 将输入与msg进行读取获得in

  4. 将in与msg进行解码

  5. 将output,msg进行编码

Computeupdate

如果命令为computeupdate:

  1. 根据computeupdateorginal,computeupdateupdated,computeupdatedest,computeupdatechannelid来计算更新

  2. 读取original得到origin

  3. 定义cb.config类型的origconf

  4. 根据origin, origconf进行解编

  5. 读取updated获得updtin

  6. 定义cb.config类型的updtconf

  7. 根据updtconf与updtin进行解编

  8. 根据origconf与updtconf来计算更新

    ​ 1. 根据两者结构体的channelgroup生成readset,writeset,groupupdated

​ 2. 返回带有更新后的读写集的配置cu

  1. 将channelid赋值给cu.channelid

  2. 再将cu整编后生成outbytes

  3. 将outbytes接入output中

Version

如果命令为version,直接打印version信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值