示例#1
0
        /**
         * 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);
        }
示例#2
0
        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);
        }
示例#3
0
        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()
            });
        }