/// <summary> /// 节点对交易进行背书 /// </summary> /// <param name="request"></param> /// <returns></returns> public async Task <EndorseResponse> Endorse(TxRequest request) { EndorseResponse response = new EndorseResponse(); //背书 var result = await _node.ChainCodeSubmit(request); if (result.StatusCode != StatusCode.Successful) { response.Status = false; response.Msg = result.StatusCode.ToString() + ":" + result.Message; return(response); } response.TxReadWriteSet = result.TxReadWriteSet; response.Status = true; response.Msg = "背书完成"; response.Endorsement.Identity = _configProviders.GetPublicIndentity(); //var str = Newtonsoft.Json.JsonConvert.SerializeObject(response); var privatekey = _configProviders.GetPrivateKey(); //节点对背书数据签名 // response.Endorsement.Signature = DataHelper.RSASignature(str, privatekey); response.Endorsement.Signature = RSAHelper.SignData(privatekey, response); return(response); }
/// <summary> /// 创建新通道 默认只加载本地的节点 /// </summary> /// <param name="channelName"></param> public async Task <TxResponse> CreateNewChannel(string channelId) { //创建交易请求 var txHeader = new TxHeader(); txHeader.ChannelId = channelId; txHeader.Type = TxType.Invoke; txHeader.ChaincodeName = ConfigKey.SysNetConfigChaincode; txHeader.FuncName = ConfigKey.InitChannelFunc; txHeader.Args = new string[] { channelId }; var tx = ModelHelper.ToTxRequest(txHeader); EndorseResponse response = new EndorseResponse(); var result = ChainCodeSubmit(tx).Result; if (result.StatusCode != StatusCode.Successful) { return(new TxResponse() { Status = false, Msg = result.Message }); } response.TxReadWriteSet = result.TxReadWriteSet; response.Status = true; response.Msg = "背书完成"; response.Endorsement.Identity = _configProvider.GetPublicIndentity(); var str = Newtonsoft.Json.JsonConvert.SerializeObject(response); var privatekey = _configProvider.GetPrivateKey(); //节点对背书数据签名 response.Endorsement.Signature = RSAHelper.SignData(privatekey, response); Envelope envelope = new Envelope(); envelope.TxReqeust = tx; envelope.Endorsements.Add(response.Endorsement); envelope.PayloadReponse = new ProposaResponsePayload(); envelope.PayloadReponse.Message = response.Msg; envelope.PayloadReponse.Status = response.Status; envelope.PayloadReponse.TxReadWriteSet = response.TxReadWriteSet; var block = new Block(); block.Header.ChannelId = channelId; block.Header.Number = 0; block.Header.Term = 0; block.Header.Timestamp = DateTime.Now.Ticks; block.Data.Envelopes.Add(envelope); block.Signer.Identity = _configProvider.GetPublicIndentity(); //计算hash· block.Header.DataHash = RSAHelper.GenerateMD5(Newtonsoft.Json.JsonConvert.SerializeObject(block)); //对整个区块进行签名 block.Signer.Signature = RSAHelper.SignData(_configProvider.GetPrivateKey(), block); //上链 await _dataManager.PutOnChainBlockAsync(block); return(new TxResponse() { Status = true }); }