Although I don’t know the nitty gritty parts of the NBA Top Shot contract - I can provide some resources that may help clear some confusion.
What happens when someone buys an NFT from another user?
To send an NFT to another user, the seller would simply withdraw the NFT
from their Collection, then call the deposit function of the receiving user’s
Collection to complete the transfer.
Take a look on at NFT Token guide where it walks you through on how to create the transaction that sends to the ‘buyer address’. It is the buyer who initiates the transaction for the NFT deposit so in that logic you can emit events.
execute {
// Get the recipient's public account object
let recipient = getAccount(0x01)
// Get the Collection reference for the receiver
// getting the public capability and borrowing a reference from it
let receiverRef = recipient.getCapability<&{ExampleNFT.NFTReceiver}>(/public/NFTReceiver)
.borrow()
?? panic("Could not borrow receiver reference")
// Deposit the NFT in the receivers collection
receiverRef.deposit(token: <-self.transferToken)
log("NFT ID 1 transferred from account 2 to account 1")
}