Let's say I have implemented a contract that allows you to transfer a token to a recipient for whom you do not have the address.
Let's say I have 5 of token x and I want to give 1 to my friend and I do not know her address, as a result I send her a message (e.g. give one token from my account to anyone who claims this) and a corresponding signature.
My friend can then broadcast the function call claimToken(message, signature) and get the token from me in the smart contract.
My question is: how do I prevent a node from seeing this transaction in the mempool and taking the inputs (message, signature) and sending the transaction with a higher fee, essentially getting confirmed before my friend and taking the token for themselves?
I understand that this is solved if you sign the message with the recipients address, but this cannot happen when you do not know the address of the recipient.