Blockchain - Programming smart contracts and Decentralized Apps