/// <summary> /// 在本地创建新的通道(特殊 等于是在本地创建创世区块) /// </summary> /// <param name="request"></param> /// <returns></returns> private ChainCodeInvokeResponse CreateNewChannel(IChaincodeStub stub) { var identity = stub.GetPeerIdentity(); var args = stub.GetArgs(); if (args.Length != 1) { return(stub.Response("参数个数不正确", StatusCode.BAD_ARGS_NUMBER)); } //组织 var OrgConfig = new OrgConfig(); OrgConfig.OrgId = identity.OrgId; OrgConfig.Name = identity.Name; OrgConfig.Certificate = identity.Certificate; OrgConfig.Address = identity.Address; //通道 var channel = new ChannelConfig(); channel.ChannelID = args[0]; channel.OrgConfigs.Add(OrgConfig); //初始化系统链码 InitSystemChainCode(channel); stub.SetChannelConfig(channel); return(stub.Response("", StatusCode.Successful)); }
/// <summary> /// 添加组织节点 只能更改自己的组织节点 /// </summary> /// <param name="stub"></param> /// <returns></returns> private ChainCodeInvokeResponse AddOrgMember(IChaincodeStub stub) { if (stub.GetArgs().Count() != 1) { return(stub.Response("", StatusCode.BAD_ARGS_NUMBER)); } var arg = stub.GetArgs()[0]; OrgMemberConfig newOrgMember = Newtonsoft.Json.JsonConvert.DeserializeObject <OrgMemberConfig>(arg); #region 请求合法性校验 //如果修改的组织节点等于本组织节点 则需要验证请求是否由本节点发出 var identity = stub.GetPeerIdentity(); if (newOrgMember.OrgId == identity.OrgId) { var signature = stub.GetTxRequestHeaderSignature(); //这里添加验证 } #endregion #region 成员数据完整性校验 if (string.IsNullOrEmpty(newOrgMember.OrgId)) { return(stub.Response("组织ID不能为空", StatusCode.BAD_OTHERS)); } if (string.IsNullOrEmpty(newOrgMember.Name)) { return(stub.Response("成员名称不能为空", StatusCode.BAD_OTHERS)); } if (newOrgMember.Certificate == null) { return(stub.Response("证书不存在", StatusCode.BAD_OTHERS)); } if (!newOrgMember.Certificate.Check()) { return(stub.Response("证书数据不完整", StatusCode.BAD_OTHERS)); } if (newOrgMember.Certificate.TBSCertificate.CAType == CAType.Peer) { return(stub.Response("证书类型不正确", StatusCode.BAD_OTHERS)); } #endregion var channelconfig = stub.GetChannelConfig(); var org = channelconfig.OrgConfigs.Where(p => p.OrgId == newOrgMember.OrgId).FirstOrDefault(); if (org == null) { return(stub.Response("组织不存在", StatusCode.BAD_OTHERS)); } #region 成员唯一性检验 if (org.OrgMember.Any(p => p.Name == newOrgMember.Name)) { return(stub.Response("成员名称重复", StatusCode.BAD_OTHERS)); } if (org.OrgMember.Any(p => p.Certificate.TBSCertificate.SerialNumber == p.Certificate.TBSCertificate.SerialNumber)) { return(stub.Response("成员证书编号重复", StatusCode.BAD_OTHERS)); } if (org.OrgMember.Any(p => p.Certificate.TBSCertificate.PublicKey == p.Certificate.TBSCertificate.PublicKey)) { return(stub.Response("成员公钥重复", StatusCode.BAD_OTHERS)); } #endregion org.OrgMember.Add(newOrgMember); stub.SetChannelConfig(channelconfig); return(stub.Response("", StatusCode.Successful)); }