Découvrez notre société Contactez-nous

e-Xpert Solutions Genève

109, chemin du Pont-Du-Centenaire
CH-1228 Plan-les-Ouates / Genève
SUISSE

Tel. : +41 22 727 05 55 Fax : +41 22 727 05 50

e-Xpert Solutions Lausanne

Avenue de Gratta-Paille 20
CH-1018 Lausanne
SUISSE

Tel. : +41 21 802 26 78 Fax : +41 22 727 05 50
Contactez notre support : +41 22 727 05 56
Envoyez votre message

Swiss Security Hackademy

Suivez notre blog bilingue en sécurité informatique !

Retour aux articles

Smart contracts and the blockchain, what can be expected ?

The smart contract technology


Auteur : Wojciech Myszkorowski

Date de publication : 29 octobre 2018 - Dernière mise à jour : 29 octobre 2018


The financial world has been shaken since the arrival of Bitcoin in 2008. Ever since new cryptocurrencies have emerged, introducing a complete decentralization to the world controlled until then by the classical financial major organizations. One of these cryptocurrencies, Ethereum, added to this decentralization the use of smart contracts. Any smart contract is a simple program defined by lines of code working and being executed directly on the blockchain. Since the smart contract codes are permanently available on the blockchain, the paradigm of privacy has changed. Privacy, as known so far in computer science, does not exist on the blockchain since any information is available to everyone having a network access. In this article, the specific blockchain is the Ethereum one. This blockchain has the particularity of having codes living inside it and not only transactions.
The Ethereum blockchain can be qualified through a few key points such as:

  • Immutability: Every single transaction that has been made has an entry inside the database and is immutable.
  • Data protection: Every computer has a copy of the database. To alter the blockchain, more than half of computers would have to be corrupted in the same manner to modify the database.
  • Availability: Applications deployed never go down.
  • Network security: Since the database is running on every computer, it is virtually not possible to stop all computers on the network and to delete the database.

What is a smart contract

The best way to define a smart contract is to see the code as an agreement between two entities working on the mechanism of the blockchain and never relying on any kind of trusted authority. A smart contract can be represented as a sort of account controlled by some code inside the Ethereum blockchain. A concise example of such a code, written in Solidity, follows below.

Smart contracts and the blockchain, what can be expected ?

As shown by this example, writing and creating smart contracts can be very easy. Solidity, as can be seen, has a lot of similarities with JavaScript and C++.

Limitations in a daily routine

Solidity has been implemented with algorithms coming from other languages, such as the inheritance using the same linearization algorithm as Python. However, some algorithms concerning features that are only implemented in smart contracts are proper to Solidity, e.g., the transaction cost of every instruction.
Inheritance is a valuable feature of a programming language. In Solidity, it allows to inherit a contract from another one, add or specify functions of a parent

Smart contracts and the blockchain, what can be expected ?

This example shows that the inheritance known from Java and C++ applies directly to Solidity. The second contract subprimary will have access to the methods of primary. This allows for shorter and therefore less difficult contracts to analyze. The price to pay is the problem of trusting another contract, having not necessarily access to the corresponding Solidity code of the contract it is inheriting from.
In principle security implementation is easier in contracts being smaller in terms of lines of code. In view of the above this statement is true if special conditions apply, i.e., when the inheritance is made from a trusted contract.
In terms of inheritance, OpenZepplin (library proper to Solidity) offers the use of the concept of Ownable. This option allows to set an owner of a contract and add the modifier onlyOwner() granting the use of a method only to the owner of the contract. This improves security as it gives the right only to the owner to call the functions marked with this modifier. For example, if we want to create a transfer function for withdrawing a given amount from the balance of the contract, instead of using the keyword private, we can apply the modifier onlyOwner() and in this way allowing only the owner to transfer money.
Inheritance implies shadowing. In Solidity the redefinition of functions is possible making the concept simple. If a contract inherits from another one and wants to redefine a function it simply must have the same signature of the function.
Below is an example of a contract using multiple inheritance classes.

Smart contracts and the blockchain, what can be expected ?

