code: func (db *Database) node(hash common.Hash) node {
  	// Retrieve the node from the clean cache if available
  	if db.cleans != nil {
  		if enc, err := db.cleans.Get(string(hash[:])); err == nil && enc != nil {
  			memcacheCleanHitMeter.Mark(1)
  			memcacheCleanReadMeter.Mark(int64(len(enc)))
  			return mustDecodeNode(hash[:], enc)
  		}
  	}
  	// Retrieve the node from the dirty cache if available
  	db.lock.RLock()
  	dirty := db.dirties[hash]
  	db.lock.RUnlock()
  
  	if dirty != nil {
  		return dirty.obj(hash)
  	}
  	// Content unavailable in memory, attempt to retrieve from disk
  	enc, err := db.diskdb.Get(hash[:])
  	if err != nil || enc == nil {
  		return nil
  	}
  	if db.cleans != nil {
  		db.cleans.Set(string(hash[:]), enc)
  		memcacheCleanMissMeter.Mark(1)
  		memcacheCleanWriteMeter.Mark(int64(len(enc)))
  	}
  	return mustDecodeNode(hash[:], enc)
  }
docs: // node retrieves a cached trie node from memory, or returns nil if none can be
  // found in the memory cache.