code: func sendEnvelope(reqCtx reqContext.Context, envelope *fab.SignedEnvelope, orderer fab.Orderer) (*common.Block, error) {
  
  	logger.Debugf("Broadcasting envelope to orderer :%s\n", orderer.URL())
  	blocks, errs := orderer.SendDeliver(reqCtx, envelope)
  
  	// This function currently returns the last received block and error.
  	var block *common.Block
  	var err multi.Errors
  
  read:
  	for {
  		select {
  		case b, ok := <-blocks:
  			// We need to block until SendDeliver releases the connection. Currently
  			// this is triggered by the go chan closing.
  			// TODO: we may want to refactor (e.g., adding a synchronous SendDeliver)
  			if !ok {
  				break read
  			}
  			block = b
  		case e := <-errs:
  			err = append(err, e)
  		}
  	}
  
  	// drain remaining errors.
  	for i := 0; i < len(errs); i++ {
  		e := <-errs
  		err = append(err, e)
  	}
  
  	return block, err.ToError()
  }
docs: // sendEnvelope sends the given envelope to each orderer and returns a block response