/// <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));
        }