code: func createOrUpdateChannel(reqCtx reqContext.Context, txh *txn.TransactionHeader, request CreateChannelRequest) error {
  
  	configUpdateEnvelope := &common.ConfigUpdateEnvelope{
  		ConfigUpdate: request.Config,
  		Signatures:   request.Signatures,
  	}
  	configUpdateEnvelopeBytes, err := proto.Marshal(configUpdateEnvelope)
  	if err != nil {
  		return errors.Wrap(err, "marshal configUpdateEnvelope failed")
  	}
  
  	ctx, ok := contextImpl.RequestClientContext(reqCtx)
  	if !ok {
  		return errors.New("failed get client context from reqContext for Creating ChannelHeader")
  	}
  
  	hash, err := ccomm.TLSCertHash(ctx.EndpointConfig())
  	if err != nil {
  		return errors.WithMessage(err, "failed to get tls cert hash")
  	}
  
  	channelHeaderOpts := txn.ChannelHeaderOpts{
  		TxnHeader:   txh,
  		TLSCertHash: hash,
  	}
  	channelHeader, err := txn.CreateChannelHeader(common.HeaderType_CONFIG_UPDATE, channelHeaderOpts)
  	if err != nil {
  		return errors.WithMessage(err, "CreateChannelHeader failed")
  	}
  
  	payload, err := txn.CreatePayload(txh, channelHeader, configUpdateEnvelopeBytes)
  	if err != nil {
  		return errors.WithMessage(err, "CreatePayload failed")
  	}
  
  	_, err = txn.BroadcastPayload(reqCtx, payload, []fab.Orderer{request.Orderer})
  	if err != nil {
  		return errors.WithMessage(err, "SendEnvelope failed")
  	}
  	return nil
  }
docs: // createOrUpdateChannel creates a new channel or updates an existing channel.