code: def at_block_number(block_number: BlockNumber, chain: MiningChain) -> MiningChain:
      
      if not isinstance(chain, MiningChain):
          raise ValidationError("`at_block_number` may only be used with 'MiningChain")
      at_block = chain.get_canonical_block_by_number(block_number)
  
      db = chain.chaindb.db
      chain_at_block = type(chain)(db, chain.create_header_from_parent(at_block.header))
      return chain_at_block
docs: Rewind the chain back to the given block number.  Calls to things like
      ``get_canonical_head`` will still return the canonical head of the chain,
      however, you can use ``mine_block`` to mine fork chains.