code: func (r *BloomRequest) Validate(db ethdb.Database, msg *Msg) error {
  	log.Debug("Validating BloomBits", "bloomTrie", r.BloomTrieNum, "bitIdx", r.BitIdx, "sections", r.SectionIndexList)
  
  	// Ensure we have a correct message with a single proof element
  	if msg.MsgType != MsgHelperTrieProofs {
  		return errInvalidMessageType
  	}
  	resps := msg.Obj.(HelperTrieResps)
  	proofs := resps.Proofs
  	nodeSet := proofs.NodeSet()
  	reads := &readTraceDB{db: nodeSet}
  
  	r.BloomBits = make([][]byte, len(r.SectionIndexList))
  
  	// Verify the proofs
  	var encNumber [10]byte
  	binary.BigEndian.PutUint16(encNumber[:2], uint16(r.BitIdx))
  
  	for i, idx := range r.SectionIndexList {
  		binary.BigEndian.PutUint64(encNumber[2:], idx)
  		value, _, err := trie.VerifyProof(r.BloomTrieRoot, encNumber[:], reads)
  		if err != nil {
  			return err
  		}
  		r.BloomBits[i] = value
  	}
  
  	if len(reads.reads) != nodeSet.KeyCount() {
  		return errUselessNodes
  	}
  	r.Proofs = nodeSet
  	return nil
  }
docs: // Valid processes an ODR request reply message from the LES network
  // returns true and stores results in memory if the message was a valid reply
  // to the request (implementation of LesOdrRequest)