This course is intended for students interested in learning about blockchain technology and in developing applications using the blockchain concepts. It begins with the definition of the blockchain as a trust layer over the internet for working with distributed resources with decentralized and disintermediated control. Topics include: Definition of a blockchain in terms of transactions, blocks and chain of blocks, data structures enabling the blockchain protocol and operational details involving algorithms and techniques such as peer-to-peer transactions, cryptography, digital signing and hashing, and consensus mechanisms. All of these concepts will be illustrated using Bitcoin and Ethereum blockchain. In the second part of the course, we introduce the concept of code execution the blockchain and the program module called smart contract and a language, Solidity, for writing smart contracts, compiling, deploying and testing the smart contracts on Ethereum blockchain. In the last part of the course, we introduce a decentralized application (Dapp) stack and explore problem solving using blockchain. This involves design and development of a Dapp stack with the computational logic represented by the smart contract code, a user interface and support for external data access through oracles, and decentralized file systems. Students will work on hands-on end-to-end Dapp projects using Ethereum blockchain and Truffle integrated development environment (IDE). The course will also discuss standards, best practices, and current challenges, such as scalability and interoperability, and the respective solutions. This course is dual-listed with CSE 526.