<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_secret_registration_block_by_secrethash( self, secrethash: SecretHash, block_identifier: BlockSpecification, ) -> Optional[BlockNumber]: """Return the block number at which the secret for `secrethash` was registered, None if the secret was never registered. """

        result = self.proxy.contract.functions.getSecretRevealBlockHeight(
            secrethash,
        ).call(block_identifier=block_identifier)

        # Block 0 either represents the genesis block or an empty entry in the
        # secret mapping. This is important for custom genesis files used while
        # testing. To avoid problems the smart contract can be added as part of
        # the genesis file, however it's important for its storage to be
        # empty.
        if result == 0:
            return None

        return result