code: func (r *TrieRequest) Validate(db ethdb.Database, msg *Msg) error {
  	log.Debug("Validating trie proof", "root", r.Id.Root, "key", r.Key)
  
  	if msg.MsgType != MsgProofsV2 {
  		return errInvalidMessageType
  	}
  	proofs := msg.Obj.(light.NodeList)
  	// Verify the proof and store if checks out
  	nodeSet := proofs.NodeSet()
  	reads := &readTraceDB{db: nodeSet}
  	if _, _, err := trie.VerifyProof(r.Id.Root, r.Key, reads); err != nil {
  		return fmt.Errorf("merkle proof verification failed: %v", err)
  	}
  	// check if all nodes have been read by VerifyProof
  	if len(reads.reads) != nodeSet.KeyCount() {
  		return errUselessNodes
  	}
  	r.Proof = 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)