code: func CreateHeader(txType common.HeaderType, channelId string, creator []byte, tlsCertHash []byte) (string, *common.Header, error) {
  	ts, err := ptypes.TimestampProto(time.Now())
  	if err != nil {
  		return "", nil, err
  	}
  
  	nonce, err := crypto.GetRandomNonce()
  	if err != nil {
  		return "", nil, err
  	}
  
  	txId, err := utils.ComputeTxID(nonce, creator)
  	if err != nil {
  		return "", nil, err
  	}
  
  	chdr := &common.ChannelHeader{
  		Type:        int32(txType),
  		ChannelId:   channelId,
  		TxId:        txId,
  		Epoch:       uint64(0),
  		Timestamp:   ts,
  		TlsCertHash: tlsCertHash,
  	}
  	chdrBytes, err := proto.Marshal(chdr)
  	if err != nil {
  		return "", nil, err
  	}
  
  	shdr := &common.SignatureHeader{
  		Creator: creator,
  		Nonce:   nonce,
  	}
  	shdrBytes, err := proto.Marshal(shdr)
  	if err != nil {
  		return "", nil, err
  	}
  
  	header := &common.Header{
  		ChannelHeader:   chdrBytes,
  		SignatureHeader: shdrBytes,
  	}
  
  	return txId, header, nil
  }
docs: // CreateHeader creates common.Header for a token transaction
  // tlsCertHash is for client TLS cert, only applicable when ClientAuthRequired is true