code: func NewPuller(metrics *metrics.PrivdataMetrics, cs privdata.CollectionStore, g gossip,
  	dataRetriever PrivateDataRetriever, factory CollectionAccessFactory, channel string, btlPullMargin uint64) *puller {
  	p := &puller{
  		metrics:                 metrics,
  		pubSub:                  util.NewPubSub(),
  		stopChan:                make(chan struct{}),
  		channel:                 channel,
  		cs:                      cs,
  		btlPullMargin:           btlPullMargin,
  		gossip:                  g,
  		PrivateDataRetriever:    dataRetriever,
  		CollectionAccessFactory: factory,
  	}
  	_, p.msgChan = p.Accept(func(o interface{}) bool {
  		msg := o.(proto.ReceivedMessage).GetGossipMessage()
  		if !bytes.Equal(msg.Channel, []byte(p.channel)) {
  			return false
  		}
  		return msg.IsPrivateDataMsg()
  	}, true)
  	go p.listen()
  	return p
  }
docs: // NewPuller creates new private data puller