So with pay_tips
dispatchable call there is a concept of a receiver and a sender. It is voluntary for this extrinsic to be called, meaning "paying tips" is not a required part of buying/selling an NFT in this pallet.
Additionally, the receiver is defined within ItemTip
struct:
/// Information about the tip.
#[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)]
pub struct ItemTip<CollectionId, ItemId, AccountId, Amount> {
/// The collection of the item.
pub(super) collection: CollectionId,
/// An item of which the tip is sent for.
pub(super) item: ItemId,
/// A sender of the tip.
pub(super) receiver: AccountId,
/// An amount the sender is willing to tip.
pub(super) amount: Amount,
}
Notice how the receiver is associated with a collection and item id - the design decision here was to use pay_tips
for a buyer to voluntarily pay the creator royalties:
pay_tips
: Pay tips, could be used for paying the creator royalties.
There is work being done to create a coupled pallet that makes royalties a requirement of NFT sales. You can follow the work on this branch: