An important fondation for GRIN transactions will be Payment Proof made mandarory. It will disable the ability of receivers to deny receipt of payment.
For that David @david has created this solution through this RFC which I believe has been implemented in GRIN:
It seems to me that the solution doesn’t prevent any party to pretend having received fund through a given kernel with a given amount from different (fake) senders addresses, enabling the ability to make many “receiver” proofs for a given kernel. Also the sender could artificially make different payment proofs with many different (dishonest) receiver addresses that he makes up. This can probably create problems.
My proposed fix is that payment proofs include proof-of-signature-of-kernel in the payment proof, making it not possible to people that have not signed the kernel to claim receipt or spend of fund for this kernel.
We can achieve that by requesting that the payment proof for the receiver incorporates a simple signature with its partial excess as public key and including its receiver address and the total excess in the message for this signature
The sender should also do the same for his partial excess and prove that he signed it, while committing to his address, total excess, and receiver address.
We can verify that the sum of the two partial excesses sum to the total excess that is being committed to.