code: func Send(reqCtx reqContext.Context, tx *fab.Transaction, orderers []fab.Orderer) (*fab.TransactionResponse, error) {
  	if len(orderers) == 0 {
  		return nil, errors.New("orderers is nil")
  	}
  	if tx == nil {
  		return nil, errors.New("transaction is nil")
  	}
  	if tx.Proposal == nil || tx.Proposal.Proposal == nil {
  		return nil, errors.New("proposal is nil")
  	}
  
  	// the original header
  	hdr, err := protoutil.GetHeader(tx.Proposal.Proposal.Header)
  	if err != nil {
  		return nil, errors.Wrap(err, "unmarshal proposal header failed")
  	}
  	// serialize the tx
  	txBytes, err := protoutil.GetBytesTransaction(tx.Transaction)
  	if err != nil {
  		return nil, err
  	}
  
  	// create the payload
  	payload := common.Payload{Header: hdr, Data: txBytes}
  
  	transactionResponse, err := BroadcastPayload(reqCtx, &payload, orderers)
  	if err != nil {
  		return nil, err
  	}
  
  	return transactionResponse, nil
  }
docs: // Send send a transaction to the chain’s orderer service (one or more orderer endpoints) for consensus and committing to the ledger.