fabric-sdk-java 读取channel配置区块 , 解析配置区块

代码不是很全, 主要针对配置区块的解析了, 其他地方如果有疑问, 可以参考我的其他博客。https://blog.csdn.net/qq_27348837/article/details/95489720

直接上代码

UserContext org1Admin = new UserContext();
File pkFolder1 = new File(Config.ORG1_USR_ADMIN_PK);
File[] pkFiles1 = pkFolder1.listFiles();
File certFolder1 = new File(Config.ORG1_USR_ADMIN_CERT);
File[] certFiles1 = certFolder1.listFiles();
Enrollment enrollOrg1Admin = Util.getEnrollment(Config.ORG1_USR_ADMIN_PK, pkFiles1[0].getName(),
		Config.ORG1_USR_ADMIN_CERT, certFiles1[0].getName());
org1Admin.setEnrollment(enrollOrg1Admin);
org1Admin.setMspId(Config.ORG1_MSP);
org1Admin.setName(Config.ADMIN);


FabricClient fabClient = new FabricClient(org1Admin);
ChannelClient channelClient = fabClient.createChannelClient(Config.CHANNEL_NAME);
Channel channel = channelClient.getChannel();
Properties properties1 = Util.gete2ePro("peer",Config.ORG1_PEER_0);
Peer peer = fabClient.getInstance().newPeer(Config.ORG1_PEER_0, Config.ORG1_PEER_0_URL,properties1);

Properties orderPro = Util.gete2ePro("orderer", Config.ORDERER_NAME);
Orderer orderer = fabClient.getInstance().newOrderer(Config.ORDERER_NAME, Config.ORDERER_URL,orderPro);

channel.addPeer(peer);
channel.addOrderer(orderer);
channel.initialize();

//获取配置区块数据
byte[] channelConfigurationBytes = channel.getChannelConfigurationBytes();
//解析配置区块
Configtx.Config channelConfig = Configtx.Config.parseFrom(channelConfigurationBytes);
Configtx.ConfigGroup channelGroup = channelConfig.getChannelGroup();
//获取orderer地址,
Configtx.ConfigValue ordererAddresses2 = channelGroup.getValuesOrThrow("OrdererAddresses");	
ByteString value = ordererAddresses2.getValue();
//前两字节有个换行和一个乱码, 这里直接切割掉了,如果你有更好的处理方法, 可以在下方留言
value = value.substring(2);
System.out.println(value.toStringUtf8());

Configtx.ConfigGroup orderer2 = channelGroup.getGroupsOrThrow("Orderer");
//读取共识类型
Configtx.ConfigValue consensusType = orderer2.getValuesOrThrow("ConsensusType");	
//出块时间			
Configtx.ConfigValue BatchTimeout = orderer2.getValuesOrThrow("BatchTimeout");					

其实配置区块里还有很多其他信息, 你可以自己试着去解析 ,这里重点介绍一下三个方法, 首先看一下配置区块内容的存储格式如下, 这里截取其中的一部分。

配置区块的数据分为三种类型, 分别是,groups、policies、和values,你想要读取哪个配置,首先判断这块数据处于哪个区间,然后getValuesOrThrow(key)、getPoliciesOrThrow(key)、getGroupsOrThrow(key)三种方法,来获取到相应的值。另外注意层级,如果有嵌套,需要先获取外层对象,然后在获取里层的。

猜你喜欢

转载自blog.csdn.net/qq_27348837/article/details/106734603
今日推荐