Further reading/

Exploits

Double satisfaction

If a smart contract simply checks that a given value is sent to an address, then that condition could be satisfied in another smart contract at the same time. The output is only sent once, but the condition is thus satisfied multiple times in the same transaction.

This can be avoided by enforcing that the output value is sent to the given address with a given datum tag.