How to Write Upgradable Smart Contracts in Solidity?
blockchainapp last edited by
Smart Contracts - Are They Really Smart?
Smart contracts govern the way in which a blockchain function. The immutability of the blockchain extends into smart contracts as well - a smart contract once coded cannot be modified. This is one of the primary reasons for the blockchain and the data in the blockchain being super-secure. There is no way to edit the data on the blockchain, and there is no way to circumvent the conditions laid out on the smart contract.
This advantage has made blockchain highly dependable for financial transactions, maximizing security and minimizing efforts and expenses, both in time and money. However, sometimes, the biggest boon also becomes the biggest bane. Any software is supposed to have some room to ‘evolve’ and smart contracts, by virtue of their immutability, lack that attribute. Anything that doesn’t change according to the changing times cannot be honored with the prefix ‘smart’, and smart contracts should not be an exception.
Upgradable Smart Contracts:
Sometimes, to stay relevant, it might be essential to lose a quality that made you relevant in the first place. In the case of smart contracts, the solution lies in using ‘upgradable’ smart contracts. This type of smart contracts solves many crucial problems.
Before we proceed to discuss this revolution, we will need to understand the areas where upgradation of smart contracts in Solidity might be expensive and the ways to optimize the costs and resources.
The Processing Cost - Block Gas Limit:
The transactions involving upgradation of smart contracts are relatively large, owing to the amount of processing that needs to be done. The steps include the deploying of smart contract, movement of data and the references.
In most cases, when a smart contract is compiled, all the imports are originally compiled into the smart contract. This would mean that a small change in one of the contracts might trickle down to the other contracts that might reference one particular smart contract that is awaiting an upgrade.
Upgradable smart contracts surely present a big bliss. However, the points that have been quoted above will have to be taken into consideration. These dependencies affect the size of the transaction. We have given below, the workarounds to minimize the cost and not suffer any lapse in the safety and security offered by Solidity.
Avoid Copying of Large Data:
One of the most expensive parts of a smart contract is in storing of data. Upgradation of the smart contract containing large storage variables might have a chance of hitting the transaction gas limit during the data-copying process. Therefore it is suggested that you isolate the data store from the rest of your code and make it as flexible as possible so that this hassle might not be always necessary.
Depending on the circumstances, the size of the datastore you need, and the frequency of expected structural changes, you might want to choose a strict definition or a loosely typed flat store. The second type ensures that the data schema changes can be implemented any upgrades to the smart contract.
If there needs to be a smart contract upgrade, switching the upgraded smart contract to eternal storage smart contract instance ensures that you don’t have to copy any data and waste your gas on those operations.
Using Libraries to Encapsulate Logic:
Libraries are special forms of contracts that do not allow any storage variables and exist as singletons. These libraries present a great advantage when it comes to smart contract upgrades - they allow encapsulation of business logic or date management logic. This would mean that the frequency changing elements of a smart contract can be coded in a library as opposed to the actual smart contract.
While it might seem that every call has a gas overhead, the benefit of avoiding upgradation weighs over the expense of frequent calls. There have been instances where the usage of libraries costed 10% less.
Using ‘Interfaces’ to Decouple Inter-Contract Communication:
In this method, ‘abstraction’ of contract implementation happens behind and interface that only defines its function signatures. This method is quite similar to the concept of abstraction in object-oriented programming. Instead of importing the entire contract, an interface containing the function signatures is used. Any possible upgrades to the smart contract that don’t affect the interface are eased. This model can be implemented without redeploying the calling contract.
It is to be understood that, while on paper, the smart contract code is immutable, there is always a possible workaround. The ‘immutable’ smart contract can be made ‘mutable’ by default by having chunks of codes in different contracts, and the address of a contract can be ‘called’ for execution. The domino-effect of an upgraded smart contract, in effect, renders any smart contract modifiable.
Blockchain App Factory’s Upgradable Smart Contract Services:
Blockchain App Factory, in addition to its smart contract development and smart contract audit services, also brings you enhancement of smart contracts on Solidity. Get in touch with our expert team to take your Solidity upgradable smart contract development forward to its business-relevance!!