The focus is on the exploitation which can occur. The following code can be exploited due to the linearization algorithm. newUserEther can be deployed by a certain actor and inherits from the Ownable library. However, since the hackTime contract is placed at the end, any function having the same signature will be instantiated by the ones inside the hackTime contract. In this example, the newUserEther contract will use the redefinition of transferOwnership() of the hackTime contract and not the Ownable contract. Subsequently the actor thinks that he uses the address specified inside the contract, but in fact another owner will be set instead. One must be very careful in setting the inheritance and always place the key libraries at the end so as to avoid the shadowing effect.

Solidity evolution and its security

Solidity has evolved a lot since it has been published. The first version was not even numbered the way they are now. Currently Solidity compiler is at version 0.4.25, a new version is coming out roughly every four months. For a programming language like Solidity this is very fast, particularly since smart contracts cannot be upgraded nor changed once they have been published. This implication has an important disadvantage since any modification to a smart contract in terms of security will request its redeployment.
To judge the maturity of Solidity one way is to have a look at the repository on GitHub and analyze the way people commit changes for the next release.

Smart contracts and the blockchain, what can be expected ?

Figure 1 Solidity Repository

A few conclusions can be drawn from the two graphics. Firstly, it takes time for a project to get notoriety and attract developers. Secondly Solidity is a language which handles money under a specific form increasing the interest by malicious people to find its weaknesses. Majors attacks have been discussed over the last two years and glued an image of immaturity to Solidity. When talking about attacks, it is very important to keep in mind that Ethers were not only stolen from smart contracts, e.g., 2016 DAO attack but also from wallets which belonged to the particulars.

Smart contracts and the blockchain, what can be expected ?

Figure 2 Python Repository

Security in its general form is not a module which can be activated for a specific feature, but a process which must be applied to many places such as the wallets, mathematics relying inside the blockchain and the programming language Solidity for Ethereum.
Regarding Solidity, most of the weaknesses can be addressed and avoided therefore allowing for some real-life projects to see the daylight. This is due, among others, to the growth of the number of experts in this domain.

Confidentiality has changed so what about integrity and availability

The paradigm of the blockchain has changed the privacy as every information can be accessed by everyone. In terms of CIA, the concept of blockchain has altered the confidentiality. Indeed, it is not recommended to store sensitive information on the network. A special feature needs to be used to get information outside the blockchain. Now privacy and confidentiality must be distinguished.

  • 1. Privacy: keep an information to itself and have the right not to share it
  • 2. Confidentiality: keep an information only to those who have access

Integrity is guaranteed by a mathematical algorithm called Merkle Tree exploiting an inviolable data structure has been proven resistant to many attacks. Compagnies can use smart contracts and exchange information with the confidence of the non-repudiation. For major compagnies data is the most valuable information and needs to be well protected. The blockchain with its cryptographic signature helps to achieve the corresponding data integrity.
Availability is guaranteed also by the core functioning of the blockchain since every information is “stored “on every node on the network making it almost impossible to bring down.
Despite what was said, the use of smart contracts for particular security purposes it is not yet a bulletproof idea. Specially for compagnies who need to share confidential information, the blockchain is not the right platform.
However, the integrity resulting from the fact that transaction proofs cannot be altered offers an asset to numerous applications such as supply chain management, financial or any other transactions. Both the financial and other compagnies can rely on this concept in view of simplifying their daily business and therefore decrease their spending and save time.

Conclusion

Solidity and the smart contracts technology are improving regarding the security issues and progressively removing their existing flaws. This is mainly due to the constantly increasing popularity of Ethereum, and consequently the observed growth of the Ethereum community. We have also witnessed the appearance of the first projects going beyond Ethereum but still using smart contracts technology, as for example the first crowdfunding site

Despite the security enhancements, Solidity remains vulnerable because of its constant updates and its still unresolved problems, e.g., the linearization algorithm. The latter one needs urgently to be fixed as it represents a major flaw for such functionalities as the inheritance. Some other algorithms, such as the revert process, remain poorly handled.
Regarding compagnies which might consider starting security projects using technologies based on the blockchain will have to evaluate correctly the purpose of the smart contract and limit the kind of information that will be shared on the blockchain. The advantages regarding the cost they can spare by automating some of the daily process might be worth taking a serious look at this technology.