/** * Private constructor to prevent instantiation. */ // static ICryptoSuite suite = null; /* * createChannelHeader create chainHeader * * @param type header type. See {@link ChannelHeader.Builder#setType}. * @param txID transaction ID. See {@link ChannelHeader.Builder#setTxId}. * @param channelID channel ID. See {@link ChannelHeader.Builder#setChannelId}. * @param epoch the epoch in which this header was generated. See {@link ChannelHeader.Builder#setEpoch}. * @param timeStamp local time when the message was created. See {@link ChannelHeader.Builder#setTimestamp}. * @param chaincodeHeaderExtension extension to attach dependent on the header type. See {@link ChannelHeader.Builder#setExtension}. * @param tlsCertHash * @return a new chain header. */ public static ChannelHeader CreateChannelHeader(HeaderType type, string txID, string channelID, long epoch, Timestamp timeStamp, ChaincodeHeaderExtension chaincodeHeaderExtension, byte[] tlsCertHash) { if (isDebugLevel) { string tlschs = string.Empty; if (tlsCertHash != null) { tlschs = tlsCertHash.ToHexString(); } logger.Debug($"ChannelHeader: type: {type}, version: 1, Txid: {txID}, channelId: {channelID}, epoch {epoch}, clientTLSCertificate digest: {tlschs}"); } ChannelHeader ret = new ChannelHeader { Type = (int)type, Version = 1, TxId = txID, ChannelId = channelID, Timestamp = timeStamp, Epoch = (ulong)epoch }; if (null != chaincodeHeaderExtension) { ret.Extension = chaincodeHeaderExtension.ToByteString(); } if (tlsCertHash != null) { ret.TlsCertHash = ByteString.CopyFrom(tlsCertHash); } return(ret); }
private static Proposal CreateChaincodeProposalWithTxIDNonceAndTransient(ChaincodeSpec ccis, TransactionHeader transactionHeader, Dictionary <string, string> transientMap) { var ccHdrExt = new ChaincodeHeaderExtension() { ChaincodeId = ccis.ChaincodeId }; var ccHdrExtBytes = Util.Marshal(ccHdrExt); var cis = new ChaincodeInvocationSpec() { ChaincodeSpec = ccis }; var cisBytes = Util.Marshal(cis); var ccPropPayload = new ChaincodeProposalPayload() { Input = cisBytes, TransientMap = Util.ConvertMapField(transientMap) }; var ccPropPayloadBytes = Util.Marshal(ccPropPayload); var timestamp = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(DateTime.UtcNow); // TODO: epoch is now set to zero. This must be changed once we // get a more appropriate mechanism to handle it in. ulong epoch = 0; var hdr = new Header() { ChannelHeader = Util.Marshal(new ChannelHeader() { Type = (int)HeaderType.EndorserTransaction, TxId = transactionHeader.Id, Timestamp = timestamp, ChannelId = transactionHeader.ChannelID, Extension = ccHdrExtBytes, Epoch = epoch }), SignatureHeader = Util.Marshal(new SignatureHeader() { Nonce = transactionHeader.Nonce, Creator = transactionHeader.Creator }) }; var hdrBytes = Util.Marshal(hdr); var prop = new Proposal() { Header = hdrBytes, Payload = ccPropPayloadBytes }; return(prop); }
private Proposal CreateFabricProposal(string chID, Protos.Peer.ChaincodeID ccodeID) { if (null == transientMap) { transientMap = new Dictionary <string, byte[]>(); } if (IS_DEBUG_LEVEL) { foreach (KeyValuePair <string, byte[]> tme in transientMap) { logger.Debug($"transientMap('{tme.Key.LogString()}', '{Encoding.UTF8.GetString(tme.Value).LogString()}'))"); } } ChaincodeHeaderExtension chaincodeHeaderExtension = new ChaincodeHeaderExtension { ChaincodeId = ccodeID }; ChannelHeader chainHeader = ProtoUtils.CreateChannelHeader(HeaderType.EndorserTransaction, context.TxID, chID, context.Epoch, context.FabricTimestamp, chaincodeHeaderExtension, null); ChaincodeInvocationSpec chaincodeInvocationSpec = CreateChaincodeInvocationSpec(ccodeID, ccType); ChaincodeProposalPayload payload = new ChaincodeProposalPayload { Input = chaincodeInvocationSpec.ToByteString() }; foreach (KeyValuePair <string, byte[]> pair in transientMap) { payload.TransientMap.Add(pair.Key, ByteString.CopyFrom(pair.Value)); } Header header = new Header { SignatureHeader = ProtoUtils.GetSignatureHeaderAsByteString(context), ChannelHeader = chainHeader.ToByteString() }; return(new Proposal { Header = header.ToByteString(), Payload = payload.ToByteString() }); }