code: def set_onchain_secret(
          state: MediatorTransferState,
          channelidentifiers_to_channels: ChannelMap,
          secret: Secret,
          secrethash: SecretHash,
          block_number: BlockNumber,
  ) -> List[Event]:
      
      state.secret = secret
  
      for pair in state.transfers_pair:
          payer_channel = channelidentifiers_to_channels.get(
              pair.payer_transfer.balance_proof.channel_identifier,
          )
          if payer_channel:
              channel.register_onchain_secret(
                  payer_channel,
                  secret,
                  secrethash,
                  block_number,
              )
  
          payee_channel = channelidentifiers_to_channels.get(
              pair.payee_transfer.balance_proof.channel_identifier,
          )
          if payee_channel:
              channel.register_onchain_secret(
                  channel_state=payee_channel,
                  secret=secret,
                  secrethash=secrethash,
                  secret_reveal_block_number=block_number,
              )
  
      # Like the off-chain secret reveal, the secret should never be revealed
      # on-chain if there is a waiting transfer.
      if state.waiting_transfer:
          payer_channel = channelidentifiers_to_channels.get(
              state.waiting_transfer.transfer.balance_proof.channel_identifier,
          )
          if payer_channel:
              channel.register_onchain_secret(
                  channel_state=payer_channel,
                  secret=secret,
                  secrethash=secrethash,
                  secret_reveal_block_number=block_number,
              )
  
          unexpected_reveal = EventUnexpectedSecretReveal(
              secrethash=secrethash,
              reason='The mediator has a waiting transfer.',
          )
          return [unexpected_reveal]
  
      return list()
docs: Set the secret to all mediated transfers.
  
      The secret should have been learned from the secret registry.