code: func (mbc *Receiver) Ordered(env *cb.Envelope) ([][]*cb.Envelope, bool) {
  	defer func() {
  		<-mbc.Block
  	}()
  
  	mbc.mutex.Lock()
  	defer mbc.mutex.Unlock()
  
  	if mbc.IsolatedTx {
  		logger.Debugf("Receiver: Returning dual batch")
  		res := [][]*cb.Envelope{mbc.curBatch, {env}}
  		mbc.curBatch = nil
  		return res, false
  	}
  
  	if mbc.CutAncestors {
  		logger.Debugf("Receiver: Returning current batch and appending newest env")
  		res := [][]*cb.Envelope{mbc.curBatch}
  		mbc.curBatch = []*cb.Envelope{env}
  		return res, true
  	}
  
  	if !mbc.SkipAppendCurBatch {
  		mbc.curBatch = append(mbc.curBatch, env)
  	}
  
  	if mbc.CutNext {
  		logger.Debugf("Receiver: Returning regular batch")
  		res := [][]*cb.Envelope{mbc.curBatch}
  		mbc.curBatch = nil
  		return res, false
  	}
  
  	logger.Debugf("Appending to batch")
  	return nil, true
  }
docs: // Ordered will add or cut the batch according to the state of Receiver, it blocks reading from Block on return