code: func CreateChannel(reqCtx reqContext.Context, request CreateChannelRequest, opts ...Opt) (fab.TransactionID, error) {
  	if request.Orderer == nil {
  		return fab.EmptyTransactionID, errors.New("missing orderer request parameter for the initialize channel")
  	}
  
  	if request.Name == "" {
  		return fab.EmptyTransactionID, errors.New("missing name request parameter for the new channel")
  	}
  
  	if request.Envelope != nil {
  		return createChannelFromEnvelope(reqCtx, request)
  	}
  
  	if request.Config == nil {
  		return fab.EmptyTransactionID, errors.New("missing envelope request parameter containing the configuration of the new channel")
  	}
  
  	if request.Signatures == nil {
  		return fab.EmptyTransactionID, errors.New("missing signatures request parameter for the new channel")
  	}
  
  	ctx, ok := contextImpl.RequestClientContext(reqCtx)
  	if !ok {
  		return fab.EmptyTransactionID, errors.New("creation of transaction header failed, failed to extract client context from reqContext")
  	}
  	txh, err := txn.NewHeader(ctx, request.Name)
  	if err != nil {
  		return fab.EmptyTransactionID, errors.WithMessage(err, "creation of transaction header failed")
  	}
  
  	optionsValue := getOpts(opts...)
  
  	_, err = retry.NewInvoker(retry.New(optionsValue.retry)).Invoke(
  		func() (interface{}, error) {
  			return nil, createOrUpdateChannel(reqCtx, txh, request)
  		},
  	)
  	return txh.TransactionID(), err
  }
docs: // CreateChannel calls the orderer to start building the new channel.