code: func (s *StateDB) getStateObject(addr common.Address) (stateObject *stateObject) {
  	// Prefer live objects
  	if obj := s.stateObjects[addr]; obj != nil {
  		if obj.deleted {
  			return nil
  		}
  		return obj
  	}
  	// Track the amount of time wasted on loading the object from the database
  	if metrics.EnabledExpensive {
  		defer func(start time.Time) { s.AccountReads += time.Since(start) }(time.Now())
  	}
  	// Load the object from the database
  	enc, err := s.trie.TryGet(addr[:])
  	if len(enc) == 0 {
  		s.setError(err)
  		return nil
  	}
  	var data Account
  	if err := rlp.DecodeBytes(enc, &data); err != nil {
  		log.Error("Failed to decode state object", "addr", addr, "err", err)
  		return nil
  	}
  	// Insert into the live set
  	obj := newObject(s, addr, data)
  	s.setStateObject(obj)
  	return obj
  }
docs: // Retrieve a state object given by the address. Returns nil if not found.