code: func (bc *BlockChain) GetBlock(hash common.Hash, number uint64) *types.Block {
  	// Short circuit if the block's already in the cache, retrieve otherwise
  	if block, ok := bc.blockCache.Get(hash); ok {
  		return block.(*types.Block)
  	}
  	block := rawdb.ReadBlock(bc.db, hash, number)
  	if block == nil {
  		return nil
  	}
  	// Cache the found block for next time and return
  	bc.blockCache.Add(block.Hash(), block)
  	return block
  }
docs: // GetBlock retrieves a block from the database by hash and number,
  // caching it if found.