Force ASA exchange through specific smart contract?

Let’s consider an Airline allowing people to exchange NFTickets among themselves.
This airline want to be sure to always take a commission on each exchange, but it still want to allow self custody of the NFTicket.
A solution could be to make the exchange through a smart contract owned by the Airline.

But if the NFTicket is an ASA that could be owned by any account, is there a way to force the exchange to be done through a specific smart contract ?

In other words, is it possible to have at the same time :

  • self custody of NFT
  • enforced commission/royalties when this NFT is transferred

Yes, the SimCompany game has done this already 2 years ago…

The solution is to make the asset as frozen, and clawback address to be smart sig contract where you say you have to pay royalty.

This way you have on your account the asa
You can freely transfer the ASA only if you pay royalty fee

But generally current better approach is to create user escrow account, rekey to the smart contract address, allow person to exchange with another person

This way the asa is not on his primary account, but his escrow account which he can self custody control form the smart contract.