I've recently found out, that there's no convenient way to monitor transactions to 'externally owned account' generated by some contract. I went to various forums and ethereum bugtrackers for an answer and saw lots of requests to add some API calls to list all transactions, normal and contract invoked. Some of the people described real situations when they've lost ETH because the exchange they used didn't support such internal transactions. But in all cases eth developers said the same - 'exchange developers don't understand ethereum basics, they should use contracts instead of EOAs'.
OK, I tried to realize, what they should've done. Using EOA it's really simple - generate new account, give it to user and wait for some transactions. As I see it, using simplest contracts you need to provide your user 2 entities - address of your contract and some encoded data, that will contain method signature and generated user id, and then you just listen to logs. From user's perspective I see it quite inconvenient to operate with 2 instances if I just want to deposit money on my account - it becomes much more error prone. And I'm not sure, all users' contracts will support sending to such exchange contracts without additional coding.
Is there any obvious scenario, that I'm missing?
Sorry for the long question and possible duplicate, but I couldn't find any examples on how to do it right.
EDIT: Don't have enough reputation to comment Tjaden's answer (thanks for it, btw), so 'commenting' here.
Yes, I thought of this version too, but forgot to add it in original question.
Using fallback function is nice and easy, BUT - as I understand it - in that case you should create a contract for each user, which results in 2 problems:
- spending money each time (not much, but still - paying just for account creation doesn't seem very fair)
- you should send each contract to blockchain and then wait some time for it to be confirmed before providing a user with his address.
Does the majority of ethereum community think the same way as Tjaden?