Rationale behind RegData vs Memo

Looking at the source of concordium std + smart contract samples, few things makes me wonder.

It seems that RegData and Memo basically do exactly the same thing ? I mean - attaching a string to a transaction. I understand that RegData does never send any funds, while doing the same in Memo would probably require a positive CCD amount to be sent (not sure, haven’t checked). But they are so close - so I have hard time to understand why basically the same functionality requires two different transaction types ? Maybe I’m not seeing something.

The same functionality could also very simply be implemented in a smart contract ? [call a smart contract with a string, and sc then makes a tx to target account, string saved in sc call (no need to save it in contract state even)] Maybe these decisions were made before Concordium decided on having smart contracts ?

Is there a plan to remove such redundancies in the future?

Register data is almost like a transfer with memo, except that you don’t need to choose a sender and amount. Technically you can send 0CCD to yourself with a memo, but this is awkard. That is why we support it natively.

Registering data was deemed a useful feature for a number of track&trace use-cases. While it can be also done with a smart contract as you suggest, and also a transfer with a memo can be done via a smart contract (and we even had an example Remove memo example, bump SDK version. by abizjak · Pull Request #13 · Concordium/concordium-use-case-examples · GitHub), the input we got was that this is too cumbersome and risky for users. So we added memos natively.

The benefit of having them as special transactions is that they are cheaper than going via smart contracts.