For some reason that took place beyond my time at aeternity, it was decided, that encoding and decoding call data should be done in the compiler. The reason back then was most likely a pragmatic one: Those who designed the language were the ones that built all the components for it, and it was all top-notch Erlang developers.
Now that we are coming close to a point of maturity, e.g. seeing a proper browser addon looming on the horizon, we face the following situation: Either
a) every user of a decentralized application running on aeternity will have to install a compiler and have it running all the time (not going to happen) or
b) we, aeternity, will have to host a compiler that will have to encode and decode all the contract call data. This is, in addition to also providing a public node infrastructure to actually execute smart contracts (both as transaction or, even more load-expensive, statically/locally), a hefty load one will have to handle.
For a generic user, this means that you not only broadcast transactions and read chain data through our public, centralized infrastructure (which is kind of okay for now, everyone can set up his own node and point the wællet browser addon to it soon), but even to do all that you will need to talk to a compiler which we will have to host for you. And this is going to cost and be another point of failure.
What do you think, shouldn’t encoding and decoding data be done in the SDK, without relying on another external component? Disclaimer: Yes this will be a crazy effort. But otherwise æternity might not retain a broad adoption, especially once the æternity foundation and hosted infrastructure is no more.