This second course of the Blockchain series focuses on the computational element of blockchain technology. Smart contracts allow for implementing user-defined operations of arbitrary complexity that are not possible through plain cryptocurrency protocols. They are a powerful feature that, when properly designed and coded, can result in autonomous, efficient and transparent systems. Participants will design and program smart contracts in Solidity language, test and deploy them in the Remix development environment, and invoke them from a simple web interface that Remix provides. The course features best practices for designing solutions with smart contracts using Solidity and Remix IDE. Along with other courses of the Blockchain series, the course provides the foundation to design and develop decentralized applications on the blockchain.