"2nd UNESCO World Logic Day Celebration Lecture"
Abstract: Smart Contracts handle and transfer assets of considerable value. Thus, it is crucial that their implementation be secure against attacks which aim at stealing or tampering the assets. In the recent past, there have been several attacks that have exploited existing vulnerabilities in smart contracts. Once a smart contract is up and running, changing it is very complicated and nearly infeasible. One of the reasons is that when a contract is created, it is immutable; once deployed on the Blockchain it stays there forever. If we find a defect in a deployed smart contract, a new version of the contract has to be created and deployed. When we deploy a new version of an existing contract, data stored in the previous contract does not get transferred automatically to the newly refined contract. We have to manually initialize the new contract with the past data which makes it very cumbersome. Similarly, neither updating a contract nor rolling back an update is possible; this greatly increases the complexity of implementation and places a huge responsibility while being deployed initially on the Blockchain. We describe the design and use of language Solidity+, for programming smart contracts. An important outcome of using of Solidity+, is that brings out an outline of a proof carrying code for the smart contract for free – needless to emphasize that it is a very welcome feature for smart contracts on Blockchains.