NFT contract holds the royalty payee - in our case the charity that minted the NFT.
NFT implements a contract which supports retrieval of the royalty payee
Auction checks for royalty support when an auction is called and transfers fee % to the royalty payee before paying out the fee and winning bidder
Fee % can be passed to the auction via a constructor when it's created
EIP-2981
Essentially the same as my design, except it adds the ability to callback the NFT when the royalty has been paid which in turn fires an event. We don't have a use case in the client for this yet. For example, we could listen for this event and send a notification to the charity to say the royalty was paid. We could also use this to pass back the exact amount paid out when the auction closed, etc.
This is almost exactly how i had white-boarded it so follow this as it may become the standard.
https://eips.ethereum.org/EIPS/eip-2981
Design
EIP-2981 Essentially the same as my design, except it adds the ability to callback the NFT when the royalty has been paid which in turn fires an event. We don't have a use case in the client for this yet. For example, we could listen for this event and send a notification to the charity to say the royalty was paid. We could also use this to pass back the exact amount paid out when the auction closed, etc.