This course offers students an introductory understanding of the concepts and practices related to the development and deployment of secure smart contracts and decentralized applications. Students will explore the specificities of smart contract programming, and examine various security vulnerabilities and threats specific to smart contracts and decentralized applications. Through hands-on exercises, real-world case examples and classroom discussions, students will learn how to employ best practices to mitigate risks and protect against attacks in the blockchain ecosystem. By the end of the course, students will be equipped with the knowledge and skills to develop secure smart contracts and design resilient decentralized applications that can withstand the challenges of these technologies.