code: func (q *queue) Idle() bool {
  	q.lock.Lock()
  	defer q.lock.Unlock()
  
  	queued := q.blockTaskQueue.Size() + q.receiptTaskQueue.Size()
  	pending := len(q.blockPendPool) + len(q.receiptPendPool)
  	cached := len(q.blockDonePool) + len(q.receiptDonePool)
  
  	return (queued + pending + cached) == 0
  }
docs: // Idle returns if the queue is fully idle or has some data still inside.