code: func (p *BlockPuller) requestBlocks(endpoint string, newStream ImpatientStreamCreator, env *common.Envelope) (*ImpatientStream, error) {
  	stream, err := newStream()
  	if err != nil {
  		p.Logger.Warningf("Failed establishing deliver stream with %s", endpoint)
  		return nil, err
  	}
  
  	if err := stream.Send(env); err != nil {
  		p.Logger.Errorf("Failed sending seek envelope to %s: %v", endpoint, err)
  		stream.abort()
  		return nil, err
  	}
  	return stream, nil
  }
docs: // requestBlocks starts requesting blocks from the given endpoint, using the given ImpatientStreamCreator by sending
  // the given envelope.
  // It returns a stream that is used to pull blocks, or error if something goes wrong.