Autoplay
Autocomplete
Previous Lesson
Complete and Continue
Python - The Practical Guide
Getting Started
Introduction (1:51)
What is Python? (5:07)
Setting Up Python (3:11)
Writing our First Python Code (5:05)
Join our Online Learning Community
What is the Blockchain? (6:48)
Course Outline (4:41)
Python Alternatives (3:58)
Understanding the Python Versions (2:22)
How To Get The Most Out Of This Course (3:27)
Useful Resources & Links
The Academind Pro Referral Program
Diving Into the Basics of Python
Module Introduction (2:16)
Understanding the REPL and Data Types (4:25)
Working with Variables (4:46)
Working with Numbers (5:36)
Using Operators (3:48)
Understanding a "Special" Behaviour when Working with Numbers (3:35)
Working with Strings (2:18)
Working with Lists (5:09)
Adding & Removing List Items (3:02)
Preparing the Blockchain - The Theory (2:02)
Installing our IDE (5:17)
Using Functions to Add List Items (6:45)
Accessing the Last List Item (3:24)
Adding Arguments to Functions (2:36)
Understanding the "return" Keyword (3:57)
Using Default Arguments (4:06)
Working with Keyword Arguments (2:59)
Using the "input" Function (3:00)
Avoiding Repetitive Code Execution (2:06)
Understanding the Variable Scope (6:49)
Exploring the Official Documentation (2:25)
Adding Comments and Doc Strings (4:20)
Structuring Multi Line Code in Python (1:56)
Assignment - Basics (Problem) (1:34)
Assignment - Basics (Solution) (11:24)
Wrap Up (3:28)
Useful Resources & Links
Working with Loops & Conditionals
Module Introduction (1:38)
Understanding Loops - Theory (2:55)
Creating a "for" Loop (3:02)
Creating a "while" Loop (3:33)
Closing the REPL
Understanding Conditionals - Theory (2:01)
Adding "if-else" to our Blockchain (7:45)
Working with "elif" (3:43)
Understanding "break" & "continue" (3:31)
Improving our Code with Loops & Conditionals (6:39)
Understanding Boolean Operators - "is" & "in" (3:37)
The "not" Keyword (1:17)
Understanding "and" and "or" (2:26)
Grouping Conditionals (3:22)
What About "switch" in Python? (0:41)
Verifying our Blockchain (13:10)
Blockchain Theory: Understanding Blockchain Verification
Using Conditions inside the "while" Loop (1:56)
Using "else" in Loops (2:07)
Adding the "range" Function (7:09)
Assignment - Loops & Conditionals (Problem) (2:50)
Assignment - Loops & Conditionals (Solution) (7:52)
Wrap Up (2:31)
Useful Resources & Links
Understanding Complex Data Structures
Module Introduction (2:50)
Understanding the Required Data Structure for our Blockchain (7:03)
Working with Iterables (5:01)
Choosing the Right Datastructure (2:55)
Transactions with Dictionaries & Tuples (7:46)
Blockchain Theory: Understanding Transactions
Unpacking the Tuple (3:20)
Mining Blocks (6:16)
Hashing Previous Blocks (6:23)
Understanding List Comprehensions (5:48)
And What are Dict Comprehensions? (1:39)
Combining List Comprehensions & "if" (2:53)
Improving the Blockchain Validation Logic (8:20)
Managing a List of Participants in the Blockchain (3:33)
Calculating Balances (7:46)
Rewarding the Miners of our Blockchain (3:23)
Verifying Transactions (5:45)
Understanding Reference vs Value Copying (7:07)
Working with the Range Selector (5:42)
Understanding Shallow vs Deep Copies (2:42)
Comparing "is" & "==" (1:36)
Diving Deeper Into Iterable Methods (7:27)
Understanding the "all" & "any" Functions (7:35)
Comparing Iterables (6:46)
Assignment - Complex Datastructures (Problem) (1:27)
Assignment - Complex Datastructures (Solution) (7:17)
Wrap Up (3:17)
Useful Resources & Links
Working with Functions & Strings
Module Introduction (1:30)
Comparing Strings & Lists (3:57)
Understanding the "format" Method (8:11)
Escaping Characters (1:47)
Formatting Strings Conveniently with "f" (1:27)
Adding String Formatting to our Project (2:00)
Understanding the "map" Function (2:53)
Working with Lambda Functions (2:13)
Reducing Lists (7:40)
Unpacking Function Arguments (6:32)
Assignment - Functions & Strings (Problem) (2:13)
Assignment - Functions & Strings (Solution)) (5:07)
Fixing a Bug (4:13)
Wrap Up (1:30)
Useful Resources & Links
Working with the Python Standard Library
Module Introduction (1:42)
Exploring the Python Standard Library (2:12)
Importing Packages - Theory (4:18)
Importing "hashlib" to Create a Unique Hash (7:14)
Using Other Import Syntaxes (1:47)
The "Proof of Work" (6:53)
Blockchain Theory: Understanding the "Proof of Work"
Adding the Proof of Work to our Blockchain (5:48)
Including the Proof of Work in our Mining Function (7:49)
Fixing a Hash Order Fault (6:22)
Splitting Up our Code (4:33)
Assignment -The Standard Library (Problem) (1:41)
Assignment -The Standard Library (Solution) (3:46)
Wrap Up (2:02)
Useful Resources & Links
Working with Files
Module Introduction (1:44)
Handling File Access (5:44)
Reading Data From a File (2:33)
Reading Multi-Line Content (5:52)
Using the "with" Block Statement (2:57)
Adding File Access to our Blockchain (8:39)
Converting Strings Into Python Objects (16:01)
Storing Data with Pickle (6:05)
Comparing Pickle & JSON (1:05)
Changing the Project Back to JSON (2:30)
Why we need Proper Error Handling (0:46)
Assignment - Working with Files (Problem) (1:49)
Assignment - Working with Files (Solution) (10:21)
Wrap Up (1:17)
Useful Resources & Links
Handling Errors
Module Introduction (0:57)
Finding Logical Errors with the Debugger (5:53)
Finding Syntax Errors (1:40)
Using "try" to Find Runtime Errors (4:33)
Which Errors Should you Handle? (3:01)
Adding Error Handlers to our Blockchain (2:32)
Handling Empty File Errors
Wrap Up (1:49)
Useful Resources & Links
Object Oriented Programming
Module Introduction (1:12)
What is Object Oriented Programming? (2:12)
Understanding Classes (1:24)
Creating a Class (5:09)
Comparing Classes, Instances & Dictionaries (2:44)
Understanding Class Attributes (3:37)
Constructor & Instance Attributes (4:20)
Printing Classes with Special Methods (6:04)
Private & Public Attributes (4:39)
Understanding Inheritance (8:46)
Planning Blockchain Classes (1:32)
Adding a "Block" Class to the Blockchain (11:06)
An Issue with Default Arguments
Saving Custom Class Objects via .json (4:49)
Adding a "Transaction" Class (17:46)
Inheritance in Action (5:43)
Adding a "Verification" Helper Class (10:03)
Initialising the "Node" Class (4:51)
Turning the Blockchain Into a Class (7:30)
Adding a "Node" Class (11:11)
Understanding "Instance" vs "Class" vs "Static Methods" & "Attributes" (3:39)
Using "Static" & "Class" Methods on the "Verification" Class (3:44)
Using Private Attributes in the Blockchain (3:43)
Properties vs Attributes (5:20)
Assignment - Object Oriented Programming (Problem) (1:45)
Assignment - Object Oriented Programming (Solution) (9:44)
Wrap Up (2:15)
Useful Resources & Links
Modules
Module Introduction (1:41)
Creating Packages - Module Bundles (4:40)
The "pycache" Folder (0:43)
Module Docstrings (0:51)
Controlling Exports (5:36)
Understanding Execution Context & "__name__" (4:11)
Why we Need a Private & Public Key Transaction Protection (4:25)
Using Anaconda to Install Third Party Packages (6:23)
Using Virtual Environments
Use Pycryptodome instead of PyCrypto
Generating Keys with a Third Party Package (6:21)
Connecting the Node & the Wallet (6:15)
Generating Keys on the Node (4:06)
Saving & Loading Keys to Files (8:24)
Creating Transaction Signatures (6:24)
Adding a Signature to our Transactions (2:42)
Verifying Signatures (6:49)
Improving the Verification Logic (5:41)
Wrap Up (1:21)
Useful Resources & Links
Adding HTTP with Flask
Module Introduction (2:04)
HTTP Requests - The Basics (5:40)
Understanding API-Endpoints/ URLs (3:32)
Data Formats (3:18)
Planning our API (2:04)
Setting Up our Environment with Flask (10:08)
Adding our First Route (10:09)
Installing Postman (2:20)
Adding a POST Request (7:21)
Setting Up Routes to Manage our Wallet (8:23)
Returning Funds (5:43)
Adding Transactions (11:26)
Fetching Open Transactions (3:14)
Testing the Public Key (1:46)
Adding a User Interface (2:41)
Optional: Configuring our UI - Creating a Wallet (13:17)
Optional: Configuring our UI - Loading a Wallet and Adding Mining & Transactions (11:58)
Exploring our UI (2:45)
Wrap Up (1:52)
Useful Resources & Links
The Node Network
Module Introduction (1:42)
Adding Node Management Methods to the Blockchain (7:18)
Setting Up Routes to Add Nodes (7:40)
Adding a Remove Node Route (5:17)
Adding "get_Nodes" to get all Nodes (1:19)
Attaching a Node User Interface (11:07)
Running Multiple Nodes (11:19)
Sending Requests from within Python (10:36)
Broadcasting Transactions - Adding the Function & Route (12:06)
Broadcasting Transactions - Testing & Fixing Errors (5:51)
Broadcasting New Blocks: Adding the Function & Route (11:12)
Broadcasting New Blocks: Informing the Peer Nodes (9:53)
Broadcasting Transactions: Testing (3:28)
Solving Conflicts (5:32)
Understanding Consensus (3:28)
Finding Conflicts (9:34)
Implementing a Consensus Algorithm (17:20)
Testing Consensus (5:49)
Wrap Up (1:01)
Useful Resources & Links
Next Steps and Course Roundup
Module Introduction (0:46)
Don't Forget PEP 8 (2:46)
Using PEP 8 (8:29)
Using Comments (1:01)
Diving Deeper Into Python (5:07)
Improving the Blockchain (10:02)
Congratulations (0:57)
Further Links
Fetching Open Transactions
Lesson content locked
If you're already enrolled,
you'll need to login
.
Enroll in Course to Unlock