code: func (s *Sync) Process(results []SyncResult) (bool, int, error) {
  	committed := false
  
  	for i, item := range results {
  		// If the item was not requested, bail out
  		request := s.requests[item.Hash]
  		if request == nil {
  			return committed, i, ErrNotRequested
  		}
  		if request.data != nil {
  			return committed, i, ErrAlreadyProcessed
  		}
  		// If the item is a raw entry request, commit directly
  		if request.raw {
  			request.data = item.Data
  			s.commit(request)
  			committed = true
  			continue
  		}
  		// Decode the node data content and update the request
  		node, err := decodeNode(item.Hash[:], item.Data)
  		if err != nil {
  			return committed, i, err
  		}
  		request.data = item.Data
  
  		// Create and schedule a request for all the children nodes
  		requests, err := s.children(request, node)
  		if err != nil {
  			return committed, i, err
  		}
  		if len(requests) == 0 && request.deps == 0 {
  			s.commit(request)
  			committed = true
  			continue
  		}
  		request.deps += len(requests)
  		for _, child := range requests {
  			s.schedule(child)
  		}
  	}
  	return committed, 0, nil
  }
docs: // Process injects a batch of retrieved trie nodes data, returning if something
  // was committed to the database and also the index of an entry if processing of
  // it failed.