Web3 Fundamentals: From Blocks to dApps