The Claims contract has yet to fully implement all of the features as set forth in the anonymous voting protocol and this is where upgradeability comes in handy…

Why is upgradeability important?

What we at Indorse know, is that we don’t yet know how users will want to interact with our anonymous voting protocol. To figure this out we are progressing with an iterative, feedback driven approach to our build our platform. This means that we release a feature, get feedback from the users, and then improve on it.

The other fact we (and most of the Ethereum community is all too aware of) is that bugs do happen in contracts and that not being able to fix them is just a unacceptable risk. The DAO and Parity hacks are prime examples of contracts gone wrong.

The difficulty with Ethereum smart contracts is that once deployed, contract code can never be changed.

An upgradeable smart contract will allow us to change contract logic as we update the Indorse application. Additionally, with the confidence that we can fix any bugs that unfortunately are deployed in the contract, we are able to start simple and build more complex interesting features that other contract developers would not attempt. Don’t let that worry you into thinking that we are now allowing ourselves to get sloppy with contract — we still aim to be producers of high quality contracts that lead innovation in the Ethereum community.

How did we achieve an upgradeable contract?

We are using the upgradeable proxy pattern to allow us to upgrade the contract logic and state. We have spent a long time researching upgradeability of Ethereum smart contracts and have found this technology to be the best upgradeable strategy for this contract.

To learn more about this technology please read our blog post about it here:

A well tested guide to upgradeable proxy Ethereum smart contracts.

You can see the Proxy contract here on Etherscan. On Etherscan you can read the current target (the current version of the contract logic) and see that the Proxy target — the NaiveClaims contract — is here.

We also invite you to read our summary of the different known ways to create upgradeable smart contract on Ethereum (the proxy pattern is one of them):

Summary of Ethereum Upgradeable Smart Contract R&D.

How will contract upgrades be managed?

So wait, doesn’t an upgradeable contract break all of the trust that I can put in in?

Well, kind of. All transactions that are sent to the contract are still immutable just like normal. What changes is that, if the contract is upgraded, the behaviour of the contract will change for some new transactions.

So who gets to upgrade the contract? In the next weeks we will be moving the administration of contract upgrades to be controlled by a multisig contract managed by the Indorse founders Gaurang, David, Avadhoot and Dipesh. To initiate an upgrade, these key stakeholders have to agree for a contract upgrade to happen.

In the future we hope to create a better, more distributed model for our contract upgrades but for now, while we try and test this technology, it’s a good start.