It is all starting to come together!
Our frontend has gone through some changes here and there, both for usability and to generally improve the look and feel. The blockchain code and our backend are undergoing testing and tweaking. On the blockchain side, we have made a lot of changes to improve gas usage; some optimizations are still to be done, but we’re seeing good results already.
The major challenge mentioned in the previous update was around life-cycle management for the DApp itself. Researching this, we came across multiple potential solutions, each with some pros and cons, as with most things in life. We settled for an approach where we take advantage of Solidity’s DELEGATECALL functionality to distribute code across multiple contracts, allowing for versioning without changing call destinations from our backend or from users. While this solves some issues related to security and usability, it does come at the price of slightly higher gas costs and restricted usability. For example, a function executed with this method cannot return values, forcing you to work around this restriction and getting quite creative with your calling contract.
Another challenge with this approach is testing; to my knowledge, none of the existing testing suites for Solidity validate external function definitions in these types of calls. Since your calling contract has to be able to call any future deployment of the function, the compiler cannot know whether or not your function definition in the calling contract is correct. If anyone out there has a good approach to writing automated tests for upgrading and deploying future contract versions that allow for validating existing calls, leave a comment below or something, would be really interested to hear about it.
Conversely, if anyone is interested in seeing more of these types of posts after we go live, please let us know. Given the time pressure of developing and trying to write about it at the same time, I tend to keep these posts rather short, but if there is interest we could keep them going after we go live as a sort of retrospective look at the development process. What went well, what did not, what we should have thought of earlier and so on. In that format, I could spend a bit more time on each part of DApp development and discuss the particular problems and solutions. We will evaluate interest in that over the coming weeks until launch and take it from there.