code: func (lc *LightChain) GetBlock(ctx context.Context, hash common.Hash, number uint64) (*types.Block, error) {
  	// Short circuit if the block's already in the cache, retrieve otherwise
  	if block, ok := lc.blockCache.Get(hash); ok {
  		return block.(*types.Block), nil
  	}
  	block, err := GetBlock(ctx, lc.odr, hash, number)
  	if err != nil {
  		return nil, err
  	}
  	// Cache the found block for next time and return
  	lc.blockCache.Add(block.Hash(), block)
  	return block, nil
  }
docs: // GetBlock retrieves a block from the database or ODR service by hash and number,
  // caching it if found.