I recently read the VIV3 code and learned how the Art NFT creator royalties are paid. (The code is open source. If you’re curious, you can follow the transactions in the Flow address used on VIV3.)
I understood that VIV3 is designed to send a transaction from the custodian’s wallet and set the royalty percentage in that transaction at the time of listing. This way, royalty payments to creators are guaranteed as long as NFTs are not withdrawn out of the VIV3 custody-type wallet.
But what if you want to use NFTs for other contracts in Flow ecosystem, i.e., if you want to freely manage NFTs in your own wallet?
In that case, trading without royalty payments might take place in some other marketplace.
Flow uses a Capability-based security model, and with the current specification, I think it would be difficult to restrict this.
One idea I can think of is that when you create a Capability, you should be able to set the address where it can be stored. That way, we can whitelist the market contracts that use the Capability.
However, this method does not restrict market contracts that do not use Capability.
Do you have any other good ideas or thought?