This actually is possible. Every Ethereum transaction has a data field that can store an arbitrary amount of data.
Normally this is used for function calls to contracts. An exchange could make a contract that lets the user put in their userId when sending eth, and then everybody would be sending to the same address while still being identifiable. It would even be possible to reject deposits which do not include the userId, or which have an unknown userId.
I think the main reason exchanges don't do this is that they deal with lots of cryptocurrencies, so they use the simplest method that works for all of them: just make a unique deposit address for each user.
Yes, that's what I said. The ABI-intended input field could easily be used as personal ID. Furthermore in some cases you need to transfer money to other wallet specifically so it could call some method, and this way you would literally run any method by passing #methodIdarg1arg2. Clumsy but tx cost saving
> The re-shuffling of the coins is for the exchanges security and accounting
Neither requires re-shuffling. It's just for convenience and what be even more convenient if every blockchain tx included who they are trying to deposit to providing inputdata even for regular transfers. Like a tag, "these 10 eth for personal_Hash=abc123"
Actually that would put the onus on the sender to include extra pieces of data, and the exchanges would have to deal with errors from people who send without the hash.
So I'm pretty certain even if it were supported, individual addresses would still be the better choice due to ease of use.
Normally this is used for function calls to contracts. An exchange could make a contract that lets the user put in their userId when sending eth, and then everybody would be sending to the same address while still being identifiable. It would even be possible to reject deposits which do not include the userId, or which have an unknown userId.
I think the main reason exchanges don't do this is that they deal with lots of cryptocurrencies, so they use the simplest method that works for all of them: just make a unique deposit address for each user.