code: def secret_learned(
          state: MediatorTransferState,
          channelidentifiers_to_channels: ChannelMap,
          pseudo_random_generator: random.Random,
          block_number: BlockNumber,
          block_hash: BlockHash,
          secret: Secret,
          secrethash: SecretHash,
          payee_address: Address,
  ) -> TransitionResult[MediatorTransferState]:
      
      secret_reveal_events = set_offchain_secret(
          state,
          channelidentifiers_to_channels,
          secret,
          secrethash,
      )
  
      set_offchain_reveal_state(
          state.transfers_pair,
          payee_address,
      )
  
      onchain_secret_reveal = events_for_onchain_secretreveal_if_closed(
          channelmap=channelidentifiers_to_channels,
          transfers_pair=state.transfers_pair,
          secret=secret,
          secrethash=secrethash,
          block_hash=block_hash,
      )
  
      offchain_secret_reveal = events_for_secretreveal(
          state.transfers_pair,
          secret,
          pseudo_random_generator,
      )
  
      balance_proof = events_for_balanceproof(
          channelidentifiers_to_channels,
          state.transfers_pair,
          pseudo_random_generator,
          block_number,
          secret,
          secrethash,
      )
  
      events = secret_reveal_events + offchain_secret_reveal + balance_proof + onchain_secret_reveal
      iteration = TransitionResult(state, events)
  
      return iteration
docs: Unlock the payee lock, reveal the lock to the payer, and if necessary
      register the secret on-chain.