Cryptogen
命令行工具:
名称 | 功能 | 参数 | 帮助 |
ext | 拓展已存在网络 | inputdir | 现有网络所在的目录 |
version | 显示版本信息 | ||
gen | 创建密钥材料 | outputdir | 文件的输出目录 |
Genconfigfile | 要使用的配置模板 |
主程序流程如下:
- 根据不同的功能做出不同的响应
generate
如果功能为generate:
- 获得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)]
-
生成Peer组织
- 先生成组织名,即orgspec.Domain
- 获取org,ca,tlsca,msp,peer,users,admincerts的证书路径
- 创建签名CA,需要参数为:cadir,orgname,orgspec.ca.commonname, orgspec.ca.country, orgspec.ca.province, orgSpec.CA.Locality, orgSpec.CA.OrganizationalUnit, orgSpec.CA.StreetAddress, orgSpec.CA.PostalCode
- 创建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
- 创建验证MSP,需要参数为mspDir, signCA, tlsCA, orgSpec.EnableNodeOUs
- 创建Peer节点:需要参数为peersDir, orgSpec.Specs, signCA, tlsCA, msp.PEER, orgSpec.EnableNodeOUs
- 生成用户组users
- 生成admin用户并加入用户组
- 创建client节点,所需要的参数为usersdir,users,signca,tlsca,orgspec。Enablenodeous
- 将admin的证书复制到组织的msp的admincert,即为组织颁布admin证书
- 将admin的证书复制给组织的每一个节点的msp的admincert,即颁布admin证书
-
生成Orderer组织
- 与生成peer组织相同,只不过peer变为orderer
extend
如果command为extend:
-
获取配置config
-
拓展Peer组织
- 获取组织名orgname
- 生成peer组织文件路径
- 生成peer组织,根据inputdir和orgspec
- 生成Peer与users,ca,tlsca路径
- 根据cadir,tlscadir,orgspec,orgspec…ca.commonname获取signca与tlsca
- 根据peerdir,orgspec.specs,signca,tlsca,orgspec…ca.commonname来产生peer节点
- 生成adminuser
- 将admin 证书分发给组织中每个节点的MSP的admincerts
- 建立用户组users,并根据userdir,users,signca,tlsca,orgspec.enablenodesous来产生client节点
showtemplate
如果command为showtemplate:打印默认的配置
version
如果command为version,打印版本信息
Cryptotxgen
所用到的参数描述:
名称 | 功能 |
---|---|
Outputblock | 写入创世块的路径 |
Channelid | 在cryptotxgen用到的通道id |
Outputchannelcreatetx | 写入通道创建配置的路径 |
channelCreateTxBaseProfile | 指定要考虑的配置文件作为orderer系统通道当前状态,以允许在通道创建tx期间修改非应用程序参数 |
profile | Yaml文件用于generation |
configPath | 包含配置文件的路径 |
inspectBlock | 在指定的路径中,打印块中包含的配置 |
inspectChannelCreateTx | 在指定的路径中,打印交易中包含的配置 |
outputAnchorPeersUpdate | 创建一个配置更新去更新锚节点配置(只在第一次更新时起作用) |
Asorg | 作为特定的组织执行配置生成,只包括org有权限设置的写集中的值 |
Pringorg | 以json的格式打印组织定义 |
- 从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)]
整体流程如下:
-
变量定义与描述,outputBlock, outputChannelCreateTx, channelCreateTxBaseProfile, profile, configPath, channelID, inspectBlock, inspectChannelCreateTx, outputAnchorPeersUpdate, asOrg, printOrg
-
一系列的验错
-
加载configuration:
- 初始化factory,这里的配置用的是默认配置
- 定义profileconfig,类型为上面的参数中的profile
- 在outputblock或outputChannelCreateTx或outputAnchorPeersUpdate不为空的时候,加载配置文件中的配置,如果有配置目录的加载配置目录里的,没有的话就当前目录,赋值给profileconfig
- 定义baseprofile:
- 将configpath(若无,则当前目录下)中的channelcreatetxbaseprofile文件加载,赋值给baseprofile
-
若outputblock为空,输出区块
-
对oreder进行判定,看是否为空,不为空继续
-
对联盟进行判定,看是否为空,若为空且application字段为空,则停止,其他的情况为继续创世块创建
-
根据channelid来对创世块进行创建
-
生成并写入outputblock文件
-
-
outputchannelcratetx不为空,输出通道创建交易
- 定义envelope变量,包含payload与signature等字段
- 根据channelid与genesisconfig类型的conf来生成通道创建交易
- 根据conf来生成模板
- 根据channelid,signer,conf,template来生成交易
- 返回签名后的configtx
- 生成并写入outputchannelcreatetx文件
-
若inspectblock不为空,检查区块
- 读取区块信息
- 解析区块信息
- 输出区块信息(json)
-
若inspectchannelcreatetx不为空,检查区块创建交易
- 读取交易信息
- 解析交易信息
- 输出交易信息(json)
-
若outputanchorpeerupdate不为空,输出锚节点更新(设置锚节点)
- 创建锚节点更新过程
- 对要更新的组织与application进行检验,看是否为空
- 根据conf来生成原来的通道组original
- 将通道组Application中的version置1
- 生成update
- 将对应通道组中的组织的peer进行删除
- 根据包括原通道组的config与包括更新后的通道组的config来进行读写集的改变
- 生成ConfigUpdateEnvelope,包括更新后的设置
- 生成更新交易
- 生成并写入outputAnchorPeersUpdate文件
-
若printorg不为空,则进行打印
- 将toplevel加载到toplevelconfig中
- 打印组织
Configtxlator
名称 | 功能 | 参数 | 帮助 |
start | 开始configtxlator REST sever | Hostname | REST服务器将侦听的主机名或IP |
Port | REST服务器将侦听的端口 | ||
Cors | 允许的cors域 | ||
Protoencode | 将一个JSON文件转换为protobuf | protoEncodeType | 要编码的protobuf结构的 |
protoEncodeSource | 包含json文档的文件 | ||
protoEncodeDest | 一个写入输出的文件 | ||
protoDecode | 将一个proto信息转为json | protoDecodeType | 要解码的结构的类型 |
protoDecodeSource | 包含原始消息的文件 | ||
protoDecodeDest | 要向其中写入JSON文档的文件 | ||
protoDecode | 取两个marshal编码后的common.config的消息,计算两者间交易的配置更新 | computeUpdateOriginal | 原始配置信息 |
computeUpdateOriginal | 更新后的配置信息 | ||
computeUpdateChannelID | 此更新的通道id | ||
computeUpdateDest | 要向其中写入JSON文档的文件 | ||
Version | 显示版本信息 | ||
Configtxlator用于创建fabric的通道设置
对于不同的命令来进行不同的响应:
Start
-
如果命令为start:
- 根据address来创建tcp网络listener
- 如果cors长度>0
1. 根据cors创建origins
2. 根据http.methodpost创建method
3. 根据content-type创建headers
4. 根据listener,orgins,methods,headers来进行服务
- 如果cors<=0:
1. 则直接根据listener和rset.newrouter来进行服务
Protoencode
如果命令为protoencode:
-
根据protoencodetype,protoencodesource,protoencodedest来将消息进行编码
-
先对messagetype进行判断,生成msgtype
-
根据msgtype生成一个指向该信息类型的零值指针msg
-
将输入input与msg进行解码
-
将msg进行整理
-
将out写入到output里
Decodeproto
如果命令为decodeproto:
-
根据msgname来对messagetype进行判断生成msgtype
-
同样生成零值指针msg
-
将输入与msg进行读取获得in
-
将in与msg进行解码
-
将output,msg进行编码
Computeupdate
如果命令为computeupdate:
-
根据computeupdateorginal,computeupdateupdated,computeupdatedest,computeupdatechannelid来计算更新
-
读取original得到origin
-
定义cb.config类型的origconf
-
根据origin, origconf进行解编
-
读取updated获得updtin
-
定义cb.config类型的updtconf
-
根据updtconf与updtin进行解编
-
根据origconf与updtconf来计算更新
1. 根据两者结构体的channelgroup生成readset,writeset,groupupdated
2. 返回带有更新后的读写集的配置cu
-
将channelid赋值给cu.channelid
-
再将cu整编后生成outbytes
-
将outbytes接入output中
Version
如果命令为version,直接打印version信息